mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-18 06:35:46 -04:00
Initial community commit
This commit is contained in:
108
Src/Plugins/General/gen_ff/wa2songticker.h
Normal file
108
Src/Plugins/General/gen_ff/wa2songticker.h
Normal file
@ -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
|
Reference in New Issue
Block a user