1 /* 2 * Copyright (C) 2010 Patrick Gansterer <paroga (at) paroga.com> 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 AND ITS CONTRIBUTORS "AS IS" AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 20 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 */ 24 25 #ifndef WebView_h 26 #define WebView_h 27 28 #include "IntRect.h" 29 #include "OwnPtr.h" 30 #include "PassRefPtr.h" 31 32 namespace WTF { 33 class String; 34 } 35 36 namespace WebCore { 37 class Frame; 38 class Page; 39 class FrameView; 40 class HTMLFrameOwnerElement; 41 class KURL; 42 class ResourceRequest; 43 } 44 45 class WebView { 46 public: 47 enum Features { 48 NoFeature = 0, 49 EnableDoubleBuffering = 1 << 0 50 }; 51 52 WebView(HWND hwnd, unsigned features = EnableDoubleBuffering); 53 ~WebView(); 54 55 static void initialize(HINSTANCE instanceHandle); 56 static void cleanup(); 57 58 HWND windowHandle() const { return m_windowHandle; } 59 WebCore::Frame* frame() const { return m_frame; } 60 WebCore::Page* page() const { return m_page; } 61 WebCore::FrameView* view() const; 62 63 void load(LPCWSTR url); 64 void load(const WTF::String &url); 65 void load(const WebCore::ResourceRequest &request); 66 void reload(); 67 void stop(); 68 69 void frameRect(RECT* rect) const; 70 71 PassRefPtr<WebCore::Frame> createFrame(const WebCore::KURL&, const WTF::String&, WebCore::HTMLFrameOwnerElement*, const WTF::String&, bool, int, int); 72 73 // JavaScript Dialog 74 void runJavaScriptAlert(const WTF::String& message); 75 bool runJavaScriptConfirm(const WTF::String& message); 76 bool runJavaScriptPrompt(const WTF::String& message, const WTF::String& defaultValue, WTF::String& result); 77 78 private: 79 static LRESULT CALLBACK webViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); 80 LRESULT wndProc(HWND, UINT, WPARAM, LPARAM); 81 82 bool handlePaint(HWND hWnd); 83 bool handleMouseEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); 84 bool handleMouseWheel(HWND hWnd, WPARAM wParam, LPARAM lParam, bool isHorizontal); 85 bool handleKeyDown(WPARAM virtualKeyCode, LPARAM keyData, bool systemKeyDown); 86 bool handleKeyPress(WPARAM charCode, LPARAM keyData, bool systemKeyDown); 87 bool handleKeyUp(WPARAM virtualKeyCode, LPARAM keyData, bool systemKeyDown); 88 89 void paint(HDC hDC, const WebCore::IntRect& clipRect); 90 91 WebCore::Frame* m_frame; 92 WebCore::Page* m_page; 93 HWND m_parentWindowHandle; 94 HWND m_windowHandle; 95 bool m_enableDoubleBuffer; 96 OwnPtr<HDC> m_doubleBufferDC; 97 OwnPtr<HBITMAP> m_doubleBufferBitmap; 98 }; 99 100 #endif // WebView_h 101