<HTML
><HEAD
><TITLE
>SDL_CreateCursor</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="HOME"
TITLE="SDL Library Documentation"
HREF="index.html"><LINK
REL="UP"
TITLE="Video"
HREF="video.html"><LINK
REL="PREVIOUS"
TITLE="SDL_WarpMouse"
HREF="sdlwarpmouse.html"><LINK
REL="NEXT"
TITLE="SDL_FreeCursor"
HREF="sdlfreecursor.html"></HEAD
><BODY
CLASS="REFENTRY"
BGCOLOR="#FFF8DC"
TEXT="#000000"
LINK="#0000ee"
VLINK="#551a8b"
ALINK="#ff0000"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>SDL Library Documentation</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="sdlwarpmouse.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="sdlfreecursor.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
><A
NAME="SDLCREATECURSOR"
></A
>SDL_CreateCursor</H1
><DIV
CLASS="REFNAMEDIV"
><A
NAME="AEN2487"
></A
><H2
>Name</H2
>SDL_CreateCursor&nbsp;--&nbsp;Creates a new mouse cursor.</DIV
><DIV
CLASS="REFSYNOPSISDIV"
><A
NAME="AEN2490"
></A
><H2
>Synopsis</H2
><DIV
CLASS="FUNCSYNOPSIS"
><A
NAME="AEN2491"
></A
><P
></P
><PRE
CLASS="FUNCSYNOPSISINFO"
>#include "SDL.h"</PRE
><P
><CODE
><CODE
CLASS="FUNCDEF"
>SDL_Cursor *<B
CLASS="FSFUNC"
>SDL_CreateCursor</B
></CODE
>(Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y);</CODE
></P
><P
></P
></DIV
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN2497"
></A
><H2
>Description</H2
><P
>Create a cursor using the specified <TT
CLASS="PARAMETER"
><I
>data</I
></TT
> and <TT
CLASS="PARAMETER"
><I
>mask</I
></TT
> (in MSB format).
The cursor width must be a multiple of 8 bits.</P
><P
>The cursor is created in black and white according to the following:
<DIV
CLASS="INFORMALTABLE"
><A
NAME="AEN2503"
></A
><P
></P
><TABLE
BORDER="1"
CLASS="CALSTABLE"
><THEAD
><TR
><TH
ALIGN="LEFT"
VALIGN="TOP"
>Data / Mask</TH
><TH
ALIGN="LEFT"
VALIGN="TOP"
>Resulting pixel on screen</TH
></TR
></THEAD
><TBODY
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>0 / 1</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>White</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>1 / 1</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Black</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>0 / 0</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Transparent</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>1 / 0</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Inverted color if possible, black if not.</TD
></TR
></TBODY
></TABLE
><P
></P
></DIV
></P
><P
>Cursors created with this function must be freed with
<A
HREF="sdlfreecursor.html"
>SDL_FreeCursor</A
>.</P
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN2524"
></A
><H2
>Example</H2
><PRE
CLASS="PROGRAMLISTING"
>/* Stolen from the mailing list */
/* Creates a new mouse cursor from an XPM */


/* XPM */
static const char *arrow[] = {
  /* width height num_colors chars_per_pixel */
  "    32    32        3            1",
  /* colors */
  "X c #000000",
  ". c #ffffff",
  "  c None",
  /* pixels */
  "X                               ",
  "XX                              ",
  "X.X                             ",
  "X..X                            ",
  "X...X                           ",
  "X....X                          ",
  "X.....X                         ",
  "X......X                        ",
  "X.......X                       ",
  "X........X                      ",
  "X.....XXXXX                     ",
  "X..X..X                         ",
  "X.X X..X                        ",
  "XX  X..X                        ",
  "X    X..X                       ",
  "     X..X                       ",
  "      X..X                      ",
  "      X..X                      ",
  "       XX                       ",
  "                                ",
  "                                ",
  "                                ",
  "                                ",
  "                                ",
  "                                ",
  "                                ",
  "                                ",
  "                                ",
  "                                ",
  "                                ",
  "                                ",
  "                                ",
  "0,0"
};

static SDL_Cursor *init_system_cursor(const char *image[])
{
  int i, row, col;
  Uint8 data[4*32];
  Uint8 mask[4*32];
  int hot_x, hot_y;

  i = -1;
  for ( row=0; row&#60;32; ++row ) {
    for ( col=0; col&#60;32; ++col ) {
      if ( col % 8 ) {
        data[i] &#60;&#60;= 1;
        mask[i] &#60;&#60;= 1;
      } else {
        ++i;
        data[i] = mask[i] = 0;
      }
      switch (image[4+row][col]) {
        case 'X':
          data[i] |= 0x01;
          mask[i] |= 0x01;
          break;
        case '.':
          mask[i] |= 0x01;
          break;
        case ' ':
          break;
      }
    }
  }
  sscanf(image[4+row], "%d,%d", &#38;hot_x, &#38;hot_y);
  return SDL_CreateCursor(data, mask, 32, 32, hot_x, hot_y);
}</PRE
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN2527"
></A
><H2
>See Also</H2
><P
><A
HREF="sdlfreecursor.html"
><TT
CLASS="FUNCTION"
>SDL_FreeCursor</TT
></A
>,
<A
HREF="sdlsetcursor.html"
><TT
CLASS="FUNCTION"
>SDL_SetCursor</TT
></A
>,
<A
HREF="sdlshowcursor.html"
><TT
CLASS="FUNCTION"
>SDL_ShowCursor</TT
></A
></P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="sdlwarpmouse.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="sdlfreecursor.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>SDL_WarpMouse</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="video.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>SDL_FreeCursor</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>