Tuesday, July 26, 2011

Creating a button with SDL

Mouse Events

The mouse events—mouse motion and mouse button each have their own structures for dealing with the events.


Mouse Motion Events

A mouse motion event is stored in an SDL_MouseMotionEvent, which looks like this.

typedef struct{
Uint8 type;
Uint8 state;
Uint16 x, y;
Sint16 xrel, yrel;
} SDL_MouseMotionEvent;

As with all SDL event structures, the type member specifies what type of event has occurred. In the case of a mouse motion event, this constant will only ever be SDL_MOUSEMOTION.
The state member is a combination of bit flags that tells you which mouse buttons are currently pressed, if any. Table below shows these bit flags.

Monday, July 25, 2011

Working with text in SDL

Using SDL_ttf

Like SDL itself, SDL_ttf first needs to be initialized. The function for doing this is TTF_Init. Likewise, after the program ends, it needs to be uninitialized by calling TTF_Quit.

int TTF_Init(void);
void TTF_Quit(void);

TTF_Init will return 0 if all went well and -1 if an error occurred. TTF_Quit does not return any value.


Creation and Destruction

The creation and destruction functions deal with making and unmaking fonts. The structure that keeps font information is called TTF_Font.

TTF_Font * TTF_OpenFont(const char *file, int ptsize);

Tuesday, July 12, 2011

SDL: Color Keys (Transparency)

A few times you’ll have portions of the image not to  be visible when you blit.  This is done by setting a transparent color key. You can select a single color that will be ignored when blitting.


To set a color key,  use the SDL_SetColorKey function.

int SDL_SetColorKey(SDL_Surface *surface, Uint32 flag, Uint32 key);


This function returns an int. In typical SDL style, 0 means success and -1 means an error. The function has three parameters—a pointer to the surface for which you are setting the color key (surface), a set of
flags (flag), and a value to use as the transparent color (key). There are two different flags that you can use in the flag parameter. One is SDL_SRCCOLORKEY, and the other is SDL_RLEACCEL. The

Monday, July 11, 2011

Loading images other than bitmap on SDL

Though SDL natively supports only .bmp files, on using the SDL_image extension library, we are able to load BMP, PNM, XPM, LBM, PCX, GIF, JPEG, TGA and PNG files.


SDL_Surface * IMG_Load(const char *file);



This function takes a string that holds the name of a graphics file that you want to load. If successful, it will return a pointer to an SDL_Surface that contains that newly loaded image. If there is some sort of problem, the function will return NULL.
This function looks very much like SDL_LoadBMP. The only difference is that it can load images other than those with a .bmp extension.

Sunday, July 10, 2011

Color fills in SDL

Color fills are typically only used to clear the screen or a large rectangular portion of the screen. They are still important, nonetheless. If you want to go deep, you can set individual pixels. If you can set a single pixel, you can do anything graphics-wise, such as drawing lines, circles, ellipses, polygons, and whatever else you can imagine. SDL has no functions for drawing these primitives, so if you want them you have to implement them yourself. The ability to retrieve the value of individual pixels goes hand-in-hand with setting them.

Saturday, July 9, 2011

Moving the loaded image with SDL

Filled Rectangles (SDL_FillRect)

SDL_FillRect is used to render color-filled rectangles.

int SDL_FillRect(SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color);

This function returns an int. If successful, the value returned will be 0. If it fails, the return value will be -1. There are three parameters. The first (dst) is a pointer to an SDL_Surface on which you are drawing the filled rectangle. The second (dstrect) is a pointer to an SDL_Rect that describes the rectangular area that you want to fill. The third (color) is a Uint32 that represents the color with which you want to fill the rectangle.



clip_rect

The clip_rect member is an SDL_Rect. The values stored here limit the area on the SDL_Surface on which you can blit. SDL supports only rectangular clipping areas and only one rectangle at a time.


Now you are ready to load and animate or move the loaded image on the SDL screen you have created.



#include <sdl/sdl.h>
SDL_Surface *screen=0;
SDL_Surface *bitmap=0;

void draw_surface(SDL_Surface *sur, int x, int y)
{
    SDL_Rect pos={x,y};
    SDL_BlitSurface(sur, 0, screen, &pos);

Friday, July 8, 2011

Loading an image on the SDL screen

The knowledge of the following are required to some extent for loading an image on the screen.

SDL_Surface

It is a structure which acts as the stock and trade of SDL’s video subsystem. It abstracts a rectangular block of pixels. There is only one SDL_Surface that represents the actual display area. All of the other surfaces are buffers for storing pixel (such as images to be displayed) data that will eventually be shown on the main display.

SDL_Rect

The SDL video subsystem, being 2D in nature, deals primarily with copying rectangular blocks of pixels from one

SDL_Surface to another. This has been the way of dealing with raster displays since their initiation. It is The Way Things are done.