| Index: webkit/glue/plugins/quickdraw_drawing_manager_mac.cc
|
| ===================================================================
|
| --- webkit/glue/plugins/quickdraw_drawing_manager_mac.cc (revision 69426)
|
| +++ webkit/glue/plugins/quickdraw_drawing_manager_mac.cc (working copy)
|
| @@ -1,154 +0,0 @@
|
| -// Copyright (c) 2010 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.
|
| -
|
| -#ifndef NP_NO_QUICKDRAW
|
| -
|
| -#include "webkit/glue/plugins/quickdraw_drawing_manager_mac.h"
|
| -
|
| -#include "webkit/glue/plugins/coregraphics_private_symbols_mac.h"
|
| -
|
| -// Turn off GCC warnings about deprecated functions (since QuickDraw is a
|
| -// deprecated API). According to the GCC documentation, this can only be done
|
| -// per file, not pushed and popped like some options can be.
|
| -#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
| -
|
| -QuickDrawDrawingManager::QuickDrawDrawingManager()
|
| - : plugin_window_(NULL), target_context_(NULL), fast_path_enabled_(false),
|
| - current_port_(NULL), target_world_(NULL), plugin_world_(NULL) {}
|
| -
|
| -QuickDrawDrawingManager::~QuickDrawDrawingManager() {
|
| - DestroyGWorlds();
|
| -}
|
| -
|
| -void QuickDrawDrawingManager::SetFastPathEnabled(bool enabled) {
|
| - if (fast_path_enabled_ == enabled)
|
| - return;
|
| -
|
| - fast_path_enabled_ = enabled;
|
| - if (enabled) {
|
| - if (!target_world_)
|
| - UpdateGWorlds();
|
| - // Copy our last window snapshot into our new source, since the plugin
|
| - // may not repaint everything.
|
| - CopyGWorldBits(target_world_, plugin_world_, plugin_size_);
|
| - current_port_ = plugin_world_;
|
| - } else {
|
| - current_port_ = GetWindowPort(plugin_window_);
|
| - }
|
| -}
|
| -
|
| -void QuickDrawDrawingManager::SetTargetContext(CGContextRef context,
|
| - const gfx::Size& plugin_size) {
|
| - target_context_ = context;
|
| - if (plugin_size != plugin_size_) {
|
| - plugin_size_ = plugin_size;
|
| - // Pitch the old GWorlds, since they are the wrong size now.
|
| - DestroyGWorlds();
|
| - if (fast_path_enabled_)
|
| - UpdateGWorlds();
|
| - }
|
| -}
|
| -
|
| -void QuickDrawDrawingManager::SetPluginWindow(WindowRef window) {
|
| - plugin_window_ = window;
|
| - if (!fast_path_enabled_)
|
| - current_port_ = GetWindowPort(window);
|
| -}
|
| -
|
| -void QuickDrawDrawingManager::UpdateContext() {
|
| - if (fast_path_enabled_)
|
| - CopyGWorldBits(plugin_world_, target_world_, plugin_size_);
|
| - else
|
| - ScrapeWindow(plugin_window_, target_context_, plugin_size_);
|
| -}
|
| -
|
| -bool QuickDrawDrawingManager::IsFastPathEnabled() {
|
| - return fast_path_enabled_;
|
| -}
|
| -
|
| -void QuickDrawDrawingManager::MakePortCurrent() {
|
| - if (fast_path_enabled_)
|
| - SetGWorld(current_port_, NULL);
|
| - else
|
| - SetPort(current_port_);
|
| -}
|
| -
|
| -void QuickDrawDrawingManager::DestroyGWorlds() {
|
| - if (plugin_world_) {
|
| - DisposeGWorld(plugin_world_);
|
| - plugin_world_ = NULL;
|
| - }
|
| - if (target_world_) {
|
| - DisposeGWorld(target_world_);
|
| - target_world_ = NULL;
|
| - }
|
| -}
|
| -
|
| -void QuickDrawDrawingManager::UpdateGWorlds() {
|
| - DestroyGWorlds();
|
| - if (!target_context_)
|
| - return;
|
| -
|
| - Rect window_bounds = {
|
| - 0, 0, plugin_size_.height(), plugin_size_.width()
|
| - };
|
| - // Create a GWorld pointing at the same bits as our target context.
|
| - if (target_context_) {
|
| - NewGWorldFromPtr(
|
| - &target_world_, k32BGRAPixelFormat, &window_bounds, NULL, NULL, 0,
|
| - static_cast<Ptr>(CGBitmapContextGetData(target_context_)),
|
| - static_cast<SInt32>(CGBitmapContextGetBytesPerRow(target_context_)));
|
| - }
|
| - // Create a GWorld for the plugin to paint into whenever it wants; since
|
| - // QuickDraw plugins don't draw at known times, they can't be allowed to draw
|
| - // directly into the shared memory.
|
| - NewGWorld(&plugin_world_, k32ARGBPixelFormat, &window_bounds,
|
| - NULL, NULL, kNativeEndianPixMap);
|
| - if (fast_path_enabled_)
|
| - current_port_ = plugin_world_;
|
| -}
|
| -
|
| -void QuickDrawDrawingManager::ScrapeWindow(WindowRef window,
|
| - CGContextRef target_context,
|
| - const gfx::Size& plugin_size) {
|
| - if (!target_context)
|
| - return;
|
| -
|
| - CGRect window_bounds = CGRectMake(0, 0,
|
| - plugin_size.width(),
|
| - plugin_size.height());
|
| - CGWindowID window_id = HIWindowGetCGWindowID(window);
|
| - CGContextSaveGState(target_context);
|
| - CGContextTranslateCTM(target_context, 0, plugin_size.height());
|
| - CGContextScaleCTM(target_context, 1.0, -1.0);
|
| - CGContextCopyWindowCaptureContentsToRect(target_context, window_bounds,
|
| - _CGSDefaultConnection(),
|
| - window_id, 0);
|
| - CGContextRestoreGState(target_context);
|
| -}
|
| -
|
| -void QuickDrawDrawingManager::CopyGWorldBits(GWorldPtr source, GWorldPtr dest,
|
| - const gfx::Size& plugin_size) {
|
| - if (!(source && dest))
|
| - return;
|
| -
|
| - Rect window_bounds = { 0, 0, plugin_size.height(), plugin_size.width() };
|
| - PixMapHandle source_pixmap = GetGWorldPixMap(source);
|
| - if (LockPixels(source_pixmap)) {
|
| - PixMapHandle dest_pixmap = GetGWorldPixMap(dest);
|
| - if (LockPixels(dest_pixmap)) {
|
| - SetGWorld(dest, NULL);
|
| - // Set foreground and background colors to avoid "colorizing" the image.
|
| - ForeColor(blackColor);
|
| - BackColor(whiteColor);
|
| - CopyBits(reinterpret_cast<BitMap*>(*source_pixmap),
|
| - reinterpret_cast<BitMap*>(*dest_pixmap),
|
| - &window_bounds, &window_bounds, srcCopy, NULL);
|
| - UnlockPixels(dest_pixmap);
|
| - }
|
| - UnlockPixels(source_pixmap);
|
| - }
|
| -}
|
| -
|
| -#endif // !NP_NO_QUICKDRAW
|
|
|