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

Unified Diff: chrome/views/text_field.cc

Issue 10662: Fixes text field background when disabled/read-only to better match... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years, 1 month 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 | « chrome/views/text_field.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/views/text_field.cc
===================================================================
--- chrome/views/text_field.cc (revision 5301)
+++ chrome/views/text_field.cc (working copy)
@@ -11,6 +11,7 @@
#include <tom.h> // For ITextDocument, a COM interface to CRichEditCtrl
#include <vsstyle.h>
+#include "base/gfx/skia_utils.h"
Finnur 2008/11/12 22:57:39 s is after n in the alphabet. :)
#include "base/gfx/native_theme.h"
#include "base/scoped_clipboard_writer.h"
#include "base/string_util.h"
@@ -61,6 +62,8 @@
void SetEnabled(bool enabled);
+ void SetBackgroundColor(COLORREF bg_color);
+
// CWindowImpl
BEGIN_MSG_MAP(Edit)
MSG_WM_CHAR(OnChar)
@@ -196,6 +199,8 @@
int ime_composition_start_;
int ime_composition_length_;
+ COLORREF bg_color_;
+
DISALLOW_EVIL_CONSTRUCTORS(Edit);
Finnur 2008/11/12 22:57:39 DISALLOW_COPY_AND_ASSIGN. Sorry, didn't mean to sh
};
@@ -242,7 +247,8 @@
draw_border_(draw_border),
ime_discard_composition_(false),
ime_composition_start_(0),
- ime_composition_length_(0) {
+ ime_composition_length_(0),
+ bg_color_(0) {
if (!did_load_library_)
did_load_library_ = !!LoadLibrary(L"riched20.dll");
@@ -341,6 +347,11 @@
static_cast<WPARAM>(enabled), 0);
}
+void TextField::Edit::SetBackgroundColor(COLORREF bg_color) {
+ CRichEditCtrl::SetBackgroundColor(bg_color);
+ bg_color_ = bg_color;
+}
+
bool TextField::Edit::IsCommandEnabled(int id) const {
switch (id) {
case IDS_UNDO: return !parent_->IsReadOnly() && !!CanUndo();
@@ -663,7 +674,9 @@
window_rect.right - content_insets_.right(),
window_rect.bottom - content_insets_.bottom());
- FillRect(hdc, &window_rect, (HBRUSH) (COLOR_WINDOW+1));
+ HBRUSH brush = CreateSolidBrush(bg_color_);
+ FillRect(hdc, &window_rect, brush);
+ DeleteObject(brush);
int part;
int state;
@@ -697,7 +710,8 @@
(!parent_->IsEnabled() || parent_->IsReadOnly()) ? DFCS_INACTIVE : 0;
NativeTheme::instance()->PaintTextField(hdc, part, state, classic_state,
- &window_rect, NULL, false, true);
+ &window_rect, bg_color_, false,
+ true);
// NOTE: I tried checking the transparent property of the theme and invoking
// drawParentBackground, but it didn't seem to make a difference.
@@ -898,8 +912,7 @@
native_view_->Attach(*edit_);
if (!text_.empty())
edit_->SetText(text_);
- if (!use_default_background_color_)
- SetBackgroundColor(background_color_);
+ UpdateEditBackgroundColor();
Layout();
}
} else if (!is_add && edit_ && IsWindow(edit_->m_hWnd)) {
@@ -968,13 +981,13 @@
}
void TextField::SetReadOnly(bool read_only) {
- if (edit_)
+ read_only_ = read_only;
+ if (edit_) {
edit_->SetReadOnly(read_only);
- else
- read_only_ = read_only;
+ UpdateEditBackgroundColor();
+ }
}
-
void TextField::Focus() {
::SetFocus(native_view_->GetHWND());
}
@@ -996,17 +1009,12 @@
void TextField::SetBackgroundColor(SkColor color) {
background_color_ = color;
use_default_background_color_ = false;
- if (edit_) {
- edit_->SetBackgroundColor(RGB(SkColorGetR(color),
- SkColorGetG(color),
- SkColorGetB(color)));
- }
+ UpdateEditBackgroundColor();
}
void TextField::SetDefaultBackgroundColor() {
use_default_background_color_ = true;
- if (edit_)
- edit_->SetBackgroundColor();
+ UpdateEditBackgroundColor();
}
void TextField::SetFont(const ChromeFont& font) {
@@ -1045,7 +1053,6 @@
void TextField::SetEnabled(bool enabled) {
View::SetEnabled(enabled);
- SetReadOnly(!enabled);
edit_->SetEnabled(enabled);
}
@@ -1066,5 +1073,16 @@
return !win_util::IsNumPadDigit(e.GetCharacter(), e.IsExtendedKey());
}
+void TextField::UpdateEditBackgroundColor() {
+ if (!edit_)
+ return;
+
+ COLORREF bg_color;
+ if (!use_default_background_color_)
+ bg_color = gfx::SkColorToCOLORREF(background_color_);
+ else
+ bg_color = GetSysColor(read_only_ ? COLOR_3DFACE : COLOR_WINDOW);
+ edit_->SetBackgroundColor(bg_color);
+}
+
} // namespace views
-
« no previous file with comments | « chrome/views/text_field.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698