From 7a78b7fcc89cc39ffbdb2fcf41a1e0f268d10a03 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Mon, 19 Oct 1998 15:03:32 +0000 Subject: [PATCH] Added the "GtkDrawWindow" class, which is a descendent of the Window class Sun Oct 18 22:48:27 1998 Owen Taylor * gtk/gtkdrawwindow.c (gtk_draw_window_get_type): Added the "GtkDrawWindow" class, which is a descendent of the Window class which leaves its background alone. Essentially, a toplevel drawing area, though it does allow adding a child. --- gtk/gtkdrawwindow.c | 130 ++++++++++++++++++++++++++++++++++++++++++++ gtk/gtkdrawwindow.h | 63 +++++++++++++++++++++ 2 files changed, 193 insertions(+) create mode 100644 gtk/gtkdrawwindow.c create mode 100644 gtk/gtkdrawwindow.h diff --git a/gtk/gtkdrawwindow.c b/gtk/gtkdrawwindow.c new file mode 100644 index 0000000000..91fe87d4e1 --- /dev/null +++ b/gtk/gtkdrawwindow.c @@ -0,0 +1,130 @@ +/* GTK - The GIMP Toolkit + * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#include "gtkbutton.h" +#include "gtkdrawwindow.h" +#include "gtkhbox.h" +#include "gtkhseparator.h" +#include "gtkvbox.h" + + +static void gtk_draw_window_class_init (GtkDrawWindowClass *klass); +static void gtk_draw_window_init (GtkDrawWindow *draw_window); +static void gtk_draw_window_draw (GtkWidget *widget, + GdkRectangle *area); +static gint gtk_draw_window_expose (GtkWidget *widget, + GdkEventExpose *event); + + +GtkType +gtk_draw_window_get_type (void) +{ + static GtkType draw_window_type = 0; + + if (!draw_window_type) + { + GtkTypeInfo draw_window_info = + { + "GtkDrawWindow", + sizeof (GtkDrawWindow), + sizeof (GtkDrawWindowClass), + (GtkClassInitFunc) gtk_draw_window_class_init, + (GtkObjectInitFunc) gtk_draw_window_init, + /* reserved_1 */ NULL, + /* reserved_2 */ NULL, + (GtkClassInitFunc) NULL, + }; + + draw_window_type = gtk_type_unique (GTK_TYPE_WINDOW, &draw_window_info); + } + + return draw_window_type; +} + +static void +gtk_draw_window_class_init (GtkDrawWindowClass *class) +{ + GtkWidgetClass *widget_class; + + widget_class = (GtkWidgetClass*) class; + + widget_class->draw = gtk_draw_window_draw; + widget_class->expose_event = gtk_draw_window_expose; +} + +static void +gtk_draw_window_init (GtkDrawWindow *draw_window) +{ +} + +static gint +gtk_draw_window_expose (GtkWidget *widget, + GdkEventExpose *event) +{ + GtkBin *bin; + GdkEventExpose child_event; + + g_return_val_if_fail (widget != NULL, FALSE); + g_return_val_if_fail (GTK_IS_BIN (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + if (GTK_WIDGET_DRAWABLE (widget)) + { + bin = GTK_BIN (widget); + + child_event = *event; + if (bin->child && + GTK_WIDGET_NO_WINDOW (bin->child) && + gtk_widget_intersect (bin->child, &event->area, &child_event.area)) + gtk_widget_event (bin->child, (GdkEvent*) &child_event); + } + + return FALSE; +} + +static void +gtk_draw_window_draw (GtkWidget *widget, + GdkRectangle *area) +{ + GtkBin *bin; + GdkRectangle child_area; + + g_return_if_fail (widget != NULL); + g_return_if_fail (GTK_IS_BIN (widget)); + + if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_MAPPED (widget)) + { + bin = GTK_BIN (widget); + + if (bin->child && + gtk_widget_intersect (bin->child, area, &child_area)) + gtk_widget_draw (bin->child, &child_area); + } +} + +GtkWidget* +gtk_draw_window_new (GtkWindowType type) +{ + GtkWindow *window; + + window = gtk_type_new (GTK_TYPE_DRAW_WINDOW); + + window->type = type; + + return GTK_WIDGET (window); +} diff --git a/gtk/gtkdrawwindow.h b/gtk/gtkdrawwindow.h new file mode 100644 index 0000000000..20f9f7fe08 --- /dev/null +++ b/gtk/gtkdrawwindow.h @@ -0,0 +1,63 @@ +/* GTK - The GIMP Toolkit + * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifndef __GTK_DRAW_WINDOW_H__ +#define __GTK_DRAW_WINDOW_H__ + + +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +#define GTK_TYPE_DRAW_WINDOW (gtk_draw_window_get_type ()) +#define GTK_DRAW_WINDOW(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_DRAW_WINDOW, GtkDrawWindow)) +#define GTK_DRAW_WINDOW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_DRAW_WINDOW, GtkDrawWindowClass)) +#define GTK_IS_DRAW_WINDOW(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_DRAW_WINDOW)) +#define GTK_IS_DRAW_WINDOW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_DRAW_WINDOW)) + + +typedef struct _GtkDrawWindow GtkDrawWindow; +typedef struct _GtkDrawWindowClass GtkDrawWindowClass; +typedef struct _GtkDrawWindowButton GtkDrawWindowButton; + + +struct _GtkDrawWindow +{ + GtkWindow window; +}; + +struct _GtkDrawWindowClass +{ + GtkWindowClass parent_class; +}; + + +GtkType gtk_draw_window_get_type (void); +GtkWidget* gtk_draw_window_new (GtkWindowType type); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + + +#endif /* __GTK_DRAW_WINDOW_H__ */