Freeciv-3.3
Loading...
Searching...
No Matches
Macros | Functions
SDL3_rotozoom.h File Reference
#include <math.h>
#include "fc_prehdrs.h"
#include <SDL3/SDL.h>

Go to the source code of this file.

Macros

#define M_PI   3.1415926535897932384626433832795
 
#define SMOOTHING_OFF   0
 Disable anti-aliasing (no smoothing).
 
#define SMOOTHING_ON   1
 Enable anti-aliasing (smoothing).
 
#define SDL2_ROTOZOOM_SCOPE   extern
 

Functions

SDL2_ROTOZOOM_SCOPE SDL_SurfacerotozoomSurface (SDL_Surface *src, double angle, double zoom, int smooth)
 Rotates and zooms a surface and optional anti-aliasing.
 
SDL2_ROTOZOOM_SCOPE SDL_SurfacerotozoomSurfaceXY (SDL_Surface *src, double angle, double zoomx, double zoomy, int smooth)
 Rotates and zooms a surface with different horizontal and vertival scaling factors and optional anti-aliasing.
 
SDL2_ROTOZOOM_SCOPE void rotozoomSurfaceSize (int width, int height, double angle, double zoom, int *dstwidth, int *dstheight)
 Returns the size of the resulting target surface for a rotozoomSurface() call.
 
SDL2_ROTOZOOM_SCOPE void rotozoomSurfaceSizeXY (int width, int height, double angle, double zoomx, double zoomy, int *dstwidth, int *dstheight)
 Returns the size of the resulting target surface for a rotozoomSurfaceXY() call.
 
SDL2_ROTOZOOM_SCOPE SDL_SurfacezoomSurface (SDL_Surface *src, double zoomx, double zoomy, int smooth)
 Zoom a surface by independent horizontal and vertical factors with optional smoothing.
 
SDL2_ROTOZOOM_SCOPE void zoomSurfaceSize (int width, int height, double zoomx, double zoomy, int *dstwidth, int *dstheight)
 Calculates the size of the target surface for a zoomSurface() call.
 
SDL2_ROTOZOOM_SCOPE SDL_SurfaceshrinkSurface (SDL_Surface *src, int factorx, int factory)
 Shrink a surface by an integer ratio using averaging.
 
SDL2_ROTOZOOM_SCOPE SDL_SurfacerotateSurface90Degrees (SDL_Surface *src, int numClockwiseTurns)
 Rotates a 8/16/24/32 bit surface in increments of 90 degrees.
 

Macro Definition Documentation

◆ M_PI

#define M_PI   3.1415926535897932384626433832795

Definition at line 41 of file SDL3_rotozoom.h.

◆ SDL2_ROTOZOOM_SCOPE

#define SDL2_ROTOZOOM_SCOPE   extern

Definition at line 73 of file SDL3_rotozoom.h.

◆ SMOOTHING_OFF

#define SMOOTHING_OFF   0

Disable anti-aliasing (no smoothing).

Definition at line 54 of file SDL3_rotozoom.h.

◆ SMOOTHING_ON

#define SMOOTHING_ON   1

Enable anti-aliasing (smoothing).

Definition at line 59 of file SDL3_rotozoom.h.

Function Documentation

◆ rotateSurface90Degrees()

SDL2_ROTOZOOM_SCOPE SDL_Surface * rotateSurface90Degrees ( SDL_Surface src,
int  numClockwiseTurns 
)

Rotates a 8/16/24/32 bit surface in increments of 90 degrees.

Specialized 90 degree rotator which rotates a 'src' surface in 90 degree increments clockwise returning a new surface. Faster than rotozoomer since no scanning or interpolation takes place. Input surface must be 8/16/24/32 bit. (code contributed by J. Schiller, improved by C. Allport and A. Schiffler)

Parameters
srcSource surface to rotate.
numClockwiseTurnsNumber of clockwise 90 degree turns to apply to the source.
Returns
The new, rotated surface; or NULL for surfaces with incorrect input format.

Definition at line 539 of file SDL3_rotozoom.c.

◆ rotozoomSurface()

SDL2_ROTOZOOM_SCOPE SDL_Surface * rotozoomSurface ( SDL_Surface src,
double  angle,
double  zoom,
int  smooth 
)

Rotates and zooms a surface and optional anti-aliasing.

Rotates and zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface. 'angle' is the rotation in degrees and 'zoom' a scaling factor. If 'smooth' is set then the destination 32bit surface is anti-aliased. If the surface is not 8bit or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly.

Parameters
srcThe surface to rotozoom.
angleThe angle to rotate in degrees.
zoomThe scaling factor.
smoothAntialiasing flag; set to SMOOTHING_ON to enable.
Returns
The new rotozoomed surface.

Definition at line 769 of file SDL3_rotozoom.c.

◆ rotozoomSurfaceSize()

SDL2_ROTOZOOM_SCOPE void rotozoomSurfaceSize ( int  width,
int  height,
double  angle,
double  zoom,
int dstwidth,
int dstheight 
)

Returns the size of the resulting target surface for a rotozoomSurface() call.

Parameters
widthThe source surface width.
heightThe source surface height.
angleThe angle to rotate in degrees.
zoomThe scaling factor.
dstwidthThe calculated width of the rotozoomed destination surface.
dstheightThe calculated height of the rotozoomed destination surface.

Definition at line 747 of file SDL3_rotozoom.c.

◆ rotozoomSurfaceSizeXY()

SDL2_ROTOZOOM_SCOPE void rotozoomSurfaceSizeXY ( int  width,
int  height,
double  angle,
double  zoomx,
double  zoomy,
int dstwidth,
int dstheight 
)

Returns the size of the resulting target surface for a rotozoomSurfaceXY() call.

Parameters
widthThe source surface width.
heightThe source surface height.
angleThe angle to rotate in degrees.
zoomxThe horizontal scaling factor.
zoomyThe vertical scaling factor.
dstwidthThe calculated width of the rotozoomed destination surface.
dstheightThe calculated height of the rotozoomed destination surface.

Definition at line 730 of file SDL3_rotozoom.c.

◆ rotozoomSurfaceXY()

SDL2_ROTOZOOM_SCOPE SDL_Surface * rotozoomSurfaceXY ( SDL_Surface src,
double  angle,
double  zoomx,
double  zoomy,
int  smooth 
)

Rotates and zooms a surface with different horizontal and vertival scaling factors and optional anti-aliasing.

Rotates and zooms a 32bit or 8bit 'src' surface to newly created 'dst' surface. 'angle' is the rotation in degrees, 'zoomx and 'zoomy' scaling factors. If 'smooth' is set then the destination 32bit surface is anti-aliased. If the surface is not 8bit or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly.

Parameters
srcThe surface to rotozoom.
angleThe angle to rotate in degrees.
zoomxThe horizontal scaling factor.
zoomyThe vertical scaling factor.
smoothAntialiasing flag; set to SMOOTHING_ON to enable.
Returns
The new rotozoomed surface.

Definition at line 790 of file SDL3_rotozoom.c.

Referenced by rotozoomSurface().

◆ shrinkSurface()

SDL2_ROTOZOOM_SCOPE SDL_Surface * shrinkSurface ( SDL_Surface src,
int  factorx,
int  factory 
)

Shrink a surface by an integer ratio using averaging.

Shrinks a 32bit or 8bit 'src' surface to a newly created 'dst' surface. 'factorx' and 'factory' are the shrinking ratios (i.e. 2=1/2 the size, 3=1/3 the size, etc.) The destination surface is antialiased by averaging the source box RGBA or Y information. If the surface is not 8bit or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. The input surface is not modified. The output surface is newly allocated.

Parameters
srcThe surface to shrink.
factorxThe horizontal shrinking ratio.
factoryThe vertical shrinking ratio.
Returns
The new, shrunken surface.

Definition at line 1175 of file SDL3_rotozoom.c.

◆ zoomSurface()

SDL2_ROTOZOOM_SCOPE SDL_Surface * zoomSurface ( SDL_Surface src,
double  zoomx,
double  zoomy,
int  smooth 
)

Zoom a surface by independent horizontal and vertical factors with optional smoothing.

Zooms a 32bit or 8bit 'src' surface to newly created 'dst' surface. 'zoomx' and 'zoomy' are scaling factors for width and height. If 'smooth' is on then the destination 32bit surface is anti-aliased. If the surface is not 8bit or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. If zoom factors are negative, the image is flipped on the axes.

Parameters
srcThe surface to zoom.
zoomxThe horizontal zoom factor.
zoomyThe vertical zoom factor.
smoothAntialiasing flag; set to SMOOTHING_ON to enable.
Returns
The new, zoomed surface.

Definition at line 1047 of file SDL3_rotozoom.c.

Referenced by change_nation_label(), create_select_tech_icon(), economy_report_dialog_popup(), get_scaled_city_map(), popup_players_dialog(), popup_races_dialog(), popup_worklist_editor(), real_science_report_dialog_update(), redraw_city_dialog(), redraw_happiness_city_dialog(), redraw_unit_info_label(), resize_surface(), resize_surface_box(), and update_intel_dialog().

◆ zoomSurfaceSize()

SDL2_ROTOZOOM_SCOPE void zoomSurfaceSize ( int  width,
int  height,
double  zoomx,
double  zoomy,
int dstwidth,
int dstheight 
)

Calculates the size of the target surface for a zoomSurface() call.

The minimum size of the target surface is 1. The input factors can be positive or negative.

Parameters
widthThe width of the source surface to zoom.
heightThe height of the source surface to zoom.
zoomxThe horizontal zoom factor.
zoomyThe vertical zoom factor.
dstwidthPointer to an integer to store the calculated width of the zoomed target surface.
dstheightPointer to an integer to store the calculated height of the zoomed target surface.

Definition at line 997 of file SDL3_rotozoom.c.

Referenced by rotozoomSurfaceXY(), and zoomSurface().