mirror of
git://projects.qi-hardware.com/gmenu2x.git
synced 2024-11-26 11:08:27 +02:00
ASFont: moved SFontPlus code into ASFont source files.
This is in preparation of merging the classes.
This commit is contained in:
parent
a35a7e2c35
commit
ec5d426d83
@ -8,7 +8,7 @@ gmenu2x_SOURCES = asfont.cpp button.cpp cpu.cpp dirdialog.cpp filedialog.cpp \
|
|||||||
menusettingmultistring.cpp menusettingrgba.cpp menusettingstring.cpp \
|
menusettingmultistring.cpp menusettingrgba.cpp menusettingstring.cpp \
|
||||||
menusettingstringbase.cpp \
|
menusettingstringbase.cpp \
|
||||||
messagebox.cpp selector.cpp \
|
messagebox.cpp selector.cpp \
|
||||||
settingsdialog.cpp sfontplus.cpp surfacecollection.cpp surface.cpp \
|
settingsdialog.cpp surfacecollection.cpp surface.cpp \
|
||||||
textdialog.cpp textmanualdialog.cpp touchscreen.cpp translator.cpp \
|
textdialog.cpp textmanualdialog.cpp touchscreen.cpp translator.cpp \
|
||||||
utilities.cpp wallpaperdialog.cpp \
|
utilities.cpp wallpaperdialog.cpp \
|
||||||
browsedialog.cpp buttonbox.cpp dialog.cpp \
|
browsedialog.cpp buttonbox.cpp dialog.cpp \
|
||||||
@ -22,7 +22,7 @@ noinst_HEADERS = asfont.h button.h cpu.h dirdialog.h FastDelegate.h \
|
|||||||
menusettingmultistring.h menusettingrgba.h menusettingstring.h \
|
menusettingmultistring.h menusettingrgba.h menusettingstring.h \
|
||||||
menusettingstringbase.h \
|
menusettingstringbase.h \
|
||||||
messagebox.h selector.h settingsdialog.h \
|
messagebox.h selector.h settingsdialog.h \
|
||||||
sfontplus.h surfacecollection.h surface.h textdialog.h textmanualdialog.h \
|
surfacecollection.h surface.h textdialog.h textmanualdialog.h \
|
||||||
touchscreen.h translator.h utilities.h wallpaperdialog.h \
|
touchscreen.h translator.h utilities.h wallpaperdialog.h \
|
||||||
browsedialog.h buttonbox.h dialog.h \
|
browsedialog.h buttonbox.h dialog.h \
|
||||||
imageio.h
|
imageio.h
|
||||||
|
191
src/asfont.cpp
191
src/asfont.cpp
@ -1,7 +1,198 @@
|
|||||||
#include "asfont.h"
|
#include "asfont.h"
|
||||||
|
#include "imageio.h"
|
||||||
#include "surface.h"
|
#include "surface.h"
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
Uint32 SFontPlus::getPixel(Sint32 x, Sint32 y) {
|
||||||
|
assert(x>=0);
|
||||||
|
assert(x<surface->w);
|
||||||
|
assert(y>=0);
|
||||||
|
assert(y<surface->h);
|
||||||
|
|
||||||
|
Uint32 Bpp = surface->format->BytesPerPixel;
|
||||||
|
|
||||||
|
// Get the pixel
|
||||||
|
switch(Bpp) {
|
||||||
|
case 1:
|
||||||
|
return *((Uint8 *)surface->pixels + y * surface->pitch + x);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
return *((Uint16 *)surface->pixels + y * surface->pitch/2 + x);
|
||||||
|
break;
|
||||||
|
case 3: { // Format/endian independent
|
||||||
|
Uint8 *bits = ((Uint8 *)surface->pixels)+y*surface->pitch+x*Bpp;
|
||||||
|
Uint8 r, g, b;
|
||||||
|
r = *((bits)+surface->format->Rshift/8);
|
||||||
|
g = *((bits)+surface->format->Gshift/8);
|
||||||
|
b = *((bits)+surface->format->Bshift/8);
|
||||||
|
return SDL_MapRGB(surface->format, r, g, b);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
return *((Uint32 *)surface->pixels + y * surface->pitch/4 + x);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SFontPlus::SFontPlus() {
|
||||||
|
surface = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
SFontPlus::SFontPlus(SDL_Surface* font) {
|
||||||
|
surface = NULL;
|
||||||
|
initFont(font);
|
||||||
|
}
|
||||||
|
|
||||||
|
SFontPlus::SFontPlus(const std::string &font) {
|
||||||
|
surface = NULL;
|
||||||
|
initFont(font);
|
||||||
|
}
|
||||||
|
|
||||||
|
SFontPlus::~SFontPlus() {
|
||||||
|
freeFont();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SFontPlus::utf8Code(unsigned char c) {
|
||||||
|
return (c>=194 && c<=198) || c==208 || c==209;
|
||||||
|
//return c>=194;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SFontPlus::initFont(const std::string &font, const std::string &characters) {
|
||||||
|
SDL_Surface *buf = loadPNG(font);
|
||||||
|
if (buf!=NULL) {
|
||||||
|
initFont( SDL_DisplayFormatAlpha(buf), characters );
|
||||||
|
SDL_FreeSurface(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SFontPlus::initFont(SDL_Surface *font, const std::string &characters) {
|
||||||
|
freeFont();
|
||||||
|
this->characters = characters;
|
||||||
|
if (font==NULL) return;
|
||||||
|
surface = font;
|
||||||
|
Uint32 pink = SDL_MapRGB(surface->format, 255,0,255);
|
||||||
|
#ifdef DEBUG
|
||||||
|
bool utf8 = false;
|
||||||
|
for (unsigned x=0; x<characters.length(); x++) {
|
||||||
|
if (!utf8) utf8 = (unsigned char)characters[x]>128;
|
||||||
|
if (utf8) DEBUG("%d\n", (unsigned char)characters[x]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
unsigned c = 0;
|
||||||
|
|
||||||
|
SDL_LockSurface(surface);
|
||||||
|
for (unsigned x=0; x<(unsigned)surface->w && c<characters.length(); x++) {
|
||||||
|
if (getPixel(x,0) == pink) {
|
||||||
|
unsigned startx = x;
|
||||||
|
charpos.push_back(x);
|
||||||
|
|
||||||
|
x++;
|
||||||
|
while (x<(unsigned)surface->w && getPixel(x,0) == pink) x++;
|
||||||
|
charpos.push_back(x);
|
||||||
|
|
||||||
|
//utf8 characters
|
||||||
|
if (c>0 && utf8Code(characters[c-1])) {
|
||||||
|
charpos.push_back(startx);
|
||||||
|
charpos.push_back(x);
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SDL_UnlockSurface(surface);
|
||||||
|
Uint32 colKey = getPixel(0,surface->h-1);
|
||||||
|
SDL_SetColorKey(surface, SDL_SRCCOLORKEY, colKey);
|
||||||
|
std::string::size_type pos = characters.find("0")*2;
|
||||||
|
SDL_Rect srcrect = {charpos[pos], 1, charpos[pos+2] - charpos[pos], surface->h - 1};
|
||||||
|
unsigned y = srcrect.h;
|
||||||
|
bool nonKeyFound = false;
|
||||||
|
while (y-- > 0 && !nonKeyFound) {
|
||||||
|
unsigned x = srcrect.w;
|
||||||
|
while (x-- > 0 && !nonKeyFound)
|
||||||
|
nonKeyFound = getPixel(x+srcrect.x,y+srcrect.y) != colKey;
|
||||||
|
}
|
||||||
|
lineHeight = y+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SFontPlus::freeFont() {
|
||||||
|
if (surface!=NULL) {
|
||||||
|
SDL_FreeSurface(surface);
|
||||||
|
surface = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SFontPlus::write(SDL_Surface *s, const std::string &text, int x, int y) {
|
||||||
|
if (text.empty()) return;
|
||||||
|
|
||||||
|
std::string::size_type pos;
|
||||||
|
SDL_Rect srcrect, dstrect;
|
||||||
|
|
||||||
|
// these values won't change in the loop
|
||||||
|
srcrect.y = 1;
|
||||||
|
dstrect.y = y;
|
||||||
|
srcrect.h = dstrect.h = surface->h-1;
|
||||||
|
|
||||||
|
for(unsigned i=0; i<text.length() && x<surface->w; i++) {
|
||||||
|
//Utf8 characters
|
||||||
|
if (utf8Code(text[i]) && i+1<text.length()) {
|
||||||
|
pos = characters.find(text.substr(i,2));
|
||||||
|
i++;
|
||||||
|
} else
|
||||||
|
pos = characters.find(text[i]);
|
||||||
|
if (pos == std::string::npos) {
|
||||||
|
x += charpos[2]-charpos[1];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos *= 2;
|
||||||
|
|
||||||
|
srcrect.x = charpos[pos];
|
||||||
|
srcrect.w = charpos[pos+2] - charpos[pos];
|
||||||
|
dstrect.x = x - charpos[pos+1] + charpos[pos];
|
||||||
|
|
||||||
|
SDL_BlitSurface(surface, &srcrect, s, &dstrect);
|
||||||
|
|
||||||
|
x += charpos[pos+2] - charpos[pos+1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned SFontPlus::getTextWidth(const std::string &text) {
|
||||||
|
std::string::size_type pos;
|
||||||
|
int width = 0;
|
||||||
|
|
||||||
|
for(unsigned x=0; x<text.length(); x++) {
|
||||||
|
//Utf8 characters
|
||||||
|
if (utf8Code(text[x]) && x+1<text.length()) {
|
||||||
|
pos = characters.find(text.substr(x,2));
|
||||||
|
x++;
|
||||||
|
} else
|
||||||
|
pos = characters.find(text[x]);
|
||||||
|
if (pos == std::string::npos) {
|
||||||
|
width += charpos[2]-charpos[1];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos *= 2;
|
||||||
|
width += charpos[pos+2] - charpos[pos+1];
|
||||||
|
}
|
||||||
|
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned SFontPlus::getHeight() {
|
||||||
|
return surface->h - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned SFontPlus::getLineHeight() {
|
||||||
|
return lineHeight;
|
||||||
|
}
|
||||||
|
|
||||||
ASFont::ASFont(SDL_Surface* font) {
|
ASFont::ASFont(SDL_Surface* font) {
|
||||||
this->font.initFont(font);
|
this->font.initFont(font);
|
||||||
halfHeight = getHeight()/2;
|
halfHeight = getHeight()/2;
|
||||||
|
38
src/asfont.h
38
src/asfont.h
@ -1,16 +1,46 @@
|
|||||||
//Advanced SFont by Massimiliano Torromeo (cpp wrapper around SFont)
|
// Based on SFont by Karl Bartel.
|
||||||
|
// Adapted to C++ by Massimiliano Torromeo.
|
||||||
|
// Refactored by Maarten ter Huurne and several others (see git log).
|
||||||
|
// License: GPL version 2 or later.
|
||||||
|
|
||||||
#ifndef ASFONT_H
|
#ifndef ASFONT_H
|
||||||
#define ASFONT_H
|
#define ASFONT_H
|
||||||
|
|
||||||
#include "sfontplus.h"
|
#include <SDL.h>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
struct SDL_Surface;
|
|
||||||
class Surface;
|
class Surface;
|
||||||
|
|
||||||
|
#define SFONTPLUS_CHARSET "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~¡¿ÀÁÈÉÌÍÒÓÙÚÝÄËÏÖÜŸÂÊÎÔÛÅÃÕÑÆÇČĎĚĽĹŇÔŘŔŠŤŮŽàáèéìíòóùúýäëïöüÿâêîôûåãõñæçčďěľĺňôřŕšťžůðßÐÞþАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюяØøąćęłńśżźĄĆĘŁŃŚŻŹ"
|
||||||
|
|
||||||
|
class SFontPlus {
|
||||||
|
private:
|
||||||
|
Uint32 getPixel(Sint32 x, Sint32 y);
|
||||||
|
|
||||||
|
SDL_Surface *surface;
|
||||||
|
std::vector<unsigned> charpos;
|
||||||
|
std::string characters;
|
||||||
|
unsigned height, lineHeight;
|
||||||
|
|
||||||
|
public:
|
||||||
|
SFontPlus();
|
||||||
|
SFontPlus(SDL_Surface *font);
|
||||||
|
SFontPlus(const std::string &font);
|
||||||
|
~SFontPlus();
|
||||||
|
|
||||||
|
bool utf8Code(unsigned char c);
|
||||||
|
|
||||||
|
void initFont(SDL_Surface *font, const std::string &characters = SFONTPLUS_CHARSET);
|
||||||
|
void initFont(const std::string &font, const std::string &characters = SFONTPLUS_CHARSET);
|
||||||
|
void freeFont();
|
||||||
|
|
||||||
|
void write(SDL_Surface *s, const std::string &text, int x, int y);
|
||||||
|
|
||||||
|
unsigned getTextWidth(const std::string &text);
|
||||||
|
unsigned getHeight();
|
||||||
|
unsigned getLineHeight();
|
||||||
|
};
|
||||||
|
|
||||||
class ASFont {
|
class ASFont {
|
||||||
public:
|
public:
|
||||||
|
@ -48,7 +48,6 @@
|
|||||||
#include "linkaction.h"
|
#include "linkaction.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "asfont.h"
|
#include "asfont.h"
|
||||||
#include "sfontplus.h"
|
|
||||||
#include "surface.h"
|
#include "surface.h"
|
||||||
#include "filedialog.h"
|
#include "filedialog.h"
|
||||||
#include "gmenu2x.h"
|
#include "gmenu2x.h"
|
||||||
|
@ -1,192 +0,0 @@
|
|||||||
#include "sfontplus.h"
|
|
||||||
#include "imageio.h"
|
|
||||||
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
Uint32 SFontPlus::getPixel(Sint32 x, Sint32 y) {
|
|
||||||
assert(x>=0);
|
|
||||||
assert(x<surface->w);
|
|
||||||
assert(y>=0);
|
|
||||||
assert(y<surface->h);
|
|
||||||
|
|
||||||
Uint32 Bpp = surface->format->BytesPerPixel;
|
|
||||||
|
|
||||||
// Get the pixel
|
|
||||||
switch(Bpp) {
|
|
||||||
case 1:
|
|
||||||
return *((Uint8 *)surface->pixels + y * surface->pitch + x);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
return *((Uint16 *)surface->pixels + y * surface->pitch/2 + x);
|
|
||||||
break;
|
|
||||||
case 3: { // Format/endian independent
|
|
||||||
Uint8 *bits = ((Uint8 *)surface->pixels)+y*surface->pitch+x*Bpp;
|
|
||||||
Uint8 r, g, b;
|
|
||||||
r = *((bits)+surface->format->Rshift/8);
|
|
||||||
g = *((bits)+surface->format->Gshift/8);
|
|
||||||
b = *((bits)+surface->format->Bshift/8);
|
|
||||||
return SDL_MapRGB(surface->format, r, g, b);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
return *((Uint32 *)surface->pixels + y * surface->pitch/4 + x);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
SFontPlus::SFontPlus() {
|
|
||||||
surface = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
SFontPlus::SFontPlus(SDL_Surface* font) {
|
|
||||||
surface = NULL;
|
|
||||||
initFont(font);
|
|
||||||
}
|
|
||||||
|
|
||||||
SFontPlus::SFontPlus(const std::string &font) {
|
|
||||||
surface = NULL;
|
|
||||||
initFont(font);
|
|
||||||
}
|
|
||||||
|
|
||||||
SFontPlus::~SFontPlus() {
|
|
||||||
freeFont();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SFontPlus::utf8Code(unsigned char c) {
|
|
||||||
return (c>=194 && c<=198) || c==208 || c==209;
|
|
||||||
//return c>=194;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SFontPlus::initFont(const std::string &font, const std::string &characters) {
|
|
||||||
SDL_Surface *buf = loadPNG(font);
|
|
||||||
if (buf!=NULL) {
|
|
||||||
initFont( SDL_DisplayFormatAlpha(buf), characters );
|
|
||||||
SDL_FreeSurface(buf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SFontPlus::initFont(SDL_Surface *font, const std::string &characters) {
|
|
||||||
freeFont();
|
|
||||||
this->characters = characters;
|
|
||||||
if (font==NULL) return;
|
|
||||||
surface = font;
|
|
||||||
Uint32 pink = SDL_MapRGB(surface->format, 255,0,255);
|
|
||||||
#ifdef DEBUG
|
|
||||||
bool utf8 = false;
|
|
||||||
for (unsigned x=0; x<characters.length(); x++) {
|
|
||||||
if (!utf8) utf8 = (unsigned char)characters[x]>128;
|
|
||||||
if (utf8) DEBUG("%d\n", (unsigned char)characters[x]);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned c = 0;
|
|
||||||
|
|
||||||
SDL_LockSurface(surface);
|
|
||||||
for (unsigned x=0; x<(unsigned)surface->w && c<characters.length(); x++) {
|
|
||||||
if (getPixel(x,0) == pink) {
|
|
||||||
unsigned startx = x;
|
|
||||||
charpos.push_back(x);
|
|
||||||
|
|
||||||
x++;
|
|
||||||
while (x<(unsigned)surface->w && getPixel(x,0) == pink) x++;
|
|
||||||
charpos.push_back(x);
|
|
||||||
|
|
||||||
//utf8 characters
|
|
||||||
if (c>0 && utf8Code(characters[c-1])) {
|
|
||||||
charpos.push_back(startx);
|
|
||||||
charpos.push_back(x);
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SDL_UnlockSurface(surface);
|
|
||||||
Uint32 colKey = getPixel(0,surface->h-1);
|
|
||||||
SDL_SetColorKey(surface, SDL_SRCCOLORKEY, colKey);
|
|
||||||
std::string::size_type pos = characters.find("0")*2;
|
|
||||||
SDL_Rect srcrect = {charpos[pos], 1, charpos[pos+2] - charpos[pos], surface->h - 1};
|
|
||||||
unsigned y = srcrect.h;
|
|
||||||
bool nonKeyFound = false;
|
|
||||||
while (y-- > 0 && !nonKeyFound) {
|
|
||||||
unsigned x = srcrect.w;
|
|
||||||
while (x-- > 0 && !nonKeyFound)
|
|
||||||
nonKeyFound = getPixel(x+srcrect.x,y+srcrect.y) != colKey;
|
|
||||||
}
|
|
||||||
lineHeight = y+1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SFontPlus::freeFont() {
|
|
||||||
if (surface!=NULL) {
|
|
||||||
SDL_FreeSurface(surface);
|
|
||||||
surface = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SFontPlus::write(SDL_Surface *s, const std::string &text, int x, int y) {
|
|
||||||
if (text.empty()) return;
|
|
||||||
|
|
||||||
std::string::size_type pos;
|
|
||||||
SDL_Rect srcrect, dstrect;
|
|
||||||
|
|
||||||
// these values won't change in the loop
|
|
||||||
srcrect.y = 1;
|
|
||||||
dstrect.y = y;
|
|
||||||
srcrect.h = dstrect.h = surface->h-1;
|
|
||||||
|
|
||||||
for(unsigned i=0; i<text.length() && x<surface->w; i++) {
|
|
||||||
//Utf8 characters
|
|
||||||
if (utf8Code(text[i]) && i+1<text.length()) {
|
|
||||||
pos = characters.find(text.substr(i,2));
|
|
||||||
i++;
|
|
||||||
} else
|
|
||||||
pos = characters.find(text[i]);
|
|
||||||
if (pos == std::string::npos) {
|
|
||||||
x += charpos[2]-charpos[1];
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
pos *= 2;
|
|
||||||
|
|
||||||
srcrect.x = charpos[pos];
|
|
||||||
srcrect.w = charpos[pos+2] - charpos[pos];
|
|
||||||
dstrect.x = x - charpos[pos+1] + charpos[pos];
|
|
||||||
|
|
||||||
SDL_BlitSurface(surface, &srcrect, s, &dstrect);
|
|
||||||
|
|
||||||
x += charpos[pos+2] - charpos[pos+1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned SFontPlus::getTextWidth(const std::string &text) {
|
|
||||||
std::string::size_type pos;
|
|
||||||
int width = 0;
|
|
||||||
|
|
||||||
for(unsigned x=0; x<text.length(); x++) {
|
|
||||||
//Utf8 characters
|
|
||||||
if (utf8Code(text[x]) && x+1<text.length()) {
|
|
||||||
pos = characters.find(text.substr(x,2));
|
|
||||||
x++;
|
|
||||||
} else
|
|
||||||
pos = characters.find(text[x]);
|
|
||||||
if (pos == std::string::npos) {
|
|
||||||
width += charpos[2]-charpos[1];
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
pos *= 2;
|
|
||||||
width += charpos[pos+2] - charpos[pos+1];
|
|
||||||
}
|
|
||||||
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned SFontPlus::getHeight() {
|
|
||||||
return surface->h - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned SFontPlus::getLineHeight() {
|
|
||||||
return lineHeight;
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
#ifndef SFONTPLUS_H
|
|
||||||
#define SFONTPLUS_H
|
|
||||||
|
|
||||||
#include <SDL.h>
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#define SFONTPLUS_CHARSET "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~¡¿ÀÁÈÉÌÍÒÓÙÚÝÄËÏÖÜŸÂÊÎÔÛÅÃÕÑÆÇČĎĚĽĹŇÔŘŔŠŤŮŽàáèéìíòóùúýäëïöüÿâêîôûåãõñæçčďěľĺňôřŕšťžůðßÐÞþАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюяØøąćęłńśżźĄĆĘŁŃŚŻŹ"
|
|
||||||
|
|
||||||
class SFontPlus {
|
|
||||||
private:
|
|
||||||
Uint32 getPixel(Sint32 x, Sint32 y);
|
|
||||||
|
|
||||||
SDL_Surface *surface;
|
|
||||||
std::vector<unsigned> charpos;
|
|
||||||
std::string characters;
|
|
||||||
unsigned height, lineHeight;
|
|
||||||
|
|
||||||
public:
|
|
||||||
SFontPlus();
|
|
||||||
SFontPlus(SDL_Surface *font);
|
|
||||||
SFontPlus(const std::string &font);
|
|
||||||
~SFontPlus();
|
|
||||||
|
|
||||||
bool utf8Code(unsigned char c);
|
|
||||||
|
|
||||||
void initFont(SDL_Surface *font, const std::string &characters = SFONTPLUS_CHARSET);
|
|
||||||
void initFont(const std::string &font, const std::string &characters = SFONTPLUS_CHARSET);
|
|
||||||
void freeFont();
|
|
||||||
|
|
||||||
void write(SDL_Surface *s, const std::string &text, int x, int y);
|
|
||||||
|
|
||||||
unsigned getTextWidth(const std::string &text);
|
|
||||||
unsigned getHeight();
|
|
||||||
unsigned getLineHeight();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* SFONTPLUS_H */
|
|
Loading…
Reference in New Issue
Block a user