winamp/Src/Winamp/main_display.cpp

123 lines
2.8 KiB
C++

/** (c) Nullsoft, Inc. C O N F I D E N T I A L
** Filename:
** Project:
** Description:
** Author:
** Created:
**/
#include "Main.h"
#include "wa_dlg.h"
#include "../nu/AutoChar.h"
#include "resource.h"
extern "C" extern int g_skinloadedmanually;
int Main_OnGetText(wchar_t *text, int sizeCch)
{
size_t rem;
StringCchCopyExW(text, sizeCch, caption, 0, &rem, 0);
return (int)sizeCch-rem;
}
// evil 256 color mode windows palette handling
int Main_OnQueryNewPalette(HWND hwnd)
{
if (draw_hpal) { // hPal is NULL if we're in hicolor
HDC hdc = GetWindowDC(hwnd);
SelectPalette(hdc,draw_hpal,FALSE);
RealizePalette(hdc);
InvalidateRect(hwnd,NULL,FALSE);
ReleaseDC(hwnd,hdc);
}
return 1;
}
// more 256 color windows palette handling
int Main_OnPaletteChanged(HWND hwnd, HWND hwndPaletteChange)
{
if (draw_hpal)
{
HDC hdc = GetWindowDC(hwnd);
SelectPalette(hdc,draw_hpal,FALSE);
RealizePalette(hdc);
UpdateColors(hdc);
ReleaseDC(hwnd,hdc);
}
return 1;
}
// displaychange handling. This reinitializes bitmaps, to use optimal storage format
// depending on mode (DIB or DDB)
int Main_OnDisplayChange(HWND hwnd)
{
int t=0;
if (g_skinloadedmanually)
{
Skin_Load();
}
if (g_skinmissinggenff)
{
wchar_t msg[512] = {0};
StringCchPrintfW(msg, 512, getStringW(IDS_NO_MODERN_SKIN_SUPPORT, NULL, 0), config_skin);
MessageBoxW(NULL, msg, getStringW(IDS_SKIN_LOAD_ERROR, NULL, 0), MB_ICONWARNING | MB_OK | MB_TOPMOST);
}
draw_setnoupdate(1);
draw_init();
draw_clutterbar(0);
draw_shuffle(config_shuffle,0);
draw_eject(0);
draw_eqplbut(config_eq_open,0,config_pe_open,0);
draw_repeat(config_repeat,0);
draw_buttonbar(-1);
draw_volumebar(config_volume,0);
draw_panbar(config_pan,0);
draw_songname(L"",&t,0);
draw_playicon(playing?paused?4:1:2);
draw_tbar(config_hilite?(GetForegroundWindow() == hMainWindow?1:0):1, config_windowshade,eggstat);
draw_monostereo(-1);
if (playing)
{
draw_bitmixrate(-1,-1);
}
draw_setnoupdate(0);
draw_songname(FileTitle,&ui_songposition,playing?in_getlength():PlayList_getcurrentlength());
// tell other windows
if (IsWindow(hVideoWindow))
SendMessageW(hVideoWindow, WM_DISPLAYCHANGE,0,0);
if (IsWindow(hEQWindow))
SendMessageW(hEQWindow, WM_DISPLAYCHANGE,0,0);
if (IsWindow(hPLWindow))
SendMessageW(hPLWindow, WM_DISPLAYCHANGE,0,0);
/*
if (IsWindow(hMBWindow))
SendMessageW(hVideoWindow, WM_DISPLAYCHANGE,0,0);
*/
if (IsWindow(hExternalVisWindow))
SendMessageW(hExternalVisWindow, WM_DISPLAYCHANGE,0,0);
SetTimer(hMainWindow, 101, 250, NULL); // set_aot(-1);
InvalidateRect(hwnd,NULL,FALSE);
//UpdateWindow(hwnd);
EnterCriticalSection(&embedcs);
{
embedWindowState *p =embedwndlist;
while (p)
{
PostMessageW(p->me,WM_DISPLAYCHANGE,0,0);
p=p->link;
}
}
LeaveCriticalSection(&embedcs);
PostMessageW(hMainWindow, WM_WA_IPC, 0, IPC_SKIN_CHANGED);
return 1;
}