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

Side by Side Diff: chrome/browser/ui/libgtkui/skia_utils_gtk.cc

Issue 2453243002: Gtk3 UI: Rename files in libgtkui containing gtk2 in their name (Closed)
Patch Set: Fix git cl format mistake Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/libgtkui/skia_utils_gtk2.h" 5 #include "chrome/browser/ui/libgtkui/skia_utils_gtk.h"
6 6
7 #include <gdk/gdk.h> 7 #include <gdk/gdk.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "third_party/skia/include/core/SkBitmap.h" 10 #include "third_party/skia/include/core/SkBitmap.h"
11 #include "third_party/skia/include/core/SkUnPreMultiply.h" 11 #include "third_party/skia/include/core/SkUnPreMultiply.h"
12 12
13 namespace libgtkui { 13 namespace libgtkui {
14 14
15 // GDK_COLOR_RGB multiplies by 257 (= 0x10001) to distribute the bits evenly 15 // GDK_COLOR_RGB multiplies by 257 (= 0x10001) to distribute the bits evenly
16 // See: http://www.mindcontrol.org/~hplus/graphics/expand-bits.html 16 // See: http://www.mindcontrol.org/~hplus/graphics/expand-bits.html
17 // To get back, we can just right shift by eight 17 // To get back, we can just right shift by eight
18 // (or, formulated differently, i == (i*257)/256 for all i < 256). 18 // (or, formulated differently, i == (i*257)/256 for all i < 256).
19 19
20 SkColor GdkColorToSkColor(GdkColor color) { 20 SkColor GdkColorToSkColor(GdkColor color) {
21 return SkColorSetRGB(color.red >> 8, color.green >> 8, color.blue >> 8); 21 return SkColorSetRGB(color.red >> 8, color.green >> 8, color.blue >> 8);
22 } 22 }
23 23
24 GdkColor SkColorToGdkColor(SkColor color) { 24 GdkColor SkColorToGdkColor(SkColor color) {
25 GdkColor gdk_color = { 25 GdkColor gdk_color = {
26 0, 26 0, static_cast<guint16>(SkColorGetR(color) * kSkiaToGDKMultiplier),
27 static_cast<guint16>(SkColorGetR(color) * kSkiaToGDKMultiplier),
28 static_cast<guint16>(SkColorGetG(color) * kSkiaToGDKMultiplier), 27 static_cast<guint16>(SkColorGetG(color) * kSkiaToGDKMultiplier),
29 static_cast<guint16>(SkColorGetB(color) * kSkiaToGDKMultiplier) 28 static_cast<guint16>(SkColorGetB(color) * kSkiaToGDKMultiplier)};
30 };
31 return gdk_color; 29 return gdk_color;
32 } 30 }
33 31
34 const SkBitmap GdkPixbufToImageSkia(GdkPixbuf* pixbuf) { 32 const SkBitmap GdkPixbufToImageSkia(GdkPixbuf* pixbuf) {
35 // TODO(erg): What do we do in the case where the pixbuf fails these dchecks? 33 // TODO(erg): What do we do in the case where the pixbuf fails these dchecks?
36 // I would prefer to use our gtk based canvas, but that would require 34 // I would prefer to use our gtk based canvas, but that would require
37 // recompiling half of our skia extensions with gtk support, which we can't 35 // recompiling half of our skia extensions with gtk support, which we can't
38 // do in this build. 36 // do in this build.
39 DCHECK_EQ(GDK_COLORSPACE_RGB, gdk_pixbuf_get_colorspace(pixbuf)); 37 DCHECK_EQ(GDK_COLORSPACE_RGB, gdk_pixbuf_get_colorspace(pixbuf));
40 38
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 return NULL; 89 return NULL;
92 90
93 SkAutoLockPixels lock_pixels(bitmap); 91 SkAutoLockPixels lock_pixels(bitmap);
94 92
95 int width = bitmap.width(); 93 int width = bitmap.width();
96 int height = bitmap.height(); 94 int height = bitmap.height();
97 95
98 GdkPixbuf* pixbuf = 96 GdkPixbuf* pixbuf =
99 gdk_pixbuf_new(GDK_COLORSPACE_RGB, // The only colorspace gtk supports. 97 gdk_pixbuf_new(GDK_COLORSPACE_RGB, // The only colorspace gtk supports.
100 TRUE, // There is an alpha channel. 98 TRUE, // There is an alpha channel.
101 8, 99 8, width, height);
102 width,
103 height);
104 100
105 // SkBitmaps are premultiplied, we need to unpremultiply them. 101 // SkBitmaps are premultiplied, we need to unpremultiply them.
106 const int kBytesPerPixel = 4; 102 const int kBytesPerPixel = 4;
107 uint8_t* divided = gdk_pixbuf_get_pixels(pixbuf); 103 uint8_t* divided = gdk_pixbuf_get_pixels(pixbuf);
108 104
109 for (int y = 0, i = 0; y < height; y++) { 105 for (int y = 0, i = 0; y < height; y++) {
110 for (int x = 0; x < width; x++) { 106 for (int x = 0; x < width; x++) {
111 uint32_t pixel = bitmap.getAddr32(0, y)[x]; 107 uint32_t pixel = bitmap.getAddr32(0, y)[x];
112 108
113 int alpha = SkColorGetA(pixel); 109 int alpha = SkColorGetA(pixel);
(...skipping 10 matching lines...) Expand all
124 divided[i + 3] = alpha; 120 divided[i + 3] = alpha;
125 } 121 }
126 i += kBytesPerPixel; 122 i += kBytesPerPixel;
127 } 123 }
128 } 124 }
129 125
130 return pixbuf; 126 return pixbuf;
131 } 127 }
132 128
133 } // namespace libgtkui 129 } // namespace libgtkui
OLDNEW
« no previous file with comments | « chrome/browser/ui/libgtkui/skia_utils_gtk.h ('k') | chrome/browser/ui/libgtkui/skia_utils_gtk2.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698