1
0
Fork 0

(svn r6274) Clean up a bit

release/0.5
tron 2006-08-31 14:50:12 +00:00
parent d5e21c2dc3
commit c4fb78a708
1 changed files with 295 additions and 279 deletions

View File

@ -20,8 +20,10 @@ static struct {
Pixel *buffer_bits; Pixel *buffer_bits;
Pixel *alloced_bits; Pixel *alloced_bits;
HPALETTE gdi_palette; HPALETTE gdi_palette;
int width,height; int width;
int width_org, height_org; int height;
int width_org;
int height_org;
bool fullscreen; bool fullscreen;
bool double_size; bool double_size;
bool has_focus; bool has_focus;
@ -52,8 +54,7 @@ static void MakePalette(void)
} }
_wnd.gdi_palette = CreatePalette(pal); _wnd.gdi_palette = CreatePalette(pal);
if (_wnd.gdi_palette == NULL) if (_wnd.gdi_palette == NULL) error("CreatePalette failed!\n");
error("CreatePalette failed!\n");
} }
static void UpdatePalette(HDC dc, uint start, uint count) static void UpdatePalette(HDC dc, uint start, uint count)
@ -220,6 +221,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
HDC dc,dc2; HDC dc,dc2;
HBITMAP old_bmp; HBITMAP old_bmp;
HPALETTE old_palette; HPALETTE old_palette;
BeginPaint(hwnd, &ps); BeginPaint(hwnd, &ps);
dc = ps.hdc; dc = ps.hdc;
dc2 = CreateCompatibleDC(dc); dc2 = CreateCompatibleDC(dc);
@ -236,17 +238,18 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
SelectObject(dc2, old_bmp); SelectObject(dc2, old_bmp);
DeleteDC(dc2); DeleteDC(dc2);
EndPaint(hwnd, &ps); EndPaint(hwnd, &ps);
}
return 0; return 0;
}
case WM_PALETTECHANGED: case WM_PALETTECHANGED:
if ((HWND)wParam == hwnd) if ((HWND)wParam == hwnd) return 0;
return 0; /* FALLTHROUGH */
// FALL THROUGH
case WM_QUERYNEWPALETTE: { case WM_QUERYNEWPALETTE: {
HDC hDC = GetWindowDC(hwnd); HDC hDC = GetWindowDC(hwnd);
HPALETTE hOldPalette = SelectPalette(hDC, _wnd.gdi_palette, FALSE); HPALETTE hOldPalette = SelectPalette(hDC, _wnd.gdi_palette, FALSE);
UINT nChanged = RealizePalette(hDC); UINT nChanged = RealizePalette(hDC);
SelectPalette(hDC, hOldPalette, TRUE); SelectPalette(hDC, hOldPalette, TRUE);
ReleaseDC(hwnd, hDC); ReleaseDC(hwnd, hDC);
if (nChanged) InvalidateRect(hwnd, NULL, FALSE); if (nChanged) InvalidateRect(hwnd, NULL, FALSE);
@ -348,20 +351,19 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
case WM_KEYDOWN: { case WM_KEYDOWN: {
// this is the rewritten ascii input function // this is the rewritten ascii input function
// it disables windows deadkey handling --> more linux like :D // it disables windows deadkey handling --> more linux like :D
unsigned short w = 0; WORD w = 0;
int r = 0;
byte ks[256]; byte ks[256];
unsigned int scan = 0; uint scancode;
uint16 scancode = (( lParam & 0xFF0000 ) >> 16 );
GetKeyboardState(ks); GetKeyboardState(ks);
r = ToAscii(wParam, scan, ks, &w, 0); if (ToAscii(wParam, 0, ks, &w, 0) == 0) {
if (r == 0) w = 0; // no translation was possible w = 0; // no translation was possible
}
_pressed_key = w | MapWindowsKey(wParam) << 16; _pressed_key = w | MapWindowsKey(wParam) << 16;
if (scancode == 41) scancode = GB(lParam, 16, 8);
_pressed_key = w | WKC_BACKQUOTE << 16; if (scancode == 41) _pressed_key = w | WKC_BACKQUOTE << 16;
if ((_pressed_key >> 16) == ('D' | WKC_CTRL) && !_wnd.fullscreen) { if ((_pressed_key >> 16) == ('D' | WKC_CTRL) && !_wnd.fullscreen) {
_double_size ^= 1; _double_size ^= 1;
@ -369,33 +371,39 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
ClientSizeChanged(_wnd.width, _wnd.height); ClientSizeChanged(_wnd.width, _wnd.height);
MarkWholeScreenDirty(); MarkWholeScreenDirty();
} }
} break; break;
}
case WM_SYSKEYDOWN: /* user presses F10 or Alt, both activating the title-menu */ case WM_SYSKEYDOWN: /* user presses F10 or Alt, both activating the title-menu */
switch (wParam) { switch (wParam) {
case VK_RETURN: case 0x46: /* Full Screen on ALT + ENTER/F(VK_F) */ case VK_RETURN:
case 'F': /* Full Screen on ALT + ENTER/F */
ToggleFullScreen(!_wnd.fullscreen); ToggleFullScreen(!_wnd.fullscreen);
return 0; return 0;
case VK_MENU: /* Just ALT */ case VK_MENU: /* Just ALT */
return 0; // do nothing return 0; // do nothing
case VK_F10: /* F10, ignore activation of menu */ case VK_F10: /* F10, ignore activation of menu */
_pressed_key = MapWindowsKey(wParam) << 16; _pressed_key = MapWindowsKey(wParam) << 16;
return 0; return 0;
default: /* ALT in combination with something else */ default: /* ALT in combination with something else */
_pressed_key = MapWindowsKey(wParam) << 16; _pressed_key = MapWindowsKey(wParam) << 16;
break; break;
} }
break; break;
case WM_NCMOUSEMOVE: case WM_NCMOUSEMOVE:
MyShowCursor(true); MyShowCursor(true);
return 0; return 0;
case WM_SIZE: { case WM_SIZE:
if (wParam != SIZE_MINIMIZED) { if (wParam != SIZE_MINIMIZED) {
ClientSizeChanged(LOWORD(lParam), HIWORD(lParam)); ClientSizeChanged(LOWORD(lParam), HIWORD(lParam));
} }
return 0; return 0;
}
case WM_SIZING: { case WM_SIZING: {
RECT* r = (RECT*)lParam; RECT* r = (RECT*)lParam;
RECT r2; RECT r2;
@ -426,27 +434,34 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
case WMSZ_BOTTOM: case WMSZ_BOTTOM:
r->bottom = r->top + h; r->bottom = r->top + h;
break; break;
case WMSZ_BOTTOMLEFT: case WMSZ_BOTTOMLEFT:
r->bottom = r->top + h; r->bottom = r->top + h;
r->left = r->right - w; r->left = r->right - w;
break; break;
case WMSZ_BOTTOMRIGHT: case WMSZ_BOTTOMRIGHT:
r->bottom = r->top + h; r->bottom = r->top + h;
r->right = r->left + w; r->right = r->left + w;
break; break;
case WMSZ_LEFT: case WMSZ_LEFT:
r->left = r->right - w; r->left = r->right - w;
break; break;
case WMSZ_RIGHT: case WMSZ_RIGHT:
r->right = r->left + w; r->right = r->left + w;
break; break;
case WMSZ_TOP: case WMSZ_TOP:
r->top = r->bottom - h; r->top = r->bottom - h;
break; break;
case WMSZ_TOPLEFT: case WMSZ_TOPLEFT:
r->top = r->bottom - h; r->top = r->bottom - h;
r->left = r->right - w; r->left = r->right - w;
break; break;
case WMSZ_TOPRIGHT: case WMSZ_TOPRIGHT:
r->top = r->bottom - h; r->top = r->bottom - h;
r->right = r->left + w; r->right = r->left + w;
@ -483,7 +498,8 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
static void RegisterWndClass(void) static void RegisterWndClass(void)
{ {
static bool registered; static bool registered = false;
if (!registered) { if (!registered) {
HINSTANCE hinst = GetModuleHandle(NULL); HINSTANCE hinst = GetModuleHandle(NULL);
WNDCLASS wnd = { WNDCLASS wnd = {
@ -498,9 +514,9 @@ static void RegisterWndClass(void)
0, 0,
"OTTD" "OTTD"
}; };
registered = true; registered = true;
if (!RegisterClass(&wnd)) if (!RegisterClass(&wnd)) error("RegisterClass failed");
error("RegisterClass failed");
} }
} }
@ -520,19 +536,19 @@ static void MakeWindow(bool full_screen)
if (full_screen) { if (full_screen) {
DEVMODE settings; DEVMODE settings;
memset(&settings, 0, sizeof(DEVMODE));
settings.dmSize = sizeof(DEVMODE);
settings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
if (_fullscreen_bpp) { memset(&settings, 0, sizeof(settings));
settings.dmSize = sizeof(settings);
settings.dmFields =
(_fullscreen_bpp != 0 ? DM_BITSPERPEL : 0) |
DM_PELSWIDTH |
DM_PELSHEIGHT |
(_display_hz != 0 ? DM_DISPLAYFREQUENCY : 0);
settings.dmBitsPerPel = _fullscreen_bpp; settings.dmBitsPerPel = _fullscreen_bpp;
settings.dmFields |= DM_BITSPERPEL;
}
settings.dmPelsWidth = _wnd.width_org; settings.dmPelsWidth = _wnd.width_org;
settings.dmPelsHeight = _wnd.height_org; settings.dmPelsHeight = _wnd.height_org;
settings.dmDisplayFrequency = _display_hz; settings.dmDisplayFrequency = _display_hz;
if (settings.dmDisplayFrequency != 0)
settings.dmFields |= DM_DISPLAYFREQUENCY;
if (ChangeDisplaySettings(&settings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) { if (ChangeDisplaySettings(&settings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) {
MakeWindow(false); MakeWindow(false);
return; return;
@ -621,17 +637,14 @@ static bool AllocateDibSection(int w, int h)
bi->bmiHeader.biBitCount = 8; bi->bmiHeader.biBitCount = 8;
bi->bmiHeader.biCompression = BI_RGB; bi->bmiHeader.biCompression = BI_RGB;
if (_wnd.dib_sect) if (_wnd.dib_sect) DeleteObject(_wnd.dib_sect);
DeleteObject(_wnd.dib_sect);
dc = GetDC(0); dc = GetDC(0);
_wnd.dib_sect = CreateDIBSection(dc, bi, DIB_RGB_COLORS, (void**)&_wnd.bitmap_bits, NULL, 0); _wnd.dib_sect = CreateDIBSection(dc, bi, DIB_RGB_COLORS, (VOID**)&_wnd.bitmap_bits, NULL, 0);
if (_wnd.dib_sect == NULL) if (_wnd.dib_sect == NULL) error("CreateDIBSection failed");
error("CreateDIBSection failed");
ReleaseDC(0, dc); ReleaseDC(0, dc);
if (!_wnd.double_size) if (!_wnd.double_size) _wnd.buffer_bits = _wnd.bitmap_bits;
_wnd.buffer_bits = _wnd.bitmap_bits;
return true; return true;
} }
@ -846,7 +859,10 @@ static bool Win32GdiChangeRes(int w, int h)
return true; return true;
} }
static void Win32GdiFullScreen(bool full_screen) {MakeWindow(full_screen);} static void Win32GdiFullScreen(bool full_screen)
{
MakeWindow(full_screen);
}
const HalVideoDriver _win32_video_driver = { const HalVideoDriver _win32_video_driver = {
Win32GdiStart, Win32GdiStart,