1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
/*
* @(#) $Id: gwydgets.c 15598 2013-11-11 12:33:32Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti@gwyddion.net, klapetek@gwyddion.net.
*
* 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., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include "config.h"
#include <libdraw/gwydraw.h>
#include <libgwydgets/gwydgets.h>
static GdkGLConfig *glconfig = NULL;
/************************** Initialization ****************************/
/**
* gwy_widgets_type_init:
*
* Makes libgwydgets types safe for deserialization and performs other
* initialization. You have to call this function before using widgets and
* objects from libgwydgets.
*
* Calls gwy_draw_type_init() first to make sure libgwydraw is initialized.
*
* It is safe to call this function more than once, subsequent calls are no-op.
**/
void
gwy_widgets_type_init(void)
{
static guint types_initialized = FALSE;
if (types_initialized)
return;
gwy_draw_type_init();
g_type_class_peek(GWY_TYPE_GRAPH_CURVE_MODEL);
g_type_class_peek(GWY_TYPE_GRAPH_MODEL);
g_type_class_peek(GWY_TYPE_3D_LABEL);
g_type_class_peek(GWY_TYPE_3D_SETUP);
g_type_class_peek(GWY_TYPE_SELECTION_GRAPH_POINT);
g_type_class_peek(GWY_TYPE_SELECTION_GRAPH_AREA);
g_type_class_peek(GWY_TYPE_SELECTION_GRAPH_ZOOM);
g_type_class_peek(GWY_TYPE_SELECTION_GRAPH_LINE);
g_type_class_peek(GWY_TYPE_SELECTION_GRAPH_1DAREA);
types_initialized = 1;
gtk_rc_parse_string
(/* graph window statusbar */
"style \"gwyflatstatusbar\" {\n"
" GtkStatusbar::shadow_type = 0\n"
"}\n"
"widget \"*.gwyflatstatusbar\" style \"gwyflatstatusbar\"\n"
"\n");
}
/**
* gwy_widgets_gl_init:
*
* Configures an OpenGL-capable visual for 3D widgets.
*
* Use gwy_widgets_get_gl_config() to get the framebuffer configuration.
*
* This function must be called before OpenGL widgets can be used.
*
* Returns: %TRUE if an appropriate visual was found. If Gwyddion was compiled
* without OpenGL support, it always returns %FALSE.
**/
gboolean
gwy_widgets_gl_init(void)
{
/* when called twice, fail but successfully :o) */
g_return_val_if_fail(glconfig == NULL, TRUE);
#ifdef HAVE_GTKGLEXT
glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB
| GDK_GL_MODE_DEPTH
| GDK_GL_MODE_DOUBLE);
/* Try double-buffered visual */
if (!glconfig) {
g_warning("Cannot find a double-buffered OpenGL visual, "
"Trying single-buffered visual.");
/* Try single-buffered visual */
glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB
| GDK_GL_MODE_DEPTH);
if (!glconfig) {
g_warning("No appropriate OpenGL-capable visual found.");
}
}
#endif
return glconfig != NULL;
}
/**
* gwy_widgets_get_gl_config:
*
* Returns OpenGL framebuffer configuration for 3D widgets.
*
* Call gwy_widgets_gl_init() first.
*
* Returns: The OpenGL framebuffer configuration, %NULL if OpenGL
* initialization was not successfull.
**/
GdkGLConfig*
gwy_widgets_get_gl_config(void)
{
return glconfig;
}
/************************** Documentation ****************************/
/**
* SECTION:gwydgets
* @title: gwydgets
* @short_description: Base functions
*
* Gwyddion classes has to be initialized before they can be safely
* deserialized. The function gwy_type_init() performs this initialization.
*
* Before 3D widgets (#Gwy3DView) can be used, OpenGL must be initialized with
* gwy_widgets_gl_init().
**/
/**
* GdkGLConfig:
*
* Placeholder typedef.
*
* If Gwyddion is compiled with OpenGL (i.e., GtkGLExt) this is the real
* <type>GdkGLConfig</type>. However, if Gwyddion is compiled without OpenGL
* this type is typedefed as <type>void</type>.
*
* Since one cannot actually use any of the Gwyddion OpenGL widgets if they
* are not enabled, this usually works well. However, it can break in the
* unlikely case one compiles with wibgwydgets that have OpenGL disabled and
* at the same time he uses GtkGLExt directly. In such case
* <type>GdkGLConfig</type> is defined twice. The only known fix is not
* to include <filename>gwydgets.h</filename> and GtkGLExt headers in the same
* source file.
**/
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
|