OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/gtk/about_chrome_dialog.h" | 5 #include "chrome/browser/gtk/about_chrome_dialog.h" |
6 | 6 |
7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
8 #include <wchar.h> | 8 #include <wchar.h> |
9 | 9 |
10 #include "app/l10n_util.h" | 10 #include "app/l10n_util.h" |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 current_version += L")"; | 89 current_version += L")"; |
90 #endif | 90 #endif |
91 | 91 |
92 // Build the dialog. | 92 // Build the dialog. |
93 GtkWidget* dialog = gtk_dialog_new_with_buttons( | 93 GtkWidget* dialog = gtk_dialog_new_with_buttons( |
94 l10n_util::GetStringUTF8(IDS_ABOUT_CHROME_TITLE).c_str(), | 94 l10n_util::GetStringUTF8(IDS_ABOUT_CHROME_TITLE).c_str(), |
95 parent, | 95 parent, |
96 GTK_DIALOG_MODAL, | 96 GTK_DIALOG_MODAL, |
97 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, | 97 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, |
98 NULL); | 98 NULL); |
| 99 // Pick up the style set in gtk_util.cc:InitRCStyles(). |
| 100 // The layout of this dialog is special because the logo should be flush |
| 101 // with the edges of the window. |
| 102 gtk_widget_set_name(dialog, "about-dialog"); |
| 103 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
99 | 104 |
100 GtkWidget* content_area = GTK_DIALOG(dialog)->vbox; | 105 GtkWidget* content_area = GTK_DIALOG(dialog)->vbox; |
101 | 106 |
102 // Use an event box to get the background painting correctly | 107 // Use an event box to get the background painting correctly |
103 GtkWidget* ebox = gtk_event_box_new(); | 108 GtkWidget* ebox = gtk_event_box_new(); |
104 gtk_widget_modify_bg(ebox, GTK_STATE_NORMAL, &gfx::kGdkWhite); | 109 gtk_widget_modify_bg(ebox, GTK_STATE_NORMAL, &gfx::kGdkWhite); |
105 | 110 |
106 GtkWidget* hbox = gtk_hbox_new(FALSE, 0); | 111 GtkWidget* hbox = gtk_hbox_new(FALSE, 0); |
107 | 112 |
108 GtkWidget* text_alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); | 113 GtkWidget* text_alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); |
(...skipping 19 matching lines...) Expand all Loading... |
128 | 133 |
129 GtkWidget* image_vbox = gtk_vbox_new(FALSE, 0); | 134 GtkWidget* image_vbox = gtk_vbox_new(FALSE, 0); |
130 gtk_box_pack_end(GTK_BOX(image_vbox), | 135 gtk_box_pack_end(GTK_BOX(image_vbox), |
131 gtk_image_new_from_pixbuf(background), | 136 gtk_image_new_from_pixbuf(background), |
132 FALSE, FALSE, 0); | 137 FALSE, FALSE, 0); |
133 | 138 |
134 gtk_box_pack_start(GTK_BOX(hbox), image_vbox, FALSE, FALSE, 0); | 139 gtk_box_pack_start(GTK_BOX(hbox), image_vbox, FALSE, FALSE, 0); |
135 gtk_container_add(GTK_CONTAINER(ebox), hbox); | 140 gtk_container_add(GTK_CONTAINER(ebox), hbox); |
136 gtk_box_pack_start(GTK_BOX(content_area), ebox, TRUE, TRUE, 0); | 141 gtk_box_pack_start(GTK_BOX(content_area), ebox, TRUE, TRUE, 0); |
137 | 142 |
| 143 // We use a separate box for the licensing etc. text. See the comment near |
| 144 // the top of this function about using a special layout for this dialog. |
| 145 GtkWidget* vbox = gtk_vbox_new(FALSE, 6); |
| 146 gtk_container_set_border_width(GTK_CONTAINER(vbox), 12); |
| 147 |
138 GtkWidget* copyright_label = MakeMarkupLabel( | 148 GtkWidget* copyright_label = MakeMarkupLabel( |
139 "<span size=\"smaller\">%s</span>", | 149 "<span size=\"smaller\">%s</span>", |
140 l10n_util::GetString(IDS_ABOUT_VERSION_COPYRIGHT)); | 150 l10n_util::GetString(IDS_ABOUT_VERSION_COPYRIGHT)); |
141 gtk_box_pack_start(GTK_BOX(content_area), copyright_label, TRUE, TRUE, 5); | 151 gtk_box_pack_start(GTK_BOX(vbox), copyright_label, TRUE, TRUE, 5); |
142 | 152 |
143 // TODO(erg): Figure out how to really insert links. We could just depend on | 153 // TODO(erg): Figure out how to really insert links. We could just depend on |
144 // (or include the source of) libsexy's SexyUrlLabel gtk widget... | 154 // (or include the source of) libsexy's SexyUrlLabel gtk widget... |
145 std::wstring license = l10n_util::GetString(IDS_ABOUT_VERSION_LICENSE); | 155 std::wstring license = l10n_util::GetString(IDS_ABOUT_VERSION_LICENSE); |
146 RemoveText(&license, kBeginLinkChr); | 156 RemoveText(&license, kBeginLinkChr); |
147 RemoveText(&license, kBeginLinkOss); | 157 RemoveText(&license, kBeginLinkOss); |
148 RemoveText(&license, kBeginLink); | 158 RemoveText(&license, kBeginLink); |
149 RemoveText(&license, kEndLinkChr); | 159 RemoveText(&license, kEndLinkChr); |
150 RemoveText(&license, kEndLinkOss); | 160 RemoveText(&license, kEndLinkOss); |
151 RemoveText(&license, kEndLink); | 161 RemoveText(&license, kEndLink); |
152 | 162 |
153 GtkWidget* license_label = MakeMarkupLabel( | 163 GtkWidget* license_label = MakeMarkupLabel( |
154 "<span size=\"smaller\">%s</span>", license); | 164 "<span size=\"smaller\">%s</span>", license); |
155 | 165 |
156 gtk_label_set_line_wrap(GTK_LABEL(license_label), TRUE); | 166 gtk_label_set_line_wrap(GTK_LABEL(license_label), TRUE); |
157 gtk_misc_set_alignment(GTK_MISC(license_label), 0, 0); | 167 gtk_misc_set_alignment(GTK_MISC(license_label), 0, 0); |
158 gtk_box_pack_start(GTK_BOX(content_area), license_label, TRUE, TRUE, 0); | 168 gtk_box_pack_start(GTK_BOX(vbox), license_label, TRUE, TRUE, 0); |
159 | 169 |
160 // Hack around Gtk's not-so-good label wrapping, as described here: | 170 // Hack around Gtk's not-so-good label wrapping, as described here: |
161 // http://blog.16software.com/dynamic-label-wrapping-in-gtk | 171 // http://blog.16software.com/dynamic-label-wrapping-in-gtk |
162 g_signal_connect(G_OBJECT(license_label), "size-allocate", | 172 g_signal_connect(G_OBJECT(license_label), "size-allocate", |
163 G_CALLBACK(FixLabelWrappingCallback), NULL); | 173 G_CALLBACK(FixLabelWrappingCallback), NULL); |
164 | 174 |
| 175 gtk_box_pack_start(GTK_BOX(content_area), vbox, TRUE, TRUE, 0); |
| 176 |
165 g_signal_connect(dialog, "response", G_CALLBACK(OnDialogResponse), NULL); | 177 g_signal_connect(dialog, "response", G_CALLBACK(OnDialogResponse), NULL); |
166 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); | 178 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
167 gtk_widget_show_all(dialog); | 179 gtk_widget_show_all(dialog); |
168 } | 180 } |
OLD | NEW |