aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/views/win/skia_win.cpp213
1 files changed, 72 insertions, 141 deletions
diff --git a/src/views/win/skia_win.cpp b/src/views/win/skia_win.cpp
index 859bb6f63c..6f1db77693 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;
-}