The Battle for Wesnoth  1.19.5+dev
Macros | Functions | Variables
utils.cpp File Reference

Support-routines for the SDL-graphics-library. More...

#include "sdl/utils.hpp"
#include "color.hpp"
#include "log.hpp"
#include "xBRZ/xbrz.hpp"
#include <algorithm>
#include <cassert>
#include <cstring>
#include <boost/circular_buffer.hpp>
#include <boost/math/constants/constants.hpp>
Include dependency graph for utils.cpp:

Go to the source code of this file.

Macros

#define ERR_DP   LOG_STREAM(err, log_display)
 

Functions

surface scale_surface_xbrz (const surface &surf, std::size_t z)
 Scale a surface using xBRZ algorithm. More...
 
surface scale_surface (const surface &surf, int w, int h)
 Scale a surface using alpha-weighted modified bilinear filtering Note: causes artifacts with alpha gradients, for example in some portraits. More...
 
surface scale_surface_legacy (const surface &surf, int w, int h)
 Scale a surface using simple bilinear filtering (discarding rgb from source pixels with 0 alpha) More...
 
surface scale_surface_sharp (const surface &surf, int w, int h)
 Scale a surface using modified nearest neighbour algorithm. More...
 
void adjust_surface_color (surface &nsurf, int red, int green, int blue)
 
void greyscale_image (surface &nsurf)
 
void monochrome_image (surface &nsurf, const int threshold)
 
void sepia_image (surface &nsurf)
 
void negative_image (surface &nsurf, const int thresholdR, const int thresholdG, const int thresholdB)
 
void alpha_to_greyscale (surface &nsurf)
 
void wipe_alpha (surface &nsurf)
 
void shadow_image (surface &surf, int scale)
 create an heavy shadow of the image, by blurring, increasing alpha and darkening More...
 
void swap_channels_image (surface &nsurf, channel r, channel g, channel b, channel a)
 
void recolor_image (surface &nsurf, const color_range_map &map_rgb)
 Recolors a surface using a map with source and converted palette values. More...
 
void brighten_image (surface &nsurf, int32_t amount)
 
void adjust_surface_alpha (surface &surf, uint8_t alpha_mod)
 
void adjust_surface_alpha_add (surface &nsurf, int amount)
 
void mask_surface (surface &nsurf, const surface &nmask, bool *empty_result, const std::string &filename)
 Applies a mask on a surface. More...
 
bool in_mask_surface (const surface &nsurf, const surface &nmask)
 Check if a surface fit into a mask. More...
 
void light_surface (surface &nsurf, const surface &lightmap)
 Light surf using lightmap. More...
 
void blur_surface (surface &surf, SDL_Rect rect, int depth)
 Cross-fades a surface in place. More...
 
void blur_alpha_surface (surface &res, int depth)
 Cross-fades a surface with alpha channel. More...
 
surface cut_surface (const surface &surf, const SDL_Rect &r)
 Cuts a rectangle from a surface. More...
 
void blend_surface (surface &nsurf, const double amount, const color_t color)
 Blends a surface with a color. More...
 
surface rotate_any_surface (const surface &surf, float angle, int zoom, int offset)
 Rotates a surface by any degrees. More...
 
surface rotate_180_surface (const surface &surf)
 Rotates a surface 180 degrees. More...
 
surface rotate_90_surface (const surface &surf, bool clockwise)
 Rotates a surface 90 degrees. More...
 
void flip_surface (surface &nsurf)
 
void flop_surface (surface &nsurf)
 
surface get_surface_portion (const surface &src, SDL_Rect &area)
 Get a portion of the screen. More...
 
rect get_non_transparent_portion (const surface &nsurf)
 

Variables

static lg::log_domain log_display ("display")
 

Detailed Description

Support-routines for the SDL-graphics-library.

Definition in file utils.cpp.

Macro Definition Documentation

◆ ERR_DP

#define ERR_DP   LOG_STREAM(err, log_display)

Definition at line 34 of file utils.cpp.

Function Documentation

◆ adjust_surface_alpha()

void adjust_surface_alpha ( surface surf,
uint8_t  alpha_mod 
)

Definition at line 771 of file utils.cpp.

References surf.

◆ adjust_surface_alpha_add()

void adjust_surface_alpha_add ( surface nsurf,
int  amount 
)

Definition at line 780 of file utils.cpp.

References surface::area(), b, g, and surface_locker< T >::pixels().

◆ adjust_surface_color()

void adjust_surface_color ( surface nsurf,
int  red,
int  green,
int  blue 
)

◆ alpha_to_greyscale()

void alpha_to_greyscale ( surface nsurf)

◆ blend_surface()

void blend_surface ( surface surf,
const double  amount,
const color_t  color 
)

Blends a surface with a color.

Every pixel in the surface will be blended with the color given. The final color of a pixel is amount * color + (1 - amount) * original.

Parameters
surfThe surface to blend.
amountThe amount of the new color is determined by color. Must be a number in the range [0, 1].
colorThe color to blend width, note its alpha channel is ignored.

Definition at line 1274 of file utils.cpp.

References surface::area(), b, blue, g, green, surface_locker< T >::pixels(), and red.

Referenced by image::blend_modification::operator()().

◆ blur_alpha_surface()

void blur_alpha_surface ( surface surf,
int  depth = 1 
)

Cross-fades a surface with alpha channel.

Parameters
surfThe source surface.
depthThe depth of the blurring.

Definition at line 1077 of file utils.cpp.

References blue, green, p, surface_locker< T >::pixels(), and red.

Referenced by image::bl_modification::operator()(), and shadow_image().

◆ blur_surface()

void blur_surface ( surface surf,
SDL_Rect  rect,
int  depth = 1 
)

Cross-fades a surface in place.

Parameters
surfThe surface to blur, must have 32 bits per pixel.
rectThe part of the surface to blur.
depthThe depth of the blurring.

Definition at line 961 of file utils.cpp.

References blue, green, p, surface_locker< T >::pixels(), red, and surf.

Referenced by gui2::canvas::update_blur().

◆ brighten_image()

void brighten_image ( surface nsurf,
int32_t  amount 
)

Definition at line 742 of file utils.cpp.

References surface::area(), b, fixed_point_multiply(), g, and surface_locker< T >::pixels().

◆ cut_surface()

surface cut_surface ( const surface surf,
const SDL_Rect &  r 
)

Cuts a rectangle from a surface.

Definition at line 1215 of file utils.cpp.

References surface_locker< T >::pixels(), PLAIN_LOG, utf8::size(), src, and surf.

Referenced by image::get_hexed(), image::load_image_sub_file(), and image::crop_modification::operator()().

◆ flip_surface()

void flip_surface ( surface nsurf)

Definition at line 1441 of file utils.cpp.

References surface_locker< T >::pixels(), and swap().

Referenced by image::fl_modification::operator()().

◆ flop_surface()

void flop_surface ( surface nsurf)

Definition at line 1457 of file utils.cpp.

References surface_locker< T >::pixels(), and swap().

Referenced by image::fl_modification::operator()().

◆ get_non_transparent_portion()

rect get_non_transparent_portion ( const surface nsurf)

Definition at line 1517 of file utils.cpp.

References n, and surface_locker< T >::pixels().

Referenced by image::crop_transparency_modification::operator()().

◆ get_surface_portion()

surface get_surface_portion ( const surface surf,
SDL_Rect &  rect 
)

Get a portion of the screen.

Send nullptr if the portion is outside of the screen.

Parameters
surfThe source surface.
rectThe portion of the source surface to copy.
Returns
A surface containing the portion of the source. No RLE or Alpha bits are set.
Return values
0if error or the portion is outside of the surface.

Definition at line 1473 of file utils.cpp.

References dst, PLAIN_LOG, and src.

Referenced by image::crop_transparency_modification::operator()().

◆ greyscale_image()

void greyscale_image ( surface nsurf)

Definition at line 429 of file utils.cpp.

References surface::area(), b, g, and surface_locker< T >::pixels().

Referenced by image::gs_modification::operator()().

◆ in_mask_surface()

bool in_mask_surface ( const surface nsurf,
const surface nmask 
)

Check if a surface fit into a mask.

Definition at line 866 of file utils.cpp.

References surface_locker< T >::pixels().

Referenced by image::is_in_hex().

◆ light_surface()

void light_surface ( surface surf,
const surface lightmap 
)

Light surf using lightmap.

Parameters
surfThe source surface.
lightmapadd/subtract this color to surf but RGB values are converted to (X-128)*2 to cover the full (-256,256) spectrum. Should already be neutral

Definition at line 904 of file utils.cpp.

References surface::area(), b, g, surface_locker< T >::pixels(), and PLAIN_LOG.

Referenced by image::apply_light(), and image::light_modification::operator()().

◆ mask_surface()

void mask_surface ( surface nsurf,
const surface nmask,
bool *  empty_result,
const std::string &  filename 
)

◆ monochrome_image()

void monochrome_image ( surface nsurf,
const int  threshold 
)

Definition at line 463 of file utils.cpp.

References surface::area(), b, g, and surface_locker< T >::pixels().

Referenced by image::bw_modification::operator()().

◆ negative_image()

void negative_image ( surface nsurf,
const int  thresholdR,
const int  thresholdG,
const int  thresholdB 
)

Definition at line 523 of file utils.cpp.

References surface::area(), b, g, and surface_locker< T >::pixels().

Referenced by image::negative_modification::operator()().

◆ recolor_image()

void recolor_image ( surface surf,
const color_range_map map_rgb 
)

Recolors a surface using a map with source and converted palette values.

This is most often used for team-coloring.

Parameters
surfThe source surface.
map_rgbMap of color values, with the keys corresponding to the source palette, and the values to the recolored palette.

Definition at line 711 of file utils.cpp.

References surface::area(), color_t::from_argb_bytes(), i, and surface_locker< T >::pixels().

Referenced by image::rc_modification::operator()().

◆ rotate_180_surface()

surface rotate_180_surface ( const surface surf)

Rotates a surface 180 degrees.

Parameters
surfThe surface to rotate.
Returns
The rotated surface.

Definition at line 1367 of file utils.cpp.

References surface::clone(), is_odd(), surface_locker< T >::pixels(), PLAIN_LOG, surf, and swap().

Referenced by image::fl_modification::operator()(), and image::rotate_modification::operator()().

◆ rotate_90_surface()

surface rotate_90_surface ( const surface surf,
bool  clockwise 
)

Rotates a surface 90 degrees.

Parameters
surfThe surface to rotate.
clockwiseWhether the rotation should be clockwise (true) or counter-clockwise (false).
Returns
The rotated surface.

Definition at line 1407 of file utils.cpp.

References dst, surface_locker< T >::pixels(), PLAIN_LOG, and surf.

Referenced by image::rotate_modification::operator()().

◆ rotate_any_surface()

surface rotate_any_surface ( const surface surf,
float  angle,
int  zoom,
int  offset 
)

Rotates a surface by any degrees.

Precondition
zoom >= offset Otherwise
Returns
will have empty pixels.
Precondition
offset > 0 Otherwise the procedure will not return.
Parameters
surfThe surface to rotate.
angleThe angle of rotation.
zoomWhich zoom level to use for calculating the result.
offsetPixel offset when scanning the zoomed source.
Returns
The rotated surface.

Definition at line 1305 of file utils.cpp.

References dst, surface_locker< T >::pixels(), xbrz::scale(), scale_surface(), src, and surf.

Referenced by image::rotate_modification::operator()().

◆ scale_surface()

surface scale_surface ( const surface surf,
int  w,
int  h 
)

Scale a surface using alpha-weighted modified bilinear filtering Note: causes artifacts with alpha gradients, for example in some portraits.

Parameters
surfThe source surface.
wThe width of the resulting surface.
hThe height of the resulting surface.
Returns
A surface containing the scaled version of the source.
Return values
0Returned upon error.
surfReturned if w == surf->w and h == surf->h.

Definition at line 95 of file utils.cpp.

References b, dst, e, fixed_point_divide(), fixed_point_to_int(), g, h, n, surface_locker< T >::pixels(), PLAIN_LOG, s, surf, and w.

Referenced by image::light_modification::operator()(), video::read_pixels_low_res(), and rotate_any_surface().

◆ scale_surface_legacy()

surface scale_surface_legacy ( const surface surf,
int  w,
int  h 
)

Scale a surface using simple bilinear filtering (discarding rgb from source pixels with 0 alpha)

Parameters
surfThe source surface.
wThe width of the resulting surface.
hThe height of the resulting surface.
Returns
A surface containing the scaled version of the source.
Return values
0Returned upon error.
surfReturned if w == surf->w and h == surf->h.

Definition at line 221 of file utils.cpp.

References b, dst, fixed_point_divide(), fixed_point_to_int(), g, h, surface_locker< T >::pixels(), PLAIN_LOG, surf, and w.

Referenced by image::scale_modification::operator()().

◆ scale_surface_sharp()

surface scale_surface_sharp ( const surface surf,
int  w,
int  h 
)

Scale a surface using modified nearest neighbour algorithm.

Use only if preserving sharp edges is a priority (e.g. minimap).

Parameters
surfThe source surface.
wThe width of the resulting surface.
hThe height of the resulting surface.
Returns
A surface containing the scaled version of the source.
Return values
0Returned upon error.
surfReturned if w == surf->w and h == surf->h.

Definition at line 354 of file utils.cpp.

References dst, h, surface_locker< T >::pixels(), PLAIN_LOG, surf, and w.

Referenced by BOOST_AUTO_TEST_CASE(), and image::scale_modification::operator()().

◆ scale_surface_xbrz()

surface scale_surface_xbrz ( const surface surf,
std::size_t  z 
)

Scale a surface using xBRZ algorithm.

Parameters
surfThe source surface
zThe scaling factor. Should be an integer 2-5 (1 is tolerated).
Returns
The scaled surface

Definition at line 57 of file utils.cpp.

References xbrz::ARGB, dst, surface_locker< T >::pixels(), PLAIN_LOG, xbrz::scale(), xbrz::SCALE_FACTOR_MAX, and surf.

Referenced by image::xbrz_modification::operator()().

◆ sepia_image()

void sepia_image ( surface nsurf)

Definition at line 492 of file utils.cpp.

References surface::area(), b, g, and surface_locker< T >::pixels().

Referenced by image::sepia_modification::operator()().

◆ shadow_image()

void shadow_image ( surface surf,
int  scale 
)

create an heavy shadow of the image, by blurring, increasing alpha and darkening

Definition at line 589 of file utils.cpp.

References blur_alpha_surface(), surface_locker< T >::pixels(), xbrz::scale(), and surf.

◆ swap_channels_image()

void swap_channels_image ( surface nsurf,
channel  r,
channel  g,
channel  b,
channel  a 
)

Definition at line 619 of file utils.cpp.

References ALPHA, surface::area(), b, BLUE, blue, g, GREEN, green, surface_locker< T >::pixels(), RED, and red.

Referenced by image::swap_modification::operator()().

◆ wipe_alpha()

void wipe_alpha ( surface nsurf)

Variable Documentation

◆ log_display

lg::log_domain log_display("display") ( "display"  )
static