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

Side by Side Diff: views/examples/native_theme_button_example.cc

Issue 8555013: views: Move examples/ directory to ui/views/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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/examples/native_theme_button_example.h"
6
7 #include <string>
8
9 #include "base/logging.h"
10 #include "base/stringprintf.h"
11 #include "base/utf_string_conversions.h"
12 #include "ui/base/animation/throb_animation.h"
13 #include "ui/base/models/combobox_model.h"
14 #include "ui/gfx/canvas.h"
15 #include "views/controls/label.h"
16 #include "views/examples/example_combobox_model.h"
17 #include "views/layout/grid_layout.h"
18 #include "views/native_theme_painter.h"
19
20 namespace {
21
22 const char* kParts[] = {
23 "PushButton",
24 "RadioButton",
25 "Checkbox",
26 };
27
28 const char* kStates[] = {
29 "Disabled",
30 "Normal",
31 "Hot",
32 "Pressed",
33 "<Dynamic>",
34 };
35
36 } // namespace
37
38 namespace examples {
39
40 ExampleNativeThemeButton::ExampleNativeThemeButton(
41 views::ButtonListener* listener,
42 views::Combobox* cb_part,
43 views::Combobox* cb_state)
44 : CustomButton(listener),
45 cb_part_(cb_part),
46 cb_state_(cb_state),
47 count_(0),
48 is_checked_(false),
49 is_indeterminate_(false) {
50 cb_part_->set_listener(this);
51 cb_state_->set_listener(this);
52
53 painter_.reset(new views::NativeThemePainter(this));
54 set_background(views::Background::CreateBackgroundPainter(
55 false, painter_.get()));
56 }
57
58 ExampleNativeThemeButton::~ExampleNativeThemeButton() {
59 }
60
61 std::string ExampleNativeThemeButton::MessWithState() {
62 const char* message = NULL;
63 switch (GetThemePart()) {
64 case gfx::NativeTheme::kPushButton:
65 message = "Pressed! count:%d";
66 break;
67 case gfx::NativeTheme::kRadio:
68 is_checked_ = !is_checked_;
69 message = is_checked_ ? "Checked! count:%d" : "Unchecked! count:%d";
70 break;
71 case gfx::NativeTheme::kCheckbox:
72 if (is_indeterminate_) {
73 is_checked_ = false;
74 is_indeterminate_ = false;
75 } else if (!is_checked_) {
76 is_checked_ = true;
77 } else {
78 is_checked_ = false;
79 is_indeterminate_ = true;
80 }
81
82 message = is_checked_ ? "Checked! count:%d" :
83 is_indeterminate_ ? "Indeterminate! count:%d" : "Unchecked! count:%d";
84 break;
85 default:
86 DCHECK(false);
87 }
88
89 return base::StringPrintf(message, ++count_);
90 }
91
92 void ExampleNativeThemeButton::ItemChanged(views::Combobox* combo_box,
93 int prev_index,
94 int new_index) {
95 SchedulePaint();
96 }
97
98 gfx::NativeTheme::Part ExampleNativeThemeButton::GetThemePart() const {
99 int selected = cb_part_->selected_item();
100 switch (selected) {
101 case 0:
102 return gfx::NativeTheme::kPushButton;
103 case 1:
104 return gfx::NativeTheme::kRadio;
105 case 2:
106 return gfx::NativeTheme::kCheckbox;
107 default:
108 DCHECK(false);
109 }
110 return gfx::NativeTheme::kPushButton;
111 }
112
113 gfx::Rect ExampleNativeThemeButton::GetThemePaintRect() const {
114 gfx::NativeTheme::ExtraParams extra;
115 gfx::NativeTheme::State state = GetThemeState(&extra);
116 gfx::Size size(gfx::NativeTheme::instance()->GetPartSize(GetThemePart(),
117 state,
118 extra));
119 gfx::Rect rect(size);
120 rect.set_x(GetMirroredXForRect(rect));
121 return rect;
122 }
123
124 gfx::NativeTheme::State ExampleNativeThemeButton::GetThemeState(
125 gfx::NativeTheme::ExtraParams* params) const {
126 GetExtraParams(params);
127
128 int selected = cb_state_->selected_item();
129 if (selected > 3) {
130 switch (state()) {
131 case BS_DISABLED:
132 return gfx::NativeTheme::kDisabled;
133 case BS_NORMAL:
134 return gfx::NativeTheme::kNormal;
135 case BS_HOT:
136 return gfx::NativeTheme::kHovered;
137 case BS_PUSHED:
138 return gfx::NativeTheme::kPressed;
139 default:
140 DCHECK(false);
141 }
142 }
143
144 switch (selected) {
145 case 0:
146 return gfx::NativeTheme::kDisabled;
147 case 1:
148 return gfx::NativeTheme::kNormal;
149 case 2:
150 return gfx::NativeTheme::kHovered;
151 case 3:
152 return gfx::NativeTheme::kPressed;
153 default:
154 DCHECK(false);
155 }
156 return gfx::NativeTheme::kNormal;
157 }
158
159 void ExampleNativeThemeButton::GetExtraParams(
160 gfx::NativeTheme::ExtraParams* params) const {
161
162 params->button.checked = is_checked_;
163 params->button.indeterminate = is_indeterminate_;
164 params->button.is_default = false;
165 params->button.has_border = false;
166 params->button.classic_state = 0;
167 params->button.background_color = SkColorSetARGB(0, 0, 0, 0);
168 }
169
170 const ui::Animation* ExampleNativeThemeButton::GetThemeAnimation() const {
171 int selected = cb_state_->selected_item();
172 return selected <= 3 ? NULL : hover_animation_.get();
173 }
174
175 gfx::NativeTheme::State ExampleNativeThemeButton::GetBackgroundThemeState(
176 gfx::NativeTheme::ExtraParams* params) const {
177 GetExtraParams(params);
178 return gfx::NativeTheme::kNormal;
179 }
180
181 gfx::NativeTheme::State ExampleNativeThemeButton::GetForegroundThemeState(
182 gfx::NativeTheme::ExtraParams* params) const {
183 GetExtraParams(params);
184 return gfx::NativeTheme::kHovered;
185 }
186
187 gfx::Size ExampleNativeThemeButton::GetPreferredSize() {
188 return painter_.get() == NULL ? gfx::Size() : painter_->GetPreferredSize();
189 }
190
191 void ExampleNativeThemeButton::OnPaintBackground(gfx::Canvas* canvas) {
192 // Fill the background with a known colour so that we know where the bounds
193 // of the View are.
194 canvas->FillRect(SkColorSetRGB(255, 128, 128), GetLocalBounds());
195 CustomButton::OnPaintBackground(canvas);
196 }
197
198 ////////////////////////////////////////////////////////////////////////////////
199
200 NativeThemeButtonExample::NativeThemeButtonExample(ExamplesMain* main)
201 : ExampleBase(main, "Native Theme Button") {
202 }
203
204 NativeThemeButtonExample::~NativeThemeButtonExample() {
205 }
206
207 void NativeThemeButtonExample::CreateExampleView(views::View* container) {
208 views::GridLayout* layout = new views::GridLayout(container);
209 container->SetLayoutManager(layout);
210
211 layout->AddPaddingRow(0, 8);
212
213 views::ColumnSet* column_set = layout->AddColumnSet(0);
214 column_set->AddPaddingColumn(0, 8);
215 column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL,
216 0.1f, views::GridLayout::USE_PREF, 0, 0);
217 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL,
218 0.9f, views::GridLayout::USE_PREF, 0, 0);
219 column_set->AddPaddingColumn(0, 8);
220
221 layout->StartRow(0, 0);
222 layout->AddView(new views::Label(ASCIIToUTF16("Part:")));
223 views::Combobox* cb_part = new views::Combobox(
224 new ExampleComboboxModel(kParts, arraysize(kParts)));
225 cb_part->SetSelectedItem(0);
226 layout->AddView(cb_part);
227
228 layout->StartRow(0, 0);
229 layout->AddView(new views::Label(ASCIIToUTF16("State:")));
230 views::Combobox* cb_state = new views::Combobox(
231 new ExampleComboboxModel(kStates, arraysize(kStates)));
232 cb_state->SetSelectedItem(0);
233 layout->AddView(cb_state);
234
235 layout->AddPaddingRow(0, 32);
236
237 button_ = new ExampleNativeThemeButton(this, cb_part, cb_state);
238
239 column_set = layout->AddColumnSet(1);
240 column_set->AddPaddingColumn(0, 16);
241 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL,
242 1, views::GridLayout::USE_PREF, 0, 0);
243 column_set->AddPaddingColumn(0, 16);
244 layout->StartRow(1, 1);
245 layout->AddView(button_);
246
247 layout->AddPaddingRow(0, 8);
248 }
249
250 void NativeThemeButtonExample::ButtonPressed(views::Button* sender,
251 const views::Event& event) {
252 PrintStatus(button_->MessWithState().c_str());
253 }
254
255 } // namespace examples
OLDNEW
« no previous file with comments | « views/examples/native_theme_button_example.h ('k') | views/examples/native_theme_checkbox_example.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698