Index: src/views/win/skia_win.cpp |
diff --git a/src/views/win/skia_win.cpp b/src/views/win/skia_win.cpp |
index 859bb6f63c19df604b0203c4835d114141fb8c28..6f1db7769358961199ad178d894bad737854ee5c 100644 |
--- a/src/views/win/skia_win.cpp |
+++ b/src/views/win/skia_win.cpp |
@@ -8,71 +8,17 @@ |
#include <windows.h> |
#include <tchar.h> |
+#include "SkTypes.h" |
#include "SkApplication.h" |
+#include "SkOSWindow_Win.h" |
-#define MAX_LOADSTRING 100 |
- |
-// Global Variables: |
-HINSTANCE gHInst; // current instance |
-TCHAR gSZWindowClass[] = _T("SkiaApp"); // the main window class name |
- |
-// Forward declarations of functions included in this code module: |
-ATOM MyRegisterClass(HINSTANCE hInstance); |
-BOOL InitInstance(HINSTANCE, int, LPTSTR); |
-LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); |
-INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); |
- |
-int APIENTRY _tWinMain(HINSTANCE hInstance, |
- HINSTANCE hPrevInstance, |
- LPTSTR lpCmdLine, |
- int nCmdShow) |
-{ |
- UNREFERENCED_PARAMETER(hPrevInstance); |
- |
- MSG msg; |
- |
- // Initialize global strings |
- MyRegisterClass(hInstance); |
- |
- // Perform application initialization: |
- if (!InitInstance (hInstance, nCmdShow, lpCmdLine)) |
- { |
- return FALSE; |
- } |
- |
- // Main message loop: |
- while (GetMessage(&msg, NULL, 0, 0)) |
- { |
- if (true) |
- { |
- TranslateMessage(&msg); |
- DispatchMessage(&msg); |
- } |
- } |
- |
- application_term(); |
- |
- return (int) msg.wParam; |
-} |
- |
- |
+LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); |
-// |
-// FUNCTION: MyRegisterClass() |
-// |
-// PURPOSE: Registers the window class. |
-// |
-// COMMENTS: |
-// |
-// This function and its usage are only necessary if you want this code |
-// to be compatible with Win32 systems prior to the 'RegisterClassEx' |
-// function that was added to Windows 95. It is important to call this function |
-// so that the application will get 'well formed' small icons associated |
-// with it. |
-// |
-ATOM MyRegisterClass(HINSTANCE hInstance) |
-{ |
+// Returns the main window Win32 class name. |
+static const TCHAR* register_class(HINSTANCE hInstance) { |
WNDCLASSEX wcex; |
+ // The main window class name |
+ static const TCHAR gSZWindowClass[] = _T("SkiaApp"); |
wcex.cbSize = sizeof(WNDCLASSEX); |
@@ -88,13 +34,12 @@ ATOM MyRegisterClass(HINSTANCE hInstance) |
wcex.lpszClassName = gSZWindowClass; |
wcex.hIconSm = NULL; |
- return RegisterClassEx(&wcex); |
-} |
+ RegisterClassEx(&wcex); |
-#include "SkOSWindow_Win.h" |
-extern SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv); |
+ return gSZWindowClass; |
+} |
-char* tchar_to_utf8(const TCHAR* str) { |
+static char* tchar_to_utf8(const TCHAR* str) { |
#ifdef _UNICODE |
int size = WideCharToMultiByte(CP_UTF8, 0, str, wcslen(str), NULL, 0, NULL, NULL); |
char* str8 = (char*) sk_malloc_throw(size+1); |
@@ -106,64 +51,69 @@ char* tchar_to_utf8(const TCHAR* str) { |
#endif |
} |
-// |
-// FUNCTION: InitInstance(HINSTANCE, int, LPTSTR) |
-// |
-// PURPOSE: Saves instance handle and creates main window |
-// |
-// COMMENTS: |
-// |
-// In this function, we save the instance handle in a global variable and |
-// create and display the main program window. |
-// |
- |
- |
-BOOL InitInstance(HINSTANCE hInstance, int nCmdShow, LPTSTR lpCmdLine) |
-{ |
- application_init(); |
- |
- gHInst = hInstance; // Store instance handle in our global variable |
- char* argv[4096]; |
- int argc = 0; |
- TCHAR exename[1024], *next; |
- int exenameLen = GetModuleFileName(NULL, exename, SK_ARRAY_COUNT(exename)); |
- // we're ignoring the possibility that the exe name exceeds the exename buffer |
- (void) exenameLen; |
- argv[argc++] = tchar_to_utf8(exename); |
- TCHAR* arg = _tcstok_s(lpCmdLine, _T(" "), &next); |
- while (arg != NULL) { |
- argv[argc++] = tchar_to_utf8(arg); |
- arg = _tcstok_s(NULL, _T(" "), &next); |
- } |
- |
- SkOSWindow::WindowInit winInit; |
- winInit.fInstance = gHInst; |
- winInit.fClass = gSZWindowClass; |
- |
- create_sk_window(&winInit, argc, argv); |
- for (int i = 0; i < argc; ++i) { |
- sk_free(argv[i]); |
- } |
- SkOSWindow::ForAllWindows([nCmdShow](void* hWnd, SkOSWindow**){ |
- ShowWindow((HWND)hWnd, nCmdShow); |
- UpdateWindow((HWND)hWnd); } |
- ); |
- |
- return TRUE; |
+// This file can work with GUI or CONSOLE subsystem types since we define _tWinMain and main(). |
+ |
+static int main_common(HINSTANCE hInstance, int show, int argc, char**argv); |
+ |
+int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, |
+ int nCmdShow) { |
+ |
+ // convert from lpCmdLine to argc, argv. |
+ char* argv[4096]; |
+ int argc = 0; |
+ TCHAR exename[1024], *next; |
+ int exenameLen = GetModuleFileName(NULL, exename, SK_ARRAY_COUNT(exename)); |
+ // we're ignoring the possibility that the exe name exceeds the exename buffer |
+ (void) exenameLen; |
+ argv[argc++] = tchar_to_utf8(exename); |
+ TCHAR* arg = _tcstok_s(lpCmdLine, _T(" "), &next); |
+ while (arg != NULL) { |
+ argv[argc++] = tchar_to_utf8(arg); |
+ arg = _tcstok_s(NULL, _T(" "), &next); |
+ } |
+ int result = main_common(hInstance, nCmdShow, argc, argv); |
+ for (int i = 0; i < argc; ++i) { |
+ sk_free(argv[i]); |
+ } |
+ return result; |
+} |
+ |
+int main(int argc, char**argv) { |
+ return main_common(GetModuleHandle(NULL), SW_SHOW, argc, argv); |
+} |
+ |
+static int main_common(HINSTANCE hInstance, int show, int argc, char**argv) { |
+ const TCHAR* windowClass = register_class(hInstance); |
+ |
+ application_init(); |
+ |
+ SkOSWindow::WindowInit winInit; |
+ winInit.fInstance = hInstance; |
+ winInit.fClass = windowClass; |
+ |
+ create_sk_window(&winInit, argc, argv); |
+ SkOSWindow::ForAllWindows([show](void* hWnd, SkOSWindow**) { |
+ ShowWindow((HWND)hWnd, show); |
+ UpdateWindow((HWND)hWnd); } |
+ ); |
+ |
+ MSG msg; |
+ // Main message loop |
+ while (GetMessage(&msg, NULL, 0, 0)) { |
+ if (true) { |
+ TranslateMessage(&msg); |
+ DispatchMessage(&msg); |
+ } |
+ } |
+ |
+ application_term(); |
+ |
+ return (int) msg.wParam; |
} |
-// |
-// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) |
-// |
-// PURPOSE: Processes messages for the main window. |
-// |
-// WM_COMMAND - process the application menu |
-// WM_PAINT - Paint the main window |
-// WM_DESTROY - post a quit message and return |
-// |
-// |
-LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
-{ |
+extern SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv); |
+ |
+LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { |
switch (message) { |
case WM_COMMAND: |
return DefWindowProc(hWnd, message, wParam, lParam); |
@@ -182,22 +132,3 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
return 0; |
} |
-// Message handler for about box. |
-INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) |
-{ |
- UNREFERENCED_PARAMETER(lParam); |
- switch (message) |
- { |
- case WM_INITDIALOG: |
- return (INT_PTR)TRUE; |
- |
- case WM_COMMAND: |
- if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) |
- { |
- EndDialog(hDlg, LOWORD(wParam)); |
- return (INT_PTR)TRUE; |
- } |
- break; |
- } |
- return (INT_PTR)FALSE; |
-} |