char_height(),
shadowsize(shadowsize_),
border(0),
+ rtl(false),
glyphs(65536)
{
for(unsigned int i=0; i<65536;i++) glyphs[i].surface_idx = -1;
// scan for prefix-filename in addons search path
char **rc = PHYSFS_enumerateFiles(fontdir.c_str());
for (char **i = rc; *i != NULL; i++) {
- std::string filename(*i);
- if( filename.rfind(fontname) != std::string::npos ) {
- loadFontFile(fontdir + filename);
+ std::string filename_(*i);
+ if( filename_.rfind(fontname) != std::string::npos ) {
+ loadFontFile(fontdir + filename_);
}
}
PHYSFS_freeList(rc);
}
config_l->get("glyph-border", border);
+ config_l->get("rtl", rtl);
lisp::ListIterator iter(config_l);
while(iter.next()) {
const std::string &glyphimage,
const std::string &shadowimage,
const std::vector<std::string> &chars,
- GlyphWidth glyph_width,
+ GlyphWidth glyph_width_,
int char_width
)
{
SDL_Surface *surface = NULL;
- if( glyph_width == VARIABLE ) {
+ if( glyph_width_ == VARIABLE ) {
//this does not work:
// surface = ((SDL::Texture *)glyph_surface.get_texture())->get_texture();
surface = IMG_Load_RW(get_physfs_SDLRWops("images/engine/fonts/"+glyphimage), 1);
Glyph glyph;
glyph.surface_idx = surface_idx;
- if( glyph_width == FIXED )
+ if( glyph_width_ == FIXED || isdigit(*chr) )
{
glyph.rect = Rectf(x, y, x + char_width, y + char_height);
glyph.offset = Vector(0, 0);
DrawingEffect drawing_effect, Color color, float alpha) const
{
if(shadowsize > 0)
- draw_chars(renderer, false, text,
+ draw_chars(renderer, false, rtl ? std::string(text.rbegin(), text.rend()) : text,
pos + Vector(shadowsize, shadowsize), drawing_effect, Color(1,1,1), alpha);
- draw_chars(renderer, true, text, pos, drawing_effect, color, alpha);
+ draw_chars(renderer, true, rtl ? std::string(text.rbegin(), text.rend()) : text, pos, drawing_effect, color, alpha);
}
void
request.alpha = alpha;
SurfacePartRequest surfacepartrequest;
- surfacepartrequest.size = glyph.rect.p2 - glyph.rect.p1;
- surfacepartrequest.source = glyph.rect.p1;
+ surfacepartrequest.srcrect = glyph.rect;
+ surfacepartrequest.dstsize = glyph.rect.get_size();
surfacepartrequest.surface = notshadow ? glyph_surfaces[glyph.surface_idx].get() : shadow_surfaces[glyph.surface_idx].get();
request.request_data = &surfacepartrequest;