| Index: views/controls/textfield/gtk_views_entry.cc
|
| diff --git a/views/controls/textfield/gtk_views_entry.cc b/views/controls/textfield/gtk_views_entry.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..dbb0be4e8bf83dcfe4dfd04bc57c706e8363727f
|
| --- /dev/null
|
| +++ b/views/controls/textfield/gtk_views_entry.cc
|
| @@ -0,0 +1,64 @@
|
| +// 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/controls/textfield/gtk_views_entry.h"
|
| +
|
| +#include "app/gfx/canvas_paint.h"
|
| +#include "base/utf_string_conversions.h"
|
| +#include "gfx/insets.h"
|
| +#include "gfx/skia_utils_gtk.h"
|
| +#include "views/controls/textfield/native_textfield_gtk.h"
|
| +#include "views/controls/textfield/textfield.h"
|
| +
|
| +G_BEGIN_DECLS
|
| +
|
| +G_DEFINE_TYPE(GtkViewsEntry, gtk_views_entry, GTK_TYPE_ENTRY)
|
| +
|
| +static gint gtk_views_entry_expose_event(GtkWidget *widget,
|
| + GdkEventExpose *event) {
|
| + gint result = GTK_WIDGET_CLASS(gtk_views_entry_parent_class)->expose_event(
|
| + widget, event);
|
| +
|
| + GtkEntry* entry = GTK_ENTRY(widget);
|
| + views::NativeTextfieldGtk* host = GTK_VIEWS_ENTRY(widget)->host;
|
| +
|
| + // Internally GtkEntry creates an additional window (text_area) that the
|
| + // text is drawn to. We only need paint after that window has painted.
|
| + if (host && event->window == entry->text_area &&
|
| + !host->textfield()->text_to_display_when_empty().empty() &&
|
| + g_utf8_strlen(gtk_entry_get_text(entry), -1) == 0) {
|
| + gfx::CanvasPaint canvas(event);
|
| + if (!canvas.is_empty()) {
|
| + gfx::Insets insets =
|
| + views::NativeTextfieldGtk::GetEntryInnerBorder(entry);
|
| + gfx::Font font = host->textfield()->font();
|
| + const string16 text = host->textfield()->text_to_display_when_empty();
|
| + canvas.DrawStringInt(
|
| + UTF16ToWide(text), font,
|
| + gfx::GdkColorToSkColor(widget->style->text[GTK_STATE_INSENSITIVE]),
|
| + insets.left(), insets.top(),
|
| + widget->allocation.width - insets.width(), font.height());
|
| + }
|
| + }
|
| +
|
| + return result;
|
| +}
|
| +
|
| +static void gtk_views_entry_class_init(GtkViewsEntryClass* views_entry_class) {
|
| + GtkWidgetClass* widget_class =
|
| + reinterpret_cast<GtkWidgetClass*>(views_entry_class);
|
| + widget_class->expose_event = gtk_views_entry_expose_event;
|
| +}
|
| +
|
| +static void gtk_views_entry_init(GtkViewsEntry* entry) {
|
| + entry->host = NULL;
|
| +}
|
| +
|
| +GtkWidget* gtk_views_entry_new(views::NativeTextfieldGtk* host) {
|
| + gpointer entry = g_object_new(GTK_TYPE_VIEWS_ENTRY, NULL);
|
| + GTK_VIEWS_ENTRY(entry)->host = host;
|
| + return GTK_WIDGET(entry);
|
| +}
|
| +
|
| +G_END_DECLS
|
|
|