Allow skia_win.cpp to be compiled in CONSOLE or GUI mode.
Make visualbench and SampleApp build in CONSOLE mode so that we can see stdout. I verified that by undoing the gyp modifications both tools will build as GUI. Review URL: https://codereview.chromium.org/1185303004
This commit is contained in:
parent
8464a960b8
commit
48297f72fb
@ -4,6 +4,9 @@
|
||||
# found in the LICENSE file.
|
||||
#
|
||||
{
|
||||
'includes': [
|
||||
'apptype_console.gypi',
|
||||
],
|
||||
'variables': {
|
||||
#manually set sample_pdf_file_viewer to 1 to have the PdfViewer in SampleApp
|
||||
'sample_pdf_file_viewer%': 0,
|
||||
@ -297,11 +300,6 @@
|
||||
],
|
||||
}],
|
||||
],
|
||||
'msvs_settings': {
|
||||
'VCLinkerTool': {
|
||||
'SubSystem': '2',
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
|
@ -4,6 +4,9 @@
|
||||
# found in the LICENSE file.
|
||||
# GYP file to build visual bench tool
|
||||
{
|
||||
'includes': [
|
||||
'apptype_console.gypi',
|
||||
],
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'visualbench',
|
||||
|
@ -21,8 +21,8 @@
|
||||
class SkOSWindow : public SkWindow {
|
||||
public:
|
||||
struct WindowInit {
|
||||
TCHAR* fClass;
|
||||
HINSTANCE fInstance;
|
||||
const TCHAR* fClass;
|
||||
HINSTANCE fInstance;
|
||||
};
|
||||
|
||||
SkOSWindow(const void* winInit);
|
||||
|
@ -8,71 +8,17 @@
|
||||
#include <windows.h>
|
||||
#include <tchar.h>
|
||||
|
||||
#include "SkTypes.h"
|
||||
#include "SkApplication.h"
|
||||
#include "SkOSWindow_Win.h"
|
||||
|
||||
#define MAX_LOADSTRING 100
|
||||
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// 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);
|
||||
|
||||
return gSZWindowClass;
|
||||
}
|
||||
|
||||
#include "SkOSWindow_Win.h"
|
||||
extern SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv);
|
||||
|
||||
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.
|
||||
//
|
||||
// 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);
|
||||
|
||||
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow, LPTSTR lpCmdLine)
|
||||
{
|
||||
application_init();
|
||||
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine,
|
||||
int nCmdShow) {
|
||||
|
||||
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;
|
||||
// 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;
|
||||
}
|
||||
|
||||
//
|
||||
// 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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user