Freeciv-3.3
Loading...
Searching...
No Matches
Data Structures | Macros | Functions | Variables
graphics.h File Reference
#include <SDL2/SDL2_rotozoom.h>
#include "graphics_g.h"
#include "canvas.h"
#include "gui_main.h"

Go to the source code of this file.

Data Structures

struct  sdl2_data
 
struct  gui_layer
 

Macros

#define RECT_LIMIT   80
 
#define USE_DUFFS_LOOP
 
#define DUFFS_LOOP8(pixel_copy_increment, width)
 
#define DUFFS_LOOP4(pixel_copy_increment, width)
 
#define DUFFS_LOOP_DOUBLE2(pixel_copy_increment, double_pixel_copy_increment, width)
 
#define DUFFS_LOOP_QUATRO2(pixel_copy_increment, double_pixel_copy_increment, quatro_pixel_copy_increment, width)
 
#define DUFFS_LOOP(pixel_copy_increment, width)    DUFFS_LOOP8(pixel_copy_increment, width)
 
#define DEFAULT_ZOOM   1.0
 
#define adj_surf(surf)   copy_surface(surf)
 
#define map_rgba(format, color)    SDL_MapRGBA(format, (color).r, (color).g, (color).b, (color).a)
 
#define crop_rect_from_screen(rect)    crop_rect_from_surface(main_data.screen, &rect)
 
#define FREESURFACE(ptr)
 
#define lock_surf(surf)
 
#define unlock_surf(surf)
 
#define lock_screen()   lock_surf(main_data.screen)
 
#define unlock_screen()   unlock_surf(main_data.screen)
 
#define putpixel(surf, x, y, pixel)
 
#define ALPHA_BLEND(sR, sG, sB, A, dR, dG, dB)
 
#define ALPHA_BLEND128(sR, sG, sB, dR, dG, dB)
 

Functions

struct gui_layergui_layer_new (int x, int y, SDL_Surface *surface)
 
void gui_layer_destroy (struct gui_layer **gui_layer)
 
struct gui_layerget_gui_layer (SDL_Surface *surface)
 
struct gui_layeradd_gui_layer (int width, int height)
 
void remove_gui_layer (struct gui_layer *gui_layer)
 
void screen_rect_to_layer_rect (struct gui_layer *gui_layer, SDL_Rect *dest_rect)
 
void layer_rect_to_screen_rect (struct gui_layer *gui_layer, SDL_Rect *dest_rect)
 
int alphablit (SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect, unsigned char alpha_mod)
 
int screen_blit (SDL_Surface *src, SDL_Rect *srcrect, SDL_Rect *dstrect, unsigned char alpha_mod)
 
SDL_Surfaceload_surf (const char *fname)
 
SDL_Surfacecreate_surf_with_format (SDL_PixelFormat *pf, int width, int height, Uint32 flags)
 
SDL_Surfacecreate_surf (int width, int height, Uint32 flags)
 
SDL_Surfaceconvert_surf (SDL_Surface *surf_in)
 
SDL_Surfacecreate_filled_surface (Uint16 w, Uint16 h, Uint32 flags, SDL_Color *pcolor)
 
SDL_Surfacecrop_rect_from_surface (SDL_Surface *psource, SDL_Rect *prect)
 
SDL_Surfacemask_surface (SDL_Surface *src, SDL_Surface *mask, int mask_offset_x, int mask_offset_y)
 
SDL_Surfacecopy_surface (SDL_Surface *src)
 
int blit_entire_src (SDL_Surface *psrc, SDL_Surface *pdest, Sint16 dest_x, Sint16 dest_y)
 
Uint32 get_pixel (SDL_Surface *surf, Sint16 x, Sint16 y)
 
Uint32 get_first_pixel (SDL_Surface *surf)
 
void create_frame (SDL_Surface *dest, Sint16 left, Sint16 top, Sint16 right, Sint16 bottom, SDL_Color *pcolor)
 
void create_line (SDL_Surface *dest, Sint16 x0, Sint16 y0, Sint16 x1, Sint16 y1, SDL_Color *pcolor)
 
void init_sdl (int f)
 
void quit_sdl (void)
 
bool set_video_mode (unsigned width, unsigned height, unsigned flags)
 
bool create_surfaces (int width, int height)
 
void update_main_screen (void)
 
int main_window_width (void)
 
int main_window_height (void)
 
bool correct_rect_region (SDL_Rect *prect)
 
bool is_in_rect_area (int x, int y, const SDL_Rect *rect)
 
int fill_rect_alpha (SDL_Surface *surf, SDL_Rect *prect, SDL_Color *pcolor)
 
int clear_surface (SDL_Surface *surf, SDL_Rect *dstrect)
 
SDL_Surfaceresize_surface (const SDL_Surface *psrc, Uint16 new_width, Uint16 new_height, int smooth)
 
SDL_Surfaceresize_surface_box (const SDL_Surface *psrc, Uint16 new_width, Uint16 new_height, int smooth, bool scale_up, bool absolute_dimensions)
 
SDL_Surfacecrop_visible_part_from_surface (SDL_Surface *psrc)
 
void get_smaller_surface_rect (SDL_Surface *surf, SDL_Rect *rect)
 

Variables

struct sdl2_data main_data
 

Macro Definition Documentation

◆ adj_surf

#define adj_surf (   surf)    copy_surface(surf)

Definition at line 200 of file graphics.h.

◆ ALPHA_BLEND

#define ALPHA_BLEND (   sR,
  sG,
  sB,
  A,
  dR,
  dG,
  dB 
)
Value:
do { \
dR = (((sR-dR)*(A))>>8)+dR; \
dG = (((sG-dG)*(A))>>8)+dG; \
dB = (((sB-dB)*(A))>>8)+dB; \
} while (FALSE)
char * incite_cost
Definition comments.c:76
#define FALSE
Definition support.h:47

Definition at line 393 of file graphics.h.

◆ ALPHA_BLEND128

#define ALPHA_BLEND128 (   sR,
  sG,
  sB,
  dR,
  dG,
  dB 
)
Value:
do { \
Uint32 __Src = (sR << 16 | sG << 8 | sB); \
Uint32 __Dst = (dR << 16 | dG << 8 | dB); \
__Dst = ((((__Src & 0x00fefefe) + (__Dst & 0x00fefefe)) >> 1) \
+ (__Src & __Dst & 0x00010101)) | 0xFF000000; \
dR = (__Dst >> 16) & 0xFF; \
dG = (__Dst >> 8 ) & 0xFF; \
dB = (__Dst ) & 0xFF; \
} while (FALSE)

Definition at line 400 of file graphics.h.

◆ crop_rect_from_screen

#define crop_rect_from_screen (   rect)     crop_rect_from_surface(main_data.screen, &rect)

Definition at line 318 of file graphics.h.

◆ DEFAULT_ZOOM

#define DEFAULT_ZOOM   1.0

Definition at line 198 of file graphics.h.

◆ DUFFS_LOOP

Definition at line 140 of file graphics.h.

◆ DUFFS_LOOP4

#define DUFFS_LOOP4 (   pixel_copy_increment,
  width 
)
Value:
{ int n = (width + 3) / 4; \
switch (width & 3) { \
case 0: do { pixel_copy_increment; \
} while ( --n > 0 ); \
} \
}
#define n
Definition astring.c:77
struct canvas int int struct sprite int int int width
Definition canvas_g.h:44
#define fc__fallthrough
Definition support.h:119

Definition at line 83 of file graphics.h.

◆ DUFFS_LOOP8

#define DUFFS_LOOP8 (   pixel_copy_increment,
  width 
)
Value:
{ int n = (width + 7) / 8; \
switch (width & 7) { \
case 0: do { pixel_copy_increment; \
} while ( --n > 0 ); \
} \
}

Definition at line 60 of file graphics.h.

◆ DUFFS_LOOP_DOUBLE2

#define DUFFS_LOOP_DOUBLE2 (   pixel_copy_increment,
  double_pixel_copy_increment,
  width 
)
Value:
{ int n, w = width; \
if ( w & 1 ) { \
w--; \
} \
if ( w > 0 ) { \
n = ( w + 2 ) / 4; \
switch ( w & 2 ) { \
} while ( --n > 0 ); \
} \
} \
}

Definition at line 98 of file graphics.h.

◆ DUFFS_LOOP_QUATRO2

Value:
{ int n, w = width; \
if (w & 1) { \
w--; \
} \
if (w & 2) { \
w -= 2; \
} \
if ( w > 0 ) { \
n = ( w + 7 ) / 8; \
switch ( w & 4 ) { \
} while ( --n > 0 ); \
} \
} \
}

Definition at line 117 of file graphics.h.

◆ FREESURFACE

#define FREESURFACE (   ptr)
Value:
do { \
if (ptr) { \
ptr = NULL; \
} \
} while (FALSE)

Definition at line 322 of file graphics.h.

◆ lock_screen

#define lock_screen ( )    lock_surf(main_data.screen)

Definition at line 354 of file graphics.h.

◆ lock_surf

#define lock_surf (   surf)
Value:
do { \
if (SDL_MUSTLOCK(surf)) { \
} \
} while (FALSE)

Definition at line 333 of file graphics.h.

◆ map_rgba

#define map_rgba (   format,
  color 
)     SDL_MapRGBA(format, (color).r, (color).g, (color).b, (color).a)

Definition at line 315 of file graphics.h.

◆ putpixel

#define putpixel (   surf,
  x,
  y,
  pixel 
)
Value:
do { \
Uint8 *buf_ptr = ((Uint8 *)surf->pixels + (y * surf->pitch)); \
switch (surf->format->BytesPerPixel) { \
case 1: \
buf_ptr += x; \
*(Uint8 *)buf_ptr = pixel; \
break; \
case 2: \
buf_ptr += x << 1; \
*((Uint16 *)buf_ptr) = pixel; \
break; \
case 3: \
buf_ptr += (x << 1) + x; \
buf_ptr[0] = (pixel >> 16) & 0xff; \
buf_ptr[1] = (pixel >> 8) & 0xff; \
buf_ptr[2] = pixel & 0xff; \
} else { \
buf_ptr[0] = pixel & 0xff; \
buf_ptr[1] = (pixel >> 8) & 0xff; \
buf_ptr[2] = (pixel >> 16) & 0xff; \
} \
break; \
case 4: \
buf_ptr += x << 2; \
*((Uint32 *)buf_ptr) = pixel; \
break; \
} \
} while (FALSE)
struct sprite int int y
Definition sprite_g.h:31
struct sprite int x
Definition sprite_g.h:31
static bool is_bigendian(void)
Definition support.h:235

Definition at line 361 of file graphics.h.

◆ RECT_LIMIT

#define RECT_LIMIT   80

Definition at line 45 of file graphics.h.

◆ unlock_screen

#define unlock_screen ( )    unlock_surf(main_data.screen)

Definition at line 359 of file graphics.h.

◆ unlock_surf

#define unlock_surf (   surf)
Value:
do { \
if (SDL_MUSTLOCK(surf)) { \
} \
} while (FALSE)

Definition at line 344 of file graphics.h.

◆ USE_DUFFS_LOOP

#define USE_DUFFS_LOOP

Definition at line 54 of file graphics.h.

Function Documentation

◆ add_gui_layer()

struct gui_layer * add_gui_layer ( int  width,
int  height 
)

Buffer allocation function. This function is call by "create_window(...)" function and allocate buffer layer for this function.

Pointer for this buffer is put in buffer array on last position that flush functions will draw this layer last.

Definition at line 112 of file graphics.c.

◆ alphablit()

int alphablit ( SDL_Surface src,
SDL_Rect srcrect,
SDL_Surface dst,
SDL_Rect dstrect,
unsigned char  alpha_mod 
)

Execute alphablit.

Definition at line 199 of file graphics.c.

◆ blit_entire_src()

int blit_entire_src ( SDL_Surface psrc,
SDL_Surface pdest,
Sint16  dest_x,
Sint16  dest_y 
)

Blit entire src [SOURCE] surface to destination [DEST] surface on position : [dest_x],[dest_y] using it's actual alpha and color key settings.

Definition at line 417 of file graphics.c.

◆ clear_surface()

int clear_surface ( SDL_Surface surf,
SDL_Rect dstrect 
)

Fill surface with (0, 0, 0, 0), so the next blitting operation can set the per pixel alpha

Definition at line 400 of file graphics.c.

◆ convert_surf()

SDL_Surface * convert_surf ( SDL_Surface surf_in)

Convert surface to the main window format.

Definition at line 359 of file graphics.c.

◆ copy_surface()

SDL_Surface * copy_surface ( SDL_Surface src)

Return copy of the surface

Definition at line 1309 of file graphics.c.

◆ correct_rect_region()

bool correct_rect_region ( SDL_Rect prect)

Make rectangle region sane. Return TRUE if result is sane.

Definition at line 888 of file graphics.c.

◆ create_filled_surface()

SDL_Surface * create_filled_surface ( Uint16  w,
Uint16  h,
Uint32  flags,
SDL_Color pcolor 
)

Create an surface with screen format and fill with color. If pcolor == NULL surface is filled with transparent white A = 128

Definition at line 368 of file graphics.c.

Referenced by redraw_widget_info_label().

◆ create_frame()

void create_frame ( SDL_Surface dest,
Sint16  left,
Sint16  top,
Sint16  width,
Sint16  height,
SDL_Color pcolor 
)

Create colored frame

Definition at line 1350 of file graphics.c.

◆ create_line()

void create_line ( SDL_Surface dest,
Sint16  x0,
Sint16  y0,
Sint16  x1,
Sint16  y1,
SDL_Color pcolor 
)

Create single colored line

Definition at line 1381 of file graphics.c.

◆ create_surf()

SDL_Surface * create_surf ( int  width,
int  height,
Uint32  flags 
)

◆ create_surf_with_format()

SDL_Surface * create_surf_with_format ( SDL_PixelFormat pf,
int  width,
int  height,
Uint32  flags 
)

Create an surface with format MUST NOT BE USED IF NO SDLSCREEN IS SET

Definition at line 328 of file graphics.c.

Referenced by create_surf(), create_surf(), create_utf8_multi_surf(), and crop_rect_from_surface().

◆ create_surfaces()

bool create_surfaces ( int  width,
int  height 
)

Create new main window surfaces.

Definition at line 556 of file graphics.c.

◆ crop_rect_from_surface()

SDL_Surface * crop_rect_from_surface ( SDL_Surface psource,
SDL_Rect prect 
)

Create new surface (prect->w x prect->h size) and copy prect area of psource. if prect == NULL then create copy of entire psource.

Definition at line 236 of file graphics.c.

◆ crop_visible_part_from_surface()

SDL_Surface * crop_visible_part_from_surface ( SDL_Surface psrc)

Create new surface that is just visible part of source surface.

Definition at line 1225 of file graphics.c.

◆ fill_rect_alpha()

int fill_rect_alpha ( SDL_Surface surf,
SDL_Rect prect,
SDL_Color pcolor 
)

Fill rectangle with color with alpha channel.

Definition at line 865 of file graphics.c.

◆ get_first_pixel()

Uint32 get_first_pixel ( SDL_Surface surf)

Get first pixel Return the pixel value at (0, 0) NOTE: The surface must be locked before calling this!

Definition at line 468 of file graphics.c.

◆ get_gui_layer()

struct gui_layer * get_gui_layer ( SDL_Surface surface)

Get surface gui_layer.

Definition at line 90 of file graphics.c.

◆ get_pixel()

Uint32 get_pixel ( SDL_Surface surf,
Sint16  x,
Sint16  y 
)

Get pixel Return the pixel value at (x, y) NOTE: The surface must be locked before calling this!

Definition at line 430 of file graphics.c.

◆ get_smaller_surface_rect()

void get_smaller_surface_rect ( SDL_Surface surf,
SDL_Rect rect 
)

Get visible rectangle from surface.

Definition at line 936 of file graphics.c.

◆ gui_layer_destroy()

void gui_layer_destroy ( struct gui_layer **  gui_layer)

Free resources associated with gui_layer.

Definition at line 81 of file graphics.c.

◆ gui_layer_new()

struct gui_layer * gui_layer_new ( int  x,
int  y,
SDL_Surface surface 
)

Allocate new gui_layer.

Definition at line 66 of file graphics.c.

◆ init_sdl()

void init_sdl ( int  flags)

Initialize sdl with Flags

Definition at line 506 of file graphics.c.

◆ is_in_rect_area()

bool is_in_rect_area ( int  x,
int  y,
const SDL_Rect rect 
)

Return whether coordinates are in rectangle.

Definition at line 925 of file graphics.c.

◆ layer_rect_to_screen_rect()

void layer_rect_to_screen_rect ( struct gui_layer gui_layer,
SDL_Rect dest_rect 
)

Translate dest_rect from gui_layer's to global screen coordinates.

Definition at line 185 of file graphics.c.

◆ load_surf()

SDL_Surface * load_surf ( const char fname)

Load a surface from file putting it in software mem.

Definition at line 307 of file graphics.c.

◆ main_window_height()

int main_window_height ( void  )

Return height of the main window

Definition at line 693 of file graphics.c.

◆ main_window_width()

int main_window_width ( void  )

Return width of the main window

Definition at line 685 of file graphics.c.

◆ mask_surface()

SDL_Surface * mask_surface ( SDL_Surface src,
SDL_Surface mask,
int  mask_offset_x,
int  mask_offset_y 
)

Reduce the alpha of the final surface proportional to the alpha of the mask. Thus if the mask has 50% alpha the final image will be reduced by 50% alpha.

mask_offset_x, mask_offset_y is the offset of the mask relative to the origin of the source image. The pixel at (mask_offset_x, mask_offset_y) in the mask image will be used to clip pixel (0, 0) in the source image which is pixel (-x, -y) in the new image.

Definition at line 262 of file graphics.c.

◆ quit_sdl()

void quit_sdl ( void  )

Free screen buffers

Definition at line 622 of file graphics.c.

◆ remove_gui_layer()

void remove_gui_layer ( struct gui_layer gui_layer)

Free buffer layer ( call by popdown_window_group_dialog(...) func ) Func. Free buffer layer and clear buffer array entry.

Definition at line 148 of file graphics.c.

◆ resize_surface()

SDL_Surface * resize_surface ( const SDL_Surface psrc,
Uint16  new_width,
Uint16  new_height,
int  smooth 
)

Scale surface.

Definition at line 1237 of file graphics.c.

◆ resize_surface_box()

SDL_Surface * resize_surface_box ( const SDL_Surface psrc,
Uint16  new_width,
Uint16  new_height,
int  smooth,
bool  scale_up,
bool  absolute_dimensions 
)

Resize a surface to fit into a box with the dimensions 'new_width' and a 'new_height'. If 'scale_up' is FALSE, a surface that already fits into the box will not be scaled up to the boundaries of the box. If 'absolute_dimensions' is TRUE, the function returns a surface with the dimensions of the box and the scaled/original surface centered in it.

Definition at line 1257 of file graphics.c.

◆ screen_blit()

int screen_blit ( SDL_Surface src,
SDL_Rect srcrect,
SDL_Rect dstrect,
unsigned char  alpha_mod 
)

Execute alphablit to the main surface

Definition at line 223 of file graphics.c.

◆ screen_rect_to_layer_rect()

void screen_rect_to_layer_rect ( struct gui_layer gui_layer,
SDL_Rect dest_rect 
)

Translate dest_rect from global screen to gui_layer's coordinates.

Definition at line 173 of file graphics.c.

◆ set_video_mode()

bool set_video_mode ( unsigned  width,
unsigned  height,
unsigned  flags_in 
)

Switch to given video mode.

Definition at line 636 of file graphics.c.

◆ update_main_screen()

void update_main_screen ( void  )

Render from main surface with screen renderer.

Definition at line 669 of file graphics.c.

Variable Documentation

◆ main_data

struct sdl2_data main_data
extern

Definition at line 57 of file graphics.c.