summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-29 21:08:52 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-29 21:08:52 +0000
commit4993d71fe65634cfe75119f29859f046e4867b79 (patch)
tree0e67882818704eb5abb1a012fcfc9cfad3b799ae
parent997edcd6119c43a6181ab5139a226612de212987 (diff)
downloadchromium_src-4993d71fe65634cfe75119f29859f046e4867b79.zip
chromium_src-4993d71fe65634cfe75119f29859f046e4867b79.tar.gz
chromium_src-4993d71fe65634cfe75119f29859f046e4867b79.tar.bz2
GTK Improve look of about dialog.
BUG=26173 Review URL: http://codereview.chromium.org/345022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30511 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/gtk/about_chrome_dialog.cc101
1 files changed, 63 insertions, 38 deletions
diff --git a/chrome/browser/gtk/about_chrome_dialog.cc b/chrome/browser/gtk/about_chrome_dialog.cc
index a2bb512..d840d9e 100644
--- a/chrome/browser/gtk/about_chrome_dialog.cc
+++ b/chrome/browser/gtk/about_chrome_dialog.cc
@@ -11,7 +11,9 @@
#include "app/resource_bundle.h"
#include "base/file_version_info.h"
#include "chrome/browser/browser_list.h"
+#include "chrome/browser/gtk/cairo_cached_surface.h"
#include "chrome/browser/gtk/gtk_chrome_link_button.h"
+#include "chrome/browser/gtk/gtk_theme_provider.h"
#include "chrome/browser/profile.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/gtk_util.h"
@@ -43,8 +45,6 @@ const char* kEndLinkOss = "END_LINK_OSS";
const char* kBeginLink = "BEGIN_LINK";
const char* kEndLink = "END_LINK";
-const char* kSmaller = "<span size=\"smaller\">%s</span>";
-
void OnDialogResponse(GtkDialog* dialog, int response_id) {
// We're done.
gtk_widget_destroy(GTK_WIDGET(dialog));
@@ -78,8 +78,23 @@ const char* GetChromiumUrl() {
return url.c_str();
}
-std::string Smaller(const std::string& text) {
- return std::string("<span size=\"smaller\">") + text + std::string("</span>");
+gboolean OnEventBoxExpose(GtkWidget* event_box,
+ GdkEventExpose* expose,
+ gboolean user_data) {
+ cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(event_box->window));
+ gdk_cairo_rectangle(cr, &expose->area);
+ cairo_clip(cr);
+ GtkThemeProvider* theme_provider =
+ GtkThemeProvider::GetFrom(BrowserList::GetLastActive()->profile());
+ CairoCachedSurface* background = theme_provider->GetSurfaceNamed(
+ IDR_ABOUT_BACKGROUND_COLOR, event_box);
+
+ background->SetSource(cr, 0, 0);
+ cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT);
+ gdk_cairo_rectangle(cr, &expose->area);
+ cairo_fill(cr);
+ cairo_destroy(cr);
+ return FALSE;
}
} // namespace
@@ -101,7 +116,6 @@ void ShowAboutDialogForProfile(GtkWindow* parent, Profile* profile) {
l10n_util::GetStringUTF8(IDS_ABOUT_CHROME_TITLE).c_str(),
parent,
GTK_DIALOG_MODAL,
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
NULL);
// Pick up the style set in gtk_util.cc:InitRCStyles().
// The layout of this dialog is special because the logo should be flush
@@ -109,11 +123,15 @@ void ShowAboutDialogForProfile(GtkWindow* parent, Profile* profile) {
gtk_widget_set_name(dialog, "about-dialog");
gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE);
+ GtkWidget* close_button = gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
+
GtkWidget* content_area = GTK_DIALOG(dialog)->vbox;
// Use an event box to get the background painting correctly
GtkWidget* ebox = gtk_event_box_new();
- gtk_widget_modify_bg(ebox, GTK_STATE_NORMAL, &gfx::kGdkWhite);
+ gtk_widget_set_app_paintable(ebox, TRUE);
+ g_signal_connect(ebox, "expose-event", G_CALLBACK(OnEventBoxExpose), NULL);
GtkWidget* hbox = gtk_hbox_new(FALSE, 0);
@@ -126,7 +144,7 @@ void ShowAboutDialogForProfile(GtkWindow* parent, Profile* profile) {
GdkColor black = gfx::kGdkBlack;
GtkWidget* product_label = MakeMarkupLabel(
- "<span font_desc=\"18\" weight=\"bold\" style=\"normal\">%s</span>",
+ "<span font_desc=\"18\" style=\"normal\">%s</span>",
l10n_util::GetStringUTF8(IDS_PRODUCT_NAME));
gtk_widget_modify_fg(product_label, GTK_STATE_NORMAL, &black);
gtk_box_pack_start(GTK_BOX(text_vbox), product_label, FALSE, FALSE, 0);
@@ -151,13 +169,12 @@ void ShowAboutDialogForProfile(GtkWindow* parent, Profile* profile) {
// We use a separate box for the licensing etc. text. See the comment near
// the top of this function about using a special layout for this dialog.
- GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing);
- gtk_container_set_border_width(GTK_CONTAINER(vbox),
- gtk_util::kContentAreaBorder);
+ GtkWidget* vbox = gtk_vbox_new(FALSE, 0);
- GtkWidget* copyright_label = MakeMarkupLabel(
- kSmaller, l10n_util::GetStringUTF8(IDS_ABOUT_VERSION_COPYRIGHT));
- gtk_box_pack_start(GTK_BOX(vbox), copyright_label, TRUE, TRUE, 5);
+ GtkWidget* copyright_label = gtk_label_new(
+ l10n_util::GetStringUTF8(IDS_ABOUT_VERSION_COPYRIGHT).c_str());
+ gtk_misc_set_alignment(GTK_MISC(copyright_label), 0.0, 0.5);
+ gtk_box_pack_start(GTK_BOX(vbox), copyright_label, FALSE, FALSE, 5);
std::string license = l10n_util::GetStringUTF8(IDS_ABOUT_VERSION_LICENSE);
bool chromium_url_appears_first =
@@ -171,26 +188,25 @@ void ShowAboutDialogForProfile(GtkWindow* parent, Profile* profile) {
size_t link2_end = license.find(kEndLink, link2);
DCHECK(link1_end != std::string::npos);
- GtkWidget* license_chunk1 = MakeMarkupLabel(
- kSmaller, license.substr(0, link1));
- GtkWidget* license_chunk2 = MakeMarkupLabel(
- kSmaller,
+ GtkWidget* license_chunk1 = gtk_label_new(license.substr(0, link1).c_str());
+ gtk_misc_set_alignment(GTK_MISC(license_chunk1), 0.0, 0.5);
+ GtkWidget* license_chunk2 = gtk_label_new(
license.substr(link1_end + strlen(kEndLinkOss),
- link2 - link1_end - strlen(kEndLinkOss)));
- GtkWidget* license_chunk3 = MakeMarkupLabel(
- kSmaller, license.substr(link2_end + strlen(kEndLinkOss)));
+ link2 - link1_end - strlen(kEndLinkOss)).c_str());
+ gtk_misc_set_alignment(GTK_MISC(license_chunk2), 0.0, 0.5);
+ GtkWidget* license_chunk3 = gtk_label_new(
+ license.substr(link2_end + strlen(kEndLinkOss)).c_str());
+ gtk_misc_set_alignment(GTK_MISC(license_chunk3), 0.0, 0.5);
- std::string first_link_text = Smaller(
+ std::string first_link_text =
license.substr(link1 + strlen(kBeginLinkOss),
- link1_end - link1 - strlen(kBeginLinkOss)));
- std::string second_link_text = Smaller(
+ link1_end - link1 - strlen(kBeginLinkOss));
+ std::string second_link_text =
license.substr(link2 + strlen(kBeginLinkOss),
- link2_end - link2 - strlen(kBeginLinkOss)));
+ link2_end - link2 - strlen(kBeginLinkOss));
- GtkWidget* first_link =
- gtk_chrome_link_button_new_with_markup(first_link_text.c_str());
- GtkWidget* second_link =
- gtk_chrome_link_button_new_with_markup(second_link_text.c_str());
+ GtkWidget* first_link = gtk_chrome_link_button_new(first_link_text.c_str());
+ GtkWidget* second_link = gtk_chrome_link_button_new(second_link_text.c_str());
if (!chromium_url_appears_first) {
GtkWidget* swap = second_link;
second_link = first_link;
@@ -224,23 +240,26 @@ void ShowAboutDialogForProfile(GtkWindow* parent, Profile* profile) {
GtkWidget* license_vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(license_vbox), license_hbox, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(license_vbox), license_hbox2, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(vbox), license_vbox, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), license_vbox, FALSE, FALSE, 0);
#if defined(GOOGLE_CHROME_BUILD)
+ // Spacing line.
+ gtk_box_pack_start(GTK_BOX(vbox), gtk_label_new(""), FALSE, FALSE, 0);
+
std::vector<size_t> url_offsets;
std::wstring text = l10n_util::GetStringF(IDS_ABOUT_TERMS_OF_SERVICE,
std::wstring(),
std::wstring(),
&url_offsets);
- std::string tos_link_text = Smaller(
- l10n_util::GetStringUTF8(IDS_TERMS_OF_SERVICE));
- GtkWidget* tos_chunk1 = MakeMarkupLabel(
- kSmaller, WideToUTF8(text.substr(0, url_offsets[0])).c_str());
- GtkWidget* tos_link =
- gtk_chrome_link_button_new_with_markup(tos_link_text.c_str());
- GtkWidget* tos_chunk2 = MakeMarkupLabel(
- kSmaller, WideToUTF8(text.substr(url_offsets[0])).c_str());
+ GtkWidget* tos_chunk1 = gtk_label_new(
+ WideToUTF8(text.substr(0, url_offsets[0])).c_str());
+ gtk_misc_set_alignment(GTK_MISC(tos_chunk1), 0.0, 0.5);
+ GtkWidget* tos_link = gtk_chrome_link_button_new(
+ l10n_util::GetStringUTF8(IDS_TERMS_OF_SERVICE).c_str());
+ GtkWidget* tos_chunk2 = gtk_label_new(
+ WideToUTF8(text.substr(url_offsets[0])).c_str());
+ gtk_misc_set_alignment(GTK_MISC(tos_chunk2), 0.0, 0.5);
GtkWidget* tos_hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(tos_hbox), tos_chunk1, FALSE, FALSE, 0);
@@ -252,9 +271,15 @@ void ShowAboutDialogForProfile(GtkWindow* parent, Profile* profile) {
gtk_box_pack_start(GTK_BOX(vbox), tos_hbox, TRUE, TRUE, 0);
#endif
- gtk_box_pack_start(GTK_BOX(content_area), vbox, TRUE, TRUE, 0);
+ GtkWidget* alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment),
+ gtk_util::kContentAreaBorder, 0,
+ gtk_util::kContentAreaBorder, gtk_util::kContentAreaBorder);
+ gtk_container_add(GTK_CONTAINER(alignment), vbox);
+ gtk_box_pack_start(GTK_BOX(content_area), alignment, FALSE, FALSE, 0);
g_signal_connect(dialog, "response", G_CALLBACK(OnDialogResponse), NULL);
gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
gtk_widget_show_all(dialog);
+ gtk_widget_grab_focus(close_button);
}