OLD | NEW |
| (Empty) |
1 // Copyright (c) 2009 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 BASE_GFX_GTK_UTIL_H_ | |
6 #define BASE_GFX_GTK_UTIL_H_ | |
7 | |
8 #include <stdint.h> | |
9 #include <vector> | |
10 | |
11 #include <glib-object.h> | |
12 | |
13 #include "base/scoped_ptr.h" | |
14 | |
15 typedef struct _GdkColor GdkColor; | |
16 typedef struct _GdkPixbuf GdkPixbuf; | |
17 typedef struct _GdkRegion GdkRegion; | |
18 | |
19 class SkBitmap; | |
20 | |
21 const int kSkiaToGDKMultiplier = 257; | |
22 | |
23 // Define a macro for creating GdkColors from RGB values. This is a macro to | |
24 // allow static construction of literals, etc. Use this like: | |
25 // GdkColor white = GDK_COLOR_RGB(0xff, 0xff, 0xff); | |
26 #define GDK_COLOR_RGB(r, g, b) {0, r * kSkiaToGDKMultiplier, \ | |
27 g * kSkiaToGDKMultiplier, b * kSkiaToGDKMultiplier} | |
28 | |
29 namespace gfx { | |
30 | |
31 class Rect; | |
32 | |
33 extern const GdkColor kGdkWhite; | |
34 extern const GdkColor kGdkBlack; | |
35 extern const GdkColor kGdkGreen; | |
36 | |
37 // Convert and copy a SkBitmap to a GdkPixbuf. NOTE: this uses BGRAToRGBA, so | |
38 // it is an expensive operation. | |
39 GdkPixbuf* GdkPixbufFromSkBitmap(const SkBitmap* bitmap); | |
40 | |
41 // Modify the given region by subtracting the given rectangles. | |
42 void SubtractRectanglesFromRegion(GdkRegion* region, | |
43 const std::vector<Rect>& cutouts); | |
44 | |
45 } // namespace gfx | |
46 | |
47 namespace { | |
48 // A helper class that will g_object_unref |p| when it goes out of scope. | |
49 // This never adds a ref, it only unrefs. | |
50 template <typename Type> | |
51 struct GObjectUnrefer { | |
52 void operator()(Type* ptr) const { | |
53 if (ptr) | |
54 g_object_unref(ptr); | |
55 } | |
56 }; | |
57 } // namespace | |
58 | |
59 // It's not legal C++ to have a templatized typedefs, so we wrap it in a | |
60 // struct. When using this, you need to include ::Type. E.g., | |
61 // ScopedGObject<GdkPixbufLoader>::Type loader(gdk_pixbuf_loader_new()); | |
62 template<class T> | |
63 struct ScopedGObject { | |
64 typedef scoped_ptr_malloc<T, GObjectUnrefer<T> > Type; | |
65 }; | |
66 | |
67 #endif // BASE_GFX_GTK_UTIL_H_ | |
OLD | NEW |