aboutsummaryrefslogtreecommitdiff
path: root/Src/resources/SDK/wa5vis.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Src/resources/SDK/wa5vis.txt')
-rw-r--r--Src/resources/SDK/wa5vis.txt99
1 files changed, 99 insertions, 0 deletions
diff --git a/Src/resources/SDK/wa5vis.txt b/Src/resources/SDK/wa5vis.txt
new file mode 100644
index 00000000..7081ab19
--- /dev/null
+++ b/Src/resources/SDK/wa5vis.txt
@@ -0,0 +1,99 @@
+Winamp 5 VIS Drawer API
+-----------------------
+
+
+Here are the steps to get your visualization plugin in the Winamp 5 drawer :
+
+1) Create an embedded window to serve as a parent for your vis Wnd using the Winamp 5 Embedded Window SDK :
+
+HWND parent = NULL;
+HWND (*e)(embedWindowState *v);
+*(void**)&e = (void *)SendMessage(this_mod->hwndParent,WM_WA_IPC,(LPARAM)0,IPC_GET_EMBEDIF);
+if (e) parent = e(&myWindowState);
+
+2) Create your vis window (say, g_hwnd) for your vis plugin, using the embedded window as a parent.
+
+3) BEFORE showing your parent window, notify Winamp that you are a VIS window :
+
+SendMessage(this_mod->hwndParent, WM_WA_IPC, (int)g_hwnd, IPC_SETVISWND);
+ShowWindow(parent, SW_SHOWNA);
+
+4) When your plugin is asked to terminate, notify winamp that the VIS has gone away :
+
+SendMessage(g_mod->hwndParent, WM_WA_IPC, NULL, IPC_SETVISWND);
+
+5) From now on, your vis is going to be automatically inserted in the drawer, and your window (the one you sent to winamp
+using SETVISWND) is going to receive commands when the user clicks in the vis buttons (ie, next/previous/random, etc). You
+should implement these commands by trapping WM_COMMAND:
+
+case WM_COMMAND: {
+ int id = LOWORD(wParam);
+ switch (id) {
+
+ // user clicked on 'next' preset button
+ case ID_VIS_NEXT: next_preset(); break;
+
+ // user clicked on 'previous' preset button
+ case ID_VIS_PREV: previous_preset(); break;
+
+ // user clicked on 'random' togglebutton
+ case ID_VIS_RANDOM: {
+ // determine if we're switching random on or off or if Winamp is asking us about the state of our random flag
+ int v = HIWORD(wParam) ? 1 : 0;
+
+ // are we being asked about the state of our random flag ?
+ if (wParam >> 16 == 0xFFFF) {
+ // tell winamp about our state
+ SendMessage(g_mod->hwndParent,WM_WA_IPC,random_presets_flag,IPC_CB_VISRANDOM);
+ break;
+ }
+
+ // changes random_preset_flag
+ set_random(v);
+
+ // if we are turning random on, we should switch to a new random preset right away
+ if (v) load_random_preset();
+
+ break;
+ }
+ case ID_VIS_FS: go_fullscreen(); break;
+ case ID_VIS_CFG: open_configuration(); break;
+ case ID_VIS_MENU: open_popup_menu(); break;
+ }
+ break;
+}
+
+6) Before turning fullscreen on, you should check wether video is already fullscreen or not :
+
+if (SendMessage(g_mod->hwndParent,WM_WA_IPC,0,IPC_IS_PLAYING_VIDEO)>1)
+{
+ cant_go_fullscreen_dlg();
+}
+
+7) You're almost done, the last thing to do is to notify Winamp when you go fullscreen :
+
+go_fullscreen()
+{
+ if (SendMessage(g_mod->hwndParent,WM_WA_IPC,0,IPC_IS_PLAYING_VIDEO)>1)
+ {
+ cant_go_fullscreen_dlg();
+ }
+ else
+ {
+ SendMessage(g_mod->hwndParent,WM_WA_IPC,1,IPC_SET_VIS_FS_FLAG);
+
+ ... now do the work of actually going fullscreen ...
+
+ }
+}
+
+go_windowed()
+{
+ SendMessage(g_mod->hwndParent,WM_WA_IPC,0,IPC_SET_VIS_FS_FLAG);
+
+ ... now do the work of going back to windowed mode ...
+
+}
+
+
+That should be all. Feel free to send your questions to francis@winamp.com