diff options
author | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-16 18:19:17 +0000 |
---|---|---|
committer | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-16 18:19:17 +0000 |
commit | 2b2d1697cd3cd6303b372949565bb8ac87741589 (patch) | |
tree | 2c4ca63f7e4854c1be423d74896ec71d4c80a858 /chrome/common | |
parent | 54e1d52455272e0af32b4c6080f1914f6f2c4f95 (diff) | |
download | chromium_src-2b2d1697cd3cd6303b372949565bb8ac87741589.zip chromium_src-2b2d1697cd3cd6303b372949565bb8ac87741589.tar.gz chromium_src-2b2d1697cd3cd6303b372949565bb8ac87741589.tar.bz2 |
Recommit previous change with GYP files fixed.
Implement BookmarkContextMenuGtk and hook it up to most bookmark bar elements.
Also:
- Fixes window dispositions (shift-click works on bookmark bar items).
- Reorganizes gtk_utils
Original Review URL: http://codereview.chromium.org/76002
Review URL: http://codereview.chromium.org/67223
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13857 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common')
-rw-r--r-- | chrome/common/gtk_util.cc | 81 | ||||
-rw-r--r-- | chrome/common/gtk_util.h | 41 | ||||
-rw-r--r-- | chrome/common/resource_bundle_linux.cc | 1 |
3 files changed, 123 insertions, 0 deletions
diff --git a/chrome/common/gtk_util.cc b/chrome/common/gtk_util.cc new file mode 100644 index 0000000..0576c0c --- /dev/null +++ b/chrome/common/gtk_util.cc @@ -0,0 +1,81 @@ +// 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 "chrome/common/gtk_util.h" + +#include <gtk/gtk.h> + +#include "base/gfx/gtk_util.h" +#include "skia/include/SkBitmap.h" + +namespace { + +// Callback used in RemoveAllChildren. +void RemoveWidget(GtkWidget* widget, gpointer container) { + gtk_container_remove(GTK_CONTAINER(container), widget); +} + +void FreePixels(guchar* pixels, gpointer data) { + free(data); +} + +} // namespace + +namespace event_utils { + +WindowOpenDisposition DispositionFromEventFlags(guint event_flags) { + if ((event_flags & GDK_BUTTON2_MASK) || (event_flags & GDK_CONTROL_MASK)) { + return (event_flags & GDK_SHIFT_MASK) ? + NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB; + } + + if (event_flags & GDK_SHIFT_MASK) + return NEW_WINDOW; + return false /*event.IsAltDown()*/ ? SAVE_TO_DISK : CURRENT_TAB; +} + +} // namespace event_utils + +namespace gfx { + +GdkPixbuf* GdkPixbufFromSkBitmap(const SkBitmap* bitmap) { + bitmap->lockPixels(); + int width = bitmap->width(); + int height = bitmap->height(); + int stride = bitmap->rowBytes(); + const guchar* orig_data = static_cast<guchar*>(bitmap->getPixels()); + guchar* data = BGRAToRGBA(orig_data, width, height, stride); + + // 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( + data, + GDK_COLORSPACE_RGB, // The only colorspace gtk supports. + true, // There is an alpha channel. + 8, + width, height, stride, &FreePixels, data); + + bitmap->unlockPixels(); + return pixbuf; +} + +GtkWidget* CreateGtkBorderBin(GtkWidget* child, const GdkColor* color, + int top, int bottom, int left, int right) { + // Use a GtkEventBox to get the background painted. However, we can't just + // use a container border, since it won't paint there. Use an alignment + // inside to get the sizes exactly of how we want the border painted. + GtkWidget* ebox = gtk_event_box_new(); + gtk_widget_modify_bg(ebox, GTK_STATE_NORMAL, color); + GtkWidget* alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); + gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), top, bottom, left, right); + gtk_container_add(GTK_CONTAINER(alignment), child); + gtk_container_add(GTK_CONTAINER(ebox), alignment); + return ebox; +} + +void RemoveAllChildren(GtkWidget* container) { + gtk_container_foreach(GTK_CONTAINER(container), RemoveWidget, container); +} + +} // namespace gfx diff --git a/chrome/common/gtk_util.h b/chrome/common/gtk_util.h new file mode 100644 index 0000000..ff3dc5c --- /dev/null +++ b/chrome/common/gtk_util.h @@ -0,0 +1,41 @@ +// 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. + +#ifndef CHROME_COMMON_GTK_UTIL_H_ +#define CHROME_COMMON_GTK_UTIL_H_ + +#include <gtk/gtk.h> + +#include "webkit/glue/window_open_disposition.h" + +typedef struct _GdkPixbuf GdkPixbuf; +typedef struct _GtkWidget GtkWidget; +class SkBitmap; + +namespace event_utils { + +// Translates event flags into what kind of disposition they represent. +// For example, a middle click would mean to open a background tab. +// event_flags are the state in the GdkEvent structure. +WindowOpenDisposition DispositionFromEventFlags(guint state); + +} // namespace event_utils + +namespace gfx { + +// Convert and copy a SkBitmap to a GdkPixbuf. NOTE: this uses BGRAToRGBA, so +// it is an expensive operation. +GdkPixbuf* GdkPixbufFromSkBitmap(const SkBitmap* bitmap); + +// Create a GtkBin with |child| as its child widget. This bin will paint a +// border of color |color| with the sizes specified in pixels. +GtkWidget* CreateGtkBorderBin(GtkWidget* child, const GdkColor* color, + int top, int bottom, int left, int right); + +// Remove all children from this container. +void RemoveAllChildren(GtkWidget* container); + +} // namespace gfx + +#endif // CHROME_COMMON_GTK_UTIL_H_ diff --git a/chrome/common/resource_bundle_linux.cc b/chrome/common/resource_bundle_linux.cc index 57cce50..2fe2a31 100644 --- a/chrome/common/resource_bundle_linux.cc +++ b/chrome/common/resource_bundle_linux.cc @@ -19,6 +19,7 @@ #include "base/string_util.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/gfx/chrome_font.h" +#include "chrome/common/gtk_util.h" #include "chrome/common/l10n_util.h" #include "SkBitmap.h" |