#include <lib/base/init.h>
#include <lib/base/init_num.h>
-//#define HAVE_FRIBIDI
+#define HAVE_FRIBIDI
// until we have it in the cdk
#ifdef HAVE_FRIBIDI
return 0;
}
int linegap=current_face->size->metrics.height-(current_face->size->metrics.ascender+current_face->size->metrics.descender);
- float height=(current_face->size->metrics.ascender+current_face->size->metrics.descender+linegap/2.0)/64;
- delete fnt;
+ float height=(current_face->size->metrics.ascender+current_face->size->metrics.descender+linegap)/64.0;
return height;
}
-
fontRenderClass::~fontRenderClass()
{
singleLock s(ftlock);
ng.bbox.setWidth( glyph->width );
ng.bbox.setHeight( glyph->height );
- xadvance+=kern;
+ xadvance += kern;
+ ng.bbox.setWidth(xadvance);
- ng.x=cursor.x()+kern;
- ng.y=cursor.y();
- ng.w=xadvance;
- ng.font=current_font;
- ng.glyph_index=glyphIndex;
- ng.flags=flags;
+ ng.x = cursor.x()+kern;
+ ng.y = cursor.y();
+ ng.w = xadvance;
+ ng.font = current_font;
+ ng.glyph_index = glyphIndex;
+ ng.flags = flags;
glyphs.push_back(ng);
- cursor+=ePoint(xadvance, 0);
- previous=glyphIndex;
+ cursor += ePoint(xadvance, 0);
+ previous = glyphIndex;
return 0;
}
void eTextPara::calc_bbox()
{
- boundBox.setLeft( 32000 );
- boundBox.setTop( 32000 );
- boundBox.setRight( -32000 ); // for each glyph image, compute its bounding box, translate it,
- boundBox.setBottom( -32000 );
- // and grow the string bbox
+ if (!glyphs.size())
+ {
+ bboxValid = 0;
+ boundBox = eRect();
+ return;
+ }
+
+ bboxValid = 1;
- for ( glyphString::iterator i(glyphs.begin()); i != glyphs.end(); ++i)
+ glyphString::iterator i(glyphs.begin());
+
+ boundBox = i->bbox;
+ ++i;
+
+ for (; i != glyphs.end(); ++i)
{
if ( i->flags & GS_ISSPACE )
continue;
boundBox.setBottom( i->bbox.bottom() );
}
// eDebug("boundBox left = %i, top = %i, right = %i, bottom = %i", boundBox.left(), boundBox.top(), boundBox.right(), boundBox.bottom() );
- if ( glyphs.size() )
- bboxValid=1;
}
void eTextPara::newLine(int flags)
cursor.setX(left);
previous=0;
int linegap=current_face->size->metrics.height-(current_face->size->metrics.ascender+current_face->size->metrics.descender);
- cursor+=ePoint(0, (current_face->size->metrics.ascender+current_face->size->metrics.descender+linegap*1/2)>>6);
+ cursor+=ePoint(0, (current_face->size->metrics.ascender+current_face->size->metrics.descender+linegap)>>6);
if (maximum.height()<cursor.y())
maximum.setHeight(cursor.y());
previous=0;
}
std::string eTextPara::replacement_facename;
+std::set<int> eTextPara::forced_replaces;
void eTextPara::setFont(Font *fnt, Font *replacement)
{
}
if (isprintable)
{
- FT_UInt index;
-
- index=(rflags&RS_DIRECT)? *i : FT_Get_Char_Index(current_face, *i);
+ FT_UInt index = 0;
+
+ if (forced_replaces.find(*i) == forced_replaces.end())
+ index=(rflags&RS_DIRECT)? *i : FT_Get_Char_Index(current_face, *i);
if (!index)
{