| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 #ifndef CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_MAC_H_ | 5 #ifndef CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_MAC_H_ |
| 6 #define CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_MAC_H_ | 6 #define CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_MAC_H_ |
| 7 | 7 |
| 8 #import <Cocoa/Cocoa.h> | 8 #import <Cocoa/Cocoa.h> |
| 9 #import <QuartzCore/CALayer.h> | 9 #import <QuartzCore/CALayer.h> |
| 10 | 10 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 BOOL canBeKeyView_; | 38 BOOL canBeKeyView_; |
| 39 BOOL closeOnDeactivate_; | 39 BOOL closeOnDeactivate_; |
| 40 scoped_ptr<RWHVMEditCommandHelper> editCommand_helper_; | 40 scoped_ptr<RWHVMEditCommandHelper> editCommand_helper_; |
| 41 | 41 |
| 42 // These are part of the magic tooltip code from WebKit's WebHTMLView: | 42 // These are part of the magic tooltip code from WebKit's WebHTMLView: |
| 43 id trackingRectOwner_; // (not retained) | 43 id trackingRectOwner_; // (not retained) |
| 44 void *trackingRectUserData_; | 44 void *trackingRectUserData_; |
| 45 NSTrackingRectTag lastToolTipTag_; | 45 NSTrackingRectTag lastToolTipTag_; |
| 46 scoped_nsobject<NSString> toolTip_; | 46 scoped_nsobject<NSString> toolTip_; |
| 47 | 47 |
| 48 // Set to YES if insertText: or insertNewline: get called. | |
| 49 BOOL textInserted_; | |
| 50 | |
| 51 // Is YES if there was a mouse-down as yet unbalanced with a mouse-up. | 48 // Is YES if there was a mouse-down as yet unbalanced with a mouse-up. |
| 52 BOOL hasOpenMouseDown_; | 49 BOOL hasOpenMouseDown_; |
| 53 | 50 |
| 54 // Keep current key event when keyEvent: gets called. It's used in | |
| 55 // insertText: and insertNewline: to synthesize the corresponding Char event. | |
| 56 scoped_nsobject<NSEvent> currentKeyEvent_; | |
| 57 NSWindow* lastWindow_; // weak | 51 NSWindow* lastWindow_; // weak |
| 58 | 52 |
| 59 // The Core Animation layer, if any, hosting the accelerated plugins' output. | 53 // The Core Animation layer, if any, hosting the accelerated plugins' output. |
| 60 scoped_nsobject<CALayer> acceleratedPluginLayer_; | 54 scoped_nsobject<CALayer> acceleratedPluginLayer_; |
| 55 |
| 56 // Variables used by our implementaion of the NSTextInput protocol. |
| 57 // An input method of Mac calls the methods of this protocol not only to |
| 58 // notify an application of its status, but also to retrieve the status of |
| 59 // the application. That is, an application cannot control an input method |
| 60 // directly. |
| 61 // This object keeps the status of a composition of the renderer and returns |
| 62 // it when an input method asks for it. |
| 63 // We need to implement Objective-C methods for the NSTextInput protocol. On |
| 64 // the other hand, we need to implement a C++ method for an IPC-message |
| 65 // handler which receives input-method events from the renderer. |
| 66 |
| 67 // Represents the input-method attributes supported by this object. |
| 68 scoped_nsobject<NSArray> validAttributesForMarkedText_; |
| 69 |
| 70 // Represents the cursor position in this view coordinate. |
| 71 // The renderer sends the cursor position through an IPC message. |
| 72 // We save the latest cursor position here and return it when an input |
| 73 // methods needs it. |
| 74 NSRect caretRect_; |
| 75 |
| 76 // Indicates if we are currently handling a key down event. |
| 77 BOOL handlingKeyDown_; |
| 78 |
| 79 // Indicates if there is any marked text. |
| 80 BOOL hasMarkedText_; |
| 81 |
| 82 // The range of current marked text inside the whole content of the DOM node |
| 83 // being edited. |
| 84 // TODO(suzhe): This is currently a fake value, as we do not support accessing |
| 85 // the whole content yet. |
| 86 NSRange markedRange_; |
| 87 |
| 88 // The selected range inside current marked text. |
| 89 // TODO(suzhe): Currently it's only valid when there is any marked text. |
| 90 // In the future, we may need to support accessing the whole content of the |
| 91 // DOM node being edited, then this should be the selected range inside the |
| 92 // DOM node. |
| 93 NSRange selectedRange_; |
| 94 |
| 95 // Text to be inserted which was generated by handling a key down event. |
| 96 string16 textToBeInserted_; |
| 97 |
| 98 // New marked text which was generated by handling a key down event. |
| 99 string16 newMarkedText_; |
| 61 } | 100 } |
| 62 | 101 |
| 102 @property(assign, nonatomic) NSRect caretRect; |
| 103 |
| 63 - (void)setCanBeKeyView:(BOOL)can; | 104 - (void)setCanBeKeyView:(BOOL)can; |
| 64 - (void)setCloseOnDeactivate:(BOOL)b; | 105 - (void)setCloseOnDeactivate:(BOOL)b; |
| 65 - (void)setToolTipAtMousePoint:(NSString *)string; | 106 - (void)setToolTipAtMousePoint:(NSString *)string; |
| 66 // Makes sure that the initial layer setup for accelerated plugin drawing has | 107 // Makes sure that the initial layer setup for accelerated plugin drawing has |
| 67 // been done. Can be called multiple times. | 108 // been done. Can be called multiple times. |
| 68 - (void)ensureAcceleratedPluginLayer; | 109 - (void)ensureAcceleratedPluginLayer; |
| 69 // Triggers a refresh of the accelerated plugin layer; should be called whenever | 110 // Triggers a refresh of the accelerated plugin layer; should be called whenever |
| 70 // the shared surface for one of the plugins is updated. | 111 // the shared surface for one of the plugins is updated. |
| 71 - (void)drawAcceleratedPluginLayer; | 112 - (void)drawAcceleratedPluginLayer; |
| 72 // Set frame, then notify the RenderWidgetHost that the frame has been changed, | 113 // Set frame, then notify the RenderWidgetHost that the frame has been changed, |
| 73 // but do it in a separate task, using |performSelector:withObject:afterDelay:|. | 114 // but do it in a separate task, using |performSelector:withObject:afterDelay:|. |
| 74 // This stops the flickering issue in http://crbug.com/31970 | 115 // This stops the flickering issue in http://crbug.com/31970 |
| 75 - (void)setFrameWithDeferredUpdate:(NSRect)frame; | 116 - (void)setFrameWithDeferredUpdate:(NSRect)frame; |
| 76 // Notify the RenderWidgetHost that the frame was updated so it can resize | 117 // Notify the RenderWidgetHost that the frame was updated so it can resize |
| 77 // its contents. | 118 // its contents. |
| 78 - (void)renderWidgetHostWasResized; | 119 - (void)renderWidgetHostWasResized; |
| 120 // Cancel ongoing composition (abandon the marked text). |
| 121 - (void)cancelComposition; |
| 79 | 122 |
| 80 @end | 123 @end |
| 81 | 124 |
| 82 /////////////////////////////////////////////////////////////////////////////// | 125 /////////////////////////////////////////////////////////////////////////////// |
| 83 // RenderWidgetHostViewMac | 126 // RenderWidgetHostViewMac |
| 84 // | 127 // |
| 85 // An object representing the "View" of a rendered web page. This object is | 128 // An object representing the "View" of a rendered web page. This object is |
| 86 // responsible for displaying the content of the web page, and integrating with | 129 // responsible for displaying the content of the web page, and integrating with |
| 87 // the Cocoa view system. It is the implementation of the RenderWidgetHostView | 130 // the Cocoa view system. It is the implementation of the RenderWidgetHostView |
| 88 // that the cross-platform RenderWidgetHost object uses | 131 // that the cross-platform RenderWidgetHost object uses |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 virtual void DrawAcceleratedSurfaceInstances(CGLContextObj context); | 205 virtual void DrawAcceleratedSurfaceInstances(CGLContextObj context); |
| 163 // Informs the plug-in instances that their drawing context has changed. | 206 // Informs the plug-in instances that their drawing context has changed. |
| 164 virtual void AcceleratedSurfaceContextChanged(); | 207 virtual void AcceleratedSurfaceContextChanged(); |
| 165 | 208 |
| 166 virtual void SetVisuallyDeemphasized(bool deemphasized); | 209 virtual void SetVisuallyDeemphasized(bool deemphasized); |
| 167 | 210 |
| 168 void KillSelf(); | 211 void KillSelf(); |
| 169 | 212 |
| 170 void set_parent_view(BaseView* parent_view) { parent_view_ = parent_view; } | 213 void set_parent_view(BaseView* parent_view) { parent_view_ = parent_view; } |
| 171 | 214 |
| 172 // Cancels the ongoing composition and cleans up all input-method resources. | |
| 173 // This function dispatches a cancelation request from a renderer to | |
| 174 // NSInputManager to synchronize the input-method status with it. | |
| 175 void IMECleanupComposition(); | |
| 176 | |
| 177 // These member variables should be private, but the associated ObjC class | 215 // These member variables should be private, but the associated ObjC class |
| 178 // needs access to them and can't be made a friend. | 216 // needs access to them and can't be made a friend. |
| 179 | 217 |
| 180 // The associated Model. Can be NULL if Destroy() is called when | 218 // The associated Model. Can be NULL if Destroy() is called when |
| 181 // someone (other than superview) has retained |cocoa_view_|. | 219 // someone (other than superview) has retained |cocoa_view_|. |
| 182 RenderWidgetHost* render_widget_host_; | 220 RenderWidgetHost* render_widget_host_; |
| 183 | 221 |
| 184 // This is true when we are currently painting and thus should handle extra | 222 // This is true when we are currently painting and thus should handle extra |
| 185 // paint requests by expanding the invalid rect rather than actually painting. | 223 // paint requests by expanding the invalid rect rather than actually painting. |
| 186 bool about_to_validate_and_paint_; | 224 bool about_to_validate_and_paint_; |
| 187 | 225 |
| 188 // This is true when we have already scheduled a call to | 226 // This is true when we have already scheduled a call to |
| 189 // |-callSetNeedsDisplayInRect:| but it has not been fulfilled yet. Used to | 227 // |-callSetNeedsDisplayInRect:| but it has not been fulfilled yet. Used to |
| 190 // prevent us from scheduling multiple calls. | 228 // prevent us from scheduling multiple calls. |
| 191 bool call_set_needs_display_in_rect_pending_; | 229 bool call_set_needs_display_in_rect_pending_; |
| 192 | 230 |
| 193 // The invalid rect that needs to be painted by callSetNeedsDisplayInRect. | 231 // The invalid rect that needs to be painted by callSetNeedsDisplayInRect. |
| 194 // This value is only meaningful when | 232 // This value is only meaningful when |
| 195 // |call_set_needs_display_in_rect_pending_| is true. | 233 // |call_set_needs_display_in_rect_pending_| is true. |
| 196 NSRect invalid_rect_; | 234 NSRect invalid_rect_; |
| 197 | 235 |
| 198 // The time at which this view started displaying white pixels as a result of | 236 // The time at which this view started displaying white pixels as a result of |
| 199 // not having anything to paint (empty backing store from renderer). This | 237 // not having anything to paint (empty backing store from renderer). This |
| 200 // value returns true for is_null() if we are not recording whiteout times. | 238 // value returns true for is_null() if we are not recording whiteout times. |
| 201 base::TimeTicks whiteout_start_time_; | 239 base::TimeTicks whiteout_start_time_; |
| 202 | 240 |
| 203 // The time it took after this view was selected for it to be fully painted. | 241 // The time it took after this view was selected for it to be fully painted. |
| 204 base::TimeTicks tab_switch_paint_time_; | 242 base::TimeTicks tab_switch_paint_time_; |
| 205 | 243 |
| 206 // Variables used by our implementaion of the NSTextInput protocol. | |
| 207 // An input method of Mac calls the methods of this protocol not only to | |
| 208 // notify an application of its status, but also to retrieve the status of | |
| 209 // the application. That is, an application cannot control an input method | |
| 210 // directly. | |
| 211 // This object keeps the status of a composition of the renderer and returns | |
| 212 // it when an input method asks for it. | |
| 213 // We need to implement Objective-C methods for the NSTextInput protocol. On | |
| 214 // the other hand, we need to implement a C++ method for an IPC-message | |
| 215 // handler which receives input-method events from the renderer. | |
| 216 // To avoid fragmentation of variables used by our input-method | |
| 217 // implementation, we define all variables as public member variables of | |
| 218 // this C++ class so both the C++ methods and the Objective-C methods can | |
| 219 // access them. | |
| 220 | |
| 221 // Represents the input-method attributes supported by this object. | |
| 222 NSArray* im_attributes_; | |
| 223 | |
| 224 // Represents whether or not an input method is composing a text. | |
| 225 bool im_composing_; | |
| 226 | |
| 227 // Represents the composition string (i.e. a text being composed by an input | |
| 228 // method), its range, and the range of the selected text in the composition | |
| 229 // string. | |
| 230 string16 im_text_; | |
| 231 NSRange im_marked_range_; | |
| 232 NSRange im_selected_range_; | |
| 233 | |
| 234 // Represents the state of modifier keys. | |
| 235 // An input method doesn't notify the state of modifier keys. On the other | |
| 236 // hand, the state of modifier keys are required by Char events because they | |
| 237 // are dispatched to onkeypress() event handlers of JavaScript. | |
| 238 // To create a Char event in NSTextInput methods, we save the latest state | |
| 239 // of modifier keys when we receive it. | |
| 240 int im_modifiers_; | |
| 241 | |
| 242 // Represents the cursor position in this view coordinate. | |
| 243 // The renderer sends the cursor position through an IPC message. | |
| 244 // We save the latest cursor position here and return it when an input | |
| 245 // methods needs it. | |
| 246 NSRect im_caret_rect_; | |
| 247 | |
| 248 private: | 244 private: |
| 249 // Updates the display cursor to the current cursor if the cursor is over this | 245 // Updates the display cursor to the current cursor if the cursor is over this |
| 250 // render view. | 246 // render view. |
| 251 void UpdateCursorIfOverSelf(); | 247 void UpdateCursorIfOverSelf(); |
| 252 | 248 |
| 253 // Shuts down the render_widget_host_. This is a separate function so we can | 249 // Shuts down the render_widget_host_. This is a separate function so we can |
| 254 // invoke it from the message loop. | 250 // invoke it from the message loop. |
| 255 void ShutdownHost(); | 251 void ShutdownHost(); |
| 256 | 252 |
| 257 // The associated view. This is weak and is inserted into the view hierarchy | 253 // The associated view. This is weak and is inserted into the view hierarchy |
| (...skipping 26 matching lines...) Expand all Loading... |
| 284 // Used for positioning a popup menu. | 280 // Used for positioning a popup menu. |
| 285 BaseView* parent_view_; | 281 BaseView* parent_view_; |
| 286 | 282 |
| 287 // Helper class for managing instances of accelerated plug-ins. | 283 // Helper class for managing instances of accelerated plug-ins. |
| 288 AcceleratedSurfaceContainerManagerMac plugin_container_manager_; | 284 AcceleratedSurfaceContainerManagerMac plugin_container_manager_; |
| 289 | 285 |
| 290 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewMac); | 286 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewMac); |
| 291 }; | 287 }; |
| 292 | 288 |
| 293 #endif // CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_MAC_H_ | 289 #endif // CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_MAC_H_ |
| OLD | NEW |