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.
216 lines
5.7 KiB
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);
|