summaryrefslogtreecommitdiff
path: root/gtkui
diff options
context:
space:
mode:
authorpfaedit <pfaedit>2009-01-02 22:45:39 +0000
committerpfaedit <pfaedit>2009-01-02 22:45:39 +0000
commitbb74af3d16986c0c5a3f2ed9a0dd4f260ba36c14 (patch)
tree3e266530c76cb9ac6d7ccef73e15c5e0a8626770 /gtkui
parent1392a4abb18d60cb8546f1899bfaf38a254df5ce (diff)
Patch by Khaled Hosny to make the gtk ui of fontforge build again.
Diffstat (limited to 'gtkui')
-rw-r--r--gtkui/fontview.c63
-rw-r--r--gtkui/startgtk.c16
-rw-r--r--gtkui/viewsgtk.h2
-rw-r--r--gtkui/windowmenu.c2
4 files changed, 48 insertions, 35 deletions
diff --git a/gtkui/fontview.c b/gtkui/fontview.c
index bbd28c27..82c15745 100644
--- a/gtkui/fontview.c
+++ b/gtkui/fontview.c
@@ -180,8 +180,9 @@ void FVMarkHintsOutOfDate(SplineChar *sc) {
int i, j;
int pos;
FontView *fv;
+ int l = sc->layer_cnt;
- if ( sc->parent->onlybitmaps || sc->parent->multilayer || sc->parent->strokedfont || sc->parent->order2 )
+ if ( sc->parent->onlybitmaps || sc->parent->multilayer || sc->parent->strokedfont || sc->parent->layers[l].order2 )
return;
for ( fv = (FontView *) sc->parent->fv; fv!=NULL; fv=(FontView *) fv->b.nextsame ) {
if ( fv->b.sf!=sc->parent ) /* Can happen in CID fonts if char's parent is not currently active */
@@ -983,7 +984,7 @@ return;
if ( fpt!=NULL ) *fpt = '\0';
full = galloc(strlen(temp)+1+strlen(file)+1);
strcpy(full,temp); strcat(full,"/"); strcat(full,file);
- ViewPostscriptFont(full);
+ ViewPostscriptFont(full,0);
file = fpt+2;
free(full);
} while ( fpt!=NULL );
@@ -1355,7 +1356,8 @@ void FontViewMenu_SelectUnhintedGlyphs(GtkMenuItem *menuitem, gpointer user_data
int i, gid;
EncMap *map = fv->b.map;
SplineFont *sf = fv->b.sf;
- int order2 = sf->order2;
+ int l = sf->layer_cnt;
+ int order2 = sf->layers[l].order2;
for ( i=0; i< map->enccount; ++i )
fv->b.selected[i] = ( (gid=map->map[i])!=-1 && sf->glyphs[gid]!=NULL &&
@@ -1896,7 +1898,7 @@ static void FVShowSubFont(FontView *fv,SplineFont *new) {
FontViewReformatOne(&fv->b);
FVSetTitle( (FontViewBase *) &fv->b);
}
- newbdf = SplineFontPieceMeal(fv->b.sf,fv->filled->pixelsize,
+ newbdf = SplineFontPieceMeal(fv->b.sf,fv->b.active_layer,fv->filled->pixelsize,72,
(fv->antialias?pf_antialias:0)|(fv->bbsized?pf_bbsized:0)|
(use_freetype_to_rasterize_fv && !fv->b.sf->strokedfont && !fv->b.sf->multilayer?pf_ft_nohints:0),
NULL);
@@ -2152,7 +2154,7 @@ void FontViewMenu_PixelSize(GtkMenuItem *menuitem, gpointer user_data) {
if ( fvs==NULL )
break;
old = fvs->filled;
- new = SplineFontPieceMeal(fvs->b.sf,dspsize,
+ new = SplineFontPieceMeal(fvs->b.sf,fv->b.active_layer,dspsize,72,
(fvs->antialias?pf_antialias:0)|(fvs->bbsized?pf_bbsized:0)|
(use_freetype_to_rasterize_fv && !fvs->b.sf->strokedfont && !fvs->b.sf->multilayer?pf_ft_nohints:0),
NULL);
@@ -2367,8 +2369,10 @@ void FontViewMenu_EditTable(GtkMenuItem *menuitem, gpointer user_data) {
}
void FontViewMenu_PrivateToCvt(GtkMenuItem *menuitem, gpointer user_data) {
+#if 0
FontView *fv = FV_From_MI(menuitem);
CVT_ImportPrivate(fv->b.sf);
+#endif
}
void FontViewMenu_ClearInstrs(GtkMenuItem *menuitem, gpointer user_data) {
@@ -3245,10 +3249,10 @@ void FontViewMenu_ActivateBuild(GtkMenuItem *menuitem, gpointer user_data) {
sc = fv->b.sf->glyphs[gid];
if ( sc==NULL )
sc = SCBuildDummy(&dummy,fv->b.sf,fv->b.map,i);
- if ( SFIsSomethingBuildable(fv->b.sf,sc,true)) {
+ if ( SFIsSomethingBuildable(fv->b.sf,sc,fv->b.active_layer,true)) {
anybuildableaccents = anybuildable = true;
break;
- } else if ( SFIsSomethingBuildable(fv->b.sf,sc,false))
+ } else if ( SFIsSomethingBuildable(fv->b.sf,sc,fv->b.active_layer,false))
anybuildable = true;
}
@@ -3311,7 +3315,7 @@ void FontViewMenu_ActivateElement(GtkMenuItem *menuitem, gpointer user_data) {
sc = fv->b.sf->glyphs[gid];
if ( sc==NULL )
sc = SCBuildDummy(&dummy,fv->b.sf,fv->b.map,i);
- if ( SFIsSomethingBuildable(fv->b.sf,sc,false)) {
+ if ( SFIsSomethingBuildable(fv->b.sf,sc,fv->b.active_layer,false)) {
anybuildable = true;
break;
}
@@ -3352,39 +3356,40 @@ void FontViewMenu_ActivateHints(GtkMenuItem *menuitem, gpointer user_data) {
int anychars = FVAnyCharSelected(fv);
int anygid = anychars<0 ? -1 : fv->b.map->map[anychars];
int multilayer = fv->b.sf->multilayer;
+ int l = fv->b.sf->layer_cnt;
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "autohint1" ),
anygid!=-1 && !multilayer );
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "hint_subsitution_pts1" ),
- !fv->b.sf->order2 && anygid!=-1 && !multilayer );
+ !fv->b.sf->layers[l].order2 && anygid!=-1 && !multilayer );
if ( fv->b.sf->mm!=NULL && fv->b.sf->mm->apple )
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "hint_subsitution_pts1" ),
false);
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "auto_counter_hint1" ),
- !fv->b.sf->order2 && anygid!=-1 && !multilayer );
+ !fv->b.sf->layers[l].order2 && anygid!=-1 && !multilayer );
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "dont_autohint1" ),
- !fv->b.sf->order2 && anygid!=-1 && !multilayer );
+ !fv->b.sf->layers[l].order2 && anygid!=-1 && !multilayer );
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "autoinstr1" ),
- fv->b.sf->order2 && anygid!=-1 && !multilayer );
+ fv->b.sf->layers[l].order2 && anygid!=-1 && !multilayer );
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "edit_instructions1" ),
- fv->b.sf->order2 && anygid>=0 && !multilayer );
+ fv->b.sf->layers[l].order2 && anygid>=0 && !multilayer );
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "edit_fpgm1" ),
- fv->b.sf->order2 && !multilayer );
+ fv->b.sf->layers[l].order2 && !multilayer );
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "edit_prep1" ),
- fv->b.sf->order2 && !multilayer );
+ fv->b.sf->layers[l].order2 && !multilayer );
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "edit_cvt_1" ),
- fv->b.sf->order2 && !multilayer );
+ fv->b.sf->layers[l].order2 && !multilayer );
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "edit_maxp1" ),
- fv->b.sf->order2 && !multilayer );
+ fv->b.sf->layers[l].order2 && !multilayer );
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "private_to_cvt_1" ),
- fv->b.sf->order2 && !multilayer );
+ fv->b.sf->layers[l].order2 && !multilayer );
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "clear_hints1" ),
anygid!=-1 );
gtk_widget_set_sensitive(lookup_widget( GTK_WIDGET(menuitem), "clear_instructions1" ),
- fv->b.sf->order2 && anygid!=-1 );
+ fv->b.sf->layers[l].order2 && anygid!=-1 );
}
/* Builds up a menu containing all the anchor classes */
@@ -3794,7 +3799,7 @@ return( base_sc );
if ( feat_sc!=NULL )
return( feat_sc );
}
- feat_sc = SplineCharCreate();
+ feat_sc = SFSplineCharCreate(sf);
feat_sc->parent = sf;
feat_sc->unicodeenc = uni;
if ( uni!=-1 ) {
@@ -4051,13 +4056,14 @@ gboolean FontViewView_Expose(GtkWidget *widget, GdkEventExpose *event, gpointer
int styles, laststyles=0;
GdkPixbuf *rotated=NULL;
int em = fv->b.sf->ascent+fv->b.sf->descent;
- int yorg = fv->magnify*(fv->show->ascent-fv->b.sf->vertical_origin*fv->show->pixelsize/em);
+ int yorg = fv->magnify*(fv->show->ascent);
GdkRectangle r, full, box;
GdkGCValues values;
GdkGC *gc = fv->gc;
GdkColor col, *gdk_def_fg = &widget->style->fg[widget->state];
Color bg, def_fg = COLOR_CREATE( (gdk_def_fg->red>>8), (gdk_def_fg->green>>8), (gdk_def_fg->blue>>8));
uint32 clut[256];
+ int l = fv->b.sf->layer_cnt;
full.x = full.y = 0; full.width = full.height = 5000;
gdk_gc_get_values(gc,&values);
@@ -4229,13 +4235,13 @@ gboolean FontViewView_Expose(GtkWidget *widget, GdkEventExpose *event, gpointer
r.x,r.y, r.width,r.height);
gdk_gc_set_values(gc,&values, GDK_GC_FOREGROUND );
}
- if ( (!fv->b.sf->order2 && sc->changedsincelasthinted ) ||
- ( fv->b.sf->order2 && sc->layers[ly_fore].splines!=NULL &&
+ if ( (!fv->b.sf->layers[l].order2 && sc->changedsincelasthinted ) ||
+ ( fv->b.sf->layers[l].order2 && sc->layers[ly_fore].splines!=NULL &&
sc->ttf_instrs_len<=0 ) ||
- ( fv->b.sf->order2 && sc->instructions_out_of_date ) ) {
+ ( fv->b.sf->layers[l].order2 && sc->instructions_out_of_date ) ) {
GdkColor hintcol;
memset(&hintcol,0,sizeof(hintcol));
- if ( fv->b.sf->order2 && sc->instructions_out_of_date && sc->ttf_instrs_len>0 ) {
+ if ( fv->b.sf->layers[l].order2 && sc->instructions_out_of_date && sc->ttf_instrs_len>0 ) {
hintcol.red = 0xffff;
hintcol.pixel = 0xff0000;
} else {
@@ -5140,7 +5146,7 @@ return;
break;
old = fv->filled;
/* In CID fonts fv->b.sf may not be same as sf */
- new = SplineFontPieceMeal(fv->b.sf,fv->filled->pixelsize,
+ new = SplineFontPieceMeal(fv->b.sf,fv->b.active_layer,fv->filled->pixelsize,72,
(fv->antialias?pf_antialias:0)|(fv->bbsized?pf_bbsized:0)|
(use_freetype_to_rasterize_fv && !sf->strokedfont && !sf->multilayer?pf_ft_nohints:0),
NULL);
@@ -5171,7 +5177,8 @@ return;
}
for ( mvs=sf->metrics; mvs!=NULL; mvs=mvs->next ) if ( mvs->bdf==NULL ) {
BDFFontFree(mvs->show);
- mvs->show = SplineFontPieceMeal(sf,mvs->pixelsize,mvs->antialias?pf_antialias:0,NULL);
+ mvs->show = SplineFontPieceMeal(sf,mvs->layer,mvs->ptsize,mvs->dpi,
+ mvs->antialias?(pf_antialias|pf_ft_recontext):pf_ft_recontext,NULL);
gtk_widget_queue_draw(mvs->gw);
}
}
@@ -5311,7 +5318,7 @@ static FontView *FontView_Create(SplineFont *sf) {
fv->filled = ((FontView *) fv->b.nextsame)->filled;
bdf = ((FontView *) fv->b.nextsame)->show;
} else {
- bdf = SplineFontPieceMeal(fv->b.sf,sf->display_size<0?-sf->display_size:default_fv_font_size,
+ bdf = SplineFontPieceMeal(fv->b.sf,fv->b.active_layer,sf->display_size<0?-sf->display_size:default_fv_font_size,72,
(fv->antialias?pf_antialias:0)|(fv->bbsized?pf_bbsized:0)|
(use_freetype_to_rasterize_fv && !sf->strokedfont && !sf->multilayer?pf_ft_nohints:0),
NULL);
diff --git a/gtkui/startgtk.c b/gtkui/startgtk.c
index 1b166f31..d83933af 100644
--- a/gtkui/startgtk.c
+++ b/gtkui/startgtk.c
@@ -48,6 +48,7 @@ static void _dousage(void) {
printf( "\t-newkorean\t\t (creates a new korean font)\n" );
#endif
printf( "\t-recover none|auto|clean (control error recovery)\n" );
+ printf( "\t-allglyphs\t\t (load all glyphs in the 'glyf' table\n\t\t\t of a truetype collection)\n" );
printf( "\t-nosplash\t\t (no splash screen)\n" );
printf( "\t-display display-name\t (sets the X display)\n" );
printf( "\t-usage\t\t\t (displays this message, and exits)\n" );
@@ -100,7 +101,7 @@ static struct library_descriptor {
} libs[] = {
{
#ifdef PYTHON_LIB_NAME
- #PYTHON_LIB_NAME,
+ "lib" PYTHON_LIB_NAME,
#else
"libpython-", /* a bad name */
#endif
@@ -384,6 +385,7 @@ static int ParseArgs( gpointer data ) {
int recover = args->recover;
int any, i;
int next_recent = 0;
+ int openflags = 0;
/* Wait until the UI has started, otherwise people who don't have consoles*/
/* open won't get our error messages, and it's an important one */
@@ -413,7 +415,7 @@ static int ParseArgs( gpointer data ) {
#endif
} else if ( strcmp(pt,"-last")==0 ) {
if ( next_recent<RECENT_MAX && RecentFiles[next_recent]!=NULL )
- if ( ViewPostscriptFont(RecentFiles[next_recent++]))
+ if ( ViewPostscriptFont(RecentFiles[next_recent++],openflags))
any = 1;
} else if ( strcmp(pt,"-nosplash")==0 || strcmp(pt,"-recover=none")==0 ||
strcmp(pt,"-recover=clean")==0 || strcmp(pt,"-recover=auto")==0 ||
@@ -422,6 +424,8 @@ static int ParseArgs( gpointer data ) {
else if ( strcmp(pt,"-recover")==0 && i<argc-1 )
++i; /* As above, this is already done, but this one takes an */
/* argument, so skip that too */
+ else if ( strcmp(pt,"-allglyphs")==0 )
+ openflags |= of_all_glyphs_in_ttc;
else {
GFileGetAbsoluteName(argv[i],buffer,sizeof(buffer));
if ( GFileIsDir(buffer)) {
@@ -431,14 +435,14 @@ static int ParseArgs( gpointer data ) {
if ( GFileExists(fname)) {
/* It's probably a Unified Font Object directory */
free(fname);
- if ( ViewPostscriptFont(buffer) )
+ if ( ViewPostscriptFont(buffer,openflags) )
any = 1;
} else {
strcpy(fname,buffer); strcat(fname,"/font.props");
if ( GFileExists(fname)) {
/* It's probably a sf dir collection */
free(fname);
- if ( ViewPostscriptFont(buffer) )
+ if ( ViewPostscriptFont(buffer,openflags) )
any = 1;
} else {
free(fname);
@@ -449,12 +453,12 @@ static int ParseArgs( gpointer data ) {
}
fname = GetPostscriptFontName(buffer,false);
if ( fname!=NULL )
- ViewPostscriptFont(fname);
+ ViewPostscriptFont(fname,openflags);
any = 1; /* Even if we didn't get a font, don't bring up dlg again */
free(fname);
}
}
- } else if ( ViewPostscriptFont(buffer)!=0 )
+ } else if ( ViewPostscriptFont(buffer,openflags)!=0 )
any = 1;
}
}
diff --git a/gtkui/viewsgtk.h b/gtkui/viewsgtk.h
index f3233c3e..9a442e4f 100644
--- a/gtkui/viewsgtk.h
+++ b/gtkui/viewsgtk.h
@@ -300,6 +300,8 @@ typedef struct metricsview {
BasePoint ap_start;
int cursor;
int scale_index;
+ int layer;
+ int ptsize, dpi;
struct lookup_subtable *cur_subtable;
/*GTextInfo *scriptlangs;*/
} MetricsView;
diff --git a/gtkui/windowmenu.c b/gtkui/windowmenu.c
index eb0fd2d3..5f03c485 100644
--- a/gtkui/windowmenu.c
+++ b/gtkui/windowmenu.c
@@ -95,7 +95,7 @@ return;
static void RecentSelect(GtkMenuItem *menuitem, gpointer user_data) {
- ViewPostscriptFont((char *) (user_data));
+ ViewPostscriptFont((char *) (user_data),0);
}
void RecentMenuBuild(GtkMenuItem *menuitem, gpointer user_data) {