X11::CursorFont(3) User Contributed Perl Documentation X11::CursorFont(3)

X11::CursorFont - cursor font glyph names and numbers

use X11::CursorFont '%CURSOR_GLYPH';
my $num = $CURSOR_GLYPH{'fleur'};               # is 52
my $name = $X11::CursorFont::CURSOR_NAME[52];   # is "fleur"

This is the names and numbers of the glyphs in the X11 cursor font which contains various standard mouse pointer cursors.

%CURSOR_GLYPH maps a glyph name to its character number in the font,

$CURSOR_GLYPH{'fleur'}     # is 52

@CURSOR_NAME conversely is indexed by character number and gives the glyph name,

$CURSOR_NAME[52]           # is "fleur"

Each glyph has an associated mask at character number glyph+1 which is the shape of the cursor (the displayed vs transparent pixels). So the character numbers are always even and in @CURSOR_NAME only the even character positions have names.

The cursor images can be viewed with the usual "xfd" font display program,

xfd -fn cursor

The names are per the Xlib /usr/include/X11/cursorfont.h file, without the "XC_" prefixes. The full list is

Name                  Number
X_cursor                0    default fat X
arrow                   2
based_arrow_down        4
based_arrow_up          6
boat                    8
bogosity               10
bottom_left_corner     12
bottom_right_corner    14
bottom_side            16
bottom_tee             18
box_spiral             20    a square spiral
center_ptr             22
circle                 24
clock                  26
coffee_mug             28
cross                  30
cross_reverse          32
crosshair              34    "+" shape
diamond_cross          36
dot                    38
dotbox                 40
double_arrow           42
draft_large            44
draft_small            46
draped_box             48
exchange               50
fleur                  52
gobbler                54
gumby                  56
hand1                  58
hand2                  60
heart                  62
icon                   64
iron_cross             66
left_ptr               68
left_side              70
left_tee               72
leftbutton             74
ll_angle               76
lr_angle               78
man                    80
middlebutton           82
mouse                  84
pencil                 86
pirate                 88    skull and crossbones
plus                   90
question_arrow         92
right_ptr              94
right_side             96
right_tee              98
rightbutton           100
rtl_logo              102
sailboat              104
sb_down_arrow         106
sb_h_double_arrow     108
sb_left_arrow         110
sb_right_arrow        112
sb_up_arrow           114
sb_v_double_arrow     116
shuttle               118
sizing                120
spider                122
spraycan              124
star                  126
target                128
tcross                130
top_left_arrow        132
top_left_corner       134
top_right_corner      136
top_side              138
top_tee               140
trek                  142
ul_angle              144
umbrella              146
ur_angle              148
watch                 150    a good "busy" indicator
xterm                 152    a vertical insertion bar

"X_cursor" is the usual default when the server first starts or when the root window is set to cursor "None".

%X11::CursorFont::CURSOR_GLYPH
A mapping of glyph name to cursor font character number.
@X11::CursorFont::CURSOR_NAME
A table of cursor font character number to glyph name.

Nothing is exported by default, but %CURSOR_GLYPH and @CURSOR_NAME can be selected in usual "Exporter" style (see Exporter),

use X11::CursorFont '%CURSOR_GLYPH', '@CURSOR_NAME';

To create a cursor from a desired glyph,

my $cursor_name = 'spraycan';
my $cursor_glyph = $CURSOR_GLYPH{$cursor_name}; # number
my $cursor_font = $X->new_rsrc;
$X->OpenFont ($cursor_font, "cursor"); # cursor font
my $cursor = $X->new_rsrc;
$X->CreateGlyphCursor
       ($cursor,
        $cursor_font,  # font
        $cursor_font,  # mask font
        $cursor_glyph,      # glyph
        $cursor_glyph + 1,  # and its mask
        0,0,0,                  # foreground, black
        0xFFFF,0xFFFF,0xFFFF);  # background, white
$X->CloseFont ($cursor_font);
# then use $cursor with CreateWindow or ChangeWindowAttributes
#       cursor => $cursor

The $cursor_font could be kept open if used repeatedly. Opening and closing isn't a round-trip, so an open when needed may be enough.

Any RGB colours can be given in CreateGlyphCursor(), but actual appearance on screen will be limited by the hardware.

All cursors in the core protocol are two-colours with pixels fully opaque or fully transparent as per this create. The RENDER extension, when available, can make multi-colour and partial transparency if desired (see X11::Protocol::Ext::RENDER).

X11::Protocol, X11::KeySyms

/usr/include/X11/cursorfont.h and listing in the Xlib manual appendix B ("http://www.x.org/docs/X11/" or /usr/share/doc/libx11-dev/libX11.txt.gz).

Xlib Xmu XmuCursorNameToIndex() ("http://www.x.org/docs/Xmu/" or /usr/share/doc/libxmu-headers/Xmu.txt.gz)

xfd(1) to display the cursor font.

xsetroot(1) to change the root window cursor.

http://user42.tuxfamily.org/x11-protocol-other/index.html

Copyright 2011, 2012, 2013, 2014, 2017 Kevin Ryde

X11-Protocol-Other 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 3, or (at your option) any later version.

X11-Protocol-Other 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 X11-Protocol-Other. If not, see http://www.gnu.org/licenses/.

2023-07-25 perl v5.38.0