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

Unified Diff: chrome/browser/gtk/options/options_layout_gtk.cc

Issue 1969006: Fix 18949 on GTK ("Options" window does not fit a small display). (Closed) Base URL: git://git.chromium.org/chromium.git
Patch Set: Update based on evan's comments of patch set 4 and sync with trunk Created 10 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/gtk/options/options_layout_gtk.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/options/options_layout_gtk.cc
diff --git a/chrome/browser/gtk/options/options_layout_gtk.cc b/chrome/browser/gtk/options/options_layout_gtk.cc
index c4a6e60fc51d8ca5ffdd5a127f2e731914b6646b..d0ae714f2382603ea486c11ca0d09a92334f2304 100644
--- a/chrome/browser/gtk/options/options_layout_gtk.cc
+++ b/chrome/browser/gtk/options/options_layout_gtk.cc
@@ -6,15 +6,32 @@
#include "chrome/browser/gtk/gtk_util.h"
-OptionsLayoutBuilderGtk::OptionsLayoutBuilderGtk() {
+// If the height of screen is equal or shorter than this, we will use
+// a more compact option layout.
+const int kCompactScreenHeight = 600;
+
+// Default option layout builder follows GNOME HIG, which uses header and
+// spacing to group options.
+class DefaultOptionsLayoutBuilderGtk : public OptionsLayoutBuilderGtk {
+ public:
+ explicit DefaultOptionsLayoutBuilderGtk();
+
+ void AddOptionGroup(const std::string& title, GtkWidget* content,
+ bool expandable);
+ void AddWidget(GtkWidget* content, bool expandable);
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DefaultOptionsLayoutBuilderGtk);
+};
+
+DefaultOptionsLayoutBuilderGtk::DefaultOptionsLayoutBuilderGtk() {
page_ = gtk_vbox_new(FALSE, gtk_util::kContentAreaSpacing);
gtk_container_set_border_width(GTK_CONTAINER(page_),
gtk_util::kContentAreaBorder);
}
-void OptionsLayoutBuilderGtk::AddOptionGroup(const std::string& title,
- GtkWidget* content,
- bool expandable) {
+void DefaultOptionsLayoutBuilderGtk::AddOptionGroup(const std::string& title,
+ GtkWidget* content,
+ bool expandable) {
GtkWidget* title_label = gtk_util::CreateBoldLabel(title);
GtkWidget* group = gtk_vbox_new(FALSE, gtk_util::kControlSpacing);
@@ -24,6 +41,85 @@ void OptionsLayoutBuilderGtk::AddOptionGroup(const std::string& title,
AddWidget(group, expandable);
}
-void OptionsLayoutBuilderGtk::AddWidget(GtkWidget* content, bool expandable) {
+void DefaultOptionsLayoutBuilderGtk::AddWidget(GtkWidget* content,
+ bool expandable) {
gtk_box_pack_start(GTK_BOX(page_), content, expandable, expandable, 0);
}
+
+// Compact layout builder uses table to layout label and content horizontally.
+class CompactOptionsLayoutBuilderGtk : public OptionsLayoutBuilderGtk {
+ public:
+ explicit CompactOptionsLayoutBuilderGtk();
+
+ void AddOptionGroup(const std::string& title, GtkWidget* content,
+ bool expandable);
+ void AddWidget(GtkWidget* content, bool expandable);
+ private:
+ GtkWidget *table_;
+ guint row_;
+
+ DISALLOW_COPY_AND_ASSIGN(CompactOptionsLayoutBuilderGtk);
+};
+
+CompactOptionsLayoutBuilderGtk::CompactOptionsLayoutBuilderGtk() {
+ row_ = 0;
+ table_ = NULL;
+
+ page_ = gtk_vbox_new(FALSE, gtk_util::kContentAreaSpacing);
+ gtk_container_set_border_width(GTK_CONTAINER(page_),
+ gtk_util::kContentAreaBorder);
+}
+
+void CompactOptionsLayoutBuilderGtk::AddOptionGroup(const std::string& title,
+ GtkWidget* content,
+ bool expandable) {
+ if (!table_) {
+ // Create a new table to contain option groups
+ table_ = gtk_table_new(0, 2, FALSE);
+ gtk_table_set_col_spacing(GTK_TABLE(table_), 0, gtk_util::kLabelSpacing);
+ gtk_table_set_row_spacings(GTK_TABLE(table_),
+ gtk_util::kContentAreaSpacing);
+
+ gtk_container_set_border_width(GTK_CONTAINER(table_),
+ gtk_util::kContentAreaBorder);
+ gtk_box_pack_start(GTK_BOX(page_), table_, TRUE, TRUE, 0);
+ }
+
+ GtkWidget* title_label = gtk_util::CreateBoldLabel(title);
+
+ gtk_table_resize(GTK_TABLE(table_), row_ + 1, 2);
+ gtk_misc_set_alignment(GTK_MISC(title_label), 1, 0);
+
+ gtk_table_attach(GTK_TABLE(table_), title_label,
+ 0, 1, row_, row_ + 1,
+ GTK_FILL, GTK_FILL,
+ 0, 0);
+ gtk_table_attach(GTK_TABLE(table_), content,
+ 1, 2, row_, row_ + 1,
+ expandable ?
+ GTK_FILL : GtkAttachOptions(GTK_FILL | GTK_EXPAND),
+ GTK_FILL,
+ 0, 0);
+ row_++;
+}
+
+void CompactOptionsLayoutBuilderGtk::AddWidget(GtkWidget* content,
+ bool expandable) {
+ gtk_box_pack_start(GTK_BOX(page_), content, expandable, expandable, 0);
+
+ // Let AddOptionGroup create a new table and append after this widget
+ table_ = NULL;
+}
+
+OptionsLayoutBuilderGtk* OptionsLayoutBuilderGtk::Create() {
+ return new DefaultOptionsLayoutBuilderGtk();
+}
+
+OptionsLayoutBuilderGtk*
+OptionsLayoutBuilderGtk::CreateOptionallyCompactLayout() {
+ gint screen_height = gdk_screen_get_height(gdk_screen_get_default());
+ if (screen_height <= kCompactScreenHeight)
+ return new CompactOptionsLayoutBuilderGtk();
+ else
+ return new DefaultOptionsLayoutBuilderGtk();
+}
« no previous file with comments | « chrome/browser/gtk/options/options_layout_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698