Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <QuartzCore/QuartzCore.h> | 5 #include <QuartzCore/QuartzCore.h> |
| 6 | 6 |
| 7 #include "chrome/browser/renderer_host/render_widget_host_view_mac.h" | 7 #include "chrome/browser/renderer_host/render_widget_host_view_mac.h" |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 35 #include "content/common/gpu/gpu_messages.h" | 35 #include "content/common/gpu/gpu_messages.h" |
| 36 #include "content/common/native_web_keyboard_event.h" | 36 #include "content/common/native_web_keyboard_event.h" |
| 37 #include "content/common/plugin_messages.h" | 37 #include "content/common/plugin_messages.h" |
| 38 #include "content/common/view_messages.h" | 38 #include "content/common/view_messages.h" |
| 39 #include "skia/ext/platform_canvas.h" | 39 #include "skia/ext/platform_canvas.h" |
| 40 #import "third_party/mozilla/ComplexTextInputPanel.h" | 40 #import "third_party/mozilla/ComplexTextInputPanel.h" |
| 41 #include "third_party/skia/include/core/SkColor.h" | 41 #include "third_party/skia/include/core/SkColor.h" |
| 42 #include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebInputEventFact ory.h" | 42 #include "third_party/WebKit/Source/WebKit/chromium/public/mac/WebInputEventFact ory.h" |
| 43 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" | 43 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" |
| 44 #include "ui/gfx/gl/gl_switches.h" | 44 #include "ui/gfx/gl/gl_switches.h" |
| 45 #include "ui/gfx/scoped_ns_graphics_context_state_mac.h" | |
| 45 #include "ui/gfx/surface/io_surface_support_mac.h" | 46 #include "ui/gfx/surface/io_surface_support_mac.h" |
| 46 #include "webkit/glue/webaccessibility.h" | 47 #include "webkit/glue/webaccessibility.h" |
| 47 #include "webkit/plugins/npapi/webplugin.h" | 48 #include "webkit/plugins/npapi/webplugin.h" |
| 48 | 49 |
| 49 using WebKit::WebInputEvent; | 50 using WebKit::WebInputEvent; |
| 50 using WebKit::WebInputEventFactory; | 51 using WebKit::WebInputEventFactory; |
| 51 using WebKit::WebMouseEvent; | 52 using WebKit::WebMouseEvent; |
| 52 using WebKit::WebMouseWheelEvent; | 53 using WebKit::WebMouseWheelEvent; |
| 53 | 54 |
| 54 static inline int ToWebKitModifiers(NSUInteger flags) { | 55 static inline int ToWebKitModifiers(NSUInteger flags) { |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 409 CGLUnlockContext(cglContext_); | 410 CGLUnlockContext(cglContext_); |
| 410 } | 411 } |
| 411 | 412 |
| 412 - (void)drawRect:(NSRect)rect { | 413 - (void)drawRect:(NSRect)rect { |
| 413 if (!CommandLine::ForCurrentProcess()->HasSwitch( | 414 if (!CommandLine::ForCurrentProcess()->HasSwitch( |
| 414 switches::kDisableHolePunching)) { | 415 switches::kDisableHolePunching)) { |
| 415 const NSRect* dirtyRects; | 416 const NSRect* dirtyRects; |
| 416 int dirtyRectCount; | 417 int dirtyRectCount; |
| 417 [self getRectsBeingDrawn:&dirtyRects count:&dirtyRectCount]; | 418 [self getRectsBeingDrawn:&dirtyRects count:&dirtyRectCount]; |
| 418 | 419 |
| 419 [NSGraphicsContext saveGraphicsState]; | 420 gfx::ScopedNSGraphicsContextState scopedGState; |
|
Nico
2011/04/26 17:56:28
hm, this line in itself isn't very obvious. Maybe
Robert Sesek
2011/04/26 18:50:53
This matches the CGContext version...
| |
| 420 | 421 |
| 421 // Mask out any cutout rects--somewhat counterintuitively cutout rects are | 422 // Mask out any cutout rects--somewhat counterintuitively cutout rects are |
| 422 // places where clearColor is *not* drawn. The trick is that drawing nothing | 423 // places where clearColor is *not* drawn. The trick is that drawing nothing |
| 423 // lets the parent view (i.e., the web page) show through, whereas drawing | 424 // lets the parent view (i.e., the web page) show through, whereas drawing |
| 424 // clearColor punches a hole in the window (letting OpenGL show through). | 425 // clearColor punches a hole in the window (letting OpenGL show through). |
| 425 if ([cutoutRects_.get() count] > 0) { | 426 if ([cutoutRects_.get() count] > 0) { |
| 426 NSBezierPath* path = [NSBezierPath bezierPath]; | 427 NSBezierPath* path = [NSBezierPath bezierPath]; |
| 427 // Trace the bounds clockwise to give a base clip rect of the whole view. | 428 // Trace the bounds clockwise to give a base clip rect of the whole view. |
| 428 NSRect bounds = [self bounds]; | 429 NSRect bounds = [self bounds]; |
| 429 [path moveToPoint:bounds.origin]; | 430 [path moveToPoint:bounds.origin]; |
| 430 [path lineToPoint:NSMakePoint(NSMinX(bounds), NSMaxY(bounds))]; | 431 [path lineToPoint:NSMakePoint(NSMinX(bounds), NSMaxY(bounds))]; |
| 431 [path lineToPoint:NSMakePoint(NSMaxX(bounds), NSMaxY(bounds))]; | 432 [path lineToPoint:NSMakePoint(NSMaxX(bounds), NSMaxY(bounds))]; |
| 432 [path lineToPoint:NSMakePoint(NSMaxX(bounds), NSMinY(bounds))]; | 433 [path lineToPoint:NSMakePoint(NSMaxX(bounds), NSMinY(bounds))]; |
| 433 [path closePath]; | 434 [path closePath]; |
| 434 | 435 |
| 435 // Then trace each cutout rect counterclockwise to remove that region from | 436 // Then trace each cutout rect counterclockwise to remove that region from |
| 436 // the clip region. | 437 // the clip region. |
| 437 for (NSValue* rectWrapper in cutoutRects_.get()) { | 438 for (NSValue* rectWrapper in cutoutRects_.get()) { |
| 438 [path appendBezierPathWithRect:[rectWrapper rectValue]]; | 439 [path appendBezierPathWithRect:[rectWrapper rectValue]]; |
| 439 } | 440 } |
| 440 | 441 |
| 441 [path addClip]; | 442 [path addClip]; |
| 442 } | 443 } |
| 443 | 444 |
| 444 // Punch a hole so that the OpenGL view shows through. | 445 // Punch a hole so that the OpenGL view shows through. |
| 445 [[NSColor clearColor] set]; | 446 [[NSColor clearColor] set]; |
| 446 NSRectFillList(dirtyRects, dirtyRectCount); | 447 NSRectFillList(dirtyRects, dirtyRectCount); |
| 447 | |
| 448 [NSGraphicsContext restoreGraphicsState]; | |
| 449 } | 448 } |
| 450 | 449 |
| 451 [self drawView]; | 450 [self drawView]; |
| 452 } | 451 } |
| 453 | 452 |
| 454 - (void)rightMouseDown:(NSEvent*)event { | 453 - (void)rightMouseDown:(NSEvent*)event { |
| 455 // The NSResponder documentation: "Note: The NSView implementation of this | 454 // The NSResponder documentation: "Note: The NSView implementation of this |
| 456 // method does not pass the message up the responder chain, it handles it | 455 // method does not pass the message up the responder chain, it handles it |
| 457 // directly." | 456 // directly." |
| 458 // That's bad, we want the next responder (RWHVMac) to handle this event to | 457 // That's bad, we want the next responder (RWHVMac) to handle this event to |
| (...skipping 2443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2902 if (!string) return NO; | 2901 if (!string) return NO; |
| 2903 | 2902 |
| 2904 // If the user is currently using an IME, confirm the IME input, | 2903 // If the user is currently using an IME, confirm the IME input, |
| 2905 // and then insert the text from the service, the same as TextEdit and Safari. | 2904 // and then insert the text from the service, the same as TextEdit and Safari. |
| 2906 [self confirmComposition]; | 2905 [self confirmComposition]; |
| 2907 [self insertText:string]; | 2906 [self insertText:string]; |
| 2908 return YES; | 2907 return YES; |
| 2909 } | 2908 } |
| 2910 | 2909 |
| 2911 @end | 2910 @end |
| OLD | NEW |