aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/General/gen_ff/wa2songticker.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/General/gen_ff/wa2songticker.h')
-rw-r--r--Src/Plugins/General/gen_ff/wa2songticker.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/Src/Plugins/General/gen_ff/wa2songticker.h b/Src/Plugins/General/gen_ff/wa2songticker.h
new file mode 100644
index 00000000..2d5f53be
--- /dev/null
+++ b/Src/Plugins/General/gen_ff/wa2songticker.h
@@ -0,0 +1,108 @@
+#ifndef NULLSOFT_GEN_FF_WA2SONGTICKER_H
+#define NULLSOFT_GEN_FF_WA2SONGTICKER_H
+
+//#include <api/wnd/wndclass/bufferpaintwnd.h>
+#include <api/skin/widgets/textbase.h>
+#include <api/syscb/callbacks/corecbi.h>
+#include <tataki/color/skinclr.h>
+#include <bfc/depend.h>
+
+#define SONGTICKER_PARENT TextBase
+
+class SongTicker
+ : public SONGTICKER_PARENT, /* provides basic wasabi windowing functinoality */
+ public CoreCallbackI, /* to get title change updates */
+ public DependentViewerI /* for config callbacks*/
+{
+
+public:
+ SongTicker();
+ ~SongTicker();
+
+ enum TickerMode
+ {
+ TICKER_OFF,
+ TICKER_SCROLL,
+ TICKER_BOUNCE,
+ };
+
+ int onAction(const wchar_t *action, const wchar_t *param, int x, int y, intptr_t p1, intptr_t p2, void *data, size_t datalen, ifc_window *source);
+
+protected:
+/* BaseWnd */
+ virtual int onInit();
+ virtual int onBufferPaint(BltCanvas *canvas, int w, int h); // draw the song ticker here
+
+ /* TimerClient */
+ virtual void timerCallback(int id); // scroll the song ticker every # seconds
+
+ /* media core callbacks */
+ /* TODO: benski> some thoughts... this differs from current behaviour but might be an interesting idea
+ virtual int corecb_onStarted(); // start the ticker
+ virtual int corecb_onStopped(); // go back to showing Winamp version string
+ virtual int corecb_onPaused(); // pause the ticker
+ virtual int corecb_onUnpaused(); // unpause the ticker
+
+ // benski> currently unused in Winamp 5... might be worth implementing so we can draw text here
+ virtual int corecb_onStatusMsg(const wchar_t *text);
+ virtual int corecb_onWarningMsg(const wchar_t *text);
+ virtual int corecb_onErrorMsg(const wchar_t *text);
+ */
+
+ virtual int corecb_onTitleChange(const wchar_t *title);
+ // benski> not sure what the difference here is - virtual int corecb_onTitle2Change(const wchar_t *title2);
+ virtual int corecb_onLengthChange(int newlength);
+ void getBufferPaintSource(RECT *r);
+ virtual void getBufferPaintSize(int *w, int *h);
+
+ /* TextBase */
+ void invalidateTextBuffer()
+ {
+ invalidateBuffer();
+ }
+
+ int viewer_onEvent(api_dependent *item, const GUID *classguid, int event, intptr_t param, void *ptr, size_t ptrlen);
+ int onLeftButtonDown(int x, int y);
+ int onMouseMove(int x, int y);
+ int onLeftButtonUp(int x, int y);
+
+ /*static */void CreateXMLParameters(int master_handle);
+ virtual int onResize();
+private:
+ int grab_x;
+
+ /* Title */
+ void BuildTitle();
+ wchar_t song_title[1024];
+ int song_length;
+ int position;
+ StringW display, rotatingDisplay;
+ int width_of_str, width_of_str_padded;
+
+ /* */
+ int textW;
+ bool buffer_hw_valid;
+
+ /* scroll timer */
+ TimerToken scroll_timer_id;
+ int ticker_direction;
+ TickerMode tickerMode;
+ int skipTimers;
+ uint32_t last_tick;
+
+ /* XML Parameters */
+ enum
+ {
+ SONGTICKER_TICKER,
+ };
+ static XMLParamPair params[];
+ int xuihandle;
+ int setXuiParam(int _xuihandle, int attrid, const wchar_t *name, const wchar_t *strval);
+
+};
+
+extern const wchar_t songtickerXuiObjectStr[];
+extern char songtickerXuiSvcName[];
+class SongTickerXuiSvc : public XuiObjectSvc<SongTicker, songtickerXuiObjectStr, songtickerXuiSvcName> {};
+
+#endif