diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/videoui.cpp | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Winamp/videoui.cpp')
-rw-r--r-- | Src/Winamp/videoui.cpp | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/Src/Winamp/videoui.cpp b/Src/Winamp/videoui.cpp new file mode 100644 index 00000000..3911705b --- /dev/null +++ b/Src/Winamp/videoui.cpp @@ -0,0 +1,203 @@ +#include "Main.h" +#include "video.h" +#include "resource.h" + + + +#define inreg(x,y,x2,y2) \ + ((mouse_x <= ( x2 ) && mouse_x >= ( x ) && \ + mouse_y <= ( y2 ) && mouse_y >= ( y ))) + +static int mouse_x, mouse_y, mouse_type, mouse_stats; + +static int which_cap=0; +enum { NO_CAP,TITLE_CAP,TB_CAP, SZ_CAP,VW_CAP}; + +static void do_titlebar(); +static void do_titlebuttons(); +static void do_size(); +static void do_vw(); + +void videoui_handlemouseevent(int x, int y, int type, int stats) +{ + mouse_x = x; + mouse_y = y; + mouse_type = type; + mouse_stats = stats; + switch (which_cap) + { + case VW_CAP: do_vw(); return; + case TITLE_CAP: do_titlebar();return; + case TB_CAP: do_titlebuttons();return; + case SZ_CAP: do_size(); return; + default: break; + } + do_vw(); + do_titlebuttons(); + do_size(); + do_titlebar(); +} + +static void do_titlebar() +{ + if (which_cap == TITLE_CAP || (!which_cap && (config_easymove || mouse_y < 14))) + { + static int clickx, clicky; + switch (mouse_type) + { + case 1: + { + which_cap=TITLE_CAP; + clickx=mouse_x; + clicky=mouse_y; + } + break; + case -1: + which_cap=0; + break; + case 0: + if (which_cap == TITLE_CAP && mouse_stats & MK_LBUTTON) + { + POINT p = { mouse_x, mouse_y}; + ClientToScreen(hVideoWindow,&p); + p.x-=clickx; + p.y-=clicky; + SendMessageW(hVideoWindow,WM_USER+0x100,1,(LPARAM)&p); + } + break; + } + } +} + +static void do_titlebuttons() +{ + int w=0; + w=inreg(config_video_width-10,3,config_video_width-1,3+9)?1:0; + + if (w) // kill button + { + if (mouse_type == -1 && which_cap == TB_CAP) + { + which_cap=0; + draw_vw_tbutton(0); + SendMessageW(hMainWindow,WM_COMMAND,WINAMP_OPTIONS_VIDEO,0); + } + else if (mouse_stats & MK_LBUTTON) + { + which_cap=TB_CAP; + draw_vw_tbutton(w?1:0); + } + } + else if (which_cap == TB_CAP) + { + which_cap=0; + draw_vw_tbutton(0); + } + +} + +static void do_vw() +{ + HWND videoGetHwnd(); + int w=0; + w=inreg(9,config_video_height-29,89,config_video_height-11)?1:0; + + if (w) + { + w=(mouse_x-9)/15; + if (mouse_type == -1 && which_cap == VW_CAP) + { + which_cap=0; + draw_vw_mbuts(-1); + switch (w) + { + case 0: + videoGoFullscreen(); + break; + case 1: + if (videoGetHwnd()) SendMessageW(videoGetHwnd(),WM_COMMAND,ID_VIDEOWND_ZOOM100,0); + break; + case 2: + if (videoGetHwnd()) SendMessageW(videoGetHwnd(),WM_COMMAND,ID_VIDEOWND_ZOOM200,0); + break; + case 3: + SendMessageW(hMainWindow,WM_COMMAND,WINAMP_VIDEO_TVBUTTON,0); + break; + case 4: + // menu + if (videoGetHwnd()) SendMessageW(videoGetHwnd(),WM_RBUTTONUP,0,0); + break; + } + } + else if (mouse_stats & MK_LBUTTON) + { + which_cap=VW_CAP; + draw_vw_mbuts(w); + } + } + else if (which_cap == VW_CAP) + { + which_cap=0; + draw_vw_mbuts(-1); + } +} + + +static void do_size() +{ + if (which_cap == SZ_CAP || (!which_cap && + mouse_x > config_video_width-20 && mouse_y > config_video_height-20 && + ((config_video_width-mouse_x + config_video_height-mouse_y) <= 30))) + { + static int dx,dy; + if (!which_cap && mouse_type == 1) + { + dx=config_video_width-mouse_x; + dy=config_video_height-mouse_y; + which_cap=SZ_CAP; + } + if (which_cap == SZ_CAP) + { + int x,y; + if (mouse_type == -1) + { + which_cap=0; + } + x=mouse_x + dx; + y=mouse_y + dy; + int old_x = x; + int old_y = y; + if (config_video_width != x || config_video_height != y) // don't bother resizing if we're at the current size already. + { + if (x >= GetSystemMetrics(SM_CXSCREEN)) x = GetSystemMetrics(SM_CXSCREEN)-24; + if (y >= GetSystemMetrics(SM_CYSCREEN)) y = GetSystemMetrics(SM_CYSCREEN)-28; + + + if (!config_embedwnd_freesize) + { + x += 24; + x -= x%25; + y += 28; + y -= y%29; + } + if (x < 275) x = 275; + if (y < 20+38+29+29) y = 20+38+29+29; + //config_video_width = x; + //config_video_height= y; + + if (!((old_x < config_video_width && x > config_video_width) + || (old_y < config_video_height && y > config_video_height))) // don't snap out a size if we're moving the mouse inward (video might not have started snapped) + { + + SetExteriorSize(x,y); + //SetWindowPos(hVideoWindow,0,0,0,x,y,SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE); + { + HDC hdc=GetWindowDC(hVideoWindow); + draw_vw(hdc); + ReleaseDC(hVideoWindow,hdc); + } + } + } + } + } +} |