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

Unified Diff: skia/ext/bitmap_platform_device_win.cc

Issue 14903: Reverting 7318. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years 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_win.h ('k') | skia/ext/platform_canvas_win.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: skia/ext/bitmap_platform_device_win.cc
===================================================================
--- skia/ext/bitmap_platform_device_win.cc (revision 7318)
+++ skia/ext/bitmap_platform_device_win.cc (working copy)
@@ -4,9 +4,8 @@
#include "skia/ext/bitmap_platform_device_win.h"
-#include "base/gfx/gdi_util.h"
-#include "base/logging.h"
#include "SkMatrix.h"
+#include "SkRefCnt.h"
#include "SkRegion.h"
#include "SkUtils.h"
@@ -100,8 +99,7 @@
} // namespace
-class BitmapPlatformDeviceWin::BitmapPlatformDeviceWinData
- : public base::RefCounted<BitmapPlatformDeviceWinData> {
+class BitmapPlatformDeviceWin::BitmapPlatformDeviceWinData : public SkRefCnt {
public:
explicit BitmapPlatformDeviceWinData(HBITMAP hbitmap);
@@ -144,10 +142,11 @@
SkRegion clip_region_;
private:
- friend class base::RefCounted<BitmapPlatformDeviceWinData>;
- ~BitmapPlatformDeviceWinData();
+ virtual ~BitmapPlatformDeviceWinData();
- DISALLOW_EVIL_CONSTRUCTORS(BitmapPlatformDeviceWinData);
+ // Copy & assign are not supported.
+ BitmapPlatformDeviceWinData(const BitmapPlatformDeviceWinData&);
+ BitmapPlatformDeviceWinData& operator=(const BitmapPlatformDeviceWinData&);
};
BitmapPlatformDeviceWin::BitmapPlatformDeviceWinData::BitmapPlatformDeviceWinData(
@@ -190,7 +189,7 @@
}
void BitmapPlatformDeviceWin::BitmapPlatformDeviceWinData::ReleaseBitmapDC() {
- DCHECK(hdc_);
+ SkASSERT(hdc_);
DeleteDC(hdc_);
hdc_ = NULL;
}
@@ -227,11 +226,12 @@
// that we can create the pixel data before calling the constructor. This is
// required so that we can call the base class' constructor with the pixel
// data.
-BitmapPlatformDeviceWin* BitmapPlatformDeviceWin::create(HDC screen_dc,
- int width,
- int height,
- bool is_opaque,
- HANDLE shared_section) {
+BitmapPlatformDeviceWin* BitmapPlatformDeviceWin::create(
+ HDC screen_dc,
+ int width,
+ int height,
+ bool is_opaque,
+ HANDLE shared_section) {
SkBitmap bitmap;
// CreateDIBSection appears to get unhappy if we create an empty bitmap, so
@@ -242,7 +242,17 @@
}
BITMAPINFOHEADER hdr = {0};
- gfx::CreateBitmapHeader(width, height, &hdr);
+ hdr.biSize = sizeof(BITMAPINFOHEADER);
+ hdr.biWidth = width;
+ hdr.biHeight = -height; // minus means top-down bitmap
+ hdr.biPlanes = 1;
+ hdr.biBitCount = 32;
+ hdr.biCompression = BI_RGB; // no compression
+ hdr.biSizeImage = 0;
+ hdr.biXPelsPerMeter = 1;
+ hdr.biYPelsPerMeter = 1;
+ hdr.biClrUsed = 0;
+ hdr.biClrImportant = 0;
void* data = NULL;
HBITMAP hbitmap = CreateDIBSection(screen_dc,
@@ -256,7 +266,6 @@
// we deliberately crash here, even in release mode.
if (!hbitmap) {
DWORD error = GetLastError();
- LOG(ERROR) << "CreateDIBSection Failed. Error: " << error << "\n";
return NULL;
}
@@ -277,7 +286,8 @@
width * height);
}
- // The device object will take ownership of the HBITMAP.
+ // The device object will take ownership of the HBITMAP. The initial refcount
+ // of the data object will be 1, which is what the constructor expects.
return new BitmapPlatformDeviceWin(new BitmapPlatformDeviceWinData(hbitmap),
bitmap);
}
@@ -286,7 +296,10 @@
// data. Therefore, we do not transfer ownership to the SkDevice's bitmap.
BitmapPlatformDeviceWin::BitmapPlatformDeviceWin(
BitmapPlatformDeviceWinData* data,
- const SkBitmap& bitmap) : PlatformDeviceWin(bitmap), data_(data) {
+ const SkBitmap& bitmap)
+ : PlatformDeviceWin(bitmap),
+ data_(data) {
+ // The data object is already ref'ed for us by create().
}
// The copy constructor just adds another reference to the underlying data.
@@ -297,14 +310,17 @@
: PlatformDeviceWin(
const_cast<BitmapPlatformDeviceWin&>(other).accessBitmap(true)),
data_(other.data_) {
+ data_->ref();
}
BitmapPlatformDeviceWin::~BitmapPlatformDeviceWin() {
+ data_->unref();
}
BitmapPlatformDeviceWin& BitmapPlatformDeviceWin::operator=(
const BitmapPlatformDeviceWin& other) {
data_ = other.data_;
+ data_->ref();
return *this;
}
@@ -313,12 +329,12 @@
}
void BitmapPlatformDeviceWin::setMatrixClip(const SkMatrix& transform,
- const SkRegion& region) {
+ const SkRegion& region) {
data_->SetMatrixClip(transform, region);
}
void BitmapPlatformDeviceWin::drawToHDC(HDC dc, int x, int y,
- const RECT* src_rect) {
+ const RECT* src_rect) {
bool created_dc = !data_->IsBitmapDCCreated();
HDC source_dc = getBitmapDC();
@@ -351,7 +367,7 @@
src_rect->top,
SRCCOPY);
} else {
- DCHECK(copy_width != 0 && copy_height != 0);
+ SkASSERT(copy_width != 0 && copy_height != 0);
BLENDFUNCTION blend_function = {AC_SRC_OVER, 0, 255, AC_SRC_ALPHA};
GdiAlphaBlend(dc,
x,
@@ -416,11 +432,11 @@
template<BitmapPlatformDeviceWin::adjustAlpha adjustor>
void BitmapPlatformDeviceWin::processPixels(int x,
- int y,
- int width,
- int height) {
+ int y,
+ int width,
+ int height) {
const SkBitmap& bitmap = accessBitmap(true);
- DCHECK_EQ(bitmap.config(), SkBitmap::kARGB_8888_Config);
+ SkASSERT(bitmap.config() == SkBitmap::kARGB_8888_Config);
const SkMatrix& matrix = data_->transform();
int bitmap_start_x = SkScalarRound(matrix.getTranslateX()) + x;
int bitmap_start_y = SkScalarRound(matrix.getTranslateY()) + y;
@@ -428,7 +444,7 @@
if (Constrain(bitmap.width(), &bitmap_start_x, &width) &&
Constrain(bitmap.height(), &bitmap_start_y, &height)) {
SkAutoLockPixels lock(bitmap);
- DCHECK_EQ(bitmap.rowBytes() % sizeof(uint32_t), 0u);
+ SkASSERT(bitmap.rowBytes() % sizeof(uint32_t) == 0u);
size_t row_words = bitmap.rowBytes() / sizeof(uint32_t);
// Set data to the first pixel to be modified.
uint32_t* data = bitmap.getAddr32(0, 0) + (bitmap_start_y * row_words) +
« no previous file with comments | « skia/ext/bitmap_platform_device_win.h ('k') | skia/ext/platform_canvas_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698