136 lines
3.2 KiB
C++
136 lines
3.2 KiB
C++
/*
|
|
** bitmap.h
|
|
**
|
|
** This file is part of mkxp.
|
|
**
|
|
** Copyright (C) 2013 - 2021 Amaryllis Kulla <ancurio@mapleshrine.eu>
|
|
**
|
|
** mkxp is free software: you can redistribute it and/or modify
|
|
** it under the terms of the GNU General Public License as published by
|
|
** the Free Software Foundation, either version 2 of the License, or
|
|
** (at your option) any later version.
|
|
**
|
|
** mkxp is distributed in the hope that it will be useful,
|
|
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
** GNU General Public License for more details.
|
|
**
|
|
** You should have received a copy of the GNU General Public License
|
|
** along with mkxp. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef BITMAP_H
|
|
#define BITMAP_H
|
|
|
|
#include "disposable.h"
|
|
#include "etc-internal.h"
|
|
#include "etc.h"
|
|
|
|
#include <sigc++/signal.h>
|
|
|
|
class Font;
|
|
class ShaderBase;
|
|
struct TEXFBO;
|
|
struct SDL_Surface;
|
|
|
|
struct BitmapPrivate;
|
|
// FIXME make this class use proper RGSS classes again
|
|
class Bitmap : public Disposable
|
|
{
|
|
public:
|
|
Bitmap(const char *filename);
|
|
Bitmap(int width, int height);
|
|
/* Clone constructor */
|
|
Bitmap(const Bitmap &other);
|
|
~Bitmap();
|
|
|
|
int width() const;
|
|
int height() const;
|
|
IntRect rect() const;
|
|
|
|
void blt(int x, int y,
|
|
const Bitmap &source, IntRect rect,
|
|
int opacity = 255);
|
|
|
|
void stretchBlt(const IntRect &destRect,
|
|
const Bitmap &source, const IntRect &sourceRect,
|
|
int opacity = 255);
|
|
|
|
void fillRect(int x, int y,
|
|
int width, int height,
|
|
const Vec4 &color);
|
|
void fillRect(const IntRect &rect, const Vec4 &color);
|
|
|
|
void gradientFillRect(int x, int y,
|
|
int width, int height,
|
|
const Vec4 &color1, const Vec4 &color2,
|
|
bool vertical = false);
|
|
void gradientFillRect(const IntRect &rect,
|
|
const Vec4 &color1, const Vec4 &color2,
|
|
bool vertical = false);
|
|
|
|
void clearRect(int x, int y,
|
|
int width, int height);
|
|
void clearRect(const IntRect &rect);
|
|
|
|
void blur();
|
|
void radialBlur(int angle, int divisions);
|
|
|
|
void clear();
|
|
|
|
Color getPixel(int x, int y) const;
|
|
void setPixel(int x, int y, const Color &color);
|
|
|
|
void hueChange(int hue);
|
|
|
|
enum TextAlign
|
|
{
|
|
Left = 0,
|
|
Center = 1,
|
|
Right = 2
|
|
};
|
|
|
|
void drawText(int x, int y,
|
|
int width, int height,
|
|
const char *str, int align = Left);
|
|
|
|
void drawText(const IntRect &rect,
|
|
const char *str, int align = Left);
|
|
|
|
IntRect textSize(const char *str);
|
|
|
|
DECL_ATTR(Font, Font&)
|
|
|
|
/* Sets initial reference without copying by value,
|
|
* use at construction */
|
|
void setInitFont(Font *value);
|
|
|
|
/* extensions */
|
|
void writeToPng(const char *filename);
|
|
|
|
void vFlip();
|
|
void hFlip();
|
|
|
|
/* <internal> */
|
|
TEXFBO &getGLTypes();
|
|
SDL_Surface *megaSurface() const;
|
|
void ensureNonMega() const;
|
|
|
|
/* Binds the backing texture and sets the correct
|
|
* texture size uniform in shader */
|
|
void bindTex(ShaderBase &shader);
|
|
|
|
/* Adds 'rect' to tainted area */
|
|
void taintArea(const IntRect &rect);
|
|
|
|
sigc::signal<void> modified;
|
|
|
|
private:
|
|
void releaseResources();
|
|
const char *klassName() const { return "bitmap"; }
|
|
|
|
BitmapPrivate *p;
|
|
};
|
|
|
|
#endif // BITMAP_H
|