1
0
mirror of git://projects.qi-hardware.com/gmenu2x.git synced 2024-07-07 13:27:18 +03:00
gmenu2x/src/surface.h
Maarten ter Huurne 7dac306c16 Surface: Removed fake double buffering.
Use real double buffering instead.

I checked the SDL code and if the hardware cannot provide double buffering
it will use a shadow surface to ensure that a frame is not displayed until
it has been fully painted.

Also disable mouse cursor before opening the output surface. The reason it
was disabled after the surface was opened is that SDL on GP2X has a bug.
However, this means the cursor is visible for a short time during startup
which looks ugly.
2011-06-02 17:59:26 +02:00

89 lines
3.5 KiB
C++

/***************************************************************************
* Copyright (C) 2006 by Massimiliano Torromeo *
* massimiliano.torromeo@gmail.com *
* *
* This program 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. *
* *
* This program 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 this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef SURFACE_H
#define SURFACE_H
#include <SDL.h>
#include <string>
#include "asfont.h"
using std::string;
struct RGBAColor {
unsigned short r,g,b,a;
};
RGBAColor strtorgba(const string &strColor);
/**
Wrapper around SDL_Surface
@author Massimiliano Torromeo <massimiliano.torromeo@gmail.com>
*/
class Surface {
public:
static Surface *openOutputSurface(int width, int height, int bitsperpixel);
Surface(Surface *s);
Surface(const string &img, const string &skin="");
~Surface();
SDL_Surface *raw;
void free();
void flip();
void clearClipRect();
void setClipRect(int x, int y, int w, int h);
void setClipRect(SDL_Rect rect);
bool blit(Surface *destination, int x, int y, int w=0, int h=0, int a=-1);
bool blit(Surface *destination, SDL_Rect container, ASFont::HAlign halign = ASFont::HAlignLeft, ASFont::VAlign valign = ASFont::VAlignTop);
bool blitCenter(Surface *destination, int x, int y, int w=0, int h=0, int a=-1);
bool blitRight(Surface *destination, int x, int y, int w=0, int h=0, int a=-1);
void write(ASFont *font, const string &text, int x, int y, ASFont::HAlign halign = ASFont::HAlignLeft, ASFont::VAlign valign = ASFont::VAlignTop) {
font->write(this, text, x, y, halign, valign);
}
int box(Sint16, Sint16, Sint16, Sint16, Uint8, Uint8, Uint8, Uint8);
int box(Sint16, Sint16, Sint16, Sint16, Uint8, Uint8, Uint8);
int box(Sint16, Sint16, Sint16, Sint16, RGBAColor);
int box(SDL_Rect, RGBAColor);
int rectangle(Sint16, Sint16, Sint16, Sint16, Uint8, Uint8, Uint8, Uint8);
int rectangle(Sint16, Sint16, Sint16, Sint16, RGBAColor);
int rectangle(SDL_Rect, RGBAColor);
int hline(Sint16, Sint16, Sint16, Uint8, Uint8, Uint8, Uint8);
private:
Surface(SDL_Surface *raw, bool freeWhenDone);
SDL_PixelFormat *format();
void load(const string &img, const string &skin);
bool blit(SDL_Surface *destination, int x, int y, int w=0, int h=0, int a=-1);
bool blitCenter(SDL_Surface *destination, int x, int y, int w=0, int h=0, int a=-1);
bool blitRight(SDL_Surface *destination, int x, int y, int w=0, int h=0, int a=-1);
bool freeWhenDone;
bool locked;
int halfW, halfH;
};
#endif