Index: base/gfx/gtk_util.cc |
=================================================================== |
--- base/gfx/gtk_util.cc (revision 28001) |
+++ base/gfx/gtk_util.cc (working copy) |
@@ -1,86 +0,0 @@ |
-// Copyright (c) 2009 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 "base/gfx/gtk_util.h" |
- |
-#include <gdk/gdk.h> |
-#include <gtk/gtk.h> |
-#include <stdlib.h> |
- |
-#include "base/basictypes.h" |
-#include "base/gfx/rect.h" |
-#include "base/linux_util.h" |
-#include "third_party/skia/include/core/SkBitmap.h" |
-#include "third_party/skia/include/core/SkUnPreMultiply.h" |
- |
-namespace { |
- |
-void FreePixels(guchar* pixels, gpointer data) { |
- free(data); |
-} |
- |
-} // namespace |
- |
-namespace gfx { |
- |
-const GdkColor kGdkWhite = GDK_COLOR_RGB(0xff, 0xff, 0xff); |
-const GdkColor kGdkBlack = GDK_COLOR_RGB(0x00, 0x00, 0x00); |
-const GdkColor kGdkGreen = GDK_COLOR_RGB(0x00, 0xff, 0x00); |
- |
-GdkPixbuf* GdkPixbufFromSkBitmap(const SkBitmap* bitmap) { |
- bitmap->lockPixels(); |
- int width = bitmap->width(); |
- int height = bitmap->height(); |
- int stride = bitmap->rowBytes(); |
- |
- // SkBitmaps are premultiplied, we need to unpremultiply them. |
- const int kBytesPerPixel = 4; |
- uint8* divided = static_cast<uint8*>(malloc(height * stride)); |
- |
- for (int y = 0, i = 0; y < height; y++) { |
- for (int x = 0; x < width; x++) { |
- uint32 pixel = bitmap->getAddr32(0, y)[x]; |
- |
- int alpha = SkColorGetA(pixel); |
- if (alpha != 0 && alpha != 255) { |
- SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(pixel); |
- divided[i + 0] = SkColorGetR(unmultiplied); |
- divided[i + 1] = SkColorGetG(unmultiplied); |
- divided[i + 2] = SkColorGetB(unmultiplied); |
- divided[i + 3] = alpha; |
- } else { |
- divided[i + 0] = SkColorGetR(pixel); |
- divided[i + 1] = SkColorGetG(pixel); |
- divided[i + 2] = SkColorGetB(pixel); |
- divided[i + 3] = alpha; |
- } |
- i += kBytesPerPixel; |
- } |
- } |
- |
- // This pixbuf takes ownership of our malloc()ed data and will |
- // free it for us when it is destroyed. |
- GdkPixbuf* pixbuf = gdk_pixbuf_new_from_data( |
- divided, |
- GDK_COLORSPACE_RGB, // The only colorspace gtk supports. |
- true, // There is an alpha channel. |
- 8, |
- width, height, stride, &FreePixels, divided); |
- |
- bitmap->unlockPixels(); |
- return pixbuf; |
-} |
- |
-void SubtractRectanglesFromRegion(GdkRegion* region, |
- const std::vector<Rect>& cutouts) { |
- for (size_t i = 0; i < cutouts.size(); ++i) { |
- GdkRectangle rect = cutouts[i].ToGdkRectangle(); |
- GdkRegion* rect_region = gdk_region_rectangle(&rect); |
- gdk_region_subtract(region, rect_region); |
- // TODO(deanm): It would be nice to be able to reuse the GdkRegion here. |
- gdk_region_destroy(rect_region); |
- } |
-} |
- |
-} // namespace gfx |