X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gdk%2Fgdkcursor.c;h=a3677e9f8f1eb1291170c5220d604e91d5a4b4a9;hb=eae60c34d2f38206ce063251a862a109af41a881;hp=04260a2cde91fa0c40395b06d1dfd7eeb8dc0fdc;hpb=f903bdf1a745021df882b4f5ba2724e7536a3c5d;p=~andy%2Fgtk diff --git a/gdk/gdkcursor.c b/gdk/gdkcursor.c index 04260a2cd..a3677e9f8 100644 --- a/gdk/gdkcursor.c +++ b/gdk/gdkcursor.c @@ -2,93 +2,101 @@ * 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 + * 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. + * Lesser General Public License for more details. * - * You should have received a copy of the GNU Library General Public + * 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. */ /* - * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS + * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS * file for a list of people on the GTK+ Team. See the ChangeLog * files for a list of changes. These files are distributed with * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ -#include -#include - -#include "gdkx.h" +#include "config.h" #include "gdkcursor.h" -#include "gdkprivate.h" - +#include "gdkdisplay.h" +#include "gdkinternals.h" +#include "gdkalias.h" -GdkCursor* -gdk_cursor_new (GdkCursorType cursor_type) +GType +gdk_cursor_get_type (void) { - GdkCursorPrivate *private; - GdkCursor *cursor; - Cursor xcursor; - - xcursor = XCreateFontCursor (gdk_display, cursor_type); - private = g_new (GdkCursorPrivate, 1); - private->xdisplay = gdk_display; - private->xcursor = xcursor; - cursor = (GdkCursor*) private; - cursor->type = cursor_type; - - return cursor; + static GType our_type = 0; + + if (our_type == 0) + our_type = g_boxed_type_register_static (g_intern_static_string ("GdkCursor"), + (GBoxedCopyFunc)gdk_cursor_ref, + (GBoxedFreeFunc)gdk_cursor_unref); + return our_type; } +/** + * gdk_cursor_ref: + * @cursor: a #GdkCursor + * + * Adds a reference to @cursor. + * + * Return value: Same @cursor that was passed in + **/ GdkCursor* -gdk_cursor_new_from_pixmap (GdkPixmap *source, GdkPixmap *mask, GdkColor *fg, GdkColor *bg, gint x, gint y) +gdk_cursor_ref (GdkCursor *cursor) { - GdkCursorPrivate *private; - GdkCursor *cursor; - Pixmap source_pixmap, mask_pixmap; - Cursor xcursor; - XColor xfg, xbg; - - source_pixmap = GDK_DRAWABLE_XID (source); - mask_pixmap = GDK_DRAWABLE_XID (mask); + g_return_val_if_fail (cursor != NULL, NULL); + g_return_val_if_fail (cursor->ref_count > 0, NULL); - xfg.pixel = fg->pixel; - xfg.red = fg->red; - xfg.blue = fg->blue; - xfg.green = fg->green; - xbg.pixel = bg->pixel; - xbg.red = bg->red; - xbg.blue = bg->blue; - xbg.green = bg->green; - - xcursor = XCreatePixmapCursor (gdk_display, source_pixmap, mask_pixmap, &xfg, &xbg, x, y); - private = g_new (GdkCursorPrivate, 1); - private->xdisplay = gdk_display; - private->xcursor = xcursor; - cursor = (GdkCursor *) private; - cursor->type = GDK_CURSOR_IS_PIXMAP; + cursor->ref_count += 1; return cursor; } +/** + * gdk_cursor_unref: + * @cursor: a #GdkCursor + * + * Removes a reference from @cursor, deallocating the cursor + * if no references remain. + * + **/ void -gdk_cursor_destroy (GdkCursor *cursor) +gdk_cursor_unref (GdkCursor *cursor) { - GdkCursorPrivate *private; - g_return_if_fail (cursor != NULL); + g_return_if_fail (cursor->ref_count > 0); - private = (GdkCursorPrivate *) cursor; - XFreeCursor (private->xdisplay, private->xcursor); + cursor->ref_count -= 1; - g_free (private); + if (cursor->ref_count == 0) + _gdk_cursor_destroy (cursor); } + +/** + * gdk_cursor_new: + * @cursor_type: cursor to create + * + * Creates a new cursor from the set of builtin cursors for the default display. + * See gdk_cursor_new_for_display(). + * + * To make the cursor invisible, use %GDK_BLANK_CURSOR. + * + * Return value: a new #GdkCursor + **/ +GdkCursor* +gdk_cursor_new (GdkCursorType cursor_type) +{ + return gdk_cursor_new_for_display (gdk_display_get_default(), cursor_type); +} + +#define __GDK_CURSOR_C__ +#include "gdkaliasdef.c"