GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
pods::SDL::Cursor(3) User Contributed Perl Documentation pods::SDL::Cursor(3)

SDL::Cursor - Mouse cursor structure

Core, Mouse, Structure

 my $cursor = SDL::Cursor->new(
     \@data,
     \@mask,
     $width,
     $height,
     $hotspot_left,
     $hotspot_top
 );

 SDL::Mouse::set_cursor($cursor);

The "SDL::Cursor" module handles mouse cursors, and allows the developer to use custom-made cursors. Note that cursors can only be in black and white.

 my $cursor = SDL::Cursor->new(
     \@data, \@mask, $width, $height, $hotspot_left, $hotspot_top
 );

Create a cursor using the specified data and mask (in MSB format). The cursor is created in black and white according to the following:

 Data / Mask   Resulting pixel on screen
    0 / 1      White
    1 / 1      Black
    0 / 0      Transparent
    1 / 0      Inverted color if possible, black if not.

If you want to have color cursor, then this function is not for you. Instead, you should hide the cursor with "SDL::Mouse::show_cursor(SDL_DISABLE)". Then in your main loop, when you draw graphics, draw a "SDL::Surface" at the location of the mouse cursor.

Example:

 use SDL;
 use SDL::Video;
 use SDL::Mouse;
 use SDL::Cursor;

 SDL::init(SDL_INIT_VIDEO);
 SDL::Video::set_video_mode(640, 480, 16, SDL_SWSURFACE);

 my @data = (
     0b00000000,
     0b00111100,
     0b01111110,
     0b01111110,
     0b01111110,
     0b01111110,
     0b00111100,
     0b00000000
 );
 my @mask = (
     0b00111100,
     0b01111110,
     0b11100111,
     0b11000011,
     0b11000011,
     0b11100111,
     0b01111110,
     0b00111100
 );
 my $cursor = SDL::Cursor->new(\@data, \@mask, 8, 8, 0, 0);
 sleep(1);

 SDL::Mouse::set_cursor($cursor);
 sleep(5);

The width of cursors work in groups of 8. If the width is above 8, twice the amount of elements in @data and @mask are required. If the width is above 16, three times are required, and so on. For example, if you wanted a 9 pixel crosshair you might do the following:

 my @data = (
     0b00001000,0b00000000,
     0b00001000,0b00000000,
     0b00001000,0b00000000,
     0b00001000,0b00000000,
     0b11111111,0b10000000,
     0b00001000,0b00000000,
     0b00001000,0b00000000,
     0b00001000,0b00000000,
     0b00001000,0b00000000,
 );
 my @mask = @data;

 my $cursor = SDL::Cursor->new(\@data, \@mask, 9, 9, 4, 4);

The hotspot is offset by 4 pixels because a crosshair clicks from the center instead of the top left.

See "AUTHORS" in SDL.

perl SDL::Mouse
2022-06-07 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.