| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "app/gtk_util.h" | 5 #include "app/gtk_util.h" |
| 6 | 6 |
| 7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
| 8 | 8 |
| 9 #include "app/l10n_util.h" | 9 #include "app/l10n_util.h" |
| 10 #include "base/env_var.h" | 10 #include "base/env_var.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 if (width) | 24 if (width) |
| 25 StringToDouble(l10n_util::GetStringUTF8(width_chars), &chars); | 25 StringToDouble(l10n_util::GetStringUTF8(width_chars), &chars); |
| 26 | 26 |
| 27 double lines = 0; | 27 double lines = 0; |
| 28 if (height) | 28 if (height) |
| 29 StringToDouble(l10n_util::GetStringUTF8(height_lines), &lines); | 29 StringToDouble(l10n_util::GetStringUTF8(height_lines), &lines); |
| 30 | 30 |
| 31 GetWidgetSizeFromCharacters(widget, chars, lines, width, height); | 31 GetWidgetSizeFromCharacters(widget, chars, lines, width, height); |
| 32 } | 32 } |
| 33 | 33 |
| 34 uint8_t* BGRAToRGBA(const uint8_t* pixels, int width, int height, int stride) { |
| 35 if (stride == 0) |
| 36 stride = width * 4; |
| 37 |
| 38 uint8_t* new_pixels = static_cast<uint8_t*>(malloc(height * stride)); |
| 39 |
| 40 // We have to copy the pixels and swap from BGRA to RGBA. |
| 41 for (int i = 0; i < height; ++i) { |
| 42 for (int j = 0; j < width; ++j) { |
| 43 int idx = i * stride + j * 4; |
| 44 new_pixels[idx] = pixels[idx + 2]; |
| 45 new_pixels[idx + 1] = pixels[idx + 1]; |
| 46 new_pixels[idx + 2] = pixels[idx]; |
| 47 new_pixels[idx + 3] = pixels[idx + 3]; |
| 48 } |
| 49 } |
| 50 |
| 51 return new_pixels; |
| 52 } |
| 53 |
| 34 void GetWidgetSizeFromCharacters( | 54 void GetWidgetSizeFromCharacters( |
| 35 GtkWidget* widget, double width_chars, double height_lines, | 55 GtkWidget* widget, double width_chars, double height_lines, |
| 36 int* width, int* height) { | 56 int* width, int* height) { |
| 37 DCHECK(GTK_WIDGET_REALIZED(widget)) | 57 DCHECK(GTK_WIDGET_REALIZED(widget)) |
| 38 << " widget must be realized to compute font metrics correctly"; | 58 << " widget must be realized to compute font metrics correctly"; |
| 39 PangoContext* context = gtk_widget_create_pango_context(widget); | 59 PangoContext* context = gtk_widget_create_pango_context(widget); |
| 40 PangoFontMetrics* metrics = pango_context_get_metrics(context, | 60 PangoFontMetrics* metrics = pango_context_get_metrics(context, |
| 41 widget->style->font_desc, pango_context_get_language(context)); | 61 widget->style->font_desc, pango_context_get_language(context)); |
| 42 if (width) { | 62 if (width) { |
| 43 *width = static_cast<int>( | 63 *width = static_cast<int>( |
| (...skipping 13 matching lines...) Expand all Loading... |
| 57 void ApplyMessageDialogQuirks(GtkWidget* dialog) { | 77 void ApplyMessageDialogQuirks(GtkWidget* dialog) { |
| 58 if (gtk_window_get_modal(GTK_WINDOW(dialog))) { | 78 if (gtk_window_get_modal(GTK_WINDOW(dialog))) { |
| 59 // Work around a KDE 3 window manager bug. | 79 // Work around a KDE 3 window manager bug. |
| 60 scoped_ptr<base::EnvVarGetter> env(base::EnvVarGetter::Create()); | 80 scoped_ptr<base::EnvVarGetter> env(base::EnvVarGetter::Create()); |
| 61 if (base::DESKTOP_ENVIRONMENT_KDE3 == GetDesktopEnvironment(env.get())) | 81 if (base::DESKTOP_ENVIRONMENT_KDE3 == GetDesktopEnvironment(env.get())) |
| 62 gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), FALSE); | 82 gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), FALSE); |
| 63 } | 83 } |
| 64 } | 84 } |
| 65 | 85 |
| 66 } // namespace gtk_util | 86 } // namespace gtk_util |
| OLD | NEW |