Index: webkit/tools/test_shell/webwidget_host_mac.mm |
diff --git a/webkit/tools/test_shell/webwidget_host_mac.mm b/webkit/tools/test_shell/webwidget_host_mac.mm |
deleted file mode 100644 |
index d96da2681fe5efe46dd1c7d160f217b4b9daa049..0000000000000000000000000000000000000000 |
--- a/webkit/tools/test_shell/webwidget_host_mac.mm |
+++ /dev/null |
@@ -1,286 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#import <Cocoa/Cocoa.h> |
- |
-#include "webkit/tools/test_shell/webwidget_host.h" |
- |
-#include "base/logging.h" |
-#include "skia/ext/platform_canvas.h" |
-#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h" |
-#include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebInputEventFactory.h" |
-#include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebScreenInfoFactory.h" |
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" |
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebPopupMenu.h" |
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h" |
-#include "ui/gfx/rect.h" |
-#include "ui/gfx/size.h" |
-#include "webkit/glue/webkit_glue.h" |
-#include "webkit/tools/test_shell/test_shell.h" |
- |
-using WebKit::WebInputEvent; |
-using WebKit::WebInputEventFactory; |
-using WebKit::WebKeyboardEvent; |
-using WebKit::WebMouseEvent; |
-using WebKit::WebMouseWheelEvent; |
-using WebKit::WebPopupMenu; |
-using WebKit::WebScreenInfo; |
-using WebKit::WebScreenInfoFactory; |
-using WebKit::WebSize; |
-using WebKit::WebWidgetClient; |
- |
-/*static*/ |
-WebWidgetHost* WebWidgetHost::Create(NSView* parent_view, |
- WebWidgetClient* client) { |
- WebWidgetHost* host = new WebWidgetHost(); |
- |
- NSRect content_rect = [parent_view frame]; |
- content_rect.origin.y += 64; |
- content_rect.size.height -= 64; |
- host->view_ = [[NSView alloc] initWithFrame:content_rect]; |
- [parent_view addSubview:host->view_]; |
- |
- // ui::SetWindowUserData(host->hwnd_, host); |
- |
- host->webwidget_ = WebPopupMenu::create(client); |
- host->webwidget_->resize(WebSize(NSWidth(content_rect), |
- NSHeight(content_rect))); |
- return host; |
-} |
- |
-/*static*/ |
-void WebWidgetHost::HandleEvent(NSView* view, NSEvent* event) { |
- /* TODO(port): rig up a way to get to the host */ |
- WebWidgetHost* host = NULL; |
- if (host) { |
- switch ([event type]) { |
- case NSLeftMouseDown: |
- case NSLeftMouseUp: |
- case NSRightMouseDown: |
- case NSRightMouseUp: |
- case NSOtherMouseDown: |
- case NSOtherMouseUp: |
- case NSMouseEntered: |
- case NSMouseExited: |
- host->MouseEvent(event); |
- break; |
- |
- case NSScrollWheel: |
- host->WheelEvent(event); |
- break; |
- |
- case NSKeyDown: |
- case NSKeyUp: |
- host->KeyEvent(event); |
- break; |
- |
- case NSAppKitDefined: |
- switch ([event subtype]) { |
- case NSApplicationActivatedEventType: |
- host->SetFocus(true); |
- break; |
- case NSApplicationDeactivatedEventType: |
- host->SetFocus(false); |
- break; |
- } |
- break; |
- } |
- } |
-} |
- |
-void WebWidgetHost::DidInvalidateRect(const gfx::Rect& damaged_rect) { |
-#ifndef NDEBUG |
- DLOG_IF(WARNING, painting_) << "unexpected invalidation while painting"; |
-#endif |
- |
- // If this invalidate overlaps with a pending scroll, then we have to |
- // downgrade to invalidating the scroll rect. |
- if (damaged_rect.Intersects(scroll_rect_)) { |
- paint_rect_.Union(scroll_rect_); |
- ResetScrollRect(); |
- } |
- paint_rect_.Union(damaged_rect); |
- |
- NSRect r = NSRectFromCGRect(damaged_rect.ToCGRect()); |
- // flip to cocoa coordinates |
- r.origin.y = [view_ frame].size.height - r.size.height - r.origin.y; |
- [view_ setNeedsDisplayInRect:r]; |
-} |
- |
-void WebWidgetHost::DidScrollRect(int dx, int dy, const gfx::Rect& clip_rect) { |
- DCHECK(dx || dy); |
- |
- // If we already have a pending scroll operation or if this scroll operation |
- // intersects the existing paint region, then just failover to invalidating. |
- if (!scroll_rect_.IsEmpty() || paint_rect_.Intersects(clip_rect)) { |
- paint_rect_.Union(scroll_rect_); |
- ResetScrollRect(); |
- paint_rect_.Union(clip_rect); |
- } |
- |
- // We will perform scrolling lazily, when requested to actually paint. |
- scroll_rect_ = clip_rect; |
- scroll_dx_ = dx; |
- scroll_dy_ = dy; |
- |
- NSRect r = NSRectFromCGRect(clip_rect.ToCGRect()); |
- // flip to cocoa coordinates |
- r.origin.y = [view_ frame].size.height - r.size.height - r.origin.y; |
- [view_ setNeedsDisplayInRect:r]; |
-} |
- |
-void WebWidgetHost::ScheduleComposite() { |
- if (!webwidget_) |
- return; |
- WebSize size = webwidget_->size(); |
- NSRect r = NSMakeRect(0, 0, size.width, size.height); |
- [view_ setNeedsDisplayInRect:r]; |
-} |
- |
-// void WebWidgetHost::SetCursor(HCURSOR cursor) { |
-// } |
- |
-void WebWidgetHost::DiscardBackingStore() { |
- canvas_.reset(); |
-} |
- |
-WebWidgetHost::WebWidgetHost() |
- : view_(NULL), |
- webwidget_(NULL), |
- scroll_dx_(0), |
- scroll_dy_(0), |
- weak_factory_(this) { |
- set_painting(false); |
-} |
- |
-WebWidgetHost::~WebWidgetHost() { |
- // ui::SetWindowUserData(hwnd_, 0); |
- |
- webwidget_->close(); |
-} |
- |
-void WebWidgetHost::UpdatePaintRect(const gfx::Rect& rect) { |
- paint_rect_.Union(rect); |
-} |
- |
-void WebWidgetHost::Paint() { |
- gfx::Rect client_rect(NSRectToCGRect([view_ frame])); |
- NSGraphicsContext* view_context = [NSGraphicsContext currentContext]; |
- CGContextRef context = static_cast<CGContextRef>([view_context graphicsPort]); |
- |
- // Allocate a canvas if necessary |
- if (!canvas_.get()) { |
- ResetScrollRect(); |
- paint_rect_ = client_rect; |
- canvas_.reset(skia::CreatePlatformCanvas( |
- paint_rect_.width(), paint_rect_.height(), true)); |
- } |
- |
- // make sure webkit draws into our bitmap, not the window |
- CGContextRef bitmap_context = |
- skia::GetBitmapContext(skia::GetTopDevice(*canvas_)); |
- [NSGraphicsContext setCurrentContext: |
- [NSGraphicsContext graphicsContextWithGraphicsPort:bitmap_context |
- flipped:YES]]; |
- |
- webwidget_->animate(0.0); |
- |
- // This may result in more invalidation |
- webwidget_->layout(); |
- |
- // Scroll the canvas if necessary |
- scroll_rect_.Intersect(client_rect); |
- if (!scroll_rect_.IsEmpty()) { |
- // add to invalidate rect, since there's no equivalent of ScrollDC. |
- paint_rect_.Union(scroll_rect_); |
- } |
- ResetScrollRect(); |
- |
- // Paint the canvas if necessary. Allow painting to generate extra rects the |
- // first time we call it. This is necessary because some WebCore rendering |
- // objects update their layout only when painted. |
- for (int i = 0; i < 2; ++i) { |
- paint_rect_.Intersect(client_rect); |
- if (!paint_rect_.IsEmpty()) { |
- gfx::Rect rect(paint_rect_); |
- paint_rect_ = gfx::Rect(); |
- |
-// DLOG_IF(WARNING, i == 1) << "painting caused additional invalidations"; |
- PaintRect(rect); |
- } |
- } |
- DCHECK(paint_rect_.IsEmpty()); |
- |
- // set the context back to our window |
- [NSGraphicsContext setCurrentContext: view_context]; |
- |
- // Paint to the screen |
- if ([view_ lockFocusIfCanDraw]) { |
- int bitmap_height = CGBitmapContextGetHeight(bitmap_context); |
- int bitmap_width = CGBitmapContextGetWidth(bitmap_context); |
- CGRect bitmap_rect = { { 0, 0 }, |
- { bitmap_width, bitmap_height } }; |
- skia::DrawToNativeContext(canvas_.get(), context, 0, |
- client_rect.height() - bitmap_height, &bitmap_rect); |
- |
- [view_ unlockFocus]; |
- } |
-} |
- |
-WebScreenInfo WebWidgetHost::GetScreenInfo() { |
- return WebScreenInfoFactory::screenInfo(view_); |
-} |
- |
-void WebWidgetHost::Resize(const gfx::Rect& rect) { |
- // Force an entire re-paint. TODO(darin): Maybe reuse this memory buffer. |
- DiscardBackingStore(); |
- webwidget_->resize(WebSize(rect.width(), rect.height())); |
-} |
- |
-void WebWidgetHost::MouseEvent(NSEvent *event) { |
- const WebMouseEvent& web_event = WebInputEventFactory::mouseEvent( |
- event, view_); |
- webwidget_->handleInputEvent(web_event); |
-} |
- |
-void WebWidgetHost::WheelEvent(NSEvent *event) { |
- webwidget_->handleInputEvent( |
- WebInputEventFactory::mouseWheelEvent(event, view_)); |
-} |
- |
-void WebWidgetHost::KeyEvent(NSEvent *event) { |
- WebKeyboardEvent keyboard_event(WebInputEventFactory::keyboardEvent(event)); |
- webwidget_->handleInputEvent(keyboard_event); |
- if ([event type] == NSKeyDown) { |
- // Send a Char event here to emulate the keyboard events. |
- // TODO(hbono): Bug 20852 <http://crbug.com/20852> implement the |
- // NSTextInput protocol and remove this code. |
- keyboard_event.type = WebInputEvent::Char; |
- webwidget_->handleInputEvent(keyboard_event); |
- } |
-} |
- |
-void WebWidgetHost::SetFocus(bool enable) { |
- // Ignore focus calls in layout test mode so that tests don't mess with each |
- // other's focus when running in parallel. |
- if (!TestShell::layout_test_mode()) |
- webwidget_->setFocus(enable); |
-} |
- |
-void WebWidgetHost::ResetScrollRect() { |
- scroll_rect_ = gfx::Rect(); |
- scroll_dx_ = 0; |
- scroll_dy_ = 0; |
-} |
- |
-void WebWidgetHost::PaintRect(const gfx::Rect& rect) { |
-#ifndef NDEBUG |
- DCHECK(!painting_); |
-#endif |
- DCHECK(canvas_.get()); |
- |
- set_painting(true); |
- webwidget_->paint(webkit_glue::ToWebCanvas(canvas_.get()), rect); |
- set_painting(false); |
-} |