mirror of https://github.com/GNOME/gimp.git
122 lines
4.2 KiB
C
122 lines
4.2 KiB
C
/* libgimptool/glue.c
|
|
* Copyright (C) 2002 Tor Lillqvist <tml@iki.fi>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser 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 Lesser 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.
|
|
*/
|
|
|
|
/*
|
|
* Used in the libgimptool shared library for dynamic linking at
|
|
* run-time against the main executable libgimptool is used by (either
|
|
* gimp itself or tool-safe-mode, as far as I understand).
|
|
*
|
|
* Idea based upon libgimpwidgets/libgimp-glue.c.
|
|
*
|
|
* gimp_object_get_type
|
|
* gimp_tool_control_get_cursor
|
|
* gimp_tool_control_get_cursor_modifier
|
|
* gimp_tool_control_get_toggle_cursor
|
|
* gimp_tool_control_get_toggle_cursor_modifier
|
|
* gimp_tool_control_get_toggle_tool_cursor
|
|
* gimp_tool_control_get_tool_cursor
|
|
* gimp_tool_control_get_type
|
|
* gimp_tool_control_halt
|
|
* gimp_tool_control_is_paused
|
|
* gimp_tool_control_is_toggled
|
|
* gimp_tool_control_pause
|
|
* gimp_tool_control_resume
|
|
* gimp_tool_real_button_press
|
|
* gimp_tool_real_button_release
|
|
* gimp_tool_set_cursor
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include <glib.h>
|
|
|
|
#ifdef G_OS_WIN32 /* Bypass whole file otherwise */
|
|
|
|
#include <gtk/gtk.h>
|
|
|
|
#include "libgimpwidgets/gimpwidgets.h"
|
|
#include "libgimpproxy/gimpproxytypes.h"
|
|
#include "gimptooltypes.h"
|
|
|
|
#include <windows.h>
|
|
|
|
typedef int voidish;
|
|
|
|
static FARPROC
|
|
dynamic_resolve (const gchar* name)
|
|
{
|
|
FARPROC fn = NULL;
|
|
|
|
fn = GetProcAddress (GetModuleHandle (NULL), name);
|
|
|
|
if (!fn)
|
|
g_error ("GetProcAddress of %s failed!", name);
|
|
|
|
return fn;
|
|
}
|
|
|
|
#define ENTRY(type, name, parlist, arglist) \
|
|
type \
|
|
name parlist \
|
|
{ \
|
|
typedef type (*p_##name) parlist; \
|
|
static gboolean beenhere = FALSE; \
|
|
static p_##name fn; \
|
|
if (!beenhere) \
|
|
beenhere = TRUE, fn = (p_##name) dynamic_resolve (#name); \
|
|
return (fn) arglist; \
|
|
}
|
|
|
|
ENTRY (GType, gimp_object_get_type, (void), ());
|
|
ENTRY (GdkCursorType, gimp_tool_control_get_cursor, (GimpToolControl *control), (control));
|
|
ENTRY (GimpCursorModifier, gimp_tool_control_get_cursor_modifier, (GimpToolControl *control), (control));
|
|
ENTRY (GdkCursorType, gimp_tool_control_get_toggle_cursor, (GimpToolControl *control), (control));
|
|
ENTRY (GimpCursorModifier, gimp_tool_control_get_toggle_cursor_modifier, (GimpToolControl *control), (control));
|
|
ENTRY (GimpToolCursorType, gimp_tool_control_get_toggle_tool_cursor, (GimpToolControl *control), (control));
|
|
ENTRY (GimpToolCursorType, gimp_tool_control_get_tool_cursor, (GimpToolControl *control), (control));
|
|
ENTRY (GType, gimp_tool_control_get_type, (void), ());
|
|
ENTRY (voidish, gimp_tool_control_halt, (GimpToolControl *control), (control));
|
|
ENTRY (gboolean, gimp_tool_control_is_paused, (GimpToolControl *control), (control));
|
|
ENTRY (gboolean, gimp_tool_control_is_toggled, (GimpToolControl *control), (control));
|
|
ENTRY (voidish, gimp_tool_control_pause, (GimpToolControl *control), (control));
|
|
ENTRY (voidish, gimp_tool_control_resume, (GimpToolControl *control), (control));
|
|
ENTRY (voidish, gimp_tool_real_button_press, \
|
|
(GimpTool *tool, \
|
|
GimpCoords *coords, \
|
|
guint32 time, \
|
|
GdkModifierType state, \
|
|
GimpDisplay *gdisp), \
|
|
(tool, coords, time, state, gdisp));
|
|
ENTRY (voidish, gimp_tool_real_button_release, \
|
|
(GimpTool *tool, \
|
|
GimpCoords *coords, \
|
|
guint32 time, \
|
|
GdkModifierType state, \
|
|
GimpDisplay *gdisp), \
|
|
(tool, coords, time, state, gdisp));
|
|
ENTRY (voidish, gimp_tool_set_cursor, \
|
|
(GimpTool *tool, \
|
|
GimpDisplay *gdisp, \
|
|
GdkCursorType cursor, \
|
|
GimpToolCursorType tool_cursor, \
|
|
GimpCursorModifier modifier), \
|
|
(tool, gdisp, cursor, tool_cursor, modifier));
|
|
|
|
#endif /* G_OS_WIN32 */
|