Changeset 77054 in webkit
- Timestamp:
- Jan 29, 2011 12:27:23 AM (13 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r77051 r77054 1 2011-01-29 Jeff Miller <jeffm@apple.com> 2 3 Reviewed by Anders Carlsson. 4 5 Support find bouncy in WebKit2 on Windows 6 https://bugs.webkit.org/show_bug.cgi?id=53329 7 <rdar://problem/8565843> 8 The Mac implements the find bouncy inside of WebKit in the UI process for WebKit2, but we need to do this inside Safari for WebKit2 on Windows. 9 Add infrastructure to call back into the app when the find indicator changes. 10 11 * UIProcess/API/C/win/WKView.cpp: Cleanup some code style violations. 12 (WKViewSetFindIndicatorCallback): Added. 13 (WKViewGetFindIndicatorCallback): Added. 14 * UIProcess/API/C/win/WKView.h: Cleanup some code style violations. 15 * UIProcess/FindIndicator.cpp: 16 (WebKit::FindIndicator::create): 17 (WebKit::FindIndicator::FindIndicator): 18 (WebKit::FindIndicator::frameRect): 19 (WebKit::FindIndicator::draw): 20 Rename m_selectionRect to m_selectionRectInWindowCoordinates and m_textRects to m_textRectsInSelectionRectCoordinates (along with similarly named local variables) to be more explict about the coordinate system. 21 * UIProcess/FindIndicator.h: 22 (WebKit::FindIndicator::selectionRectInWindowCoordinates): Added. 23 (WebKit::FindIndicator::textRects): Rename m_textRects to m_textRectsInSelectionRectCoordinates. 24 * UIProcess/WebPageProxy.cpp: 25 (WebKit::WebPageProxy::setFindIndicator): Rename selectionRect to selectionRectInWindowCoordinates and textRects to textRectsInSelectionRectCoordinates to be more explict about the coordinate system. 26 * UIProcess/WebPageProxy.h: Ditto. 27 * UIProcess/win/WebView.cpp: 28 (WebKit::WebView::WebView): 29 (WebKit::WebView::setFindIndicator): Added. 30 (WebKit::WebView::setFindIndicatorCallback): Added. 31 (WebKit::WebView::getFindIndicatorCallback): Added. 32 * UIProcess/win/WebView.h: 33 1 34 2011-01-28 Alexey Proskuryakov <ap@apple.com> 2 35 -
trunk/Source/WebKit2/UIProcess/API/C/win/WKView.cpp
r76916 r77054 72 72 toImpl(viewRef)->setInitialFocus(forward); 73 73 } 74 75 void WKViewSetFindIndicatorCallback(WKViewRef viewRef, WKViewFindIndicatorCallback callback, void* context) 76 { 77 toImpl(viewRef)->setFindIndicatorCallback(callback, context); 78 } 79 80 WKViewFindIndicatorCallback WKViewGetFindIndicatorCallback(WKViewRef viewRef, void** context) 81 { 82 return toImpl(viewRef)->getFindIndicatorCallback(context); 83 } -
trunk/Source/WebKit2/UIProcess/API/C/win/WKView.h
r74296 r77054 47 47 WK_EXPORT void WKViewSetInitialFocus(WKViewRef view, bool forward); 48 48 49 typedef void (*WKViewFindIndicatorCallback)(WKViewRef, HBITMAP selectionBitmap, RECT selectionRectInWindowCoordinates, bool fadeout, void*); 50 WK_EXPORT void WKViewSetFindIndicatorCallback(WKViewRef view, WKViewFindIndicatorCallback callback, void* context); 51 WK_EXPORT WKViewFindIndicatorCallback WKViewGetFindIndicatorCallback(WKViewRef view, void** context); 52 49 53 #ifdef __cplusplus 50 54 } -
trunk/Source/WebKit2/UIProcess/FindIndicator.cpp
r76916 r77054 78 78 namespace WebKit { 79 79 80 PassRefPtr<FindIndicator> FindIndicator::create(const FloatRect& selectionRect , const Vector<FloatRect>& textRects, const SharedMemory::Handle& contentImageHandle)80 PassRefPtr<FindIndicator> FindIndicator::create(const FloatRect& selectionRectInWindowCoordinates, const Vector<FloatRect>& textRectsInSelectionRectCoordinates, const SharedMemory::Handle& contentImageHandle) 81 81 { 82 RefPtr<ShareableBitmap> contentImage = ShareableBitmap::create(enclosingIntRect(selectionRect ).size(), contentImageHandle);82 RefPtr<ShareableBitmap> contentImage = ShareableBitmap::create(enclosingIntRect(selectionRectInWindowCoordinates).size(), contentImageHandle); 83 83 if (!contentImage) 84 84 return 0; 85 85 86 return adoptRef(new FindIndicator(selectionRect , textRects, contentImage.release()));86 return adoptRef(new FindIndicator(selectionRectInWindowCoordinates, textRectsInSelectionRectCoordinates, contentImage.release())); 87 87 } 88 88 89 FindIndicator::FindIndicator(const WebCore::FloatRect& selectionRect , const Vector<WebCore::FloatRect>& textRects, PassRefPtr<ShareableBitmap> contentImage)90 : m_selectionRect (selectionRect)91 , m_textRects (textRects)89 FindIndicator::FindIndicator(const WebCore::FloatRect& selectionRectInWindowCoordinates, const Vector<WebCore::FloatRect>& textRectsInSelectionRectCoordinates, PassRefPtr<ShareableBitmap> contentImage) 90 : m_selectionRectInWindowCoordinates(selectionRectInWindowCoordinates) 91 , m_textRectsInSelectionRectCoordinates(textRectsInSelectionRectCoordinates) 92 92 , m_contentImage(contentImage) 93 93 { … … 109 109 FloatRect FindIndicator::frameRect() const 110 110 { 111 return FloatRect(m_selectionRect .x() - leftBorderThickness, m_selectionRect.y() - topBorderThickness,112 m_selectionRect .width() + rightBorderThickness + leftBorderThickness,113 m_selectionRect .height() + topBorderThickness + bottomBorderThickness);111 return FloatRect(m_selectionRectInWindowCoordinates.x() - leftBorderThickness, m_selectionRectInWindowCoordinates.y() - topBorderThickness, 112 m_selectionRectInWindowCoordinates.width() + rightBorderThickness + leftBorderThickness, 113 m_selectionRectInWindowCoordinates.height() + topBorderThickness + bottomBorderThickness); 114 114 } 115 115 … … 144 144 void FindIndicator::draw(GraphicsContext& graphicsContext, const IntRect& dirtyRect) 145 145 { 146 for (size_t i = 0; i < m_textRects .size(); ++i) {147 FloatRect textRect = m_textRects [i];146 for (size_t i = 0; i < m_textRectsInSelectionRectCoordinates.size(); ++i) { 147 FloatRect textRect = m_textRectsInSelectionRectCoordinates[i]; 148 148 textRect.move(leftBorderThickness, topBorderThickness); 149 149 -
trunk/Source/WebKit2/UIProcess/FindIndicator.h
r75527 r77054 43 43 class FindIndicator : public RefCounted<FindIndicator> { 44 44 public: 45 static PassRefPtr<FindIndicator> create(const WebCore::FloatRect& selectionRect , const Vector<WebCore::FloatRect>& textRects, const SharedMemory::Handle& contentImageHandle);45 static PassRefPtr<FindIndicator> create(const WebCore::FloatRect& selectionRectInWindowCoordinates, const Vector<WebCore::FloatRect>& textRectsInSelectionRectCoordinates, const SharedMemory::Handle& contentImageHandle); 46 46 ~FindIndicator(); 47 47 48 WebCore::FloatRect selectionRectInWindowCoordinates() const { return m_selectionRectInWindowCoordinates; } 48 49 WebCore::FloatRect frameRect() const; 49 50 50 const Vector<WebCore::FloatRect>& textRects() const { return m_textRects ; }51 const Vector<WebCore::FloatRect>& textRects() const { return m_textRectsInSelectionRectCoordinates; } 51 52 52 53 ShareableBitmap* contentImage() const { return m_contentImage.get(); } … … 57 58 FindIndicator(const WebCore::FloatRect& selectionRect, const Vector<WebCore::FloatRect>& textRects, PassRefPtr<ShareableBitmap> contentImage); 58 59 59 WebCore::FloatRect m_selectionRect ;60 Vector<WebCore::FloatRect> m_textRects ;60 WebCore::FloatRect m_selectionRectInWindowCoordinates; 61 Vector<WebCore::FloatRect> m_textRectsInSelectionRectCoordinates; 61 62 RefPtr<ShareableBitmap> m_contentImage; 62 63 }; -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r77043 r77054 1841 1841 } 1842 1842 1843 void WebPageProxy::setFindIndicator(const FloatRect& selectionRect , const Vector<FloatRect>& textRects, const SharedMemory::Handle& contentImageHandle, bool fadeOut)1844 { 1845 RefPtr<FindIndicator> findIndicator = FindIndicator::create(selectionRect , textRects, contentImageHandle);1843 void WebPageProxy::setFindIndicator(const FloatRect& selectionRectInWindowCoordinates, const Vector<FloatRect>& textRectsInSelectionRectCoordinates, const SharedMemory::Handle& contentImageHandle, bool fadeOut) 1844 { 1845 RefPtr<FindIndicator> findIndicator = FindIndicator::create(selectionRectInWindowCoordinates, textRectsInSelectionRectCoordinates, contentImageHandle); 1846 1846 m_pageClient->setFindIndicator(findIndicator.release(), fadeOut); 1847 1847 } -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r76983 r77054 489 489 // Find. 490 490 void didCountStringMatches(const String&, uint32_t matchCount); 491 void setFindIndicator(const WebCore::FloatRect& selectionRect , const Vector<WebCore::FloatRect>& textRects, const SharedMemory::Handle& contentImageHandle, bool fadeOut);491 void setFindIndicator(const WebCore::FloatRect& selectionRectInWindowCoordinates, const Vector<WebCore::FloatRect>& textRectsInSelectionRectCoordinates, const SharedMemory::Handle& contentImageHandle, bool fadeOut); 492 492 void didFindString(const String&, uint32_t matchCount); 493 493 void didFailToFindString(const String&); -
trunk/Source/WebKit2/UIProcess/win/WebView.cpp
r76916 r77054 31 31 #include "LayerBackedDrawingAreaProxy.h" 32 32 #include "Logging.h" 33 #include "NativeWebKeyboardEvent.h" 33 34 #include "RunLoop.h" 34 #include " NativeWebKeyboardEvent.h"35 #include "WKAPICast.h" 35 36 #include "WebContext.h" 36 37 #include "WebContextMenuProxyWin.h" … … 40 41 #include "WebPopupMenuProxyWin.h" 41 42 #include <Commctrl.h> 43 #include <WebCore/BitmapInfo.h> 42 44 #include <WebCore/Cursor.h> 43 45 #include <WebCore/FloatRect.h> 46 #include <WebCore/GraphicsContextCG.h> 44 47 #include <WebCore/IntRect.h> 45 48 #include <WebCore/SoftLinking.h> … … 49 52 50 53 namespace Ime { 51 52 53 54 55 56 57 58 59 60 61 54 // We need these functions in a separate namespace, because in the global namespace they conflict 55 // with the definitions in imm.h only by the type modifier (the macro defines them as static) and 56 // imm.h is included by windows.h 57 SOFT_LINK_LIBRARY(IMM32) 58 SOFT_LINK(IMM32, ImmGetContext, HIMC, WINAPI, (HWND hwnd), (hwnd)) 59 SOFT_LINK(IMM32, ImmReleaseContext, BOOL, WINAPI, (HWND hWnd, HIMC hIMC), (hWnd, hIMC)) 60 SOFT_LINK(IMM32, ImmGetCompositionStringW, LONG, WINAPI, (HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen), (hIMC, dwIndex, lpBuf, dwBufLen)) 61 SOFT_LINK(IMM32, ImmSetCandidateWindow, BOOL, WINAPI, (HIMC hIMC, LPCANDIDATEFORM lpCandidate), (hIMC, lpCandidate)) 62 SOFT_LINK(IMM32, ImmSetOpenStatus, BOOL, WINAPI, (HIMC hIMC, BOOL fOpen), (hIMC, fOpen)) 63 SOFT_LINK(IMM32, ImmNotifyIME, BOOL, WINAPI, (HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue), (hIMC, dwAction, dwIndex, dwValue)) 64 SOFT_LINK(IMM32, ImmAssociateContextEx, BOOL, WINAPI, (HWND hWnd, HIMC hIMC, DWORD dwFlags), (hWnd, hIMC, dwFlags)) 62 65 }; 63 66 … … 102 105 103 106 switch (message) { 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 107 case WM_CLOSE: 108 m_page->tryClose(); 109 break; 110 case WM_DESTROY: 111 m_isBeingDestroyed = true; 112 close(); 113 break; 114 case WM_ERASEBKGND: 115 lResult = 1; 116 break; 117 case WM_PAINT: 118 lResult = onPaintEvent(hWnd, message, wParam, lParam, handled); 119 break; 120 case WM_PRINTCLIENT: 121 lResult = onPrintClientEvent(hWnd, message, wParam, lParam, handled); 122 break; 123 case WM_MOUSEACTIVATE: 124 setWasActivatedByMouseEvent(true); 125 handled = false; 126 break; 127 case WM_MOUSEMOVE: 128 case WM_LBUTTONDOWN: 129 case WM_MBUTTONDOWN: 130 case WM_RBUTTONDOWN: 131 case WM_LBUTTONDBLCLK: 132 case WM_MBUTTONDBLCLK: 133 case WM_RBUTTONDBLCLK: 134 case WM_LBUTTONUP: 135 case WM_MBUTTONUP: 136 case WM_RBUTTONUP: 137 case WM_MOUSELEAVE: 138 lResult = onMouseEvent(hWnd, message, wParam, lParam, handled); 139 break; 140 case WM_MOUSEWHEEL: 141 case WM_VISTA_MOUSEHWHEEL: 142 lResult = onWheelEvent(hWnd, message, wParam, lParam, handled); 143 break; 144 case WM_SYSKEYDOWN: 145 case WM_KEYDOWN: 146 case WM_SYSCHAR: 147 case WM_CHAR: 148 case WM_SYSKEYUP: 149 case WM_KEYUP: 150 lResult = onKeyEvent(hWnd, message, wParam, lParam, handled); 151 break; 152 case WM_SIZE: 153 lResult = onSizeEvent(hWnd, message, wParam, lParam, handled); 154 break; 155 case WM_WINDOWPOSCHANGED: 156 lResult = onWindowPositionChangedEvent(hWnd, message, wParam, lParam, handled); 157 break; 158 case WM_SETFOCUS: 159 lResult = onSetFocusEvent(hWnd, message, wParam, lParam, handled); 160 break; 161 case WM_KILLFOCUS: 162 lResult = onKillFocusEvent(hWnd, message, wParam, lParam, handled); 163 break; 164 case WM_TIMER: 165 lResult = onTimerEvent(hWnd, message, wParam, lParam, handled); 166 break; 167 case WM_SHOWWINDOW: 168 lResult = onShowWindowEvent(hWnd, message, wParam, lParam, handled); 169 break; 170 case WM_SETCURSOR: 171 lResult = onSetCursor(hWnd, message, wParam, lParam, handled); 172 break; 173 case WM_IME_STARTCOMPOSITION: 174 handled = onIMEStartComposition(); 175 break; 176 case WM_IME_REQUEST: 177 lResult = onIMERequest(wParam, lParam); 178 break; 179 case WM_IME_COMPOSITION: 180 handled = onIMEComposition(lParam); 181 break; 182 case WM_IME_ENDCOMPOSITION: 183 handled = onIMEEndComposition(); 184 break; 185 case WM_IME_SELECT: 186 handled = onIMESelect(wParam, lParam); 187 break; 188 case WM_IME_SETCONTEXT: 189 handled = onIMESetContext(wParam, lParam); 190 break; 191 default: 192 handled = false; 193 break; 191 194 } 192 195 … … 234 237 , m_isBeingDestroyed(false) 235 238 , m_inIMEComposition(0) 239 , m_findIndicatorCallback(0) 240 , m_findIndicatorCallbackContext(0) 236 241 { 237 242 registerWebViewWindowClass(); … … 334 339 335 340 switch (message) { 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 341 case WM_LBUTTONDOWN: 342 case WM_MBUTTONDOWN: 343 case WM_RBUTTONDOWN: 344 ::SetFocus(m_window); 345 ::SetCapture(m_window); 346 break; 347 case WM_LBUTTONUP: 348 case WM_MBUTTONUP: 349 case WM_RBUTTONUP: 350 ::ReleaseCapture(); 351 break; 352 case WM_MOUSEMOVE: 353 startTrackingMouseLeave(); 354 break; 355 case WM_MOUSELEAVE: 356 stopTrackingMouseLeave(); 357 break; 358 case WM_LBUTTONDBLCLK: 359 case WM_MBUTTONDBLCLK: 360 case WM_RBUTTONDBLCLK: 361 break; 362 default: 363 ASSERT_NOT_REACHED(); 359 364 } 360 365 … … 462 467 { 463 468 switch (wParam) { 464 465 466 467 469 case UpdateActiveStateTimer: 470 ::KillTimer(hWnd, UpdateActiveStateTimer); 471 updateActiveState(); 472 break; 468 473 } 469 474 … … 976 981 977 982 switch (request) { 978 979 980 981 982 983 case IMR_RECONVERTSTRING: 984 return onIMERequestReconvertString(reinterpret_cast<RECONVERTSTRING*>(data)); 985 986 case IMR_QUERYCHARPOSITION: 987 return onIMERequestCharPosition(reinterpret_cast<IMECHARPOSITION*>(data)); 983 988 } 984 989 return 0; … … 1016 1021 } 1017 1022 1018 void WebView::setFindIndicator(PassRefPtr<FindIndicator>, bool fadeOut) 1019 { 1020 // FIXME: Implement. 1023 void WebView::setFindIndicator(PassRefPtr<FindIndicator> findIndicator, bool fadeOut) 1024 { 1025 if (!m_findIndicatorCallback) 1026 return; 1027 1028 HBITMAP hbmp = 0; 1029 ShareableBitmap* contentImage = findIndicator->contentImage(); 1030 1031 if (contentImage) { 1032 // Render the contentImage to an HBITMAP. 1033 void* bits; 1034 HDC hdc = ::CreateCompatibleDC(0); 1035 int width = contentImage->bounds().width(); 1036 int height = contentImage->bounds().height(); 1037 BitmapInfo bitmapInfo = BitmapInfo::create(contentImage->size()); 1038 1039 hbmp = CreateDIBSection(0, &bitmapInfo, DIB_RGB_COLORS, static_cast<void**>(&bits), 0, 0); 1040 HBITMAP hbmpOld = static_cast<HBITMAP>(SelectObject(hdc, hbmp)); 1041 RetainPtr<CGContextRef> context(AdoptCF, CGBitmapContextCreate(bits, width, height, 1042 8, width * sizeof(RGBQUAD), deviceRGBColorSpaceRef(), kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst)); 1043 1044 GraphicsContext graphicsContext(context.get()); 1045 contentImage->paint(graphicsContext, IntPoint(), contentImage->bounds()); 1046 1047 ::SelectObject(hdc, hbmpOld); 1048 ::DeleteDC(hdc); 1049 } 1050 1051 IntRect selectionRect(findIndicator->selectionRectInWindowCoordinates()); 1052 1053 // The callback is responsible for calling ::DeleteObject(hbmp). 1054 (*m_findIndicatorCallback)(toAPI(this), hbmp, selectionRect, fadeOut, m_findIndicatorCallbackContext); 1055 } 1056 1057 void WebView::setFindIndicatorCallback(WKViewFindIndicatorCallback callback, void* context) 1058 { 1059 m_findIndicatorCallback = callback; 1060 m_findIndicatorCallbackContext = context; 1061 } 1062 1063 WKViewFindIndicatorCallback WebView::getFindIndicatorCallback(void** context) 1064 { 1065 if (context) 1066 *context = m_findIndicatorCallbackContext; 1067 1068 return m_findIndicatorCallback; 1021 1069 } 1022 1070 … … 1064 1112 OwnPtr<DrawingAreaProxy> newDrawingArea; 1065 1113 switch (type) { 1066 1067 1068 1069 1070 1071 1072 1073 1114 case DrawingAreaInfo::None: 1115 break; 1116 case DrawingAreaInfo::ChunkedUpdate: 1117 newDrawingArea = ChunkedUpdateDrawingAreaProxy::create(this, m_page.get()); 1118 break; 1119 case DrawingAreaInfo::LayerBacked: 1120 newDrawingArea = LayerBackedDrawingAreaProxy::create(this, m_page.get()); 1121 break; 1074 1122 } 1075 1123 … … 1093 1141 { 1094 1142 switch (message) { 1095 1096 1097 1098 1099 1100 1143 case WM_NCACTIVATE: 1144 updateActiveStateSoon(); 1145 break; 1146 case WM_SETTINGCHANGE: 1147 // systemParameterChanged(wParam); 1148 break; 1101 1149 } 1102 1150 } -
trunk/Source/WebKit2/UIProcess/win/WebView.h
r76824 r77054 29 29 #include "APIObject.h" 30 30 #include "PageClient.h" 31 #include "WKView.h" 31 32 #include "WebPageProxy.h" 33 #include <ShlObj.h> 32 34 #include <WebCore/COMPtr.h> 33 35 #include <WebCore/DragActions.h> … … 37 39 #include <wtf/PassRefPtr.h> 38 40 #include <wtf/RefPtr.h> 39 #include <ShlObj.h>40 41 41 42 interface IDropTargetHelper; … … 59 60 void windowAncestryDidChange(); 60 61 void setIsInWindow(bool); 61 void setOverrideCursor(HCURSOR overrideCursor);62 void setOverrideCursor(HCURSOR); 62 63 void setInitialFocus(bool forward); 64 void setFindIndicatorCallback(WKViewFindIndicatorCallback, void*); 65 WKViewFindIndicatorCallback getFindIndicatorCallback(void**); 63 66 void initialize(); 64 67 … … 187 190 188 191 unsigned m_inIMEComposition; 192 193 WKViewFindIndicatorCallback m_findIndicatorCallback; 194 void* m_findIndicatorCallbackContext; 195 189 196 COMPtr<IDataObject> m_dragData; 190 197 COMPtr<IDropTargetHelper> m_dropTargetHelper;
Note: See TracChangeset
for help on using the changeset viewer.