// Copyright (c) 2011 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 "test_shell_webview.h" #import #include "base/memory/scoped_ptr.h" #include "base/string_util.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" #include "ui/gfx/rect.h" #include "webkit/tools/test_shell/test_shell.h" #include "webkit/tools/test_shell/webwidget_host.h" @implementation TestShellWebView @synthesize shell = shell_; - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { trackingArea_ = [[NSTrackingArea alloc] initWithRect:frame options:NSTrackingMouseMoved | NSTrackingActiveInActiveApp | NSTrackingInVisibleRect owner:self userInfo:nil]; [self addTrackingArea:trackingArea_]; } return self; } - (void) dealloc { [self removeTrackingArea:trackingArea_]; [trackingArea_ release]; [super dealloc]; } - (void)drawRect:(NSRect)rect { CGContextRef context = reinterpret_cast([[NSGraphicsContext currentContext] graphicsPort]); // start by filling the rect with magenta, so that we can see what's drawn CGContextSetRGBFillColor (context, 1, 0, 1, 1); CGContextFillRect(context, NSRectToCGRect(rect)); if (shell_ && shell_->webView()) { gfx::Rect client_rect(NSRectToCGRect(rect)); // flip from cocoa coordinates client_rect.set_y([self frame].size.height - client_rect.height() - client_rect.y()); shell_->webViewHost()->UpdatePaintRect(client_rect); shell_->webViewHost()->Paint(); } } - (IBAction)goBack:(id)sender { if (shell_) shell_->GoBackOrForward(-1); } - (IBAction)goForward:(id)sender { if (shell_) shell_->GoBackOrForward(1); } - (IBAction)reload:(id)sender { if (shell_) shell_->Reload(); } - (IBAction)stopLoading:(id)sender { if (shell_ && shell_->webView()) shell_->webView()->mainFrame()->stopLoading(); } - (IBAction)takeURLStringValueFrom:(NSTextField *)sender { NSString *url = [sender stringValue]; // if it doesn't already have a prefix, add http. If we can't parse it, // just don't bother rather than making things worse. NSURL* tempUrl = [NSURL URLWithString:url]; if (tempUrl && ![tempUrl scheme]) url = [@"http://" stringByAppendingString:url]; shell_->LoadURL(GURL(std::string([url UTF8String]))); } - (void)mouseDown:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->MouseEvent(theEvent); } - (void)rightMouseDown:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->MouseEvent(theEvent); } - (void)otherMouseDown:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->MouseEvent(theEvent); } - (void)mouseUp:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->MouseEvent(theEvent); } - (void)rightMouseUp:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->MouseEvent(theEvent); } - (void)otherMouseUp:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->MouseEvent(theEvent); } - (void)mouseMoved:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->MouseEvent(theEvent); } - (void)mouseDragged:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->MouseEvent(theEvent); } - (void)scrollWheel:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->WheelEvent(theEvent); } - (void)rightMouseDragged:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->MouseEvent(theEvent); } - (void)otherMouseDragged:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->MouseEvent(theEvent); } - (void)mouseEntered:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->MouseEvent(theEvent); } - (void)mouseExited:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->MouseEvent(theEvent); } - (void)keyDown:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->KeyEvent(theEvent); } - (void)keyUp:(NSEvent *)theEvent { if (shell_ && shell_->webView()) shell_->webViewHost()->KeyEvent(theEvent); } - (BOOL)isOpaque { return YES; } - (BOOL)canBecomeKeyView { return shell_ && shell_->webView(); } - (BOOL)acceptsFirstResponder { return shell_ && shell_->webView(); } - (BOOL)becomeFirstResponder { if (shell_ && shell_->webView()) { shell_->webViewHost()->SetFocus(YES); return YES; } return NO; } - (BOOL)resignFirstResponder { if (shell_ && shell_->webView()) { shell_->webViewHost()->SetFocus(NO); return YES; } return NO; } - (void)setIsActive:(BOOL)active { if (shell_ && shell_->webView()) shell_->webViewHost()->SetIsActive(active ? true : false); } - (void)setFrame:(NSRect)frameRect { [super setFrame:frameRect]; if (shell_ && shell_->webView()) shell_->webViewHost()->Resize(gfx::Rect(NSRectToCGRect(frameRect))); [self setNeedsDisplay:YES]; } @end