| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef WEBKIT_GLUE_QUICKDRAW_DRAWING_MANAGER_MAC_H_ | |
| 6 #define WEBKIT_GLUE_QUICKDRAW_DRAWING_MANAGER_MAC_H_ | |
| 7 | |
| 8 #ifndef NP_NO_QUICKDRAW | |
| 9 | |
| 10 #import <Carbon/Carbon.h> | |
| 11 | |
| 12 #include "gfx/rect.h" | |
| 13 | |
| 14 // Plugin helper class encapsulating the details of capturing what a QuickDraw | |
| 15 // drawing model plugin draws, then drawing it into a CGContext. | |
| 16 class QuickDrawDrawingManager { | |
| 17 public: | |
| 18 QuickDrawDrawingManager(); | |
| 19 ~QuickDrawDrawingManager(); | |
| 20 | |
| 21 // Sets the mode used for plugin drawing. If enabled is true the plugin draws | |
| 22 // into a GWorld that's not connected to a window, otherwise the plugin draws | |
| 23 // into our the plugin's dummy window (which is slower, since the call we use | |
| 24 // to scrape the window contents is much more expensive than copying between | |
| 25 // GWorlds). | |
| 26 void SetFastPathEnabled(bool enabled); | |
| 27 | |
| 28 // Returns true if the fast path is currently enabled. | |
| 29 bool IsFastPathEnabled(); | |
| 30 | |
| 31 // Sets the context that the plugin bits should be copied into when | |
| 32 // UpdateContext is called. This object does not retain |context|, so the | |
| 33 // caller must call SetTargetContext again if the context changes. | |
| 34 // If the fast path is currently enabled, this call will cause the port to | |
| 35 // change. | |
| 36 void SetTargetContext(CGContextRef context, const gfx::Size& plugin_size); | |
| 37 | |
| 38 // Sets the window that is used by the plugin. This object does not own the | |
| 39 // window, so the caler must call SetPluginWindow again if the window changes. | |
| 40 void SetPluginWindow(WindowRef window); | |
| 41 | |
| 42 // Updates the target context with the current plugin bits. | |
| 43 void UpdateContext(); | |
| 44 | |
| 45 // Returns the port that the plugin should draw into. This returned port is | |
| 46 // only valid until the next call to SetFastPathEnabled (or SetTargetContext | |
| 47 // while the fast path is enabled). | |
| 48 CGrafPtr port() { return current_port_; } | |
| 49 | |
| 50 // Makes the QuickDraw port current; should be called before calls where the | |
| 51 // plugin might draw. | |
| 52 void MakePortCurrent(); | |
| 53 | |
| 54 private: | |
| 55 // Updates the GWorlds used by the faster path. | |
| 56 void UpdateGWorlds(); | |
| 57 | |
| 58 // Deletes the GWorlds used by the faster path. | |
| 59 void DestroyGWorlds(); | |
| 60 | |
| 61 // Scrapes the contents of the window into the given context. | |
| 62 // Used for the slower path. | |
| 63 static void ScrapeWindow(WindowRef window, CGContextRef target_context, | |
| 64 const gfx::Size& plugin_size); | |
| 65 | |
| 66 // Copies the source GWorld's bits into the target GWorld. | |
| 67 // Used for the faster path. | |
| 68 static void CopyGWorldBits(GWorldPtr source, GWorldPtr dest, | |
| 69 const gfx::Size& plugin_size); | |
| 70 | |
| 71 WindowRef plugin_window_; // Weak reference. | |
| 72 CGContextRef target_context_; // Weak reference. | |
| 73 gfx::Size plugin_size_; | |
| 74 bool fast_path_enabled_; | |
| 75 CGrafPtr current_port_; | |
| 76 // Variables used for the faster path: | |
| 77 GWorldPtr target_world_; // Created lazily; may be NULL. | |
| 78 GWorldPtr plugin_world_; // Created lazily; may be NULL. | |
| 79 }; | |
| 80 | |
| 81 #endif // !NP_NO_QUICKDRAW | |
| 82 | |
| 83 #endif // QUICKDRAW_DRAWING_MANAGER_MAC | |
| OLD | NEW |