Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(556)

Unified Diff: skia/ext/bitmap_platform_device_linux.cc

Issue 3212009: Move BitmapPlatformDeviceData into its own header file. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: add to gyp Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « skia/ext/bitmap_platform_device_data.h ('k') | skia/ext/bitmap_platform_device_mac.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: skia/ext/bitmap_platform_device_linux.cc
diff --git a/skia/ext/bitmap_platform_device_linux.cc b/skia/ext/bitmap_platform_device_linux.cc
index 9b589de3254ffefd8cd1aa3d97d21fd2aa8a67d9..4c566b4e3bb3c17d2a56d4b5f9f8ff8385869ac5 100644
--- a/skia/ext/bitmap_platform_device_linux.cc
+++ b/skia/ext/bitmap_platform_device_linux.cc
@@ -1,9 +1,11 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// 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.
#include "skia/ext/bitmap_platform_device_linux.h"
+#include "skia/ext/bitmap_platform_device_data.h"
+
#include <cairo/cairo.h>
namespace skia {
@@ -35,72 +37,18 @@ void LoadClipToContext(cairo_t* context, const SkRegion& clip) {
} // namespace
-// -----------------------------------------------------------------------------
-// These objects are reference counted and own a Cairo surface. The surface is
-// the backing store for a Skia bitmap and we reference count it so that we can
-// copy BitmapPlatformDevice objects without having to copy all the image
-// data.
-// -----------------------------------------------------------------------------
-class BitmapPlatformDevice::BitmapPlatformDeviceData
- : public base::RefCounted<BitmapPlatformDeviceData> {
- public:
- explicit BitmapPlatformDeviceData(cairo_surface_t* surface);
-
- cairo_t* GetContext();
-
- // Sets the transform and clip operations. This will not update the Cairo
- // surface, but will mark the config as dirty. The next call of LoadConfig
- // will pick up these changes.
- void SetMatrixClip(const SkMatrix& transform, const SkRegion& region);
-
- protected:
- void LoadConfig();
-
- // The Cairo surface inside this DC.
- cairo_t* context_;
- cairo_surface_t *const surface_;
-
- // True when there is a transform or clip that has not been set to the
- // surface. The surface is retrieved for every text operation, and the
- // transform and clip do not change as much. We can save time by not loading
- // the clip and transform for every one.
- bool config_dirty_;
-
- // Translation assigned to the DC: we need to keep track of this separately
- // so it can be updated even if the DC isn't created yet.
- SkMatrix transform_;
-
- // The current clipping
- SkRegion clip_region_;
-
- // Disallow copy & assign.
- BitmapPlatformDeviceData(const BitmapPlatformDeviceData&);
- BitmapPlatformDeviceData& operator=(
- const BitmapPlatformDeviceData&);
-
- private:
- friend class base::RefCounted<BitmapPlatformDeviceData>;
-
- ~BitmapPlatformDeviceData();
-};
-
BitmapPlatformDevice::BitmapPlatformDeviceData::BitmapPlatformDeviceData(
cairo_surface_t* surface)
: surface_(surface),
config_dirty_(true) { // Want to load the config next time.
- context_ = cairo_create(surface);
+ bitmap_context_ = cairo_create(surface);
}
BitmapPlatformDevice::BitmapPlatformDeviceData::~BitmapPlatformDeviceData() {
- cairo_destroy(context_);
+ cairo_destroy(bitmap_context_);
cairo_surface_destroy(surface_);
}
-cairo_t* BitmapPlatformDevice::BitmapPlatformDeviceData::GetContext() {
- LoadConfig();
- return context_;
-}
-
void BitmapPlatformDevice::BitmapPlatformDeviceData::SetMatrixClip(
const SkMatrix& transform,
const SkRegion& region) {
@@ -110,17 +58,17 @@ void BitmapPlatformDevice::BitmapPlatformDeviceData::SetMatrixClip(
}
void BitmapPlatformDevice::BitmapPlatformDeviceData::LoadConfig() {
- if (!config_dirty_ || !context_)
+ if (!config_dirty_ || !bitmap_context_)
return; // Nothing to do.
config_dirty_ = false;
// Load the identity matrix since this is what our clip is relative to.
cairo_matrix_t cairo_matrix;
cairo_matrix_init_identity(&cairo_matrix);
- cairo_set_matrix(context_, &cairo_matrix);
+ cairo_set_matrix(bitmap_context_, &cairo_matrix);
- LoadClipToContext(context_, clip_region_);
- LoadMatrixToContext(context_, transform_);
+ LoadClipToContext(bitmap_context_, clip_region_);
+ LoadMatrixToContext(bitmap_context_, transform_);
}
// We use this static factory function instead of the regular constructor so
@@ -187,7 +135,8 @@ BitmapPlatformDevice::~BitmapPlatformDevice() {
}
cairo_t* BitmapPlatformDevice::beginPlatformPaint() {
- cairo_t* cairo = data_->GetContext();
+ data_->LoadConfig();
+ cairo_t* cairo = data_->bitmap_context();
// Tell Cairo that we've (probably) modified its pixel buffer without
// its knowledge.
cairo_surface_mark_dirty(cairo_get_target(cairo));
« no previous file with comments | « skia/ext/bitmap_platform_device_data.h ('k') | skia/ext/bitmap_platform_device_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698