Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
gtk
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1,144
Issues
1,144
List
Boards
Labels
Milestones
Merge Requests
97
Merge Requests
97
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Container Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
GNOME
gtk
Commits
da216c06
Commit
da216c06
authored
Dec 13, 2010
by
Matthias Clasen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add vfuncs for a bunch of cursor functionality to GdkDisplay
parent
dfe6ba93
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
403 additions
and
298 deletions
+403
-298
gdk/gdkcursor.c
gdk/gdkcursor.c
+149
-10
gdk/gdkdisplay.c
gdk/gdkdisplay.c
+86
-0
gdk/gdkdisplayprivate.h
gdk/gdkdisplayprivate.h
+23
-3
gdk/x11/gdkcursor-x11.c
gdk/x11/gdkcursor-x11.c
+121
-285
gdk/x11/gdkdisplay-x11.c
gdk/x11/gdkdisplay-x11.c
+7
-0
gdk/x11/gdkprivate-x11.h
gdk/x11/gdkprivate-x11.h
+17
-0
No files found.
gdk/gdkcursor.c
View file @
da216c06
...
...
@@ -27,8 +27,7 @@
#include "config.h"
#include "gdkcursor.h"
#include "gdkdisplay.h"
#include "gdkdisplayprivate.h"
#include "gdkinternals.h"
...
...
@@ -61,11 +60,11 @@ G_DEFINE_BOXED_TYPE (GdkCursor, gdk_cursor,
/**
* gdk_cursor_ref:
* @cursor: a #GdkCursor
*
*
* Adds a reference to @cursor.
*
*
* Return value: Same @cursor that was passed in
*
*
/
*/
GdkCursor
*
gdk_cursor_ref
(
GdkCursor
*
cursor
)
{
...
...
@@ -83,8 +82,7 @@ gdk_cursor_ref (GdkCursor *cursor)
*
* Removes a reference from @cursor, deallocating the cursor
* if no references remain.
*
**/
*/
void
gdk_cursor_unref
(
GdkCursor
*
cursor
)
{
...
...
@@ -100,14 +98,14 @@ gdk_cursor_unref (GdkCursor *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
)
{
...
...
@@ -131,3 +129,144 @@ gdk_cursor_get_cursor_type (GdkCursor *cursor)
return
cursor
->
type
;
}
/**
* gdk_cursor_new_for_display:
* @display: the #GdkDisplay for which the cursor will be created
* @cursor_type: cursor to create
*
* Creates a new cursor from the set of builtin cursors.
* Some useful ones are:
* <itemizedlist>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="right_ptr.png"></inlinegraphic> #GDK_RIGHT_PTR (right-facing arrow)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="crosshair.png"></inlinegraphic> #GDK_CROSSHAIR (crosshair)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="xterm.png"></inlinegraphic> #GDK_XTERM (I-beam)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="watch.png"></inlinegraphic> #GDK_WATCH (busy)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="fleur.png"></inlinegraphic> #GDK_FLEUR (for moving objects)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="hand1.png"></inlinegraphic> #GDK_HAND1 (a right-pointing hand)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="hand2.png"></inlinegraphic> #GDK_HAND2 (a left-pointing hand)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="left_side.png"></inlinegraphic> #GDK_LEFT_SIDE (resize left side)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="right_side.png"></inlinegraphic> #GDK_RIGHT_SIDE (resize right side)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="top_left_corner.png"></inlinegraphic> #GDK_TOP_LEFT_CORNER (resize northwest corner)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="top_right_corner.png"></inlinegraphic> #GDK_TOP_RIGHT_CORNER (resize northeast corner)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="bottom_left_corner.png"></inlinegraphic> #GDK_BOTTOM_LEFT_CORNER (resize southwest corner)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="bottom_right_corner.png"></inlinegraphic> #GDK_BOTTOM_RIGHT_CORNER (resize southeast corner)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="top_side.png"></inlinegraphic> #GDK_TOP_SIDE (resize top side)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="bottom_side.png"></inlinegraphic> #GDK_BOTTOM_SIDE (resize bottom side)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="sb_h_double_arrow.png"></inlinegraphic> #GDK_SB_H_DOUBLE_ARROW (move vertical splitter)
* </para></listitem>
* <listitem><para>
* <inlinegraphic format="PNG" fileref="sb_v_double_arrow.png"></inlinegraphic> #GDK_SB_V_DOUBLE_ARROW (move horizontal splitter)
* </para></listitem>
* <listitem><para>
* #GDK_BLANK_CURSOR (Blank cursor). Since 2.16
* </para></listitem>
* </itemizedlist>
*
* Return value: a new #GdkCursor
*
* Since: 2.2
**/
GdkCursor
*
gdk_cursor_new_for_display
(
GdkDisplay
*
display
,
GdkCursorType
cursor_type
)
{
g_return_val_if_fail
(
GDK_IS_DISPLAY
(
display
),
NULL
);
return
GDK_DISPLAY_GET_CLASS
(
display
)
->
get_cursor_for_type
(
display
,
cursor_type
);
}
/**
* gdk_cursor_new_from_name:
* @display: the #GdkDisplay for which the cursor will be created
* @name: the name of the cursor
*
* Creates a new cursor by looking up @name in the current cursor
* theme.
*
* Returns: a new #GdkCursor, or %NULL if there is no cursor with
* the given name
*
* Since: 2.8
*/
GdkCursor
*
gdk_cursor_new_from_name
(
GdkDisplay
*
display
,
const
gchar
*
name
)
{
g_return_val_if_fail
(
GDK_IS_DISPLAY
(
display
),
NULL
);
return
GDK_DISPLAY_GET_CLASS
(
display
)
->
get_cursor_for_name
(
display
,
name
);
}
/**
* gdk_cursor_new_from_pixbuf:
* @display: the #GdkDisplay for which the cursor will be created
* @pixbuf: the #GdkPixbuf containing the cursor image
* @x: the horizontal offset of the 'hotspot' of the cursor.
* @y: the vertical offset of the 'hotspot' of the cursor.
*
* Creates a new cursor from a pixbuf.
*
* Not all GDK backends support RGBA cursors. If they are not
* supported, a monochrome approximation will be displayed.
* The functions gdk_display_supports_cursor_alpha() and
* gdk_display_supports_cursor_color() can be used to determine
* whether RGBA cursors are supported;
* gdk_display_get_default_cursor_size() and
* gdk_display_get_maximal_cursor_size() give information about
* cursor sizes.
*
* If @x or @y are <literal>-1</literal>, the pixbuf must have
* options named "x_hot" and "y_hot", resp., containing
* integer values between %0 and the width resp. height of
* the pixbuf. (Since: 3.0)
*
* On the X backend, support for RGBA cursors requires a
* sufficently new version of the X Render extension.
*
* Returns: a new #GdkCursor.
*
* Since: 2.4
*/
GdkCursor
*
gdk_cursor_new_from_pixbuf
(
GdkDisplay
*
display
,
GdkPixbuf
*
pixbuf
,
gint
x
,
gint
y
)
{
g_return_val_if_fail
(
GDK_IS_DISPLAY
(
display
),
NULL
);
g_return_val_if_fail
(
GDK_IS_PIXBUF
(
pixbuf
),
NULL
);
return
GDK_DISPLAY_GET_CLASS
(
display
)
->
get_cursor_for_pixbuf
(
display
,
pixbuf
,
x
,
y
);
}
gdk/gdkdisplay.c
View file @
da216c06
...
...
@@ -2297,3 +2297,89 @@ gdk_display_has_pending (GdkDisplay *display)
{
return
GDK_DISPLAY_GET_CLASS
(
display
)
->
has_pending
(
display
);
}
/**
* gdk_display_supports_cursor_alpha:
* @display: a #GdkDisplay
*
* Returns %TRUE if cursors can use an 8bit alpha channel
* on @display. Otherwise, cursors are restricted to bilevel
* alpha (i.e. a mask).
*
* Returns: whether cursors can have alpha channels.
*
* Since: 2.4
*/
gboolean
gdk_display_supports_cursor_alpha
(
GdkDisplay
*
display
)
{
g_return_val_if_fail
(
GDK_IS_DISPLAY
(
display
),
FALSE
);
return
GDK_DISPLAY_GET_CLASS
(
display
)
->
supports_cursor_alpha
(
display
);
}
/**
* gdk_display_supports_cursor_color:
* @display: a #GdkDisplay
*
* Returns %TRUE if multicolored cursors are supported
* on @display. Otherwise, cursors have only a forground
* and a background color.
*
* Returns: whether cursors can have multiple colors.
*
* Since: 2.4
*/
gboolean
gdk_display_supports_cursor_color
(
GdkDisplay
*
display
)
{
g_return_val_if_fail
(
GDK_IS_DISPLAY
(
display
),
FALSE
);
return
GDK_DISPLAY_GET_CLASS
(
display
)
->
supports_cursor_color
(
display
);
}
/**
* gdk_display_get_default_cursor_size:
* @display: a #GdkDisplay
*
* Returns the default size to use for cursors on @display.
*
* Returns: the default cursor size.
*
* Since: 2.4
*/
guint
gdk_display_get_default_cursor_size
(
GdkDisplay
*
display
)
{
guint
width
,
height
;
g_return_val_if_fail
(
GDK_IS_DISPLAY
(
display
),
FALSE
);
GDK_DISPLAY_GET_CLASS
(
display
)
->
get_default_cursor_size
(
display
,
&
width
,
&
height
);
return
MIN
(
width
,
height
);
}
/**
* gdk_display_get_maximal_cursor_size:
* @display: a #GdkDisplay
* @width: (out): the return location for the maximal cursor width
* @height: (out): the return location for the maximal cursor height
*
* Gets the maximal size to use for cursors on @display.
*
* Since: 2.4
*/
void
gdk_display_get_maximal_cursor_size
(
GdkDisplay
*
display
,
guint
*
width
,
guint
*
height
)
{
g_return_if_fail
(
GDK_IS_DISPLAY
(
display
));
GDK_DISPLAY_GET_CLASS
(
display
)
->
get_maximal_cursor_size
(
display
,
width
,
height
);
}
gdk/gdkdisplayprivate.h
View file @
da216c06
...
...
@@ -21,6 +21,7 @@
#define __GDK_DISPLAY_PRIVATE_H__
#include "gdkdisplay.h"
#include "gdkcursor.h"
G_BEGIN_DECLS
...
...
@@ -127,15 +128,34 @@ struct _GdkDisplayClass
gboolean
(
*
supports_selection_notification
)
(
GdkDisplay
*
display
);
gboolean
(
*
request_selection_notification
)
(
GdkDisplay
*
display
,
GdkAtom
selection
);
gboolean
(
*
supports_shapes
)
(
GdkDisplay
*
display
);
gboolean
(
*
supports_input_shapes
)
(
GdkDisplay
*
display
);
gboolean
(
*
supports_composite
)
(
GdkDisplay
*
display
);
gboolean
(
*
supports_cursor_alpha
)
(
GdkDisplay
*
display
);
gboolean
(
*
supports_cursor_color
)
(
GdkDisplay
*
display
);
gboolean
(
*
supports_clipboard_persistence
)
(
GdkDisplay
*
display
);
void
(
*
store_clipboard
)
(
GdkDisplay
*
display
,
GdkWindow
*
clipboard_window
,
guint32
time_
,
const
GdkAtom
*
targets
,
gint
n_targets
);
gboolean
(
*
supports_shapes
)
(
GdkDisplay
*
display
);
gboolean
(
*
supports_input_shapes
)
(
GdkDisplay
*
display
);
gboolean
(
*
supports_composite
)
(
GdkDisplay
*
display
);
void
(
*
get_default_cursor_size
)
(
GdkDisplay
*
display
,
guint
*
width
,
guint
*
height
);
void
(
*
get_maximal_cursor_size
)
(
GdkDisplay
*
display
,
guint
*
width
,
guint
*
height
);
GdkCursor
*
(
*
get_cursor_for_type
)
(
GdkDisplay
*
display
,
GdkCursorType
type
);
GdkCursor
*
(
*
get_cursor_for_name
)
(
GdkDisplay
*
display
,
const
gchar
*
name
);
GdkCursor
*
(
*
get_cursor_for_pixbuf
)
(
GdkDisplay
*
display
,
GdkPixbuf
*
pixbuf
,
gint
x
,
gint
y
);
GList
*
(
*
list_devices
)
(
GdkDisplay
*
display
);
gboolean
(
*
send_client_message
)
(
GdkDisplay
*
display
,
GdkEvent
*
event
,
...
...
gdk/x11/gdkcursor-x11.c
View file @
da216c06
This diff is collapsed.
Click to expand it.
gdk/x11/gdkdisplay-x11.c
View file @
da216c06
...
...
@@ -2696,5 +2696,12 @@ _gdk_display_x11_class_init (GdkDisplayX11Class * class)
display_class
->
add_client_message_filter
=
gdk_x11_display_add_client_message_filter
;
display_class
->
get_app_launch_context
=
_gdk_x11_display_get_app_launch_context
;
display_class
->
get_drag_protocol
=
_gdk_x11_display_get_drag_protocol
;
display_class
->
get_cursor_for_type
=
_gdk_x11_display_get_cursor_for_type
;
display_class
->
get_cursor_for_name
=
_gdk_x11_display_get_cursor_for_name
;
display_class
->
get_cursor_for_pixbuf
=
_gdk_x11_display_get_cursor_for_pixbuf
;
display_class
->
get_default_cursor_size
=
_gdk_x11_display_get_default_cursor_size
;
display_class
->
get_maximal_cursor_size
=
_gdk_x11_display_get_maximal_cursor_size
;
display_class
->
supports_cursor_alpha
=
_gdk_x11_display_supports_cursor_alpha
;
display_class
->
supports_cursor_color
=
_gdk_x11_display_supports_cursor_color
;
}
gdk/x11/gdkprivate-x11.h
View file @
da216c06
...
...
@@ -157,6 +157,23 @@ void _gdk_x11_display_manager_add_display (GdkDisplayManager *manager,
void
_gdk_x11_display_manager_remove_display
(
GdkDisplayManager
*
manager
,
GdkDisplay
*
display
);
GdkCursor
*
_gdk_x11_display_get_cursor_for_type
(
GdkDisplay
*
display
,
GdkCursorType
type
);
GdkCursor
*
_gdk_x11_display_get_cursor_for_name
(
GdkDisplay
*
display
,
const
gchar
*
name
);
GdkCursor
*
_gdk_x11_display_get_cursor_for_pixbuf
(
GdkDisplay
*
display
,
GdkPixbuf
*
pixbuf
,
gint
x
,
gint
y
);
gboolean
_gdk_x11_display_supports_cursor_alpha
(
GdkDisplay
*
display
);
gboolean
_gdk_x11_display_supports_cursor_color
(
GdkDisplay
*
display
);
void
_gdk_x11_display_get_default_cursor_size
(
GdkDisplay
*
display
,
guint
*
width
,
guint
*
height
);
void
_gdk_x11_display_get_maximal_cursor_size
(
GdkDisplay
*
display
,
guint
*
width
,
guint
*
height
);
void
_gdk_x11_precache_atoms
(
GdkDisplay
*
display
,
const
gchar
*
const
*
atom_names
,
gint
n_atoms
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment