You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-emulation/e-uae/files/e-uae-0.8.28-themes_renderi...

216 lines
5.7 KiB

diff -Naur e-uae-0.8.28.orig/src/gui-gtk/led.c e-uae-0.8.28/src/gui-gtk/led.c
--- e-uae-0.8.28.orig/src/gui-gtk/led.c 2004-06-15 01:14:49.000000000 +0400
+++ e-uae-0.8.28/src/gui-gtk/led.c 2006-07-18 17:01:48.000000000 +0400
@@ -1,15 +1,17 @@
-/*
- * led.c
- *
- * Copyright 2004 Martin Garton
- */
+ /*
+ * E-UAE - The portable Amiga Emulator
+ *
+ * Custom Gtk+ LED widget
+ *
+ * Copyright 2004 Martin Garton
+ * Copyright 2006 Richard Drummond
+ */
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
-#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
#include "led.h"
@@ -21,14 +23,19 @@
static void led_class_init (LedClass *class);
static gint led_expose (GtkWidget *w, GdkEventExpose *event);
static void led_destroy (GtkObject *object);
+static void led_realize (GtkWidget *widget);
+static void led_unrealize (GtkWidget *widget);
+static void led_size_request (GtkWidget *widget, GtkRequisition *requisition);
+static void led_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
+
guint led_get_type ()
{
static guint led_type = 0;
if (!led_type) {
- GtkTypeInfo led_info = {
- "Led",
+ static const GtkTypeInfo led_info = {
+ (char *) "Led",
sizeof (Led),
sizeof (LedClass),
(GtkClassInitFunc) led_class_init,
@@ -48,39 +55,102 @@
{
GtkObjectClass *object_class = (GtkObjectClass *) class;
GtkWidgetClass *widget_class = (GtkWidgetClass *) class;
- parent_class = gtk_type_class (gtk_object_get_type ());
+ parent_class = gtk_type_class (gtk_widget_get_type ());
object_class->destroy = led_destroy;
widget_class->expose_event = led_expose;
+ widget_class->realize = led_realize;
+ widget_class->unrealize = led_unrealize;
+ widget_class->size_request = led_size_request;
+ widget_class->size_allocate = led_size_allocate;
}
static void led_init (Led *theled)
{
theled->color = LED_OFF;
-
- GTK_WIDGET (theled)->requisition.width = LED_W + GTK_MISC (theled)->xpad * 2;
- GTK_WIDGET (theled)->requisition.height = LED_H + GTK_MISC (theled)->ypad * 2;
}
-
GtkWidget *led_new (void)
{
return gtk_type_new (led_get_type ());
}
-
static gint led_expose (GtkWidget *w, GdkEventExpose *event)
{
if (w && GTK_WIDGET_DRAWABLE (w)) {
- GtkStyle *style = gtk_style_copy (w->style);
- style->bg[GTK_STATE_NORMAL] = LED (w)->color;
- gtk_style_attach (style, w->window);
- gtk_draw_flat_box (style, w->window, GTK_STATE_NORMAL, GTK_SHADOW_NONE,
- 0, 0, LED_W, LED_H);
+ Led *theled = LED (w);
+ gdk_draw_rectangle (w->window, theled->gc, TRUE, 0, 0,
+ w->allocation.width, w->allocation.height);
}
return 0;
}
+static void led_realize (GtkWidget *widget)
+{
+ Led *theled;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
+
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (IS_LED (widget));
+
+ GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+ theled = LED (widget);
+
+ attributes.x = widget->allocation.x;
+ attributes.y = widget->allocation.y;
+ attributes.width = widget->allocation.width;
+ attributes.height = widget->allocation.height;
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.window_type = GDK_WINDOW_CHILD;
+ attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK;
+ attributes.visual = gtk_widget_get_visual (widget);
+ attributes.colormap = gtk_widget_get_colormap (widget);
+
+ attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+ widget->window = gdk_window_new (widget->parent->window, &attributes, attributes_mask);
+
+ gdk_window_set_user_data (widget->window, widget);
+
+ theled->gc = gdk_gc_new (widget->window);
+ gdk_gc_set_rgb_fg_color (theled->gc, &theled->color);
+
+ led_expose (widget, NULL);
+}
+
+static void led_unrealize (GtkWidget *widget)
+{
+ Led *theled = LED (widget);
+
+ g_object_unref (theled->gc);
+ theled->gc = NULL;
+
+ GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
+}
+
+static void led_size_request (GtkWidget *widget, GtkRequisition *requisition)
+{
+ requisition->width = LED_W;
+ requisition->height = LED_H;
+}
+
+static void led_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
+{
+ Led *theled = LED (widget);
+
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (IS_LED (widget));
+ g_return_if_fail (allocation != NULL);
+
+ widget->allocation = *allocation;
+
+ if (GTK_WIDGET_REALIZED (widget)) {
+ gdk_window_move_resize (widget->window,
+ allocation->x, allocation->y,
+ allocation->width, allocation->height);
+ }
+}
+
static void led_destroy (GtkObject *o)
{
g_return_if_fail (o != NULL);
@@ -95,6 +165,8 @@
{
l->color = col;
- if (GTK_WIDGET_DRAWABLE (l))
+ if (GTK_WIDGET_REALIZED (l)) {
+ gdk_gc_set_rgb_fg_color (l->gc, &l->color);
led_expose (GTK_WIDGET (l), NULL);
+ }
}
diff -Naur e-uae-0.8.28.orig/src/gui-gtk/led.h e-uae-0.8.28/src/gui-gtk/led.h
--- e-uae-0.8.28.orig/src/gui-gtk/led.h 2004-05-20 00:56:23.000000000 +0400
+++ e-uae-0.8.28/src/gui-gtk/led.h 2006-07-18 17:01:42.000000000 +0400
@@ -1,10 +1,16 @@
-/* led.h */
+ /*
+ * E-UAE - The portable Amiga Emulator
+ *
+ * Custom Gtk+ LED widget
+ *
+ * Copyright 2004 Martin Garton
+ * Copyright 2006 Richard Drummond
+ */
#ifndef __LED_H__
#define __LED_H__
#include <gdk/gdk.h>
-#include <gtk/gtkmisc.h>
#ifdef __cplusplus
extern "C" {
@@ -21,15 +27,15 @@
struct _Led
{
- GtkMisc widget;
- GdkColor color;
+ GtkWidget widget;
+
+ GdkGC *gc;
+ GdkColor color;
};
struct _LedClass
{
GtkWidgetClass parent_class;
-
- //void (* led) (Led *led );
};
guint led_get_type (void);