summaryrefslogtreecommitdiffstats
path: root/Tools/WinCELauncher/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/WinCELauncher/main.cpp')
-rw-r--r--Tools/WinCELauncher/main.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/Tools/WinCELauncher/main.cpp b/Tools/WinCELauncher/main.cpp
new file mode 100644
index 0000000..36c6606
--- /dev/null
+++ b/Tools/WinCELauncher/main.cpp
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebView.h"
+#include <windows.h>
+
+static const LPCWSTR kMainWindowTitle = L"WebKit for WinCE";
+static const LPCWSTR kMainWindowClassName = L"MainWindowClass";
+
+
+static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch (message) {
+ case WM_DESTROY:
+ PostQuitMessage(0);
+ break;
+
+ default:
+ return DefWindowProc(hWnd, message, wParam, lParam);
+ }
+
+ return 0;
+}
+
+int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
+{
+ UNREFERENCED_PARAMETER(hPrevInstance);
+
+ CoInitializeEx(0, COINIT_MULTITHREADED);
+ WebView::initialize(hInstance);
+
+ LPCWSTR homeUrl = lpCmdLine;
+ bool enableDoubleBuffer = true;
+ bool fullscreen = false;
+
+ if (homeUrl[0] == '-') {
+ for (; *homeUrl && *homeUrl != ' '; ++homeUrl) {
+ switch (*homeUrl) {
+ case 'd':
+ enableDoubleBuffer = false;
+ break;
+ case 'f':
+ fullscreen = true;
+ break;
+ default:
+ break;
+ }
+ }
+ if (*homeUrl)
+ ++homeUrl;
+ }
+
+ DWORD styles = WS_VISIBLE;
+
+ if (!fullscreen) {
+ styles |= WS_CAPTION
+ | WS_MAXIMIZEBOX
+ | WS_MINIMIZEBOX
+ | WS_OVERLAPPED
+ | WS_SYSMENU
+ | WS_THICKFRAME;
+ }
+
+ WNDCLASSW wc;
+ wc.style = CS_HREDRAW | CS_VREDRAW;
+ wc.lpfnWndProc = WndProc;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 0;
+ wc.hInstance = hInstance;
+ wc.hIcon = 0;
+ wc.hCursor = 0;
+ wc.hbrBackground = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
+ wc.lpszMenuName = 0;
+ wc.lpszClassName = kMainWindowClassName;
+ RegisterClass(&wc);
+
+ HWND hMainWindow = CreateWindowW(kMainWindowClassName, kMainWindowTitle, styles,
+ CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, 0, hInstance, 0);
+
+ if (fullscreen) {
+ SetWindowPos(hMainWindow, HWND_TOPMOST, 0, 0, GetSystemMetrics(SM_CXSCREEN),
+ GetSystemMetrics(SM_CYSCREEN), SWP_SHOWWINDOW);
+ }
+
+ ShowWindow(hMainWindow, nCmdShow);
+ UpdateWindow(hMainWindow);
+
+ WTF::OwnPtr<WebView> webView = WTF::adoptPtr(new WebView(hMainWindow, enableDoubleBuffer ? WebView::EnableDoubleBuffering : WebView::NoFeature));
+ webView->load(homeUrl);
+
+ // Main message loop:
+ MSG msg;
+ BOOL bRet;
+ while (bRet = GetMessage(&msg, 0, 0, 0)) {
+ if (bRet == -1) {
+ // FIXME: Handle the error and possibly exit.
+ } else {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ }
+
+ webView.clear();
+ DestroyWindow(hMainWindow);
+
+ WebView::cleanup();
+ CoUninitialize();
+
+ return msg.wParam;
+}