diff options
| author | MenTaLguY <mental@rydia.net> | 2006-01-16 02:36:01 +0000 |
|---|---|---|
| committer | mental <mental@users.sourceforge.net> | 2006-01-16 02:36:01 +0000 |
| commit | 179fa413b047bede6e32109e2ce82437c5fb8d34 (patch) | |
| tree | a5a6ac2c1708bd02288fbd8edb2ff500ff2e0916 /src/ui/view/view-widget.cpp | |
| download | inkscape-179fa413b047bede6e32109e2ce82437c5fb8d34.tar.gz inkscape-179fa413b047bede6e32109e2ce82437c5fb8d34.zip | |
moving trunk for module inkscape
(bzr r1)
Diffstat (limited to 'src/ui/view/view-widget.cpp')
| -rw-r--r-- | src/ui/view/view-widget.cpp | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/src/ui/view/view-widget.cpp b/src/ui/view/view-widget.cpp new file mode 100644 index 000000000..6e60a9dfe --- /dev/null +++ b/src/ui/view/view-widget.cpp @@ -0,0 +1,135 @@ +/** \file + * SPViewWidget implementation. + * + * Authors: + * Lauris Kaplinski <lauris@kaplinski.com> + * Ralf Stephan <ralf@ark.in-berlin.de> + * + * Copyright (C) 2001-2002 Lauris Kaplinski + * Copyright (C) 2001 Ximian, Inc. + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "view.h" +#include "view-widget.h" + +//using namespace Inkscape::UI::View; + +/* SPViewWidget */ + +static void sp_view_widget_class_init(SPViewWidgetClass *vwc); +static void sp_view_widget_init(SPViewWidget *widget); +static void sp_view_widget_destroy(GtkObject *object); + +static GtkEventBoxClass *widget_parent_class; + +/** + * Registers the SPViewWidget class with Glib and returns its type number. + */ +GtkType sp_view_widget_get_type(void) +{ + static GtkType type = 0; + + if (!type) { + GtkTypeInfo info = { + "SPViewWidget", + sizeof(SPViewWidget), + sizeof(SPViewWidgetClass), + (GtkClassInitFunc) sp_view_widget_class_init, + (GtkObjectInitFunc) sp_view_widget_init, + NULL, NULL, NULL + }; + type = gtk_type_unique(GTK_TYPE_EVENT_BOX, &info); + } + + return type; +} + +/** + * Callback to initialize the SPViewWidget vtable. + */ +static void sp_view_widget_class_init(SPViewWidgetClass *vwc) +{ + GtkObjectClass *object_class = GTK_OBJECT_CLASS(vwc); + + widget_parent_class = (GtkEventBoxClass*) gtk_type_class(GTK_TYPE_EVENT_BOX); + + object_class->destroy = sp_view_widget_destroy; +} + +/** + * Callback to initialize the SPViewWidget. + */ +static void sp_view_widget_init(SPViewWidget *vw) +{ + vw->view = NULL; +} + +/** + * Callback to disconnect from view and destroy SPViewWidget. + * + * Apparently, this gets only called when a desktop is closed, but then twice! + */ +static void sp_view_widget_destroy(GtkObject *object) +{ + SPViewWidget *vw = SP_VIEW_WIDGET(object); + + if (vw->view) { + vw->view->close(); + Inkscape::GC::release(vw->view); + vw->view = NULL; + } + + if (((GtkObjectClass *) (widget_parent_class))->destroy) { + (* ((GtkObjectClass *) (widget_parent_class))->destroy)(object); + } +} + +/** + * Connects widget to view's 'resized' signal and calls virtual set_view() + * function. + */ +void sp_view_widget_set_view(SPViewWidget *vw, Inkscape::UI::View::View *view) +{ + g_return_if_fail(vw != NULL); + g_return_if_fail(SP_IS_VIEW_WIDGET(vw)); + g_return_if_fail(view != NULL); + + g_return_if_fail(vw->view == NULL); + + vw->view = view; + Inkscape::GC::anchor(view); + + if (((SPViewWidgetClass *) G_OBJECT_GET_CLASS(vw))->set_view) { + ((SPViewWidgetClass *) G_OBJECT_GET_CLASS(vw))->set_view(vw, view); + } +} + +/** + * Calls the virtual shutdown() function of the SPViewWidget. + */ +bool sp_view_widget_shutdown(SPViewWidget *vw) +{ + g_return_val_if_fail(vw != NULL, TRUE); + g_return_val_if_fail(SP_IS_VIEW_WIDGET(vw), TRUE); + + if (((SPViewWidgetClass *) G_OBJECT_GET_CLASS(vw))->shutdown) { + return ((SPViewWidgetClass *) G_OBJECT_GET_CLASS(vw))->shutdown(vw); + } + + return FALSE; +} + + + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : |
