summaryrefslogtreecommitdiffstats
path: root/views/controls/button
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-14 19:51:34 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-14 19:51:34 +0000
commit55902b55116fe36b88a719b13c15d38d9b3c08ff (patch)
treecb05a30d82fe83499e09368caad8120557b696e2 /views/controls/button
parent7a08a49f266ca32581b95016cfa65a5679c5dcf1 (diff)
downloadchromium_src-55902b55116fe36b88a719b13c15d38d9b3c08ff.zip
chromium_src-55902b55116fe36b88a719b13c15d38d9b3c08ff.tar.gz
chromium_src-55902b55116fe36b88a719b13c15d38d9b3c08ff.tar.bz2
Add basic checkbox support for GTK.
This also makes the Checkbox check for the native wrapper just like NativeButton does, to prevent crashes if it hasn't been initialized yet. Review URL: http://codereview.chromium.org/113408 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16094 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/controls/button')
-rw-r--r--views/controls/button/checkbox.cc3
-rw-r--r--views/controls/button/native_button_gtk.cc21
-rw-r--r--views/controls/button/native_button_gtk.h12
3 files changed, 36 insertions, 0 deletions
diff --git a/views/controls/button/checkbox.cc b/views/controls/button/checkbox.cc
index 8783bcf..af6a7b4 100644
--- a/views/controls/button/checkbox.cc
+++ b/views/controls/button/checkbox.cc
@@ -53,6 +53,9 @@ int Checkbox::GetTextIndent() {
// Checkbox, View overrides:
gfx::Size Checkbox::GetPreferredSize() {
+ if (!native_wrapper_)
+ return gfx::Size();
+
gfx::Size prefsize = native_wrapper_->GetView()->GetPreferredSize();
prefsize.set_width(
prefsize.width() + kCheckboxLabelSpacing +
diff --git a/views/controls/button/native_button_gtk.cc b/views/controls/button/native_button_gtk.cc
index e140b21..858fdcd 100644
--- a/views/controls/button/native_button_gtk.cc
+++ b/views/controls/button/native_button_gtk.cc
@@ -86,10 +86,31 @@ void NativeButtonGtk::NativeControlCreated(GtkWidget* widget) {
UpdateDefault();
}
+NativeCheckboxGtk::NativeCheckboxGtk(Checkbox* checkbox)
+ : NativeButtonGtk(checkbox) {
+}
+
+void NativeCheckboxGtk::CreateNativeControl() {
+ GtkWidget* widget = gtk_check_button_new();
+ NativeControlCreated(widget);
+}
+
+// static
+int NativeButtonWrapper::GetFixedWidth() {
+ // TODO(brettw) implement this properly.
+ return 10;
+}
+
// static
NativeButtonWrapper* NativeButtonWrapper::CreateNativeButtonWrapper(
NativeButton* native_button) {
return new NativeButtonGtk(native_button);
}
+// static
+NativeButtonWrapper* NativeButtonWrapper::CreateCheckboxWrapper(
+ Checkbox* checkbox) {
+ return new NativeCheckboxGtk(checkbox);
+}
+
} // namespace views
diff --git a/views/controls/button/native_button_gtk.h b/views/controls/button/native_button_gtk.h
index e76a703..d526dcd 100644
--- a/views/controls/button/native_button_gtk.h
+++ b/views/controls/button/native_button_gtk.h
@@ -41,6 +41,18 @@ class NativeButtonGtk : public NativeControlGtk, public NativeButtonWrapper {
DISALLOW_COPY_AND_ASSIGN(NativeButtonGtk);
};
+class NativeCheckboxGtk : public NativeButtonGtk {
+ public:
+ explicit NativeCheckboxGtk(Checkbox* checkbox);
+
+ private:
+ virtual void CreateNativeControl();
+
+ // Returns true if this button is actually a checkbox or radio button.
+ virtual bool IsCheckbox() const { return true; }
+ DISALLOW_COPY_AND_ASSIGN(NativeCheckboxGtk);
+};
+
} // namespace views
#endif // #ifndef VIEWS_CONTROLS_BUTTON_NATIVE_BUTTON_GTK_H_