view test/testcursor.c @ 1861:b42823412c3b

Fixed bug #232 ------- Comment #2 From Matthias Geissert 2006-05-24 07:54 [reply] ------- See http://dri.sourceforge.net/doc/DRIuserguide.html, section 11.5. There is written that you need to use RTLD_GLOBAL, since, otherwise, nested open of dynamic libraries doesn't work. However, This is necassary in this case, since libGL opens the hardware-specific driver/library. I hope this helps you.
author Sam Lantinga <slouken@libsdl.org>
date Tue, 20 Jun 2006 03:52:41 +0000
parents 2fce7697adca
children fe99535ac064
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>

#include "SDL.h"

/* This is an example 16x16 cursor
	top left :	black
	top right : inverted color or black
	bottom left: white
	bottom right: transparent
	(swap left and right for different endianness)
*/

Uint16 cursor_data[16]={
	0xffff,
	0xffff,
	0xffff,
	0xffff,	

	0xffff,
	0xffff,
	0xffff,
	0xffff,	

	0x0000,
	0x0000,
	0x0000,
	0x0000,

	0x0000,
	0x0000,
	0x0000,
	0x0000
};

Uint16 cursor_mask[16]={
	0xff00,
	0xff00,
	0xff00,
	0xff00,

	0xff00,
	0xff00,
	0xff00,
	0xff00,

	0xff00,
	0xff00,
	0xff00,
	0xff00,

	0xff00,
	0xff00,
	0xff00,
	0xff00
};

int main(int argc, char *argv[])
{
	SDL_Surface *screen;
	SDL_bool quit = SDL_FALSE, first_time = SDL_TRUE;
	SDL_Cursor *cursor;
	SDL_Rect update_area;

	/* Load the SDL library */
	if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
		fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
		return(1);
	}

	screen = SDL_SetVideoMode(320,200,8,SDL_ANYFORMAT);
	if (screen==NULL) {
		fprintf(stderr, "Couldn't initialize video mode: %s\n",SDL_GetError());
		return(1);
	}

	update_area.x = update_area.y = 0;
	update_area.w = screen->w;
	update_area.h = screen->h;

	SDL_FillRect(screen, NULL, 0x664422);

	cursor = SDL_CreateCursor((Uint8 *)cursor_data, (Uint8 *)cursor_mask,
		16, 16, 8, 8);
	if (cursor==NULL) {
		fprintf(stderr, "Couldn't initialize cursor: %s\n",SDL_GetError());
		return(1);
	}

	SDL_SetCursor(cursor);

	while (!quit) {
		SDL_Event	event;
		while (SDL_PollEvent(&event)) {
			switch(event.type) {
				case SDL_KEYDOWN:
					if (event.key.keysym.sym == SDLK_ESCAPE) {
						quit = SDL_TRUE;
					}
					break;
				case SDL_QUIT:
					quit = SDL_TRUE;
					break;
			}
		}	
		if (screen->flags & SDL_DOUBLEBUF) {
			SDL_Flip(screen);
		} else {
			if (first_time) {
				SDL_UpdateRects(screen, 1, &update_area);
				first_time = SDL_FALSE;
			}
		}	
		SDL_Delay(1);
	}

	SDL_FreeCursor(cursor);

	SDL_Quit();
	return(0);
}