Add svn:eol-style=native, and fix line endings.
[WebKit-https.git] / WebKitTools / Spinneret / Spinneret / Spinneret.cpp
1 /*
2  * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #include "stdafx.h"
27 #include "Spinneret.h"
28 #include "WebView.h"
29
30 #define MAX_LOADSTRING 100
31
32 using namespace WebKit;
33
34 // Global Variables:
35 HINSTANCE hInst;                                // current instance
36 HWND hMainWnd;
37 WebView* gWebView = 0;
38 TCHAR szTitle[MAX_LOADSTRING];                    // The title bar text
39 TCHAR szWindowClass[MAX_LOADSTRING];            // the main window class name
40
41 // Forward declarations of functions included in this code module:
42 ATOM                MyRegisterClass(HINSTANCE hInstance);
43 BOOL                InitInstance(HINSTANCE, int);
44 LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
45 INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
46
47 int APIENTRY _tWinMain(HINSTANCE hInstance,
48                      HINSTANCE hPrevInstance,
49                      LPTSTR    lpCmdLine,
50                      int       nCmdShow)
51 {
52     UNREFERENCED_PARAMETER(hPrevInstance);
53     UNREFERENCED_PARAMETER(lpCmdLine);
54
55      // TODO: Place code here.
56     MSG msg;
57     HACCEL hAccelTable;
58
59     // Initialize global strings
60     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
61     LoadString(hInstance, IDC_SPINNERET, szWindowClass, MAX_LOADSTRING);
62     MyRegisterClass(hInstance);
63
64     // Perform application initialization:
65     if (!InitInstance (hInstance, nCmdShow))
66         return FALSE;
67
68     gWebView = WebView::createWebView(hInstance, hMainWnd);
69     RECT rcClient;
70     GetClientRect(hMainWnd, &rcClient); 
71     MoveWindow(gWebView->windowHandle(), 
72                    0, 0, rcClient.right, rcClient.bottom, 
73                    TRUE);
74     ShowWindow(gWebView->windowHandle(), nCmdShow);
75     UpdateWindow(gWebView->windowHandle());
76
77     hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_SPINNERET));
78
79     // Main message loop:
80     while (GetMessage(&msg, NULL, 0, 0))
81     {
82         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
83         {
84             TranslateMessage(&msg);
85             DispatchMessage(&msg);
86         }
87     }
88
89     return (int) msg.wParam;
90 }
91
92
93
94 //
95 //  FUNCTION: MyRegisterClass()
96 //
97 //  PURPOSE: Registers the window class.
98 //
99 //  COMMENTS:
100 //
101 //    This function and its usage are only necessary if you want this code
102 //    to be compatible with Win32 systems prior to the 'RegisterClassEx'
103 //    function that was added to Windows 95. It is important to call this function
104 //    so that the application will get 'well formed' small icons associated
105 //    with it.
106 //
107 ATOM MyRegisterClass(HINSTANCE hInstance)
108 {
109     WNDCLASSEX wcex;
110
111     wcex.cbSize = sizeof(WNDCLASSEX);
112
113     wcex.style            = CS_HREDRAW | CS_VREDRAW;
114     wcex.lpfnWndProc    = WndProc;
115     wcex.cbClsExtra        = 0;
116     wcex.cbWndExtra        = 0;
117     wcex.hInstance        = hInstance;
118     wcex.hIcon            = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SPINNERET));
119     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
120     wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
121     wcex.lpszMenuName    = MAKEINTRESOURCE(IDC_SPINNERET);
122     wcex.lpszClassName    = szWindowClass;
123     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
124
125     return RegisterClassEx(&wcex);
126 }
127
128 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
129 {
130    hInst = hInstance; // Store instance handle in our global variable
131
132    hMainWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
133       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
134
135    if (!hMainWnd)
136       return FALSE;
137
138    ShowWindow(hMainWnd, nCmdShow);
139    UpdateWindow(hMainWnd);
140
141    return TRUE;
142 }
143
144 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
145 {
146     int wmId, wmEvent;
147     PAINTSTRUCT ps;
148     HDC hdc;
149
150     switch (message)
151     {
152     case WM_COMMAND:
153         wmId    = LOWORD(wParam);
154         wmEvent = HIWORD(wParam);
155         // Parse the menu selections:
156         switch (wmId)
157         {
158         case IDM_ABOUT:
159             DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
160             break;
161         case IDM_EXIT:
162             DestroyWindow(hWnd);
163             break;
164         default:
165             return DefWindowProc(hWnd, message, wParam, lParam);
166         }
167         break;
168     case WM_PAINT:
169         hdc = BeginPaint(hWnd, &ps);
170         // TODO: Add any drawing code here...
171         EndPaint(hWnd, &ps);
172         break;
173     case WM_DESTROY:
174         PostQuitMessage(0);
175         break;
176     case WM_SIZE:
177         if (!gWebView)
178             break;
179         // Get the dimensions of the main window's client 
180         // area, and enumerate the child windows. Pass the 
181         // dimensions to the child windows during enumeration. 
182
183         RECT rcClient;
184         GetClientRect(hWnd, &rcClient); 
185         MoveWindow(gWebView->windowHandle(), 
186                    0, 0, rcClient.right, rcClient.bottom, 
187                    TRUE);
188         ShowWindow(gWebView->windowHandle(), SW_SHOW); 
189         break; 
190     default:
191         return DefWindowProc(hWnd, message, wParam, lParam);
192     }
193     return 0;
194 }
195
196 // Message handler for about box.
197 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
198 {
199     UNREFERENCED_PARAMETER(lParam);
200     switch (message)
201     {
202     case WM_INITDIALOG:
203         return (INT_PTR)TRUE;
204
205     case WM_COMMAND:
206         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
207         {
208             EndDialog(hDlg, LOWORD(wParam));
209             return (INT_PTR)TRUE;
210         }
211         break;
212     }
213     return (INT_PTR)FALSE;
214 }