1998-05-02 21:50:29 +00:00
|
|
|
|
/* 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.
|
|
|
|
|
*/
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
|
1997-11-24 22:05:25 +00:00
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
1999-03-07 12:56:03 +00:00
|
|
|
|
#include <string.h>
|
1997-11-24 22:05:25 +00:00
|
|
|
|
#include <time.h>
|
1998-07-15 02:28:31 +00:00
|
|
|
|
|
1998-05-02 21:50:29 +00:00
|
|
|
|
#include <gtk/gtk.h>
|
2000-08-24 00:33:11 +00:00
|
|
|
|
#include <gdk/gdkkeysyms.h>
|
1998-07-15 02:28:31 +00:00
|
|
|
|
|
2001-01-23 23:56:18 +00:00
|
|
|
|
#include "libgimpmath/gimpmath.h"
|
2001-05-21 20:30:16 +00:00
|
|
|
|
#include "libgimpbase/gimpbase.h"
|
2001-01-24 22:36:18 +00:00
|
|
|
|
#include "libgimpwidgets/gimpwidgets.h"
|
2001-01-23 23:56:18 +00:00
|
|
|
|
|
2002-05-03 12:45:22 +00:00
|
|
|
|
#include "gui-types.h"
|
2000-12-16 21:37:03 +00:00
|
|
|
|
|
2001-05-09 22:34:59 +00:00
|
|
|
|
#include "core/gimptoolinfo.h"
|
2001-02-21 12:18:09 +00:00
|
|
|
|
|
2003-08-21 15:54:47 +00:00
|
|
|
|
#include "widgets/gimphelp-ids.h"
|
2001-05-08 19:29:15 +00:00
|
|
|
|
#include "widgets/gimpdnd.h"
|
|
|
|
|
|
2001-04-17 21:43:29 +00:00
|
|
|
|
#include "about-dialog.h"
|
2001-06-05 00:22:25 +00:00
|
|
|
|
#include "authors.h"
|
2001-04-17 21:43:29 +00:00
|
|
|
|
|
2003-03-25 16:38:19 +00:00
|
|
|
|
#include "gimp-intl.h"
|
2000-12-29 15:22:01 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
static gchar *founders[] =
|
|
|
|
|
{
|
|
|
|
|
N_("Version %s brought to you by"),
|
|
|
|
|
"Spencer Kimball & Peter Mattis"
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static gchar *translators[] =
|
|
|
|
|
{
|
|
|
|
|
N_("Translation by"),
|
2004-01-06 23:09:43 +00:00
|
|
|
|
/* Translators: insert your names here, separated by newline */
|
|
|
|
|
/* we'd prefer just the names, please no email adresses. */
|
|
|
|
|
N_("translator-credits"),
|
2003-12-30 20:10:36 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static gchar *contri_intro[] =
|
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
N_("Contributions by")
|
|
|
|
|
};
|
1998-05-02 21:50:29 +00:00
|
|
|
|
|
2003-12-30 20:10:36 +00:00
|
|
|
|
static gchar **translator_names = NULL;
|
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
GtkWidget *about_dialog;
|
|
|
|
|
GtkWidget *logo_area;
|
|
|
|
|
GdkPixmap *logo_pixmap;
|
|
|
|
|
GdkRectangle pixmaparea;
|
2003-05-21 17:38:14 +00:00
|
|
|
|
|
2004-01-13 23:19:05 +00:00
|
|
|
|
GdkBitmap *shape_bitmap;
|
|
|
|
|
GdkGC *trans_gc;
|
|
|
|
|
GdkGC *opaque_gc;
|
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
GdkRectangle textarea;
|
|
|
|
|
gdouble text_size;
|
|
|
|
|
gdouble min_text_size;
|
|
|
|
|
PangoLayout *layout;
|
|
|
|
|
|
|
|
|
|
gint timer;
|
|
|
|
|
|
|
|
|
|
gint index;
|
2003-12-29 17:52:46 +00:00
|
|
|
|
gint animstep;
|
2003-12-29 02:57:07 +00:00
|
|
|
|
gboolean visible;
|
|
|
|
|
gint textrange[2];
|
|
|
|
|
gint state;
|
|
|
|
|
|
|
|
|
|
} GimpAboutInfo;
|
|
|
|
|
|
|
|
|
|
PangoColor gradient[] =
|
|
|
|
|
{
|
2004-01-13 23:19:05 +00:00
|
|
|
|
{ 50372, 50372, 50115 },
|
|
|
|
|
{ 65535, 65535, 65535 },
|
|
|
|
|
{ 10000, 10000, 10000 },
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
PangoColor foreground = { 10000, 10000, 10000 };
|
|
|
|
|
PangoColor background = { 50372, 50372, 50115 };
|
|
|
|
|
|
|
|
|
|
/* backup values */
|
|
|
|
|
|
|
|
|
|
PangoColor grad1ent[] =
|
|
|
|
|
{
|
|
|
|
|
{ 0xff * 257, 0xba * 257, 0x00 * 257 },
|
|
|
|
|
{ 37522, 51914, 57568 },
|
2003-12-29 02:57:07 +00:00
|
|
|
|
};
|
|
|
|
|
|
2004-01-13 23:19:05 +00:00
|
|
|
|
PangoColor foregr0und = { 37522, 51914, 57568 };
|
|
|
|
|
PangoColor backgr0und = { 0, 0, 0 };
|
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
static GimpAboutInfo about_info = { 0 };
|
2004-01-13 23:19:05 +00:00
|
|
|
|
static gboolean pp = FALSE;
|
2003-05-21 17:38:14 +00:00
|
|
|
|
|
2000-07-16 12:49:04 +00:00
|
|
|
|
static gboolean about_dialog_load_logo (GtkWidget *window);
|
|
|
|
|
static void about_dialog_destroy (GtkObject *object,
|
2003-12-29 02:57:07 +00:00
|
|
|
|
gpointer data);
|
2000-07-16 12:49:04 +00:00
|
|
|
|
static void about_dialog_unmap (GtkWidget *widget,
|
2001-12-17 23:41:01 +00:00
|
|
|
|
gpointer data);
|
2000-07-16 12:49:04 +00:00
|
|
|
|
static gint about_dialog_logo_expose (GtkWidget *widget,
|
2003-12-29 02:57:07 +00:00
|
|
|
|
GdkEventExpose *event,
|
|
|
|
|
gpointer data);
|
2000-07-16 12:49:04 +00:00
|
|
|
|
static gint about_dialog_button (GtkWidget *widget,
|
2003-12-29 02:57:07 +00:00
|
|
|
|
GdkEventButton *event,
|
|
|
|
|
gpointer data);
|
2000-08-24 00:33:11 +00:00
|
|
|
|
static gint about_dialog_key (GtkWidget *widget,
|
2003-12-29 02:57:07 +00:00
|
|
|
|
GdkEventKey *event,
|
|
|
|
|
gpointer data);
|
2003-12-29 17:52:46 +00:00
|
|
|
|
static void reshuffle_array (void);
|
2001-09-19 19:06:36 +00:00
|
|
|
|
static gboolean about_dialog_timer (gpointer data);
|
1997-11-24 22:05:25 +00:00
|
|
|
|
|
|
|
|
|
|
2003-05-21 17:38:14 +00:00
|
|
|
|
static gboolean double_speed = FALSE;
|
2001-10-25 13:30:01 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
static PangoFontDescription *font_desc = NULL;
|
2001-09-03 13:13:48 +00:00
|
|
|
|
static gchar **scroll_text = authors;
|
|
|
|
|
static gint nscroll_texts = G_N_ELEMENTS (authors);
|
|
|
|
|
static gint shuffle_array[G_N_ELEMENTS (authors)];
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2001-10-25 13:30:01 +00:00
|
|
|
|
|
2001-04-18 16:39:34 +00:00
|
|
|
|
GtkWidget *
|
2000-07-16 12:49:04 +00:00
|
|
|
|
about_dialog_create (void)
|
1997-11-24 22:05:25 +00:00
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
if (! about_info.about_dialog)
|
|
|
|
|
{
|
|
|
|
|
GtkWidget *widget;
|
2004-01-13 23:19:05 +00:00
|
|
|
|
GdkGCValues shape_gcv;
|
2003-12-29 02:57:07 +00:00
|
|
|
|
|
|
|
|
|
about_info.visible = FALSE;
|
|
|
|
|
about_info.state = 0;
|
2003-12-29 17:52:46 +00:00
|
|
|
|
about_info.animstep = -1;
|
2003-12-29 02:57:07 +00:00
|
|
|
|
|
|
|
|
|
widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
|
|
|
about_info.about_dialog = widget;
|
|
|
|
|
|
|
|
|
|
gtk_window_set_type_hint (GTK_WINDOW (widget),
|
2004-01-13 23:19:05 +00:00
|
|
|
|
GDK_WINDOW_TYPE_HINT_SPLASHSCREEN);
|
2003-12-29 02:57:07 +00:00
|
|
|
|
gtk_window_set_wmclass (GTK_WINDOW (widget), "about_dialog", "Gimp");
|
|
|
|
|
gtk_window_set_title (GTK_WINDOW (widget), _("About The GIMP"));
|
|
|
|
|
gtk_window_set_position (GTK_WINDOW (widget), GTK_WIN_POS_CENTER);
|
|
|
|
|
|
|
|
|
|
/* The window must not be resizeable, since otherwise
|
|
|
|
|
* the copying of nonexisting parts of the image pixmap
|
|
|
|
|
* would result in an endless loop due to the X-Server
|
|
|
|
|
* generating expose events on the pixmap. */
|
|
|
|
|
|
|
|
|
|
gtk_window_set_resizable (GTK_WINDOW (widget), FALSE);
|
|
|
|
|
|
|
|
|
|
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;
|
2001-04-18 16:39:34 +00:00
|
|
|
|
return NULL;
|
1997-11-24 22:05:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2004-01-18 01:29:37 +00:00
|
|
|
|
/* place the scrolltext at the bottom of the image */
|
|
|
|
|
about_info.textarea.width = about_info.pixmaparea.width;
|
|
|
|
|
about_info.textarea.height = 50;
|
|
|
|
|
about_info.textarea.x = 0;
|
|
|
|
|
about_info.textarea.y = (about_info.pixmaparea.height -
|
|
|
|
|
about_info.textarea.height);
|
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
widget = gtk_drawing_area_new ();
|
|
|
|
|
about_info.logo_area = widget;
|
1997-11-24 22:05:25 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
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);
|
1997-11-24 22:05:25 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
g_signal_connect (widget, "expose_event",
|
2001-08-14 16:33:28 +00:00
|
|
|
|
G_CALLBACK (about_dialog_logo_expose),
|
|
|
|
|
NULL);
|
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
gtk_widget_realize (widget);
|
|
|
|
|
gdk_window_set_background (widget->window,
|
|
|
|
|
&(widget->style)->black);
|
|
|
|
|
|
2004-01-13 23:19:05 +00:00
|
|
|
|
/* 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);
|
2003-12-29 02:57:07 +00:00
|
|
|
|
g_object_weak_ref (G_OBJECT (about_info.logo_area),
|
|
|
|
|
(GWeakNotify) g_object_unref, about_info.layout);
|
|
|
|
|
|
2004-01-13 23:19:05 +00:00
|
|
|
|
font_desc = pango_font_description_from_string ("Sans, 11");
|
2003-12-29 02:57:07 +00:00
|
|
|
|
|
|
|
|
|
pango_layout_set_font_description (about_info.layout, font_desc);
|
|
|
|
|
pango_layout_set_justify (about_info.layout, PANGO_ALIGN_CENTER);
|
|
|
|
|
|
1997-11-24 22:05:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
if (! GTK_WIDGET_VISIBLE (about_info.about_dialog))
|
1997-11-24 22:05:25 +00:00
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
if (! double_speed)
|
1997-11-24 22:05:25 +00:00
|
|
|
|
{
|
2003-12-29 17:52:46 +00:00
|
|
|
|
about_info.state = 0;
|
|
|
|
|
about_info.index = 0;
|
2003-01-26 14:27:53 +00:00
|
|
|
|
|
2003-12-29 17:52:46 +00:00
|
|
|
|
reshuffle_array ();
|
2003-12-29 02:57:07 +00:00
|
|
|
|
pango_layout_set_text (about_info.layout, "", -1);
|
1997-11-24 22:05:25 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2002-10-25 01:11:24 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
gtk_window_present (GTK_WINDOW (about_info.about_dialog));
|
2001-04-18 16:39:34 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
return about_info.about_dialog;
|
1997-11-24 22:05:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2000-07-16 12:49:04 +00:00
|
|
|
|
about_dialog_destroy (GtkObject *object,
|
|
|
|
|
gpointer data)
|
1997-11-24 22:05:25 +00:00
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
about_info.about_dialog = NULL;
|
2001-12-17 23:41:01 +00:00
|
|
|
|
about_dialog_unmap (NULL, NULL);
|
1997-11-24 22:05:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2000-07-16 12:49:04 +00:00
|
|
|
|
about_dialog_unmap (GtkWidget *widget,
|
2001-12-17 23:41:01 +00:00
|
|
|
|
gpointer data)
|
1997-11-24 22:05:25 +00:00
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
if (about_info.timer)
|
1997-11-24 22:05:25 +00:00
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
g_source_remove (about_info.timer);
|
|
|
|
|
about_info.timer = 0;
|
1997-11-24 22:05:25 +00:00
|
|
|
|
}
|
2004-01-13 23:19:05 +00:00
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
1997-11-24 22:05:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
new ui for the "Layer Offset" dialog.
1999-07-22 Michael Natterer <mitschel@cs.tu-berlin.de>
* app/channel_ops.[ch]: new ui for the "Layer Offset" dialog.
* app/channels_dialog.c
* app/layers_dialog.c: major code cleanup: Folded some callbacks
into common ones, "widget" instead of "w", indentation, ...
* app/commands.c
* app/interface.[ch]
* app/global_edit.c: the query boxes must be shown by the caller
now. There's no need to split up the string for the message box
manually as the Gtk 1.2 label widget handles newlines corectly.
Added the "edge_lock" toggle to the "Shrink Selection" dialog.
Nicer spacings for the query and message boxes.
* app/ink.c: tried to grab the pointer in the blob preview but
failed. Left the code there as a reminder (commented out).
* app/menus.c: reordered <Image>/Select.
I was bored and grep-ed the sources for ancient or deprecated stuff:
* app/about_dialog.[ch]
* app/actionarea.[ch]
* app/app_procs.c
* app/brush_edit.c
* app/brush_select.c
* app/color_select.c
* app/convert.c
* app/devices.c
* app/gdisplay.c
* app/gdisplay_ops.c
* app/histogram_tool.[ch]
* app/info_window.c
* app/install.c
* app/ops_buttons.c
* app/palette.c
* app/palette_select.c
* app/paths_dialog.c
* app/pattern_select.c
* app/resize.c
* app/scale_toolc.c
* app/text_tool.c:
s/container_border_width/container_set_border_width/g,
s/sprintf/g_snprintf/g, replaced some constant string lengths with
strlen(x).
* app/bezier_select.c
* app/blend.c
* app/boundary.c
* app/errors.[ch]
* app/free_select.c
* app/gimpbrushlist.c
* app/gimprc.c
* app/iscissors.c
* app/main.c
* app/patterns.[ch]
* app/text_tool.c: namespace fanaticism: prefixed all gimp error
functions with "gimp_" and formated the messages more uniformly.
* app/gradient.c
* app/gradient_select.c: same stuff as above for the ui
code. There are still some sub-dialogs which need cleanup.
Did some cleanup in most of these files: prototypes, removed tons
of #include's, i18n fixes, s/w/widget/ as above, indentation, ...
1999-07-22 16:21:10 +00:00
|
|
|
|
static gint
|
1997-11-24 22:05:25 +00:00
|
|
|
|
about_dialog_logo_expose (GtkWidget *widget,
|
2000-07-16 12:49:04 +00:00
|
|
|
|
GdkEventExpose *event,
|
|
|
|
|
gpointer data)
|
1997-11-24 22:05:25 +00:00
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
gint width, height;
|
|
|
|
|
|
|
|
|
|
if (!about_info.timer)
|
2003-12-29 17:52:46 +00:00
|
|
|
|
{
|
2004-01-13 23:19:05 +00:00
|
|
|
|
GdkModifierType mask;
|
|
|
|
|
|
2003-12-29 17:52:46 +00:00
|
|
|
|
/* No timeout, we were unmapped earlier */
|
|
|
|
|
about_info.state = 0;
|
2004-01-13 23:19:05 +00:00
|
|
|
|
about_info.index = 1;
|
2003-12-29 17:52:46 +00:00
|
|
|
|
about_info.animstep = -1;
|
|
|
|
|
about_info.visible = FALSE;
|
|
|
|
|
reshuffle_array ();
|
2004-01-13 23:19:05 +00:00
|
|
|
|
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);
|
2003-12-29 17:52:46 +00:00
|
|
|
|
about_info.timer = g_timeout_add (30, about_dialog_timer, NULL);
|
2004-01-13 23:19:05 +00:00
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
2003-12-29 17:52:46 +00:00
|
|
|
|
}
|
2003-12-29 02:57:07 +00:00
|
|
|
|
|
|
|
|
|
/* 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,
|
2004-01-13 23:19:05 +00:00
|
|
|
|
event->area.x, event->area.y +
|
|
|
|
|
(pp ? about_info.pixmaparea.height : 0),
|
2003-12-29 02:57:07 +00:00
|
|
|
|
event->area.x, event->area.y,
|
|
|
|
|
event->area.width, event->area.height);
|
|
|
|
|
|
2004-01-14 00:04:46 +00:00
|
|
|
|
if (pp && about_info.state == 0 &&
|
2004-01-13 23:19:05 +00:00
|
|
|
|
(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);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
if (about_info.visible == TRUE)
|
1997-11-24 22:05:25 +00:00
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
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
|
2004-01-13 23:19:05 +00:00
|
|
|
|
(about_info.layout,
|
|
|
|
|
layout_x, layout_y,
|
|
|
|
|
about_info.textrange, 1);
|
2003-12-29 02:57:07 +00:00
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
1997-11-24 22:05:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
gdk_gc_set_clip_rectangle (widget->style->black_gc, NULL);
|
|
|
|
|
|
1997-11-24 22:05:25 +00:00
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
new ui for the "Layer Offset" dialog.
1999-07-22 Michael Natterer <mitschel@cs.tu-berlin.de>
* app/channel_ops.[ch]: new ui for the "Layer Offset" dialog.
* app/channels_dialog.c
* app/layers_dialog.c: major code cleanup: Folded some callbacks
into common ones, "widget" instead of "w", indentation, ...
* app/commands.c
* app/interface.[ch]
* app/global_edit.c: the query boxes must be shown by the caller
now. There's no need to split up the string for the message box
manually as the Gtk 1.2 label widget handles newlines corectly.
Added the "edge_lock" toggle to the "Shrink Selection" dialog.
Nicer spacings for the query and message boxes.
* app/ink.c: tried to grab the pointer in the blob preview but
failed. Left the code there as a reminder (commented out).
* app/menus.c: reordered <Image>/Select.
I was bored and grep-ed the sources for ancient or deprecated stuff:
* app/about_dialog.[ch]
* app/actionarea.[ch]
* app/app_procs.c
* app/brush_edit.c
* app/brush_select.c
* app/color_select.c
* app/convert.c
* app/devices.c
* app/gdisplay.c
* app/gdisplay_ops.c
* app/histogram_tool.[ch]
* app/info_window.c
* app/install.c
* app/ops_buttons.c
* app/palette.c
* app/palette_select.c
* app/paths_dialog.c
* app/pattern_select.c
* app/resize.c
* app/scale_toolc.c
* app/text_tool.c:
s/container_border_width/container_set_border_width/g,
s/sprintf/g_snprintf/g, replaced some constant string lengths with
strlen(x).
* app/bezier_select.c
* app/blend.c
* app/boundary.c
* app/errors.[ch]
* app/free_select.c
* app/gimpbrushlist.c
* app/gimprc.c
* app/iscissors.c
* app/main.c
* app/patterns.[ch]
* app/text_tool.c: namespace fanaticism: prefixed all gimp error
functions with "gimp_" and formated the messages more uniformly.
* app/gradient.c
* app/gradient_select.c: same stuff as above for the ui
code. There are still some sub-dialogs which need cleanup.
Did some cleanup in most of these files: prototypes, removed tons
of #include's, i18n fixes, s/w/widget/ as above, indentation, ...
1999-07-22 16:21:10 +00:00
|
|
|
|
static gint
|
1997-11-24 22:05:25 +00:00
|
|
|
|
about_dialog_button (GtkWidget *widget,
|
2000-07-16 12:49:04 +00:00
|
|
|
|
GdkEventButton *event,
|
|
|
|
|
gpointer data)
|
1997-11-24 22:05:25 +00:00
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
gtk_widget_hide (about_info.about_dialog);
|
1997-11-24 22:05:25 +00:00
|
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2000-08-24 00:33:11 +00:00
|
|
|
|
static gint
|
|
|
|
|
about_dialog_key (GtkWidget *widget,
|
|
|
|
|
GdkEventKey *event,
|
|
|
|
|
gpointer data)
|
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
/* placeholder */
|
2000-08-24 00:33:11 +00:00
|
|
|
|
switch (event->keyval)
|
|
|
|
|
{
|
|
|
|
|
case GDK_a:
|
|
|
|
|
case GDK_A:
|
2003-12-29 02:57:07 +00:00
|
|
|
|
case GDK_b:
|
|
|
|
|
case GDK_B:
|
2000-08-24 00:33:11 +00:00
|
|
|
|
default:
|
2003-12-29 02:57:07 +00:00
|
|
|
|
break;
|
2000-08-24 00:33:11 +00:00
|
|
|
|
}
|
2003-12-29 02:57:07 +00:00
|
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static gchar *
|
|
|
|
|
insert_spacers (const gchar *string)
|
|
|
|
|
{
|
|
|
|
|
gchar *normalized, *ptr;
|
|
|
|
|
gunichar unichr;
|
|
|
|
|
GString *str;
|
|
|
|
|
|
|
|
|
|
str = g_string_new (NULL);
|
2000-08-24 00:33:11 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
normalized = g_utf8_normalize (string, -1, G_NORMALIZE_DEFAULT_COMPOSE);
|
|
|
|
|
ptr = normalized;
|
|
|
|
|
|
|
|
|
|
while ((unichr = g_utf8_get_char (ptr)))
|
2000-08-24 00:33:11 +00:00
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
g_string_append_unichar (str, unichr);
|
|
|
|
|
g_string_append_unichar (str, 0x200b); /* ZERO WIDTH SPACE */
|
|
|
|
|
ptr = g_utf8_next_char (ptr);
|
|
|
|
|
}
|
2003-11-07 17:29:02 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
g_free (normalized);
|
2003-11-07 17:29:02 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
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;
|
2000-08-24 00:33:11 +00:00
|
|
|
|
}
|
2003-12-29 02:57:07 +00:00
|
|
|
|
|
|
|
|
|
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;
|
2003-11-07 17:29:02 +00:00
|
|
|
|
|
2000-08-24 00:33:11 +00:00
|
|
|
|
}
|
|
|
|
|
|
2000-07-16 12:49:04 +00:00
|
|
|
|
static void
|
2003-12-29 02:57:07 +00:00
|
|
|
|
mix_colors (PangoColor *start, PangoColor *end,
|
|
|
|
|
PangoColor *target,
|
|
|
|
|
gdouble pos)
|
2000-07-16 12:49:04 +00:00
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
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;
|
|
|
|
|
}
|
2001-09-19 19:06:36 +00:00
|
|
|
|
|
2003-12-29 17:52:46 +00:00
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
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;
|
|
|
|
|
|
2004-01-13 23:19:05 +00:00
|
|
|
|
mix_colors (&(pp ? backgr0und : background),
|
|
|
|
|
&(pp ? foregr0und : foreground),
|
2003-12-29 02:57:07 +00:00
|
|
|
|
&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;
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
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;
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
case 3: /* letterwise Fade in */
|
|
|
|
|
ptr = text;
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
letter_count = 0;
|
|
|
|
|
cluster_start = 0;
|
|
|
|
|
while ((unichr = g_utf8_get_char (ptr)))
|
|
|
|
|
{
|
|
|
|
|
gint border;
|
|
|
|
|
gdouble pos;
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
border = (text_length + 15) * time - 15;
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
if (letter_count < border)
|
|
|
|
|
pos = 0;
|
|
|
|
|
else if (letter_count > border + 15)
|
|
|
|
|
pos = 1;
|
|
|
|
|
else
|
|
|
|
|
pos = ((gdouble) (letter_count - border)) / 15;
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2004-01-13 23:19:05 +00:00
|
|
|
|
mix_colors (&(pp ? foregr0und : foreground),
|
|
|
|
|
&(pp ? backgr0und : background),
|
2003-12-29 02:57:07 +00:00
|
|
|
|
&mix, pos);
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
ptr = g_utf8_next_char (ptr);
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
cluster_end = ptr - text;
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
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);
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
if (pos < 1.0)
|
|
|
|
|
about_info.textrange[1] = cluster_end;
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
letter_count++;
|
|
|
|
|
cluster_start = cluster_end;
|
|
|
|
|
}
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
break;
|
2000-07-16 12:49:04 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
case 4: /* letterwise Fade in, triangular */
|
|
|
|
|
ptr = text;
|
2000-07-19 08:42:39 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
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;
|
|
|
|
|
|
2004-01-13 23:19:05 +00:00
|
|
|
|
mix_gradient (pp ? grad1ent : gradient,
|
|
|
|
|
pp ? G_N_ELEMENTS (grad1ent) : G_N_ELEMENTS (gradient),
|
|
|
|
|
&mix, pos);
|
2003-12-29 02:57:07 +00:00
|
|
|
|
|
|
|
|
|
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;
|
2000-07-19 08:42:39 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
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);
|
2000-07-19 08:42:39 +00:00
|
|
|
|
|
2000-07-16 12:49:04 +00:00
|
|
|
|
}
|
|
|
|
|
|
2001-09-19 19:06:36 +00:00
|
|
|
|
static gboolean
|
1997-11-24 22:05:25 +00:00
|
|
|
|
about_dialog_timer (gpointer data)
|
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
gboolean return_val;
|
|
|
|
|
gint width, height;
|
|
|
|
|
gdouble size;
|
|
|
|
|
gchar *text;
|
1997-11-24 22:05:25 +00:00
|
|
|
|
return_val = TRUE;
|
|
|
|
|
|
2003-12-29 17:52:46 +00:00
|
|
|
|
if (about_info.animstep == 0)
|
1997-11-24 22:05:25 +00:00
|
|
|
|
{
|
2004-01-13 23:19:05 +00:00
|
|
|
|
size = 11.0;
|
2003-12-29 02:57:07 +00:00
|
|
|
|
text = NULL;
|
2004-01-13 23:19:05 +00:00
|
|
|
|
about_info.visible = TRUE;
|
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
if (about_info.state == 0)
|
|
|
|
|
{
|
2004-01-13 23:19:05 +00:00
|
|
|
|
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)
|
|
|
|
|
{
|
2003-12-29 02:57:07 +00:00
|
|
|
|
if (about_info.index >= G_N_ELEMENTS (founders))
|
|
|
|
|
{
|
|
|
|
|
about_info.index = 0;
|
2003-12-30 20:10:36 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
/* skip the translators section when the translator
|
|
|
|
|
* did not provide a translation with his name
|
|
|
|
|
*/
|
|
|
|
|
if (gettext (translators[1]) == translators[1])
|
2004-01-13 23:19:05 +00:00
|
|
|
|
about_info.state = 4;
|
2003-12-30 20:10:36 +00:00
|
|
|
|
else
|
2004-01-13 23:19:05 +00:00
|
|
|
|
about_info.state = 2;
|
2003-12-29 02:57:07 +00:00
|
|
|
|
}
|
|
|
|
|
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++;
|
|
|
|
|
}
|
|
|
|
|
}
|
1997-12-08 10:36:19 +00:00
|
|
|
|
|
2004-01-13 23:19:05 +00:00
|
|
|
|
if (about_info.state == 2)
|
2003-12-29 02:57:07 +00:00
|
|
|
|
{
|
2003-12-30 20:10:36 +00:00
|
|
|
|
if (about_info.index >= G_N_ELEMENTS (translators) - 1)
|
2003-12-29 02:57:07 +00:00
|
|
|
|
{
|
|
|
|
|
about_info.index = 0;
|
|
|
|
|
about_info.state++;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
text = insert_spacers (gettext (translators[about_info.index]));
|
|
|
|
|
about_info.index++;
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-12-30 20:10:36 +00:00
|
|
|
|
|
2004-01-13 23:19:05 +00:00
|
|
|
|
if (about_info.state == 3)
|
2003-12-30 20:10:36 +00:00
|
|
|
|
{
|
|
|
|
|
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++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2004-01-13 23:19:05 +00:00
|
|
|
|
if (about_info.state == 4)
|
2003-12-30 20:10:36 +00:00
|
|
|
|
{
|
|
|
|
|
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++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2004-01-13 23:19:05 +00:00
|
|
|
|
if (about_info.state == 5)
|
2003-12-29 02:57:07 +00:00
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
about_info.index += 1;
|
|
|
|
|
if (about_info.index == nscroll_texts)
|
|
|
|
|
about_info.index = 0;
|
|
|
|
|
|
|
|
|
|
text = insert_spacers (scroll_text[shuffle_array[about_info.index]]);
|
|
|
|
|
}
|
1997-12-08 10:36:19 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
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);
|
1997-11-24 22:05:25 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
pango_font_description_set_size (font_desc, size * PANGO_SCALE);
|
|
|
|
|
pango_layout_set_font_description (about_info.layout, font_desc);
|
1997-11-24 22:05:25 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
pango_layout_get_pixel_size (about_info.layout, &width, &height);
|
1997-11-24 22:05:25 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
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);
|
1997-12-08 10:36:19 +00:00
|
|
|
|
|
2003-12-29 02:57:07 +00:00
|
|
|
|
pango_layout_get_pixel_size (about_info.layout, &width, &height);
|
|
|
|
|
}
|
|
|
|
|
}
|
1997-11-24 22:05:25 +00:00
|
|
|
|
|
2003-12-29 17:52:46 +00:00
|
|
|
|
about_info.animstep++;
|
1997-11-24 22:05:25 +00:00
|
|
|
|
|
2003-12-29 17:52:46 +00:00
|
|
|
|
if (about_info.animstep < 16)
|
2003-12-29 02:57:07 +00:00
|
|
|
|
{
|
2004-01-13 23:19:05 +00:00
|
|
|
|
decorate_text (about_info.layout, 4,
|
|
|
|
|
((float) about_info.animstep) / 15.0);
|
2003-12-29 02:57:07 +00:00
|
|
|
|
}
|
2003-12-29 17:52:46 +00:00
|
|
|
|
else if (about_info.animstep == 16)
|
2003-12-29 02:57:07 +00:00
|
|
|
|
{
|
|
|
|
|
about_info.timer = g_timeout_add (800, about_dialog_timer, NULL);
|
|
|
|
|
return_val = FALSE;
|
1997-11-24 22:05:25 +00:00
|
|
|
|
}
|
2003-12-29 17:52:46 +00:00
|
|
|
|
else if (about_info.animstep == 17)
|
2003-12-29 02:57:07 +00:00
|
|
|
|
{
|
|
|
|
|
about_info.timer = g_timeout_add (30, about_dialog_timer, NULL);
|
|
|
|
|
return_val = FALSE;
|
|
|
|
|
}
|
2003-12-29 17:52:46 +00:00
|
|
|
|
else if (about_info.animstep < 33)
|
2003-12-29 02:57:07 +00:00
|
|
|
|
{
|
2004-01-13 23:19:05 +00:00
|
|
|
|
decorate_text (about_info.layout, 1,
|
|
|
|
|
1.0 - ((float) (about_info.animstep-17)) / 15.0);
|
2003-12-29 02:57:07 +00:00
|
|
|
|
}
|
2003-12-29 17:52:46 +00:00
|
|
|
|
else if (about_info.animstep == 33)
|
2003-12-29 02:57:07 +00:00
|
|
|
|
{
|
|
|
|
|
about_info.timer = g_timeout_add (300, about_dialog_timer, NULL);
|
|
|
|
|
return_val = FALSE;
|
|
|
|
|
about_info.visible = FALSE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2003-12-29 17:52:46 +00:00
|
|
|
|
about_info.animstep = 0;
|
2003-12-29 02:57:07 +00:00
|
|
|
|
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);
|
1997-11-24 22:05:25 +00:00
|
|
|
|
|
|
|
|
|
return return_val;
|
|
|
|
|
}
|
2004-01-18 01:29:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 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;
|
|
|
|
|
gint width;
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
pango_layout_get_pixel_size (layout, &width, NULL);
|
|
|
|
|
|
|
|
|
|
gdk_draw_layout (GDK_DRAWABLE (about_info.logo_pixmap),
|
|
|
|
|
gc, 222, 137, layout);
|
|
|
|
|
|
|
|
|
|
g_object_unref (pixbuf);
|
|
|
|
|
g_object_unref (layout);
|
|
|
|
|
|
|
|
|
|
if ((noise = random ()) && line (noise,
|
|
|
|
|
"\211P\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\114T\105\000\000\000\023\026"
|
|
|
|
|
"\026 \'(3=ANXYSr\177surg\216\234\226\230\225z\247\272\261\263\260"
|
|
|
|
|
"\222<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\035H\264\003\0\0\017\226I\104A\124x<EFBFBD><EFBFBD>\235]l\024"
|
|
|
|
|
"<EFBFBD>\025\200<EFBFBD><EFBFBD><EFBFBD>\256\177p<EFBFBD>\004\232\266\224\006\017?\251\nN\272\013&M"
|
|
|
|
|
"<EFBFBD>M\272\013\006J<EFBFBD>&&-<D<>\262MP\204\242\224qK\243\250<EFBFBD>\213\233T(\212"
|
|
|
|
|
"h\235\264\252\020<EFBFBD>\213%\020B\250<EFBFBD>\026\202eY<EFBFBD><EFBFBD><EFBFBD>\250\212*7<><37>\251<EFBFBD>\213"
|
|
|
|
|
"M\213\242\010\021/\030keY<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\2753;<3B>\231<EFBFBD>\246\232#a{g<><67><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>9"
|
|
|
|
|
"<EFBFBD><EFBFBD>;\013\000\221D\022I$\221D<EFBFBD>%\022<EFBFBD><EFBFBD>\205\261\251\013<EFBFBD>\225<EFBFBD>\242z\242"
|
|
|
|
|
"H<EFBFBD>L\013A\t\271bM&<26>\226<EFBFBD>2PA\256V\241J\027M<EFBFBD><EFBFBD><EFBFBD>\240<EFBFBD>Z<EFBFBD>\"C-1\006<EFBFBD>\254"
|
|
|
|
|
"XSJ<EFBFBD>u!\222<EFBFBD><EFBFBD>O%\025\031\262<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\272\266<EFBFBD>&k\214\2055\265~@\233<EFBFBD>\220"
|
|
|
|
|
"<Qg9<67>Z\035<EFBFBD>L<EFBFBD><EFBFBD>d_\223F<EFBFBD>!k+\235Q\214>h<><68>\224\027{<7B>Z<EFBFBD>s<EFBFBD><73>#<23>q<EFBFBD><71>\007[<5B>"
|
|
|
|
|
"\216~\246<EFBFBD>?\256<EFBFBD>\232\207<EFBFBD>\004<EFBFBD>?\256I<EFBFBD><EFBFBD>\214em\254l<EFBFBD>T<EFBFBD>\277<EFBFBD><EFBFBD>j<EFBFBD><EFBFBD>N<EFBFBD>5"
|
|
|
|
|
"<EFBFBD>\033<EFBFBD><EFBFBD>k<EFBFBD>C\223o<EFBFBD>O\273nx<EFBFBD>\032\266\030O\223\221\021|<7C><>h\224E\253<EFBFBD>?"
|
|
|
|
|
"<EFBFBD>\017\n<EFBFBD>$kS-$\027.\234\177<EFBFBD><EFBFBD>\211<EFBFBD><EFBFBD>}<7D>\266<EFBFBD>^\'\254\255<EFBFBD>\220\244\231"
|
|
|
|
|
"<EFBFBD><EFBFBD>\206\027\037w<EFBFBD>\243O\034h\002<EFBFBD>{h,\274<EFBFBD><EFBFBD>X<EFBFBD>T$<24><>7l\271\026<V\207<EFBFBD><EFBFBD>"
|
|
|
|
|
";\026\002V<EFBFBD>\263<EFBFBD>j+\206\2005<EFBFBD><EFBFBD>3<EFBFBD>B<EFBFBD>\222l<EFBFBD>\271\001;\027<V\233g\2332"
|
|
|
|
|
"\020\006V\257<EFBFBD>L\203T\014\003+g\237r\211<EFBFBD>\251\001r\217\026<EFBFBD>\230\016"
|
|
|
|
|
"\003K`\030<EFBFBD>\216<EFBFBD>\205<EFBFBD>\257\236<EFBFBD><EFBFBD>\267\235;\241\r\034+<2B>\210\034\007"
|
|
|
|
|
"\216\271\005\\\201cm<EFBFBD>\005&<26>&Cq<43><71>\201c\r<EFBFBD>\215\2514<EFBFBD>\024$\206\203<EFBFBD>"
|
|
|
|
|
"0\246\035\023\256\271\222\240\261$\206\237N_w\215<EFBFBD>\202<EFBFBD>b<EFBFBD><EFBFBD><EFBFBD>)\247"
|
|
|
|
|
"<EFBFBD>Z(Xi<58>\234D4L\252a\014S\\\017,\242<EFBFBD>\177\261\030\204<EFBFBD><EFBFBD>G\034[\017,"
|
|
|
|
|
":<3A>9fU\246\t\227iO<EFBFBD>X<EFBFBD>\230<EFBFBD>6o<EFBFBD>\'<EFBFBD>\272n\020&<26>V\2731<EFBFBD>\247\253<EFBFBD><EFBFBD><EFBFBD><\\<EFBFBD>"
|
|
|
|
|
"<EFBFBD>\033\207t<EFBFBD>a\030X9{&9<>\234\004\212\207\201<EFBFBD><EFBFBD><EFBFBD>\033\030T\023 T,<2C>\244"
|
|
|
|
|
"\207\225\241\031\n\027\213eL\031\026a\022\204\213<EFBFBD>\230<EFBFBD><EFBFBD>\030\215"
|
|
|
|
|
"u,d,\226\237v<EFBFBD>K\205\200<EFBFBD>\232<EFBFBD>\244]\222\213!`\261&=v<><76>\202\220\261"
|
|
|
|
|
"\030\223\036{t<>\034\010\033\2131<EFBFBD>\241\r8<EFBFBD>T<EFBFBD>p\260X\223\036R~R >\246"
|
|
|
|
|
"<EFBFBD>\252\002B<EFBFBD>bMz\206uo$<24>\035><3E>\257<EFBFBD>\n\005\211\265\201<EFBFBD>\247\207<EFBFBD>\236"
|
|
|
|
|
"%H,<2C>\244\'<EFBFBD>\232\202\013\036\213aL\267\272\246<EFBFBD>\002<EFBFBD>\2121<EFBFBD>R<EFBFBD>5\005"
|
|
|
|
|
"\0278V\232<EFBFBD>2<EFBFBD>\2133Ac\211\214\275*q<>\244s<EFBFBD>X\275\214\250\274<EFBFBD>}\005"
|
|
|
|
|
"7`,}\246u\214\031\002N(<28>\204\245OKe\266\237\236:\260.X<>~\207I\256"
|
|
|
|
|
"\237>\263\036X[\254k<EFBFBD><EFBFBD>\020\220<EFBFBD>\221<EFBFBD>b\215\2616\033Y\2223<EFBFBD>\216\014"
|
|
|
|
|
"\024\253\215\275<EFBFBD><EFBFBD>\272<EFBFBD><EFBFBD>\227!c\rs\026<EFBFBD>ccn;<3B>\202<EFBFBD>j<EFBFBD>nM\020\237wX\266"
|
|
|
|
|
"\016\032+<2B>\260\221<EFBFBD>\t<EFBFBD>M\002\001b<EFBFBD>\035<EFBFBD>q\230v\001M\204\210\225+:."
|
|
|
|
|
"?I<>\016;c\202<EFBFBD>\212\271<EFBFBD>(<28>\021\277\027\203<EFBFBD>Js&5LKq-,,\251\221<EFBFBD>\267"
|
|
|
|
|
"\265\216\274\021\026V\272\241]\256<EFBFBD><EFBFBD>\014\247\031 \226Xd<EFBFBD>\217c)\246"
|
|
|
|
|
"B<EFBFBD><EFBFBD>e4V<EFBFBD> <20>o\206\204\245\207\177S<EFBFBD>(g<> g<>\035R\'\262\"\032\274\271<EFBFBD>"
|
|
|
|
|
"\006&1\007F0Xz<EFBFBD>gtv<EFBFBD><EFBFBD>\264\200<EFBFBD>C\034\211\254<EFBFBD>\252\'q\'\177b\013\n\257"
|
|
|
|
|
"\207\202<EFBFBD>\010<EFBFBD>L\211x\003<EFBFBD>\006<EFBFBD>rPPX\254<EFBFBD><EFBFBD>\262\272:<3A>S\223}\033\n\003"
|
|
|
|
|
"\213\021<EFBFBD>m<EFBFBD>\245psLw\036\004\026#<23>c\254<EFBFBD><EFBFBD>0>\202\022\002\026#<23><>\277"
|
|
|
|
|
"L<EFBFBD><EFBFBD><EFBFBD>\022\000\026#<23>\223\270<EFBFBD>VE\266\213\n\000\213\021<EFBFBD><EFBFBD>\270+<\261\260"
|
|
|
|
|
"\242<EFBFBD>\030o\275\213\231\210oc<EFBFBD><EFBFBD><EFBFBD>c1<EFBFBD>?}dN=>f]\265<EFBFBD>`\232-<2D>\261\030<EFBFBD><EFBFBD>"
|
|
|
|
|
"\226<EFBFBD><EFBFBD>x\241\016f\234b\007?<3F>\261\207\1775<EFBFBD>@\024<EFBFBD><EFBFBD>a\243\226\247<EFBFBD>\201"
|
|
|
|
|
"\265<EFBFBD>X\214<EFBFBD>/mY\252\210<EFBFBD>\255i*h,{<7B>\027\263\256<EFBFBD>\265\031<EFBFBD><EFBFBD>\230=<3D>\025"
|
|
|
|
|
"\000\026#<23><>Y<EFBFBD>\202F<EFBFBD>,pR<70>>c<>#\2326<EFBFBD>;%\275\206<EFBFBD>\2248\001\277\277X<EFBFBD><EFBFBD>"
|
|
|
|
|
"O\030\266\245?\214<EFBFBD>9<EFBFBD>y!<21>_,{cm\261\'\213\206mf<EFBFBD>z<EFBFBD>X\266<EFBFBD><EFBFBD>b\034l<EFBFBD>\231"
|
|
|
|
|
"\035\004<EFBFBD>\214e\017<EFBFBD><EFBFBD><EFBFBD>uL<EFBFBD>n\266\002N\273<EFBFBD><EFBFBD>\277\030c<EFBFBD>><3E>\036\004<EFBFBD>\213"
|
|
|
|
|
"e\017<EFBFBD>r\214D\221<EFBFBD>l\rs<EFBFBD>\030<EFBFBD>\023<EFBFBD>\026<EFBFBD>\265\261^83\251\023o\247\263"
|
|
|
|
|
"\217Xqk\207<EFBFBD>^\2164<EFBFBD>F\215fK<EFBFBD>-,<2C>\210e\013<EFBFBD>v33<EFBFBD>\003\206!\020<EFBFBD><EFBFBD>\232<EFBFBD>"
|
|
|
|
|
"<EFBFBD>\262\205\177\";3jT\2476^r<>?,[<5B>\227for0\252S\007<EFBFBD><EFBFBD>\276a\211<EFBFBD>\246"
|
|
|
|
|
"\211\261<EFBFBD>\0304\231\255^<5E>2\254oX[\254z\224cg\221M<EFBFBD>4<EFBFBD><EFBFBD>\256<EFBFBD>\206\225"
|
|
|
|
|
"\2638\2316<EFBFBD><EFBFBD>\250&u<><75>\226\023<EFBFBD><EFBFBD>\022,\215<EFBFBD>6\016V\263<EFBFBD>\t\002<EFBFBD><EFBFBD>\212Y"
|
|
|
|
|
"<EFBFBD>\277<EFBFBD>\274e&\243<EFBFBD>\022\270<EFBFBD>!<21><>j3G4\022w<EFBFBD><EFBFBD>\250N\0227<EFBFBD><EFBFBD>\027V\207\271"
|
|
|
|
|
"<EFBFBD><EFBFBD>E<EFBFBD><EFBFBD>\212Q\235<EFBFBD><EFBFBD>\267B<EFBFBD><EFBFBD><EFBFBD>`R<>8<EFBFBD>u<EFBFBD>a\233<EFBFBD>\272\0368V\003_=1L_<4C>D2<44>\t\002"
|
|
|
|
|
"<EFBFBD><EFBFBD>B\263\275\023\213\274<EFBFBD><EFBFBD>\235\262$C\016\211\214\265b1_@\236\222<EFBFBD>"
|
|
|
|
|
"\263<EFBFBD>\"w\003\036/<2F><>\014\026<EFBFBD><EFBFBD>\206\034<EFBFBD>\267ua~[\202O/0\013<EFBFBD>[\247\035"
|
|
|
|
|
"z{<7B>1<EFBFBD><31>]&\\t\206\275<EFBFBD>*5<><35>\177o<EFBFBD>X<EFBFBD>\234[\201\267ml\270\241w<EFBFBD>\233\037"
|
|
|
|
|
"\212<EFBFBD>\230\201\215<EFBFBD><EFBFBD><EFBFBD>lu\037\026\206)\247g\261<EFBFBD><EFBFBD>nw<EFBFBD><EFBFBD><EFBFBD>\205\277<EFBFBD>\262"
|
|
|
|
|
">\263<EFBFBD>/8\260|<7C><>\204<EFBFBD>\202\220cc5<EFBFBD>\022\277<EFBFBD>\266\246\035\004\223\n<EFBFBD>"
|
|
|
|
|
"G\030n8<EFBFBD><EFBFBD><EFBFBD>)63\030\'\031O)<29>?\241<EFBFBD>>G<><47><EFBFBD>\257\211<EFBFBD>9<EFBFBD><EFBFBD>=e\207_<EFBFBD>*<2A>A$\221"
|
|
|
|
|
"D\022I$\221D\022I$\221\260$<24><>\257Z\220\n<EFBFBD>8<EFBFBD>k=\254\216<EFBFBD><EFBFBD>NNf2<EFBFBD><EFBFBD>\226"
|
|
|
|
|
"<EFBFBD>\032vI<EFBFBD>\t\013\013#\236*<2A>daa!<21>\244B<EFBFBD><EFBFBD><EFBFBD>\247\0302A\016<EFBFBD>%h<>\010-\263"
|
|
|
|
|
"\263oG\003_\275Y<EFBFBD>4\255)\254<EFBFBD>\273\032\222\217\263\265\034\202;<3B><>%"
|
|
|
|
|
"\\\246zE\016\014k\243F%<25>H\'\022\254\262^f%\0338<EFBFBD>\252L\223\221C\215"
|
|
|
|
|
"c<EFBFBD>BAa]y<><79>9X|\232$\250\246d\017X<EFBFBD><EFBFBD>\201a\255\242_{4m\231X\210_\000"
|
|
|
|
|
"/X\253<EFBFBD>b\201AMC<EFBFBD><EFBFBD><EFBFBD>\275\240A\254<EFBFBD><EFBFBD>*\031 V\273><3E>\033<EFBFBD>R\200<EFBFBD>,<2C>\232\017"
|
|
|
|
|
"\026\013<EFBFBD>0<EFBFBD>\005\013},<2C><><EFBFBD>\003<EFBFBD>*h<>\274bm<EFBFBD>\210F\006\2115\252-<2D>\256<EFBFBD>"
|
|
|
|
|
"u<EFBFBD>d\212\205<EFBFBD>\216L\027<EFBFBD>&5<>q<EFBFBD>\216\035<EFBFBD><EFBFBD>o>u<>l\266\216\225x<EFBFBD>l\235-<2D><>"
|
|
|
|
|
"<EFBFBD><EFBFBD>9 <20><>a,<2C><>E\',\025<EFBFBD><EFBFBD>Ft\233\214<EFBFBD>\005)V<>n\242<EFBFBD>?G\026=<3D><>J\220\241\250"
|
|
|
|
|
"<EFBFBD>\217\252F<EFBFBD><EFBFBD><EFBFBD>x0\\<EFBFBD>\261\276\201<EFBFBD><EFBFBD>\206\227\234<EFBFBD>\227u!\025\225<EFBFBD><EFBFBD>\222"
|
|
|
|
|
"kku#,]<5D>;5\rU<EFBFBD>\003b\t\224\206\261\022d\214V<EFBFBD>\225<EFBFBD><EFBFBD>\'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\\\212b\245"
|
|
|
|
|
"\240\005Xr<EFBFBD>\255\273\024\013<EFBFBD>\221+U\\W\014\026\276\003<EFBFBD><EFBFBD><EFBFBD>v\242\025"
|
|
|
|
|
"\253\240<EFBFBD>@<40>\225\252Vo <20>\034\036)<29>\261\265~<7E>\005\013\233y\202\225"
|
|
|
|
|
"<EFBFBD>O*\220<EFBFBD>?\210l\223T<EFBFBD>\227Y\260\036 7\267`<60><><EFBFBD>w3\030<EFBFBD>E\275<EFBFBD>Hs<EFBFBD>\004<EFBFBD>"
|
|
|
|
|
"i\027\254vl\031\tV\002W<EFBFBD>\211\007\221P<EFBFBD><EFBFBD>Y;m<>RI\235\026\254\036\003"
|
|
|
|
|
"\207\001k\205h\n<EFBFBD>v<EFBFBD><EFBFBD>\264q\202Up<EFBFBD>\202\215\"<EFBFBD>X\240\204\032yP\253<EFBFBD>\226"
|
|
|
|
|
"\256<EFBFBD><EFBFBD>\237\267ba=\271k<EFBFBD>B\277.\202]\247<EFBFBD>kX$\016\202<EFBFBD>\213\004<EFBFBD>\233"
|
|
|
|
|
"\004\272<EFBFBD><EFBFBD>\254\034,8@\020\004<EFBFBD>J<EFBFBD>\261\010\233i\032<EFBFBD>IJe<EFBFBD>o\003<EFBFBD><EFBFBD><EFBFBD>Gt"
|
|
|
|
|
"\225\261`\215\022\004\220\242W<EFBFBD>A8\210.<2E>\022\220q\254\274\250<EFBFBD>\251"
|
|
|
|
|
"<EFBFBD><EFBFBD>\271<EFBFBD><EFBFBD>\252<EFBFBD><EFBFBD>\233\217<EFBFBD><EFBFBD>)\026<EFBFBD><EFBFBD>|;q\222\243<EFBFBD>, Z\261<EFBFBD>r<EFBFBD>\010<EFBFBD>\202U\240"
|
|
|
|
|
"X\272<EFBFBD>\202\217#<23>\007Hj\244R\025\217S\214U<EFBFBD>:<3A>[x\004S,X<>b\0067\037"
|
|
|
|
|
"\2548Ouo\225\205\265\004\230X<EFBFBD>\033\260F\260V<EFBFBD><EFBFBD>V5\2757\0209<EFBFBD><EFBFBD>\207"
|
|
|
|
|
"K\030\2305bm<EFBFBD>VJ\270<EFBFBD>\004<EFBFBD>y$<24><><EFBFBD>\261\262\200\251[<5B>Gu\254,=5\216\211"
|
|
|
|
|
"\227\221O<EFBFBD>`<60>\217\261\024G,\032<EFBFBD><EFBFBD>X1:\206<EFBFBD>\037W<EFBFBD>Dr\016<EFBFBD><EFBFBD>\206<EFBFBD>\001\260"
|
|
|
|
|
"c%<25>\231OeP\2135<EFBFBD>\200B\232j<EFBFBD>|H<><48>\020\257A<EFBFBD>:u<><75>I<EFBFBD>I<EFBFBD>B<EFBFBD>\265\004<EFBFBD>\026"
|
|
|
|
|
"\233\252\221\025<EFBFBD>\022``%\014Ja<EFBFBD>\022\214Xy\214\265<EFBFBD><EFBFBD>\252<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD><EFBFBD>X\246"
|
|
|
|
|
"<EFBFBD>\202<EFBFBD><EFBFBD><EFBFBD>\002`a<>\226|<7C>\200\225<EFBFBD>X\242\021k\004cU\274a\251\264\265`"
|
|
|
|
|
"<EFBFBD>\253\272\230<EFBFBD><EFBFBD><EFBFBD>\227\224s|<7C>\2523V\276\t,Q<>\255\004\271#+:5a)<29>\010"
|
|
|
|
|
"<EFBFBD><EFBFBD>\265<EFBFBD>`<60>\022<EFBFBD>\272<EFBFBD>\r\253K[%\275\0203\001<EFBFBD>\261RF,<2C>^<5E>V,t<>\252<EFBFBD>u~J"
|
|
|
|
|
"\023X\243<EFBFBD><EFBFBD>\002<EFBFBD>E\211Z\016\',<2C>\n\024jX 6G<36>\222\005\253\244QWV\013"
|
|
|
|
|
"r<aA\230|\017<EFBFBD>E<EFBFBD>h\256X<EFBFBD>\244<EFBFBD>k<EFBFBD>\224\215<EFBFBD><EFBFBD>Y\260F5<EFBFBD>Sz<EFBFBD><EFBFBD>\006\017&\010"
|
|
|
|
|
"P<EFBFBD>\030K\263\261h\024<EFBFBD>\000<EFBFBD>\022h\010<EFBFBD><EFBFBD><EFBFBD>\230<EFBFBD>$\236\261FQ<EFBFBD>\022<EFBFBD><EFBFBD>\214"
|
|
|
|
|
"<EFBFBD><\033\013\233<EFBFBD><EFBFBD>~W<><57><EFBFBD>7hk<68>;\021\207[<5B>\264xJ<EFBFBD>\216\025<EFBFBD><EFBFBD>gp/v\031{\221"
|
|
|
|
|
"\215\2251Y#Hy<48><79>Ke\246<EFBFBD><EFBFBD>\210<EFBFBD>\270<EFBFBD>w<F\274bm<EFBFBD>\212<EFBFBD>\216\201D}z<>=.V\227"
|
|
|
|
|
"\001k\274\036\027<EFBFBD>\r\004Q\256<EFBFBD>l<EFBFBD>+\026\031\2044\244\037D\211\254\227"
|
|
|
|
|
"<EFBFBD>,\241<EFBFBD><EFBFBD>X\022\275<EFBFBD>g\004\253\254<EFBFBD><EFBFBD>\251<EFBFBD>\t<EFBFBD>=c%<25>\200<EFBFBD><EFBFBD>\270)fx>6\026"
|
|
|
|
|
"m\203<EFBFBD>\267<EFBFBD><EFBFBD>Dc2<EFBFBD>\212Uo\256Y<EFBFBD>XIb\032h/\242d\216\013\026\t3<EFBFBD>\217\021"
|
|
|
|
|
",<2C>Z\025<EFBFBD><EFBFBD><EFBFBD>\006\215\006<EFBFBD>NX\2353\037[?\235\233\241<EFBFBD><EFBFBD>\237g><3E>\276\004"
|
|
|
|
|
"VU<EFBFBD>7\266733y||f<>\224\005<EFBFBD>SF\021\226\004\017Cj\021M!\252\227e@\257"
|
|
|
|
|
"DXO<EFBFBD><EFBFBD>d<EFBFBD><EFBFBD>~\207\240n#/\237\200\007?ZK\006z<EFBFBD>A\267+<2B>\033[O<><4F>\264]g<><67>"
|
|
|
|
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\"\211$\222/\241\010}&\033\023<EFBFBD>\t\001<EFBFBD>g\215\2275]{<7B>8u<38><75>\032"
|
|
|
|
|
"<EFBFBD>\023\014\226>5\256Lao<EFBFBD>\276<EFBFBD>xY<EFBFBD>\265\252\021k\224\231Q\177\032<EFBFBD>\211"
|
|
|
|
|
"W<EFBFBD><EFBFBD>\237\211O<EFBFBD>\212\032<EFBFBD>\034<EFBFBD>2<EFBFBD>\215<EFBFBD>sy+V<>VcX\250\254<EFBFBD>Z\023<EFBFBD>iV<EFBFBD><EFBFBD>I<EFBFBD>g"
|
|
|
|
|
"\273\226_\201\017S:[\032\001<EFBFBD><EFBFBD>m<EFBFBD>\212\003\254h<EFBFBD>=+V\243-m.k<>b<EFBFBD>\273"
|
|
|
|
|
"*<2A>\032<EFBFBD>\202B\266}\tt.\201<EFBFBD>-^<5E><><EFBFBD>\205\275\000<EFBFBD>\200\201<EFBFBD>!9Q\021<EFBFBD>\241"
|
|
|
|
|
"\276l\007\233<EFBFBD>~4<>:\224<EFBFBD>\004\177\242\251<EFBFBD>v<EFBFBD><EFBFBD>\016<EFBFBD>S<EFBFBD><EFBFBD>M\240\277Vv;\274"
|
|
|
|
|
"\032\036\000R?>\002+<2B>N<EFBFBD>\000<EFBFBD>$\013\n:\010<EFBFBD>\256~r\032\212<EFBFBD>\003\261"
|
|
|
|
|
"\276\200a<EFBFBD>x<EFBFBD>,\020W\204<EFBFBD>e>V\002<EFBFBD>{%<25>\236<EFBFBD>|\242R\200\201\022<EFBFBD><<3C>$\212"
|
|
|
|
|
"q\236<EFBFBD>VTH7\232G<EFBFBD><EFBFBD>\024\nk<EFBFBD>\245<EFBFBD>S<EFBFBD><EFBFBD>\262<EFBFBD>*\020\252\262T<EFBFBD><EFBFBD>\013\217\240"
|
|
|
|
|
"J<EFBFBD>\251<EFBFBD>`\200\253f<EFBFBD><EFBFBD><EFBFBD>\274<EFBFBD>\243\260 >\215\004b\211\260<EFBFBD><EFBFBD><EFBFBD>$<SM<53><4D>w<EFBFBD>]"
|
|
|
|
|
"r\257<EFBFBD>%1\233\250\276\276g\005<EFBFBD>[\275<EFBFBD>W\030\221\252\251=(<28>NN\203\256"
|
|
|
|
|
"E\251z\200\234BX3/\032<EFBFBD>\252<EFBFBD><EFBFBD><EFBFBD> <20>\201\264 \253YT\t\np\263\273<EFBFBD><EFBFBD>D<EFBFBD>"
|
|
|
|
|
"<EFBFBD><EFBFBD>\227a\004<EFBFBD><EFBFBD>\256\024>m<><6D>x\027a\2257~XZa<5A>\222<EFBFBD><EFBFBD>WJ#<23>^<5E><>1\023\260D"
|
|
|
|
|
"\031c\215\203\236<EFBFBD>.4\247\202\245:\027am]<5D><><EFBFBD>R\024k<EFBFBD>X\266kq0\017\n"
|
|
|
|
|
"2\030<EFBFBD>\253<EFBFBD>n\262rT<EFBFBD><EFBFBD>\2606\241\2124\010\220<EFBFBD>\024\013<EFBFBD>\231\271\273"
|
|
|
|
|
"q\021\206<EFBFBD><EFBFBD>\205\263\243\213<EFBFBD>A^\241M<EFBFBD>\005;\006<EFBFBD>UPp\013\200\256{=<3D>"
|
|
|
|
|
"<EFBFBD>\023\034<EFBFBD>\025x\017<EFBFBD>A\245O\240<EFBFBD>\215e<EFBFBD><EFBFBD>;\000\254\240;\252<EFBFBD>.b/J#\030"
|
|
|
|
|
"\013\016\240\222<EFBFBD>\203\236a\205\000\221\237<EFBFBD>\247G<EFBFBD><EFBFBD>\211<EFBFBD><EFBFBD><EFBFBD>W3<EFBFBD><EFBFBD>-a<>"
|
|
|
|
|
"\272|R\006\272n-<2D>u\254,<2C>\274\227A\243\006\265<EFBFBD>\002<\235\201w\032"
|
|
|
|
|
"\034\247XYSYu\221\204<EFBFBD><EFBFBD>H\267\226e\254[\277AX\250693N\247<EFBFBD>5\254Dy"
|
|
|
|
|
"up\034\234<EFBFBD>>Z\031D)af\'\002@\261@\2544k<EFBFBD>*<2A><><EFBFBD><EFBFBD>e\026\226^\266P\001"
|
|
|
|
|
"<EFBFBD><EFBFBD>\241\276>\005\036\207\225\240s?<3F><>\204EN<EFBFBD>X@\220Q<EFBFBD>\007\023\225L\036"
|
|
|
|
|
")\r\017\0136v\031\255+,\231\261z\240\242\224Pe<EFBFBD>\263P\273f<EFBFBD><EFBFBD><EFBFBD>R3V\242"
|
|
|
|
|
"2\247\010\253\272<EFBFBD><EFBFBD>$\031<EFBFBD>BV<EFBFBD>J\242\214~m\"C\272R<EFBFBD>)\222<EFBFBD><<3C>T<EFBFBD>a<EFBFBD>!\036"
|
|
|
|
|
"C\223\257D<EFBFBD>\214<EFBFBD>Y\201<EFBFBD>\021V<EFBFBD>\235it;\241\254\220K<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD>4(\245(\026"
|
|
|
|
|
"\265<EFBFBD>j^<5E><>B\007J)\023<EFBFBD>w\226<EFBFBD>\022\\\026\016\246<EFBFBD>2\017\013\224/\215"
|
|
|
|
|
"\226<EFBFBD><EFBFBD>\027\237]4c\211<EFBFBD>\217\013\270\265bp:&j/<S\241\227\232\261J\251"
|
|
|
|
|
"<EFBFBD>\nHV<EFBFBD>\216<EFBFBD>R\250\022x<EFBFBD><EFBFBD><EFBFBD>\262\242cI<EFBFBD>\245#Y|Z<>\212\275\214\246<EFBFBD>G\n"
|
|
|
|
|
"p\264T_Tor\261\036<EFBFBD>n\251<EFBFBD><EFBFBD>Z\025W4Z<EFBFBD>\202s<EFBFBD>\213X\267\260Z>\212\247"
|
|
|
|
|
"<EFBFBD><EFBFBD>R\023\026z\\<EFBFBD>\214%8\275T\263\017<EFBFBD>\005\000aN\273U<EFBFBD>-<2D>\007\265<>\255"
|
|
|
|
|
"cuW_Gu~\246 \037\271\252<EFBFBD>]<5D>\016<Ub]P<><50>\016n<EFBFBD>\235J<EFBFBD>Rf\230#<23>+\021L"
|
|
|
|
|
"Wm<EFBFBD>[;M<>\003<EFBFBD>O\262\211`\247<EFBFBD>L<EFBFBD>#b]<5D>v\263\245\202<EFBFBD>7\036|\006\247*<2A>\262"
|
|
|
|
|
"\255D%<25>\245\242d\245\245\032\013HG<EFBFBD>\270N( \222H\"\211$\222H\"\211"
|
|
|
|
|
"$\222H\"\211$\222H\"\211$\222H\"\211$\222H\"<EFBFBD>?\223<EFBFBD>\001:<3A>\013\243"
|
|
|
|
|
"<EFBFBD>\244<EFBFBD>A\000\000\000\000\111\105\116\104\256B`\202", 4107, 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;
|
|
|
|
|
}
|
|
|
|
|
|