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

Side by Side Diff: views/controls/textfield/gtk_views_entry.cc

Issue 1155008: Adds the ability to display text in a textfield when the text is (Closed)
Patch Set: Updates Created 10 years, 9 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "views/controls/textfield/gtk_views_entry.h"
6
7 #include "app/gfx/canvas_paint.h"
8 #include "base/utf_string_conversions.h"
9 #include "gfx/insets.h"
10 #include "gfx/skia_utils_gtk.h"
11 #include "views/controls/textfield/native_textfield_gtk.h"
12 #include "views/controls/textfield/textfield.h"
13
14 G_BEGIN_DECLS
15
16 G_DEFINE_TYPE(GtkViewsEntry, gtk_views_entry, GTK_TYPE_ENTRY)
17
18 static gint gtk_views_entry_expose_event(GtkWidget *widget,
19 GdkEventExpose *event) {
20 gint result = GTK_WIDGET_CLASS(gtk_views_entry_parent_class)->expose_event(
21 widget, event);
22
23 GtkEntry* entry = GTK_ENTRY(widget);
24 views::NativeTextfieldGtk* host = GTK_VIEWS_ENTRY(widget)->host;
25
26 // Internally GtkEntry creates an additional window (text_area) that the
27 // text is drawn to. We only need paint after that window has painted.
28 if (host && event->window == entry->text_area &&
29 !host->textfield()->text_to_display_when_empty().empty() &&
30 g_utf8_strlen(gtk_entry_get_text(entry), -1) == 0) {
31 gfx::CanvasPaint canvas(event);
32 if (!canvas.is_empty()) {
33 gfx::Insets insets =
34 views::NativeTextfieldGtk::GetEntryInnerBorder(entry);
35 gfx::Font font = host->textfield()->font();
36 const string16 text = host->textfield()->text_to_display_when_empty();
37 canvas.DrawStringInt(
38 UTF16ToWide(text), font,
39 gfx::GdkColorToSkColor(widget->style->text[GTK_STATE_INSENSITIVE]),
40 insets.left(), insets.top(),
41 widget->allocation.width - insets.width(), font.height());
42 }
43 }
44
45 return result;
46 }
47
48 static void gtk_views_entry_class_init(GtkViewsEntryClass* views_entry_class) {
49 GtkWidgetClass* widget_class =
50 reinterpret_cast<GtkWidgetClass*>(views_entry_class);
51 widget_class->expose_event = gtk_views_entry_expose_event;
52 }
53
54 static void gtk_views_entry_init(GtkViewsEntry* entry) {
55 entry->host = NULL;
56 }
57
58 GtkWidget* gtk_views_entry_new(views::NativeTextfieldGtk* host) {
59 gpointer entry = g_object_new(GTK_TYPE_VIEWS_ENTRY, NULL);
60 GTK_VIEWS_ENTRY(entry)->host = host;
61 return GTK_WIDGET(entry);
62 }
63
64 G_END_DECLS
OLDNEW
« no previous file with comments | « views/controls/textfield/gtk_views_entry.h ('k') | views/controls/textfield/native_textfield_gtk.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698