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

Unified Diff: views/widget/tooltip_window_gtk.cc

Issue 1708015: Use customized RGBA-enabled tooltip window for tooltip on ChroemOS (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: fix the nit Created 10 years, 8 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « views/widget/tooltip_window_gtk.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: views/widget/tooltip_window_gtk.cc
diff --git a/views/widget/tooltip_window_gtk.cc b/views/widget/tooltip_window_gtk.cc
new file mode 100644
index 0000000000000000000000000000000000000000..e76338c26af9d617abed30ac450558569f6317d1
--- /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
« no previous file with comments | « views/widget/tooltip_window_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698