diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2008-07-08 20:15:56 +0000 |
|---|---|---|
| committer | johanengelen <johanengelen@users.sourceforge.net> | 2008-07-08 20:15:56 +0000 |
| commit | eaf1a77f4ccba361c6988c4e85d630fb143510db (patch) | |
| tree | 0a6d4d52d278ff27e0ee9daa9ea28027203666de /src/libnrtype | |
| parent | add MakePathVector to livarot (diff) | |
| download | inkscape-eaf1a77f4ccba361c6988c4e85d630fb143510db.tar.gz inkscape-eaf1a77f4ccba361c6988c4e85d630fb143510db.zip | |
add 2geom pathvector to glyph font-glyph
(bzr r6233)
Diffstat (limited to 'src/libnrtype')
| -rw-r--r-- | src/libnrtype/FontInstance.cpp | 22 | ||||
| -rw-r--r-- | src/libnrtype/font-glyph.h | 2 | ||||
| -rw-r--r-- | src/libnrtype/font-instance.h | 5 |
3 files changed, 26 insertions, 3 deletions
diff --git a/src/libnrtype/FontInstance.cpp b/src/libnrtype/FontInstance.cpp index 840cff4a1..9504a9713 100644 --- a/src/libnrtype/FontInstance.cpp +++ b/src/libnrtype/FontInstance.cpp @@ -14,7 +14,7 @@ #include <libnr/nr-rect.h> #include <libnrtype/font-glyph.h> #include <libnrtype/font-instance.h> - +#include <2geom/pathvector.h> #include <livarot/Path.h> #include "RasterFont.h" @@ -179,6 +179,7 @@ font_instance::~font_instance(void) for (int i=0;i<nbGlyph;i++) { if ( glyphs[i].outline ) delete glyphs[i].outline; if ( glyphs[i].artbpath ) free(glyphs[i].artbpath); + if ( glyphs[i].pathvector ) delete glyphs[i].pathvector; } if ( glyphs ) free(glyphs); nbGlyph=maxGlyph=0; @@ -430,6 +431,7 @@ void font_instance::LoadGlyph(int glyph_id) font_glyph n_g; n_g.outline=NULL; n_g.artbpath=NULL; + n_g.pathvector=NULL; n_g.bbox[0]=n_g.bbox[1]=n_g.bbox[2]=n_g.bbox[3]=0; bool doAdd=false; @@ -557,6 +559,7 @@ void font_instance::LoadGlyph(int glyph_id) if ( n_g.outline ) { n_g.outline->FastBBox(n_g.bbox[0],n_g.bbox[1],n_g.bbox[2],n_g.bbox[3]); n_g.artbpath=n_g.outline->MakeArtBPath(); + n_g.pathvector=n_g.outline->MakePathVector(); } glyphs[nbGlyph]=n_g; id_to_no[glyph_id]=nbGlyph; @@ -675,6 +678,23 @@ void* font_instance::ArtBPath(int glyph_id) return glyphs[no].artbpath; } +Geom::PathVector* font_instance::PathVector(int glyph_id) +{ + int no = -1; + if ( id_to_no.find(glyph_id) == id_to_no.end() ) { + LoadGlyph(glyph_id); + if ( id_to_no.find(glyph_id) == id_to_no.end() ) { + // didn't load + } else { + no = id_to_no[glyph_id]; + } + } else { + no = id_to_no[glyph_id]; + } + if ( no < 0 ) return NULL; + return glyphs[no].pathvector; +} + double font_instance::Advance(int glyph_id,bool vertical) { int no=-1; diff --git a/src/libnrtype/font-glyph.h b/src/libnrtype/font-glyph.h index c79888c12..11e0206b5 100644 --- a/src/libnrtype/font-glyph.h +++ b/src/libnrtype/font-glyph.h @@ -3,6 +3,7 @@ #include <libnrtype/nrtype-forward.h> #include <livarot/livarot-forward.h> +#include <2geom/forward.h> // the info for a glyph in a font. it's totally resolution- and fontsize-independent struct font_glyph { @@ -12,6 +13,7 @@ struct font_glyph { // as the fonts sometimes contain Path* outline; // outline as a livarot Path void* artbpath; // outline as a artbpath, for text->curve stuff (should be unified with livarot) + Geom::PathVector* pathvector; // outline as 2geom pathvector, for text->curve stuff (should be unified with livarot) }; diff --git a/src/libnrtype/font-instance.h b/src/libnrtype/font-instance.h index 22dd829ae..9fb33e470 100644 --- a/src/libnrtype/font-instance.h +++ b/src/libnrtype/font-instance.h @@ -71,8 +71,9 @@ public: // queries the outline of the glyph (in livarot Path form), and copies it into copyInto instead // of allocating a new Path if copyInto != NULL void* ArtBPath(int glyph_id); - // returns the artbpath for this glyph. no refcounting needed, it's deallocated when the - // font_instance dies + // returns the artbpath for this glyph. no refcounting needed, it's deallocated when the font_instance dies + Geom::PathVector* PathVector(int glyph_id); + // returns the 2geom-type pathvector for this glyph. no refcounting needed, it's deallocated when the font_instance dies double Advance(int glyph_id, bool vertical); // nominal advance of the font. bool FontMetrics(double &ascent, double &descent, double &leading); |
