| Index: ui/gfx/gtk_util.cc
|
| diff --git a/ui/gfx/gtk_util.cc b/ui/gfx/gtk_util.cc
|
| deleted file mode 100644
|
| index 0c1116875723d567b9d380b7f5912327680cb22f..0000000000000000000000000000000000000000
|
| --- a/ui/gfx/gtk_util.cc
|
| +++ /dev/null
|
| @@ -1,190 +0,0 @@
|
| -// Copyright (c) 2012 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 "ui/gfx/gtk_util.h"
|
| -
|
| -#include <gdk/gdk.h>
|
| -#include <gtk/gtk.h>
|
| -#include <stdlib.h>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/command_line.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "third_party/skia/include/core/SkBitmap.h"
|
| -#include "third_party/skia/include/core/SkUnPreMultiply.h"
|
| -#include "ui/gfx/rect.h"
|
| -
|
| -namespace {
|
| -
|
| -// A process wide singleton that manages our usage of gdk cursors.
|
| -// gdk_cursor_new() hits the disk in several places and GdkCursor instances can
|
| -// be reused throughout the process.
|
| -class GdkCursorCache {
|
| - public:
|
| - GdkCursorCache() {}
|
| - ~GdkCursorCache() {
|
| - for (GdkCursorMap::iterator i(cursors_.begin()); i != cursors_.end(); ++i) {
|
| - gdk_cursor_unref(i->second);
|
| - }
|
| - cursors_.clear();
|
| - }
|
| -
|
| - GdkCursor* GetCursorImpl(GdkCursorType type) {
|
| - GdkCursorMap::iterator it = cursors_.find(type);
|
| - GdkCursor* cursor = NULL;
|
| - if (it == cursors_.end()) {
|
| - cursor = gdk_cursor_new(type);
|
| - cursors_.insert(std::make_pair(type, cursor));
|
| - } else {
|
| - cursor = it->second;
|
| - }
|
| -
|
| - // It is not necessary to add a reference here. The callers can ref the
|
| - // cursor if they need it for something.
|
| - return cursor;
|
| - }
|
| -
|
| - private:
|
| - typedef std::map<GdkCursorType, GdkCursor*> GdkCursorMap;
|
| - GdkCursorMap cursors_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(GdkCursorCache);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -namespace gfx {
|
| -
|
| -static void CommonInitFromCommandLine(const CommandLine& command_line,
|
| - void (*init_func)(gint*, gchar***)) {
|
| - const std::vector<std::string>& args = command_line.argv();
|
| - int argc = args.size();
|
| - scoped_ptr<char *[]> argv(new char *[argc + 1]);
|
| - for (size_t i = 0; i < args.size(); ++i) {
|
| - // TODO(piman@google.com): can gtk_init modify argv? Just being safe
|
| - // here.
|
| - argv[i] = strdup(args[i].c_str());
|
| - }
|
| - argv[argc] = NULL;
|
| - char **argv_pointer = argv.get();
|
| -
|
| - init_func(&argc, &argv_pointer);
|
| - for (size_t i = 0; i < args.size(); ++i) {
|
| - free(argv[i]);
|
| - }
|
| -}
|
| -
|
| -void GtkInitFromCommandLine(const CommandLine& command_line) {
|
| - CommonInitFromCommandLine(command_line, gtk_init);
|
| -}
|
| -
|
| -void GdkInitFromCommandLine(const CommandLine& command_line) {
|
| - CommonInitFromCommandLine(command_line, gdk_init);
|
| -}
|
| -
|
| -GdkPixbuf* GdkPixbufFromSkBitmap(const SkBitmap& bitmap) {
|
| - if (bitmap.isNull())
|
| - return NULL;
|
| -
|
| - SkAutoLockPixels lock_pixels(bitmap);
|
| -
|
| - int width = bitmap.width();
|
| - int height = bitmap.height();
|
| -
|
| - GdkPixbuf* pixbuf = gdk_pixbuf_new(
|
| - GDK_COLORSPACE_RGB, // The only colorspace gtk supports.
|
| - TRUE, // There is an alpha channel.
|
| - 8,
|
| - width, height);
|
| -
|
| - // SkBitmaps are premultiplied, we need to unpremultiply them.
|
| - const int kBytesPerPixel = 4;
|
| - uint8* divided = gdk_pixbuf_get_pixels(pixbuf);
|
| -
|
| - 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;
|
| - }
|
| - }
|
| -
|
| - 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);
|
| - }
|
| -}
|
| -
|
| -GdkCursor* GetCursor(int type) {
|
| - CR_DEFINE_STATIC_LOCAL(GdkCursorCache, impl, ());
|
| - return impl.GetCursorImpl(static_cast<GdkCursorType>(type));
|
| -}
|
| -
|
| -void InitRCStyles() {
|
| - static const char kRCText[] =
|
| - // Make our dialogs styled like the GNOME HIG.
|
| - //
|
| - // TODO(evanm): content-area-spacing was introduced in a later
|
| - // version of GTK, so we need to set that manually on all dialogs.
|
| - // Perhaps it would make sense to have a shared FixupDialog() function.
|
| - "style \"gnome-dialog\" {\n"
|
| - " xthickness = 12\n"
|
| - " GtkDialog::action-area-border = 0\n"
|
| - " GtkDialog::button-spacing = 6\n"
|
| - " GtkDialog::content-area-spacing = 18\n"
|
| - " GtkDialog::content-area-border = 12\n"
|
| - "}\n"
|
| - // Note we set it at the "application" priority, so users can override.
|
| - "widget \"GtkDialog\" style : application \"gnome-dialog\"\n"
|
| -
|
| - // Make our about dialog special, so the image is flush with the edge.
|
| - "style \"about-dialog\" {\n"
|
| - " GtkDialog::action-area-border = 12\n"
|
| - " GtkDialog::button-spacing = 6\n"
|
| - " GtkDialog::content-area-spacing = 18\n"
|
| - " GtkDialog::content-area-border = 0\n"
|
| - "}\n"
|
| - "widget \"about-dialog\" style : application \"about-dialog\"\n";
|
| -
|
| - gtk_rc_parse_string(kRCText);
|
| -}
|
| -
|
| -base::TimeDelta GetCursorBlinkCycle() {
|
| - // From http://library.gnome.org/devel/gtk/unstable/GtkSettings.html, this is
|
| - // the default value for gtk-cursor-blink-time.
|
| - static const gint kGtkDefaultCursorBlinkTime = 1200;
|
| -
|
| - gint cursor_blink_time = kGtkDefaultCursorBlinkTime;
|
| - gboolean cursor_blink = TRUE;
|
| - g_object_get(gtk_settings_get_default(),
|
| - "gtk-cursor-blink-time", &cursor_blink_time,
|
| - "gtk-cursor-blink", &cursor_blink,
|
| - NULL);
|
| - return cursor_blink ?
|
| - base::TimeDelta::FromMilliseconds(cursor_blink_time) :
|
| - base::TimeDelta();
|
| -}
|
| -
|
| -} // namespace gfx
|
|
|