gimp/app/dialogs/about-dialog.c

1192 lines
41 KiB
C
Raw Blame History

/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include <string.h>
#include <time.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include "libgimpmath/gimpmath.h"
#include "libgimpbase/gimpbase.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "dialogs-types.h"
#include "core/gimptoolinfo.h"
#include "widgets/gimphelp-ids.h"
#include "widgets/gimpdnd.h"
#include "about-dialog.h"
#include "authors.h"
#include "gimp-intl.h"
static gchar *founders[] =
{
N_("Version %s brought to you by"),
"Spencer Kimball & Peter Mattis"
};
static gchar *translators[] =
{
N_("Translation by"),
/* Translators: insert your names here, separated by newline */
/* we'd prefer just the names, please no email addresses. */
N_("translator-credits"),
};
static gchar *contri_intro[] =
{
N_("Contributions by")
};
static gchar **translator_names = NULL;
typedef struct
{
GtkWidget *about_dialog;
GtkWidget *logo_area;
GdkPixmap *logo_pixmap;
GdkRectangle pixmaparea;
GdkBitmap *shape_bitmap;
GdkGC *trans_gc;
GdkGC *opaque_gc;
GdkRectangle textarea;
gdouble text_size;
gdouble min_text_size;
PangoLayout *layout;
gint timer;
gint index;
gint animstep;
gboolean visible;
gint textrange[2];
gint state;
} GimpAboutInfo;
PangoColor gradient[] =
{
{ 139 * 257, 137 * 257, 124 * 257 },
{ 65535, 65535, 65535 },
{ 5000, 5000, 5000 },
};
PangoColor foreground = { 5000, 5000, 5000 };
PangoColor background = { 139 * 257, 137 * 257, 124 * 257 };
/* backup values */
PangoColor grad1ent[] =
{
{ 0xff * 257, 0xba * 257, 0x00 * 257 },
{ 37522, 51914, 57568 },
};
PangoColor foregr0und = { 37522, 51914, 57568 };
PangoColor backgr0und = { 0, 0, 0 };
static GimpAboutInfo about_info = { 0, };
static gboolean pp = FALSE;
static gboolean about_dialog_load_logo (GtkWidget *window);
static void about_dialog_destroy (GtkObject *object,
gpointer data);
static void about_dialog_unmap (GtkWidget *widget,
gpointer data);
static void about_dialog_center (GtkWindow *window);
static gboolean about_dialog_logo_expose (GtkWidget *widget,
GdkEventExpose *event,
gpointer data);
static gint about_dialog_button (GtkWidget *widget,
GdkEventButton *event,
gpointer data);
static gint about_dialog_key (GtkWidget *widget,
GdkEventKey *event,
gpointer data);
static void reshuffle_array (void);
static gboolean about_dialog_timer (gpointer data);
static PangoFontDescription *font_desc = NULL;
static const gchar **scroll_text = authors;
static gint nscroll_texts = G_N_ELEMENTS (authors);
static gint shuffle_array[G_N_ELEMENTS (authors)];
GtkWidget *
about_dialog_create (void)
{
if (! about_info.about_dialog)
{
GtkWidget *widget;
GdkGCValues shape_gcv;
about_info.visible = FALSE;
about_info.state = 0;
about_info.animstep = -1;
widget = g_object_new (GTK_TYPE_WINDOW,
"type", GTK_WINDOW_POPUP,
"title", _("About The GIMP"),
"window_position", GTK_WIN_POS_CENTER,
"resizable", FALSE,
NULL);
about_info.about_dialog = widget;
gtk_window_set_role (GTK_WINDOW (widget), "about-dialog");
g_signal_connect (widget, "destroy",
G_CALLBACK (about_dialog_destroy),
NULL);
g_signal_connect (widget, "unmap",
G_CALLBACK (about_dialog_unmap),
NULL);
g_signal_connect (widget, "button_press_event",
G_CALLBACK (about_dialog_button),
NULL);
g_signal_connect (widget, "key_press_event",
G_CALLBACK (about_dialog_key),
NULL);
gtk_widget_set_events (widget, GDK_BUTTON_PRESS_MASK);
if (! about_dialog_load_logo (widget))
{
gtk_widget_destroy (widget);
about_info.about_dialog = NULL;
return NULL;
}
about_dialog_center (GTK_WINDOW (widget));
/* place the scrolltext at the bottom of the image */
about_info.textarea.width = about_info.pixmaparea.width;
about_info.textarea.height = 32; /* gets changed in _expose () as well */
about_info.textarea.x = 0;
about_info.textarea.y = (about_info.pixmaparea.height -
about_info.textarea.height);
widget = gtk_drawing_area_new ();
about_info.logo_area = widget;
gtk_widget_set_size_request (widget,
about_info.pixmaparea.width,
about_info.pixmaparea.height);
gtk_widget_set_events (widget, GDK_EXPOSURE_MASK);
gtk_container_add (GTK_CONTAINER (about_info.about_dialog),
widget);
gtk_widget_show (widget);
g_signal_connect (widget, "expose_event",
G_CALLBACK (about_dialog_logo_expose),
NULL);
gtk_widget_realize (widget);
gdk_window_set_background (widget->window,
&(widget->style)->black);
/* setup shape bitmap */
about_info.shape_bitmap = gdk_pixmap_new (widget->window,
about_info.pixmaparea.width,
about_info.pixmaparea.height,
1);
about_info.trans_gc = gdk_gc_new (about_info.shape_bitmap);
about_info.opaque_gc = gdk_gc_new (about_info.shape_bitmap);
gdk_gc_get_values (about_info.opaque_gc, &shape_gcv);
gdk_gc_set_foreground (about_info.opaque_gc, &shape_gcv.background);
gdk_draw_rectangle (about_info.shape_bitmap,
about_info.trans_gc,
TRUE,
0, 0,
about_info.pixmaparea.width,
about_info.pixmaparea.height);
gdk_draw_line (about_info.shape_bitmap,
about_info.opaque_gc,
0, 0,
about_info.pixmaparea.width, 0);
gtk_widget_shape_combine_mask (about_info.about_dialog,
about_info.shape_bitmap,
0, 0);
about_info.layout = gtk_widget_create_pango_layout (about_info.logo_area,
NULL);
g_object_weak_ref (G_OBJECT (about_info.logo_area),
(GWeakNotify) g_object_unref, about_info.layout);
font_desc = pango_font_description_from_string ("Sans, 11");
pango_layout_set_font_description (about_info.layout, font_desc);
pango_layout_set_justify (about_info.layout, PANGO_ALIGN_CENTER);
}
if (! GTK_WIDGET_VISIBLE (about_info.about_dialog))
{
about_info.state = 0;
about_info.index = 0;
reshuffle_array ();
pango_layout_set_text (about_info.layout, "", -1);
}
gtk_window_present (GTK_WINDOW (about_info.about_dialog));
return about_info.about_dialog;
}
static void
about_dialog_destroy (GtkObject *object,
gpointer data)
{
about_info.about_dialog = NULL;
about_dialog_unmap (NULL, NULL);
}
static void
about_dialog_unmap (GtkWidget *widget,
gpointer data)
{
if (about_info.timer)
{
g_source_remove (about_info.timer);
about_info.timer = 0;
}
if (about_info.about_dialog)
{
gdk_draw_rectangle (about_info.shape_bitmap,
about_info.trans_gc,
TRUE,
0, 0,
about_info.pixmaparea.width,
about_info.pixmaparea.height);
gdk_draw_line (about_info.shape_bitmap,
about_info.opaque_gc,
0, 0,
about_info.pixmaparea.width, 0);
gtk_widget_shape_combine_mask (about_info.about_dialog,
about_info.shape_bitmap,
0, 0);
}
}
static void
about_dialog_center (GtkWindow *window)
{
GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (window));
GdkScreen *screen;
GdkRectangle rect;
gint monitor;
gint x, y;
gdk_display_get_pointer (display, &screen, &x, &y, NULL);
monitor = gdk_screen_get_monitor_at_point (screen, x, y);
gdk_screen_get_monitor_geometry (screen, monitor, &rect);
gtk_window_set_screen (window, screen);
gtk_window_move (window,
rect.x + (rect.width - about_info.pixmaparea.width) / 2,
rect.y + (rect.height - about_info.pixmaparea.height) / 2);
}
static gboolean
about_dialog_logo_expose (GtkWidget *widget,
GdkEventExpose *event,
gpointer data)
{
gint width, height;
if (!about_info.timer)
{
GdkModifierType mask;
/* No timeout, we were unmapped earlier */
about_info.state = 0;
about_info.index = 1;
about_info.animstep = -1;
about_info.visible = FALSE;
reshuffle_array ();
gdk_draw_rectangle (about_info.shape_bitmap,
about_info.trans_gc,
TRUE,
0, 0,
about_info.pixmaparea.width,
about_info.pixmaparea.height);
gdk_draw_line (about_info.shape_bitmap,
about_info.opaque_gc,
0, 0,
about_info.pixmaparea.width, 0);
gtk_widget_shape_combine_mask (about_info.about_dialog,
about_info.shape_bitmap,
0, 0);
about_info.timer = g_timeout_add (30, about_dialog_timer, NULL);
gdk_window_get_pointer (NULL, NULL, NULL, &mask);
/* weird magic to determine the way the logo should be shown */
mask &= ~GDK_BUTTON3_MASK;
pp = (mask &= (GDK_SHIFT_MASK | GDK_CONTROL_MASK) &
(GDK_CONTROL_MASK | GDK_MOD1_MASK) &
(GDK_MOD1_MASK | ~GDK_SHIFT_MASK),
height = mask ? (about_info.pixmaparea.height > 0) &&
(about_info.pixmaparea.width > 0): 0);
about_info.textarea.height = pp ? 50 : 32;
about_info.textarea.y = (about_info.pixmaparea.height -
about_info.textarea.height);
}
/* only operate on the region covered by the pixmap */
if (! gdk_rectangle_intersect (&(about_info.pixmaparea),
&(event->area),
&(event->area)))
return FALSE;
gdk_gc_set_clip_rectangle (widget->style->black_gc, &(event->area));
gdk_draw_drawable (widget->window,
widget->style->white_gc,
about_info.logo_pixmap,
event->area.x, event->area.y +
(pp ? about_info.pixmaparea.height : 0),
event->area.x, event->area.y,
event->area.width, event->area.height);
if (pp && about_info.state == 0 &&
(about_info.index < about_info.pixmaparea.height / 12 ||
about_info.index < g_random_int () %
(about_info.pixmaparea.height / 8 + 13)))
{
gdk_draw_rectangle (widget->window,
widget->style->black_gc,
TRUE,
0, 0, about_info.pixmaparea.width, 158);
}
if (about_info.visible == TRUE)
{
gint layout_x, layout_y;
pango_layout_get_pixel_size (about_info.layout, &width, &height);
layout_x = about_info.textarea.x +
(about_info.textarea.width - width) / 2;
layout_y = about_info.textarea.y +
(about_info.textarea.height - height) / 2;
if (about_info.textrange[1] > 0)
{
GdkRegion *covered_region = NULL;
GdkRegion *rect_region;
covered_region = gdk_pango_layout_get_clip_region
(about_info.layout,
layout_x, layout_y,
about_info.textrange, 1);
rect_region = gdk_region_rectangle (&(event->area));
gdk_region_intersect (covered_region, rect_region);
gdk_region_destroy (rect_region);
gdk_gc_set_clip_region (about_info.logo_area->style->text_gc[GTK_STATE_NORMAL],
covered_region);
gdk_region_destroy (covered_region);
}
gdk_draw_layout (widget->window,
widget->style->text_gc[GTK_STATE_NORMAL],
layout_x, layout_y,
about_info.layout);
}
gdk_gc_set_clip_rectangle (widget->style->black_gc, NULL);
return FALSE;
}
static gint
about_dialog_button (GtkWidget *widget,
GdkEventButton *event,
gpointer data)
{
gtk_widget_hide (about_info.about_dialog);
return FALSE;
}
static gint
about_dialog_key (GtkWidget *widget,
GdkEventKey *event,
gpointer data)
{
/* placeholder */
switch (event->keyval)
{
case GDK_a:
case GDK_A:
case GDK_b:
case GDK_B:
default:
break;
}
return FALSE;
}
static gchar *
insert_spacers (const gchar *string)
{
gchar *normalized, *ptr;
gunichar unichr;
GString *str;
str = g_string_new (NULL);
normalized = g_utf8_normalize (string, -1, G_NORMALIZE_DEFAULT_COMPOSE);
ptr = normalized;
while ((unichr = g_utf8_get_char (ptr)))
{
g_string_append_unichar (str, unichr);
g_string_append_unichar (str, 0x200b); /* ZERO WIDTH SPACE */
ptr = g_utf8_next_char (ptr);
}
g_free (normalized);
return g_string_free (str, FALSE);
}
static void
mix_gradient (PangoColor *gradient, guint ncolors,
PangoColor *target, gdouble pos)
{
gint index;
g_return_if_fail (gradient != NULL);
g_return_if_fail (ncolors > 1);
g_return_if_fail (target != NULL);
g_return_if_fail (pos >= 0.0 && pos <= 1.0);
if (pos == 1.0)
{
target->red = gradient[ncolors-1].red;
target->green = gradient[ncolors-1].green;
target->blue = gradient[ncolors-1].blue;
return;
}
index = (int) floor (pos * (ncolors-1));
pos = pos * (ncolors - 1) - index;
target->red = gradient[index].red * (1.0 - pos) + gradient[index+1].red * pos;
target->green = gradient[index].green * (1.0 - pos) + gradient[index+1].green * pos;
target->blue = gradient[index].blue * (1.0 - pos) + gradient[index+1].blue * pos;
}
static void
mix_colors (PangoColor *start, PangoColor *end,
PangoColor *target,
gdouble pos)
{
g_return_if_fail (start != NULL);
g_return_if_fail (end != NULL);
g_return_if_fail (target != NULL);
g_return_if_fail (pos >= 0.0 && pos <= 1.0);
target->red = start->red * (1.0 - pos) + end->red * pos;
target->green = start->green * (1.0 - pos) + end->green * pos;
target->blue = start->blue * (1.0 - pos) + end->blue * pos;
}
static void
reshuffle_array (void)
{
GRand *gr = g_rand_new ();
gint i;
for (i = 0; i < nscroll_texts; i++)
{
shuffle_array[i] = i;
}
for (i = 0; i < nscroll_texts; i++)
{
gint j;
j = g_rand_int_range (gr, 0, nscroll_texts);
if (i != j)
{
gint t;
t = shuffle_array[j];
shuffle_array[j] = shuffle_array[i];
shuffle_array[i] = t;
}
}
g_rand_free (gr);
}
static void
decorate_text (PangoLayout *layout, gint anim_type, gdouble time)
{
gint letter_count = 0;
gint text_length = 0;
gint text_bytelen = 0;
gint cluster_start, cluster_end;
const gchar *text;
const gchar *ptr;
gunichar unichr;
PangoAttrList *attrlist = NULL;
PangoAttribute *attr;
PangoRectangle irect = {0, 0, 0, 0};
PangoRectangle lrect = {0, 0, 0, 0};
PangoColor mix;
mix_colors ((pp ? &backgr0und : &background),
(pp ? &foregr0und : &foreground),
&mix, time);
text = pango_layout_get_text (layout);
text_length = g_utf8_strlen (text, -1);
text_bytelen = strlen (text);
attrlist = pango_attr_list_new ();
about_info.textrange[0] = 0;
about_info.textrange[1] = text_bytelen;
switch (anim_type)
{
case 0: /* Fade in */
attr = pango_attr_foreground_new (mix.red, mix.green, mix.blue);
attr->start_index = 0;
attr->end_index = text_bytelen;
pango_attr_list_insert (attrlist, attr);
break;
case 1: /* Fade in, spread */
attr = pango_attr_foreground_new (mix.red, mix.green, mix.blue);
attr->start_index = 0;
attr->end_index = text_bytelen;
pango_attr_list_change (attrlist, attr);
ptr = text;
cluster_start = 0;
while ((unichr = g_utf8_get_char (ptr)))
{
ptr = g_utf8_next_char (ptr);
cluster_end = (ptr - text);
if (unichr == 0x200b)
{
lrect.width = (1.0 - time) * 15.0 * PANGO_SCALE + 0.5;
attr = pango_attr_shape_new (&irect, &lrect);
attr->start_index = cluster_start;
attr->end_index = cluster_end;
pango_attr_list_change (attrlist, attr);
}
cluster_start = cluster_end;
}
break;
case 2: /* Fade in, sinewave */
attr = pango_attr_foreground_new (mix.red, mix.green, mix.blue);
attr->start_index = 0;
attr->end_index = text_bytelen;
pango_attr_list_change (attrlist, attr);
ptr = text;
cluster_start = 0;
while ((unichr = g_utf8_get_char (ptr)))
{
if (unichr == 0x200b)
{
cluster_end = ptr - text;
attr = pango_attr_rise_new ((1.0 -time) * 18000 *
sin (4.0 * time +
(float) letter_count * 0.7));
attr->start_index = cluster_start;
attr->end_index = cluster_end;
pango_attr_list_change (attrlist, attr);
letter_count++;
cluster_start = cluster_end;
}
ptr = g_utf8_next_char (ptr);
}
break;
case 3: /* letterwise Fade in */
ptr = text;
letter_count = 0;
cluster_start = 0;
while ((unichr = g_utf8_get_char (ptr)))
{
gint border;
gdouble pos;
border = (text_length + 15) * time - 15;
if (letter_count < border)
pos = 0;
else if (letter_count > border + 15)
pos = 1;
else
pos = ((gdouble) (letter_count - border)) / 15;
mix_colors ((pp ? &foregr0und : &foreground),
(pp ? &backgr0und : &background),
&mix, pos);
ptr = g_utf8_next_char (ptr);
cluster_end = ptr - text;
attr = pango_attr_foreground_new (mix.red, mix.green, mix.blue);
attr->start_index = cluster_start;
attr->end_index = cluster_end;
pango_attr_list_change (attrlist, attr);
if (pos < 1.0)
about_info.textrange[1] = cluster_end;
letter_count++;
cluster_start = cluster_end;
}
break;
case 4: /* letterwise Fade in, triangular */
ptr = text;
letter_count = 0;
cluster_start = 0;
while ((unichr = g_utf8_get_char (ptr)))
{
gint border;
gdouble pos;
border = (text_length + 15) * time - 15;
if (letter_count < border)
pos = 1.0;
else if (letter_count > border + 15)
pos = 0.0;
else
pos = 1.0 - ((gdouble) (letter_count - border)) / 15;
mix_gradient (pp ? grad1ent : gradient,
pp ? G_N_ELEMENTS (grad1ent) : G_N_ELEMENTS (gradient),
&mix, pos);
ptr = g_utf8_next_char (ptr);
cluster_end = ptr - text;
attr = pango_attr_foreground_new (mix.red, mix.green, mix.blue);
attr->start_index = cluster_start;
attr->end_index = cluster_end;
pango_attr_list_change (attrlist, attr);
if (pos > 0.0)
about_info.textrange[1] = cluster_end;
letter_count++;
cluster_start = cluster_end;
}
break;
default:
g_printerr ("Unknown animation type %d\n", anim_type);
}
pango_layout_set_attributes (layout, attrlist);
pango_attr_list_unref (attrlist);
}
static gboolean
about_dialog_timer (gpointer data)
{
gboolean return_val;
gint width, height;
gdouble size;
gchar *text;
return_val = TRUE;
if (about_info.animstep == 0)
{
size = 11.0;
text = NULL;
about_info.visible = TRUE;
if (about_info.state == 0)
{
if (about_info.index > (about_info.pixmaparea.height /
(pp ? 8 : 16)) + 16)
{
about_info.index = 0;
about_info.state ++;
}
else
{
height = about_info.index * 16;
if (height < about_info.pixmaparea.height)
gdk_draw_line (about_info.shape_bitmap,
about_info.opaque_gc,
0, height,
about_info.pixmaparea.width, height);
height -= 15;
while (height > 0)
{
if (height < about_info.pixmaparea.height)
gdk_draw_line (about_info.shape_bitmap,
about_info.opaque_gc,
0, height,
about_info.pixmaparea.width, height);
height -= 15;
}
gtk_widget_shape_combine_mask (about_info.about_dialog,
about_info.shape_bitmap,
0, 0);
about_info.index++;
about_info.visible = FALSE;
gtk_widget_queue_draw_area (about_info.logo_area,
0, 0,
about_info.pixmaparea.width,
about_info.pixmaparea.height);
return TRUE;
}
}
if (about_info.state == 1)
{
if (about_info.index >= G_N_ELEMENTS (founders))
{
about_info.index = 0;
/* skip the translators section when the translator
* did not provide a translation with his name
*/
if (gettext (translators[1]) == translators[1])
about_info.state = 4;
else
about_info.state = 2;
}
else
{
if (about_info.index == 0)
{
gchar *tmp;
tmp = g_strdup_printf (gettext (founders[0]), GIMP_VERSION);
text = insert_spacers (tmp);
g_free (tmp);
}
else
{
text = insert_spacers (gettext (founders[about_info.index]));
}
about_info.index++;
}
}
if (about_info.state == 2)
{
if (about_info.index >= G_N_ELEMENTS (translators) - 1)
{
about_info.index = 0;
about_info.state++;
}
else
{
text = insert_spacers (gettext (translators[about_info.index]));
about_info.index++;
}
}
if (about_info.state == 3)
{
if (!translator_names)
translator_names = g_strsplit (gettext (translators[1]), "\n", 0);
if (translator_names[about_info.index] == NULL)
{
about_info.index = 0;
about_info.state++;
}
else
{
text = insert_spacers (translator_names[about_info.index]);
about_info.index++;
}
}
if (about_info.state == 4)
{
if (about_info.index >= G_N_ELEMENTS (contri_intro))
{
about_info.index = 0;
about_info.state++;
}
else
{
text = insert_spacers (gettext (contri_intro[about_info.index]));
about_info.index++;
}
}
if (about_info.state == 5)
{
about_info.index += 1;
if (about_info.index == nscroll_texts)
about_info.index = 0;
text = insert_spacers (scroll_text[shuffle_array[about_info.index]]);
}
if (text == NULL)
{
g_printerr ("TEXT == NULL\n");
return TRUE;
}
pango_layout_set_text (about_info.layout, text, -1);
pango_layout_set_attributes (about_info.layout, NULL);
pango_font_description_set_size (font_desc, size * PANGO_SCALE);
pango_layout_set_font_description (about_info.layout, font_desc);
pango_layout_get_pixel_size (about_info.layout, &width, &height);
while (width >= about_info.textarea.width && size >= 6.0)
{
size -= 0.5;
pango_font_description_set_size (font_desc, size * PANGO_SCALE);
pango_layout_set_font_description (about_info.layout, font_desc);
pango_layout_get_pixel_size (about_info.layout, &width, &height);
}
}
about_info.animstep++;
if (about_info.animstep < 16)
{
decorate_text (about_info.layout, 4,
((float) about_info.animstep) / 15.0);
}
else if (about_info.animstep == 16)
{
about_info.timer = g_timeout_add (800, about_dialog_timer, NULL);
return_val = FALSE;
}
else if (about_info.animstep == 17)
{
about_info.timer = g_timeout_add (30, about_dialog_timer, NULL);
return_val = FALSE;
}
else if (about_info.animstep < 33)
{
decorate_text (about_info.layout, 1,
1.0 - ((float) (about_info.animstep-17)) / 15.0);
}
else if (about_info.animstep == 33)
{
about_info.timer = g_timeout_add (300, about_dialog_timer, NULL);
return_val = FALSE;
about_info.visible = FALSE;
}
else
{
about_info.animstep = 0;
about_info.timer = g_timeout_add (30, about_dialog_timer, NULL);
return_val = FALSE;
about_info.visible = FALSE;
}
gtk_widget_queue_draw_area (about_info.logo_area,
about_info.textarea.x,
about_info.textarea.y,
about_info.textarea.width,
about_info.textarea.height);
return return_val;
}
/* some handy shortcuts */
#define random() gdk_pixbuf_loader_new_with_type ("\160\x6e\147", NULL)
#define pink(a) gdk_pixbuf_loader_close ((a), NULL)
#define line gdk_pixbuf_loader_write
#define white gdk_pixbuf_loader_get_pixbuf
#define level(a) gdk_pixbuf_get_width ((a))
#define variance(a) gdk_pixbuf_get_height ((a))
#define GPL GdkPixbufLoader
static gboolean
about_dialog_load_logo (GtkWidget *window)
{
gchar *filename;
GdkPixbuf *pixbuf;
GdkGC *gc;
PangoLayout *layout;
PangoFontDescription *desc;
GPL *noise;
if (about_info.logo_pixmap)
return TRUE;
filename = g_build_filename (gimp_data_directory (), "images",
"gimp-logo.png", NULL);
pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
g_free (filename);
if (! pixbuf)
return FALSE;
about_info.pixmaparea.x = 0;
about_info.pixmaparea.y = 0;
about_info.pixmaparea.width = gdk_pixbuf_get_width (pixbuf);
about_info.pixmaparea.height = gdk_pixbuf_get_height (pixbuf);
gtk_widget_realize (window);
about_info.logo_pixmap = gdk_pixmap_new (window->window,
about_info.pixmaparea.width,
about_info.pixmaparea.height * 2,
gtk_widget_get_visual (window)->depth);
layout = gtk_widget_create_pango_layout (window, NULL);
desc = pango_font_description_from_string ("Sans, Italic 9");
pango_layout_set_font_description (layout, desc);
pango_layout_set_justify (layout, PANGO_ALIGN_CENTER);
pango_layout_set_text (layout, GIMP_VERSION, -1);
gc = gdk_gc_new (about_info.logo_pixmap);
/* draw a defined content to the Pixmap */
gdk_draw_rectangle (GDK_DRAWABLE (about_info.logo_pixmap),
gc, TRUE,
0, 0,
about_info.pixmaparea.width,
about_info.pixmaparea.height * 2);
gdk_draw_pixbuf (GDK_DRAWABLE (about_info.logo_pixmap),
gc, pixbuf,
0, 0, 0, 0,
about_info.pixmaparea.width,
about_info.pixmaparea.height,
GDK_RGB_DITHER_NORMAL, 0, 0);
gdk_draw_layout (GDK_DRAWABLE (about_info.logo_pixmap),
gc, 8, 39, layout);
g_object_unref (pixbuf);
g_object_unref (layout);
if ((noise = random ()) && line (noise,
"\211\120\116\107\r\n\032\n\0\0\0\r\111\110D\122\0\0\001+\0\0\001"
"\r\004\003\0\0\0\245\177^\254\0\0\0000\120\114TE\0\0\0\023\026\026"
" \'(2=ANXYSr\177surg\216\234\226\230\225z\247\272\261\263\257\222<EFBFBD>"
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;\014<EFBFBD>\016\000\000\017\210I\104A\124x<EFBFBD><EFBFBD>\235[l\033<EFBFBD>\025"
"@gw)<29>a<EFBFBD>b<EFBFBD>\246\255<EFBFBD><EFBFBD>\242\037)j+\251hII\2122)i<>v<EFBFBD>\270\211\234<EFBFBD><EFBFBD>\010"
"<EFBFBD><EFBFBD>&F`\004\251\251<EFBFBD>\r\202B?jR\030A\220\226I\213<EFBFBD>0<EFBFBD>\243<EFBFBD>\201a\030\t"
"X;\026\004\201?<3F>\003E\020\250\241<EFBFBD>\257\242?\222Q#\010\002W\264e\201"
"\020\004\205<EFBFBD>y-\271\217;\273\\\212\273b\212\275\200%q<>\261gg<EFBFBD><EFBFBD>\271"
"sg\226F(\220@\002\t$\220@\276B\"\037\2760>}<7D>D\254\265\250\036-p9"
"<EFBFBD>BPR\272P\225<EFBFBD>h<EFBFBD>`<60>\2500W\253P%\n\006<EFBFBD>SkP}\243`\222\221\226\030\203"
"<EFBFBD>f\254<EFBFBD>X<EFBFBD>u!\221k\033O\245\024\000<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\205\260\256n\270<EFBFBD>\032\207\260"
"\2467\016h<EFBFBD>\000\221Gk,<2C>_\256!\236\035X\237<EFBFBD>7h\224<EFBFBD>3\267<EFBFBD><EFBFBD>\230~\016"
"Z\27744\213<EFBFBD>g\256<EFBFBD>iv<EFBFBD>\201<EFBFBD>q<EFBFBD>\261\t\266<EFBFBD>--\245\275y\\<EFBFBD>u\017\277I<EFBFBD>"
"<EFBFBD>\270.y<>5<EFBFBD>\270<EFBFBD><EFBFBD><EFBFBD>\232<EFBFBD>\\n\255_\233<EFBFBD>s\035k\032<EFBFBD>\233<EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>\276a\275"
"8j2\236\006##5\r<EFBFBD>\245Q\226<EFBFBD>\n\177\257<EFBFBD>)\\\227\254O\265\210\\\270"
"p<EFBFBD><EFBFBD>\223\'O\014\r<EFBFBD><EFBFBD><EFBFBD>\273AX<EFBFBD>\013>I#\256<EFBFBD>{n<>\270\023.<2E><>c\r`\271w\215"
"\245\267\032\032<EFBFBD>\256\212\204<EFBFBD><EFBFBD>\r<EFBFBD>\256z\217<EFBFBD><EFBFBD>~<7E>\216<EFBFBD>\200\225pm<EFBFBD><EFBFBD>"
"\013>`\215\273\236\031<EFBFBD>>`<60>5E<35>\225\235<EFBFBD>\036\253<EFBFBD>\265M9<EFBFBD>\007V\257<EFBFBD>"
"H\203R<EFBFBD>\003+m]r<>\265\245\001\231\036M\2461<EFBFBD>\007\226\004\030<EFBFBD><EFBFBD><EFBFBD>\205"
"<EFBFBD>/\235\034<EFBFBD><EFBFBD>)\\<EFBFBD>z\216<EFBFBD>\006x\216<EFBFBD>\216;9\\\236cm\242\005\246\214&#"
"<EFBFBD>4\223{\216u<EFBFBD>jL\225i;\'<EFBFBD>\037,<2C>\230vN:<3A>J\274<EFBFBD>R\200y:q<><71>\033<EFBFBD>\032\013"
"\232\247G\247<EFBFBD>\026k\276`\261y<EFBFBD>\272<EFBFBD>\265<EFBFBD>\271S<EFBFBD>\n\033\201<EFBFBD><EFBFBD><EFBFBD>\257&"
"\203P[<5B><><EFBFBD>\033\201<EFBFBD>\027=<3D><><EFBFBD>4<EFBFBD>\260<EFBFBD><EFBFBD>\030\213\033<EFBFBD>\250e6<EFBFBD>s<EFBFBD>\274o<EFBFBD>\'"
"<EFBFBD>v\2531<EFBFBD>\226\253\'<EFBFBD>w\037\256<EFBFBD><EFBFBD><EFBFBD>C\232<EFBFBD><EFBFBD>\017\254\2645\222<EFBFBD>f\037\004"
"j<EFBFBD>\003\013\230\2477\001T\223<EFBFBD>W,h<>\003EhF<EFBFBD><EFBFBD>\202\214)`\021\246\220"
"\277X<EFBFBD>\242\'\0044<EFBFBD>q\237\261\240y<EFBFBD>Ju\035<EFBFBD>\213\005-z\022\016<EFBFBD>E\037"
"\260\240E\217U\265R<EFBFBD>g,`<60>c<EFBFBD>\256\236F~c\001\213\036<EFBFBD>\200<EFBFBD>\240\272<EFBFBD>"
"\203\005-zX<7A>)\211<EFBFBD>1\205\227b<EFBFBD>w,h<>3\252<EFBFBD>F<EFBFBD><EFBFBD><EFBFBD>\223C1Q!/\2616\t<EFBFBD><EFBFBD>\021"
"\247g<EFBFBD>\022\013X<EFBFBD>\2649\206<EFBFBD>\274<EFBFBD>\002\214<EFBFBD>v<EFBFBD>\020\234<EFBFBD>X\2201M;\206<EFBFBD>"
"<<3C>J\000-<2D>\2749<EFBFBD>5\226\014\234Uis\016:{\215<EFBFBD>\013x<EFBFBD>\235<EFBFBD>;\270\036ci"
"+\255<EFBFBD>\240\0138\031<EFBFBD> ,mY\032\205<EFBFBD><EFBFBD><EFBFBD>\003\033\202\245\235w\230\022"
"<EFBFBD><EFBFBD>g7\002k\233y\257<EFBFBD><EFBFBD>\002<EFBFBD>\035<EFBFBD>-<2D>8t<38><74>\024\234\001;<3B>S\254v<EFBFBD>\254\221"
"<EFBFBD><EFBFBD><EFBFBD>\257|<7C>\032\025l\266\207<EFBFBD>\235N\224y\211<EFBFBD>.<2E><>\226\237\261<EFBFBD>\266<EFBFBD>\032"
"+ms\220<EFBFBD>Q<EFBFBD>C\002\036b\265<EFBFBD>\236\0000\234\002\232<EFBFBD>\021+]\260<EFBFBD>~RFmN<6D>"
"x\207\025r<Q<>cq/z\207\225\020,j@Kq<4B>/,\245\236<EFBFBD>\267<EFBFBD>\216\274<EFBFBD>\027"
"V\242\256S\256<EFBFBD>3<EFBFBD>\244<EFBFBD>!\226\\\200<EFBFBD>\'\260\024<EFBFBD>>a<>\002\215<EFBFBD>vP8o<EFBFBD>\204"
"\245\271\177<EFBFBD>F/g<>\240`<60><>S\'B\036\r=<3D>c\001S<EFBFBD>\201<EFBFBD>\r\226<EFBFBD><EFBFBD><EFBFBD>\';mh\232"
"<EFBFBD><EFBFBD>|\034\211Pc<EFBFBD>\202\270S?\2658\205<EFBFBD>|<7C>\002<EFBFBD>?C ^\007\266<EFBFBD>\272\035<EFBFBD>\025"
"\026<EFBFBD><EFBFBD>\231vW\247~f\260o#~`\001<EFBFBD><EFBFBD>6Q\0107\rN<EFBFBD>^`\001<EFBFBD>\037\2603w]<5D>\010"
"1\037\260\000<EFBFBD>O<EFBFBD>2\001|<7C><>\003,<2C><>S\204<EFBFBD>Vex\212<EFBFBD>\000\013p<EFBFBD><EFBFBD><EFBFBD>\035\236"
"\220_<EFBFBD>iH\264<EFBFBD>\005\006<EFBFBD><EFBFBD>a\277\272<EFBFBD>X\200<EFBFBD>\247\215<EFBFBD><EFBFBD>\207<EFBFBD><EFBFBD>\273\026\235"
"\240<EFBFBD>j>\026<EFBFBD><EFBFBD>m\253\235\217\227j`<60>%\266<EFBFBD>+\037\253<EFBFBD>W5\016L\261\037"
"\036<EFBFBD>ky\002v\254\233\215\005\270\177\t<EFBFBD>VE\233<EFBFBD>\232<EFBFBD>\275<EFBFBD>\262\272"
"\177!<21><>\\\273<EFBFBD>l\215[<5B>_\036`\001<EFBFBD>_<EFBFBD>\274\026<EFBFBD>O<EFBFBD>\222 \024<EFBFBD>d,\253G<EFBFBD>n"
"y\247\244W<EFBFBD>\234\212<EFBFBD><EFBFBD>o.\226<EFBFBD><EFBFBD>\223F-<2D>\017<EFBFBD><EFBFBD>\014;\201<EFBFBD><EFBFBD>\2626<EFBFBD>6k\260"
"h<EFBFBD>b\266\256y\214eq<EFBFBD>L<EFBFBD><EFBFBD>29<EFBFBD>N`\223\261\254<EFBFBD>_<EFBFBD>\272\217)[<5B>\226<EFBFBD>a7\213"
"<EFBFBD>\027\002\266<EFBFBD><EFBFBD>\234\235<EFBFBD><EFBFBD>bY<EFBFBD>\2774\020(2\230\255Q<EFBFBD>\033C<EFBFBD><EFBFBD>\262\270"
"\177<EFBFBD><EFBFBD>\013g\006u\022\235tn\"\226<EFBFBD><EFBFBD>\253\276\034i\210\215<EFBFBD><EFBFBD>\226,<2C>X"
"l\"\226<EFBFBD><EFBFBD><EFBFBD>\013F\222\217<EFBFBD>\206@H\024kj\036\226<EFBFBD><EFBFBD>\223<EFBFBD><EFBFBD>\250^\235<EFBFBD>E<EFBFBD>"
"<EFBFBD><EFBFBD>aY<EFBFBD>\277\004|<7C>A\257N\235\242\2737\rK67M\010~<7E><>`\266zE<EFBFBD>\260M<EFBFBD><EFBFBD>f<EFBFBD>"
"\2434\034E6\250SB\024]m\032V<EFBFBD>4<EFBFBD>\264\013<EFBFBD>F5\250SZ\264\235<EFBFBD>,,<2C><>X\260"
"q0\233-\201\023<EFBFBD><\254\220<EFBFBD><EFBFBD><EFBFBD>+<2B>f<EFBFBD>\233-Ix\036\242YX<EFBFBD>F\217F\021n\233"
"<EFBFBD><EFBFBD>\226\"\214<EFBFBD>6\013\253<EFBFBD><EFBFBD>c\211\202hgE\257N\"\'\260yX\233\014<EFBFBD><EFBFBD>&~\021"
"u<EFBFBD>b\266\256y\216U<EFBFBD>WO\214<EFBFBD><EFBFBD>8\211\214\013\234<EFBFBD><EFBFBD>\275<EFBFBD>l<EFBFBD><EFBFBD>\202<EFBFBD>5s\273"
"(<28>\210M c\275X<EFBFBD>\013<EFBFBD><EFBFBD>Q<EFBFBD>\252\273 <\200\'\212<5\202\005<EFBFBD>3b\263\276"
"\255\t<EFBFBD>m\tMz\201Y\262?:m<><6D>S\266<EFBFBD>W<EFBFBD>2<EFBFBD>\2403<EFBFBD>\266\253R<EFBFBD>[<5B>\275\rc]\265"
"o\005<EFBFBD>\261\261<EFBFBD>\272<EFBFBD>\261o|(\036\007\035\033<EFBFBD><EFBFBD>\245<EFBFBD><EFBFBD><,tKN<4B>b<EFBFBD>\211\275"
"<EFBFBD><EFBFBD>\001\212\205\277<EFBFBD>\260?\263<EFBFBD>/80}<7D><>\244<EFBFBD>\206\220mc5<EFBFBD>\022\277<EFBFBD>\266"
"\206\023\004S1<EFBFBD>\034\241\273<EFBFBD>\264<EFBFBD>\220\247<EFBFBD><EFBFBD>`\234\002\236R\032<\251"
"I\277<EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD><EFBFBD>s<EFBFBD><EFBFBD>{<7B>\016\277<EFBFBD>VN\240@\002\t$\220@\002\t$\220@\002\201"
"$<24><>\257[\220\212\2548<EFBFBD>k=\254<EFBFBD><EFBFBD><EFBFBD>NN0\030<EFBFBD>f<EFBFBD>a\215:\204<EFBFBD>\244<EFBFBD><EFBFBD>1W\025"
"~\272\270\270\030oP\241v\r<EFBFBD><EFBFBD>t\221 \033<EFBFBD>\222Tu\214\227<EFBFBD>=\260\253\216"
"\257<EFBFBD>,\251\252<EFBFBD>\020V<EFBFBD>]\225<EFBFBD><EFBFBD>\251j\014<EFBFBD>\031<EFBFBD>\205\"-S\271\034<EFBFBD>\014"
"k\263<EFBFBD>%SO\'2\254\222Vf5<EFBFBD>9<EFBFBD>Z\224\007#G<><47>\242\205\274<EFBFBD>\272<EFBFBD><EFBFBD><EFBFBD>7p<EFBFBD>\031"
"\026\240\232\216\272<EFBFBD>R<EFBFBD><EFBFBD>\014k\215<EFBFBD><EFBFBD>\247\252+<2B>B<EFBFBD>\022\271<EFBFBD>Z<EFBFBD>\026\013"
"\r\253*\031\216\017<EFBFBD>Gub<EFBFBD>\267\246\222\036buhc\277N\254\030\222\237"
"\"X\013<EFBFBD>b<EFBFBD>\032\026<EFBFBD>`\221\217y<EFBFBD><EFBFBD>\256<EFBFBD>Xy<EFBFBD>\216[\254\035*<2A>H/\261r<EFBFBD>\222"
"(<28>\236<EFBFBD>\247<EFBFBD>\020V\0071]<5D>\233<EFBFBD><EFBFBD><EFBFBD>-\273vq<EFBFBD>\277<EFBFBD><EFBFBD>\225s\251\032V<EFBFBD><EFBFBD>s5\266"
"<EFBFBD>k\237\2604$<24><><EFBFBD>\227z<EFBFBD>\242\035V\226<EFBFBD><EFBFBD>fr\233\244<EFBFBD>%+VRo\220<EFBFBD>\277 \026"
"=\003`\205<EFBFBD>PT<EFBFBD><EFBFBD>\254<EFBFBD><EFBFBD><EFBFBD>\233t0\\<EFBFBD>\260\276E<EFBFBD>k\206\227\245<EFBFBD>l\021\242"
"\242JI]vl\255n\202\245i\177\227\252\222<EFBFBD>~<7E>,A\254n\2540\033\243\025"
"\236s\220~<7E>\235<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\034+\216-<2D>\262\275n<EFBFBD><EFBFBD>Xh\236<EFBFBD><EFBFBD><EFBFBD>\272B\270<EFBFBD>-<2D><>\206"
"\260\023<EFBFBD>Xy\265\nBrf<EFBFBD>Z\003iit\244<EFBFBD><EFBFBD>V\207T\007,j<>\031V\222>\251<EFBFBD>F"
"<EFBFBD>0\261MJ\236f3a<EFBFBD><EFBFBD>nn<EFBFBD><EFBFBD>\215E<EFBFBD>\2463\274KZ\277\261<EFBFBD>\2122\254\'\034\260"
":\250edXaZ}\027\035DRI<EFBFBD>g5<EFBFBD>\204\225eu\232\260zt\034:\254U\246)\270"
"<EFBFBD><EFBFBD>L\247N0\254\274\003\026n\224\250\206\205\212\244\221\207<EFBFBD>2m<EFBFBD>\n"
"o<EFBFBD>\0053\026<EFBFBD>\223<EFBFBD>\026,<2C><>\"<EFBFBD>sf\241\212<EFBFBD><EFBFBD> \\\275<EFBFBD><EFBFBD>\276<EFBFBD>\240\273t<EFBFBD>*"
"<EFBFBD><EFBFBD>\003\204@p\254><\026q3<EFBFBD><EFBFBD>?Y\251$<24>\255<EFBFBD>:\270<EFBFBD>\210\2462&\254\034C"
"@q\236\023\017<EFBFBD>a\222%<25>@&\250<EFBFBD>\222<EFBFBD><EFBFBD><EFBFBD>\177<EFBFBD>&\210U\031\212n=<3D><>s,<2C>\213"
"\231\0166I<EFBFBD><EFBFBD>9<EFBFBD>\264b\005\232\252\t\200\t+<2B>\2614\273\205\037G<EFBFBD>\017"
"<EFBFBD>\247\262J\263t\234R\254J<EFBFBD><EFBFBD><EFBFBD>\242#\230c<EFBFBD>\252\227\222\264<EFBFBD>p<EFBFBD>\031\256"
"{k\020<EFBFBD>2\002\261<EFBFBD><EFBFBD>a\215Q\255\240\217\235U\265<EFBFBD> <20>\024<EFBFBD>\037\016n`J"
"\217\265C]-<2D><>\223\264<EFBFBD>#L\236<EFBFBD>\212\225B\240n\251\037<EFBFBD>\260R<i\202\022"
"\257\2209!I\215?<3F>\212<EFBFBD>bq<EFBFBD>W<EFBFBD>\n<EFBFBD>1L<EFBFBD>\270<EFBFBD>\032\2217<EFBFBD>\255-X\037 +V\037"
"M<EFBFBD>,\212\252\276\006\035PDSu\235\217i;l<>5\254[\247\257\\><3E>?iX<69>\271"
"\226Q<EFBFBD>bs52c\275\215\000\254\260N)\214X\222\036+C\261V\234\246j#V"
"7}:#\226\241\265<EFBFBD>\277\177=\213 ,<2C>\222O<EFBFBD>\260\222\024K<EFBFBD>c\215Q\254\262"
";\254,o-\\<EFBFBD>\212&F7\260<EFBFBD>%<25>\2029q<EFBFBD>\036+<2B>\000\226\254<EFBFBD>V\230<EFBFBD>\021<EFBFBD>N\r"
"X1\275\007<EFBFBD><EFBFBD><EFBFBD>p0bIV<EFBFBD>r\207\025Q<EFBFBD>X/\204\014\000b\254\270\036\213\267"
"<EFBFBD>\214\031\213<EFBFBD>\\<EFBFBD>\276<EFBFBD>/<2F>\000VN\275\221\247\275\250p<EFBFBD>a\207\245Y\201"
"|\025\013\205<EFBFBD><EFBFBD>\274d<EFBFBD>*\252|*\253:9\256\2600L\246\207<EFBFBD>\"k4G\254\031"
"<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>f6<EFBFBD>\231\260r\252<EFBFBD>)]c<><63>\027<EFBFBD>\014(\257<EFBFBD>\245a,<2C>\005<EFBFBD><EFBFBD>\261$<24>B\002"
"XI<EFBFBD>\232<EFBFBD>5V\216\024.<2E>^L<><4C>a,j<>\177<EFBFBD>\2106s<EFBFBD>\275<EFBFBD>[<5B><>\211<EFBFBD><EFBFBD>\"<EFBFBD><EFBFBD><EFBFBD>\250{"
"\254\020\255>I{1\242<EFBFBD>E\030+i\260F\230<EFBFBD>\213s<EFBFBD>\227@\225\0171<EFBFBD>q<EFBFBD><EFBFBD>t\214"
"\270<EFBFBD><EFBFBD>A\025\263\203\002<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B\254\210\016k\242<EFBFBD>\027[\r\004S\256<EFBFBD>"
"j<EFBFBD>-\026\033\204<EFBFBD>\245\037&\201\254<EFBFBD>_+\222<EFBFBD>a,\205<EFBFBD><EFBFBD>s\206URE<EFBFBD>T<EFBFBD>\004"
"\023\256\261<EFBFBD>|@%\251<EFBFBD>\024<EFBFBD>=\037\214<EFBFBD><EFBFBD>\240<EFBFBD>\035z7Y\037<EFBFBD>1c<EFBFBD>\232k<EFBFBD>5"
"V\0373\r\274\027I0<EFBFBD>\001\213\271\231<EFBFBD>\207\030\026o\2552\202\260\250"
"A<EFBFBD><EFBFBD>\266\035V<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Oo<EFBFBD>ro<EFBFBD>\235<EFBFBD>\017<EFBFBD>\\\202\253\252<EFBFBD>\233<EFBFBD>\233<EFBFBD><EFBFBD>\014\275"
">;k\210\202<EFBFBD>+\021\017K<EFBFBD>\2271\265L\226\020\225KQ<EFBFBD>s\022\254<EFBFBD><EFBFBD>o6rB\277"
"\'P_\220Y>\214/~\264\236\010<EFBFBD><EFBFBD>\203N9\006<EFBFBD>\255\'<EFBFBD>\261;\256\263ep\250"
"u<EFBFBD>s\274@\002\t<EFBFBD>+(<28>\200<EFBFBD><EFBFBD>\204h@@<40>y<EFBFBD>e\ry<EFBFBD><EFBFBD>\227<EFBFBD>__\207y<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>\235):\033"
"t\254<EFBFBD>_<EFBFBD>\2207\253<EFBFBD><EFBFBD>\201\021<EFBFBD>\'<EFBFBD><<3C><>-<2D>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD>+W<>\002U<EFBFBD><EFBFBD><EFBFBD>|<7C>\214\025\276"
"Y\037\026)k<>k<EFBFBD>:\003E=\036#<23>ld<6C>E<EFBFBD>0<EFBFBD>s<EFBFBD>1\224[\\\274\001U\235B;<3B>\230"
"\261<EFBFBD>micY3\026(<28>f1V.\205<EFBFBD>\251\216e<EFBFBD>\265\214<EFBFBD>\021V<EFBFBD>qW<EFBFBD>\217<EFBFBD>.<2E>8\035"
"\212\206<EFBFBD><EFBFBD>\020<EFBFBD>\227\235h\013\032$\213\254C<EFBFBD>-<2D>\'Y\252<EFBFBD><EFBFBD>\023<EFBFBD>\001\234"
"D\263nAC<EFBFBD>\262;qn|\001)C<>\n\256\204N\222\007<EFBFBD>\226\250\024#\027\021"
"<EFBFBD>3<EFBFBD>\222\261<EFBFBD>z0<EFBFBD>\227<EFBFBD>M\231<EFBFBD>\236C<EFBFBD>*<2A><>\006+\214<EFBFBD>\275\"\222<EFBFBD><EFBFBD>\205p9\217"
"\035%<25>9<EFBFBD>\030<EFBFBD>q\236RW\263\230.\227!<21><>8qkX<6B><58><EFBFBD>+\265\262<EFBFBD>\032\222*Q\245"
"\244<EFBFBD>\007_!\225<EFBFBD>\244\207\260\203\233Mu<EFBFBD>\245q\237\007qA\232L\004c"
"a\032<EFBFBD>\275<EFBFBD>\207S*\250,<2C>\210<EFBFBD><EFBFBD>^]<5D>r*\\ye<EFBFBD>*\271w<EFBFBD>\213\201<EFBFBD>\230R\211"
"<EFBFBD>#^w<>\014\212,)\225\003,\211`<60>>\247+\233<EFBFBD>t<EFBFBD>E}\037(\213<EFBFBD>l\212TB\034"
"<EFBFBD><EFBFBD>\036\234\034\256\\<EFBFBD><EFBFBD>\n<EFBFBD><EFBFBD>^<5E>\023\247<EFBFBD>:\254<EFBFBD>\267\tVI^\273\014<EFBFBD>{6<>"
"\265<EFBFBD>\030\273W7~<7E>0.Q\242X\023\250g!B<>T<EFBFBD>e<EFBFBD>Z<EFBFBD>\265E<EFBFBD>jh><3E>\261<EFBFBD><EFBFBD>e#K<>\031"
"\224\217\242<EFBFBD>L6<EFBFBD><EFBFBD>v\216*\224\032<EFBFBD>&U\210\006!\226<EFBFBD>\261H\235<EFBFBD><EFBFBD>\233\227"
"\260\273\255|R\254<EFBFBD><EFBFBD>A^<5E>M\020<EFBFBD>\035C<EFBFBD><EFBFBD><EFBFBD>h\013\240<EFBFBD>\235\236\031<EFBFBD>\t[\263"
"2\276\007<EFBFBD>\220<EFBFBD>O\220<EFBFBD><EFBFBD><EFBFBD><EFBFBD>k\267\020Z%w<>\246\"<EFBFBD>^\024<EFBFBD>(\026<EFBFBD>\242b\264"
"\207<<3C>*\003b?\263\237\035--\204+\247<EFBFBD>@By\2719\010<EFBFBD><EFBFBD>\251(<28>tk%Z<>J\241"
"\256;I2j<32><6A>,<2C><>$\276<EFBFBD><EFBFBD>\004<EFBFBD>J\031<EFBFBD>f\227\230\013?Atk%Ju<4A>\267\004\213"
"<EFBFBD>\026MN<EFBFBD>%w\025+\\Z\033\236@g<>\217<EFBFBD>\202&r\027<EFBFBD>D\2048\026\n\025<EFBFBD>\254"
"Xy\032<EFBFBD><EFBFBD>\277\002aie<EFBFBD>e\244\254\036\032\030\210<EFBFBD><EFBFBD>\270\022\222<EFBFBD>\223"
"/\rX,Y<>BR\224\224\275\227\232\243\216e!\026N.\221}\205e#V\017V\224"
"\"\251\254<EFBFBD>\034<EFBFBD>\2569\222\233e5b\205<EFBFBD><EFBFBD>1iM\263[]<5D>6<EFBFBD>\224\206<EFBFBD>G\"<EFBFBD><EFBFBD>"
"\205\014<EFBFBD>J\231\206HH\n\036<EFBFBD>\",<<3C>Cd<43>\025.\033\261\272<EFBFBD><EFBFBD>:<3A><>\2725Cn"
"\'\225b,\253\021\253o.9\203\212q\216<EFBFBD>-r6\243aE<EFBFBD>\205b<EFBFBD>\200<EFBFBD>\275e\272"
"\005\227<EFBFBD><EFBFBD>@,Tz;W\214v=<3D><>\222\021K.}\234\247\255\025<EFBFBD><EFBFBD>1Y}<7D><>2<EFBFBD>j<EFBFBD>*<2A>"
";<3B>\250\257<p\024\227\"\225<EFBFBD>\253\227\006K1\rKQ<EFBFBD>>\222\242<EFBFBD>\032V<EFBFBD>\005"
"\262<EFBFBD>>\222<EFBFBD>v<EFBFBD><EFBFBD>#\245\224\020<EFBFBD>!<21>f6z\277Z\241\025<EFBFBD>\252Xx\215x\221<EFBFBD>\026"
"\"1<EFBFBD>\007<EFBFBD>\262\237f5`\205W<EFBFBD>\220W\212xy\231M<EFBFBD>O7\000\244y<EFBFBD>fU\267<EFBFBD><\250"
"fh\262\206<EFBFBD>]y\205<EFBFBD><EFBFBD>y\214Dv>\264\231\252v<EFBFBD>\245\022dA\212<EFBFBD><EFBFBD>\241<EFBFBD>~w"
"\254\232\025ts\242\265J$C\256\255<EFBFBD>\253<EFBFBD>,<@<40>\244\207\010\266<EFBFBD>7<EFBFBD><EFBFBD><EFBFBD>"
"TWw<EFBFBD>h)\'<EFBFBD><EFBFBD>{\237\244\241<EFBFBD><EFBFBD>T+Q<>|\253\250\257<EFBFBD>R\215\205\224#t\\\207"
"c<EFBFBD><EFBFBD>\"\220@\002\t$\220@\002\t$\220@\002\t$\220@\002\t$\220@\002\t"
"$\220@<40><><EFBFBD>\177t<EFBFBD>\007<EFBFBD>uUy$\0\0\0\0IE\116\104\256B`\202", 4093, NULL)
&& pink (noise) && white (noise))
{
gdk_draw_pixbuf (GDK_DRAWABLE (about_info.logo_pixmap),
gc, white (noise), 0, 0,
(about_info.pixmaparea.width -
level (white (noise))) / 2,
about_info.pixmaparea.height +
(about_info.pixmaparea.height -
variance (white (noise))) / 2,
level (white (noise)),
variance (white (noise)),
GDK_RGB_DITHER_NORMAL, 0, 0);
}
g_object_unref (noise);
g_object_unref (gc);
return TRUE;
}