22#ifndef MUTATIONOFJB_UTIL_H
23#define MUTATIONOFJB_UTIL_H
25#include "common/rect.h"
27#include "graphics/managed_surface.h"
28#include "graphics/surface.h"
34namespace MutationOfJB {
36void reportFileMissingError(
const char *fileName);
40template<
typename SurfaceType>
42 if (destBounds.
left >= destSurf.w || destBounds.top >= destSurf.h ||
43 destBounds.
right <= 0 || destBounds.bottom <= 0)
47 if (destBounds.
right > destSurf.w) {
48 srcBounds.
right -= destBounds.
right - destSurf.w;
49 destBounds.
right = destSurf.w;
52 if (destBounds.bottom > destSurf.h) {
53 srcBounds.bottom -= destBounds.bottom - destSurf.h;
54 destBounds.bottom = destSurf.h;
57 if (destBounds.top < 0) {
58 srcBounds.top += -destBounds.top;
62 if (destBounds.
left < 0) {
70template<
typename BlitOp>
78 if (!clipBounds(srcBounds, destBounds, dest))
81 for (
int y = 0; y < srcBounds.
height(); ++y) {
82 const byte *srcP =
reinterpret_cast<const byte *
>(src.
getBasePtr(srcBounds.
left, srcBounds.top + y));
83 const byte *srcEndP = srcP + srcBounds.
width();
84 byte *destP =
reinterpret_cast<byte *
>(dest.
getBasePtr(destBounds.
left, destBounds.top + y));
86 while (srcP != srcEndP) {
87 const byte newColor = blitOp(*srcP, *destP);
88 if (*destP != newColor) {
97template<
typename BlitOp>
105 if (!clipBounds(srcBounds, destBounds, dest))
109 blit_if(src, srcRect, destSurf,
Common::Point(0, 0), blitOp);
112template<
typename BlitOp>
114 blit_if(src,
Common::Rect(0, 0, src.
w, src.
h), dest, destPos, blitOp);
117template<
typename BlitOp>
119 blit_if(src,
Common::Rect(0, 0, src.
w, src.
h), dest, destPos, blitOp);
Definition: managed_surface.h:51
PixelFormat & format
Definition: managed_surface.h:137
Surface getSubArea(const Common::Rect &area)
Definition: managed_surface.h:978
Definition: algorithm.h:29
T right
Definition: rect.h:171
T height() const
Definition: rect.h:218
bool isValidRect() const
Definition: rect.h:392
T left
Definition: rect.h:170
T width() const
Definition: rect.h:217
int16 h
Definition: surface.h:76
const void * getBasePtr(int x, int y) const
Definition: surface.h:140
int16 w
Definition: surface.h:71
PixelFormat format
Definition: surface.h:95