diff options
author | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-28 20:29:41 +0000 |
---|---|---|
committer | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-28 20:29:41 +0000 |
commit | 02c85d999829634b21c4471246472e2353871df3 (patch) | |
tree | 8ff4658a04eb7130f5349e4c4876396137baa5da /views/widget/tooltip_window_gtk.cc | |
parent | 7deb23418d378a37d36a795b6a5438adfc66fa22 (diff) | |
download | chromium_src-02c85d999829634b21c4471246472e2353871df3.zip chromium_src-02c85d999829634b21c4471246472e2353871df3.tar.gz chromium_src-02c85d999829634b21c4471246472e2353871df3.tar.bz2 |
Use customized RGBA-enabled tooltip window for tooltip on ChroemOS
- Add a TooltipWindowGtk which uses RGBA colormap and has a label;
- Use TooltipWindowGtk for tooltip for both WidgetGtk and
RenderWidgetHostViewGtk
After this change, we will get back shadow and rounded corner for tooltip
in theme engine.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/1708015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45854 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/widget/tooltip_window_gtk.cc')
-rw-r--r-- | views/widget/tooltip_window_gtk.cc | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/views/widget/tooltip_window_gtk.cc b/views/widget/tooltip_window_gtk.cc new file mode 100644 index 0000000..e76338c --- /dev/null +++ b/views/widget/tooltip_window_gtk.cc @@ -0,0 +1,94 @@ +// Copyright (c) 2010 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 "views/widget/tooltip_window_gtk.h" + +#include "base/utf_string_conversions.h" + +namespace views { + +TooltipWindowGtk::TooltipWindowGtk(GtkWidget* widget) + : host_(widget), + window_(NULL), + alignment_(NULL), + label_(NULL) { + Init(); +} + +TooltipWindowGtk::~TooltipWindowGtk() { + if (window_) + gtk_widget_destroy(window_); +} + +void TooltipWindowGtk::SetTooltipText(const std::wstring& text) { + const std::string& utf8 = WideToUTF8(text); + + gtk_label_set_text(label(), utf8.c_str()); + // Setting the text in a label doesn't force recalculating wrap position. + // We force recalculating wrap position by resetting the max width. + gtk_label_set_max_width_chars(label(), 2999); + gtk_label_set_max_width_chars(label(), 3000); +} + +void TooltipWindowGtk::Init() { + // Creates and setup tooltip window. + window_ = gtk_window_new(GTK_WINDOW_POPUP); + gtk_window_set_type_hint(GTK_WINDOW(window_), GDK_WINDOW_TYPE_HINT_TOOLTIP); + gtk_widget_set_app_paintable(window_, TRUE); + gtk_window_set_resizable(GTK_WINDOW(window_), FALSE); + gtk_widget_set_name(window_, "gtk-tooltip"); + + GdkColormap* rgba_colormap = + gdk_screen_get_rgba_colormap(gdk_screen_get_default()); + if (rgba_colormap) + gtk_widget_set_colormap(window_, rgba_colormap); + + g_signal_connect(G_OBJECT(window_), "expose-event", + G_CALLBACK(&OnPaintThunk), this); + g_signal_connect(G_OBJECT(window_), "style-set", + G_CALLBACK(&OnStyleSetThunk), this); + + alignment_ = gtk_alignment_new(0.5, 0.5, 1.0, 1.0); + gtk_container_add(GTK_CONTAINER(window_), alignment_); + gtk_widget_show(alignment_); + + label_ = gtk_label_new(""); + gtk_label_set_line_wrap(GTK_LABEL(label_), TRUE); + gtk_label_set_max_width_chars(GTK_LABEL(label_), 3000); + gtk_container_add(GTK_CONTAINER(alignment_), label_); + gtk_widget_show(label_); + + // Associates the tooltip window with given widget + gtk_widget_set_tooltip_window(host_, GTK_WINDOW(window_)); +} + +// Paints our customized tooltip window. +gboolean TooltipWindowGtk::OnPaint(GtkWidget* widget, GdkEventExpose* event) { + gtk_paint_flat_box(widget->style, + widget->window, + GTK_STATE_NORMAL, + GTK_SHADOW_OUT, + NULL, + widget, + "tooltip", + 0, 0, + widget->allocation.width, + widget->allocation.height); + + return FALSE; +} + +// Style change handler. +void TooltipWindowGtk::OnStyleSet(GtkWidget* widget, + GtkStyle* previous_style) { + gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_), + widget->style->ythickness, + widget->style->ythickness, + widget->style->xthickness, + widget->style->xthickness); + + gtk_widget_queue_draw(widget); +} + +} // namespace views |