Index: dvi/dvi.h
===================================================================
RCS file: /usr/local/cvsroot/tkdvi/dvi/dvi.h,v
retrieving revision 1.7
diff -u -r1.7 dvi.h
--- dvi/dvi.h 2000/06/29 10:54:42 1.7
+++ dvi/dvi.h 2000/07/14 10:21:47
@@ -228,18 +228,24 @@
S32 *tfmWidthPtr,
S32 *pixelWidthPtr));
typedef int (Dvi_FontCloseProc) _ANSI_ARGS_((struct Dvi_Font *dviFont));
+typedef int (Dvi_FontIterateCallbackProc)
+ _ANSI_ARGS_((struct Dvi_Font *dviFont, S32 i, Dvi_Glyph *glyphPtr));
+typedef int (Dvi_FontIterateProc) _ANSI_ARGS_((struct Dvi_Font *dviFont,
+ Dvi_FontIterateCallbackProc *));
typedef struct Dvi_FontTypeDesc {
char *name;
Dvi_FontLoadProc *loadProc;
Dvi_FontGlyphProc *glyphProc;
Dvi_FontCloseProc *closeProc;
+ Dvi_FontIterateProc *iterateProc;
} Dvi_FontTypeDesc;
EXTERN int Dvi_CreateFontType _ANSI_ARGS_((Dvi_FontType type, char *name,
Dvi_FontLoadProc *loadProc,
Dvi_FontGlyphProc *glyphProc,
- Dvi_FontCloseProc *closeProc));
+ Dvi_FontCloseProc *closeProc,
+ Dvi_FontIterateProc *iterateProc));
EXTERN int Dvi_CreateFontType_PK _ANSI_ARGS_((void));
EXTERN int Dvi_CreateFontType_VF _ANSI_ARGS_((void));
EXTERN int Dvi_CreateFontType_TFM _ANSI_ARGS_((void));
@@ -282,6 +288,8 @@
S32 character,
S32 *tfmWidthPtr,
S32 *pixelWidthPtr));
+EXTERN int Dvi_FontIterate _ANSI_ARGS_((Dvi_FontIterateCallbackProc *));
+
#ifdef DVI_DEBUG
EXTERN Tcl_Obj * Dvi_FontDump _ANSI_ARGS_((Tcl_Interp *interp,
Dvi_Font *dviFont));
Index: dvi/font.c
===================================================================
RCS file: /usr/local/cvsroot/tkdvi/dvi/font.c,v
retrieving revision 1.4
diff -u -r1.4 font.c
--- dvi/font.c 2000/06/29 11:01:38 1.4
+++ dvi/font.c 2000/07/14 10:21:47
@@ -57,17 +57,20 @@
*/
int
-Dvi_CreateFontType (type, name, loadProc, glyphProc, closeProc)
+Dvi_CreateFontType (type, name, loadProc, glyphProc, closeProc,
+ iterateProc)
Dvi_FontType type;
char *name;
Dvi_FontLoadProc *loadProc;
Dvi_FontGlyphProc *glyphProc;
Dvi_FontCloseProc *closeProc;
+ Dvi_FontIterateProc *iterateProc;
{
fontTypes[type].name = name;
fontTypes[type].loadProc = loadProc;
fontTypes[type].glyphProc = glyphProc;
fontTypes[type].closeProc = closeProc;
+ fontTypes[type].iterateProc = iterateProc;
fontTypeCount++;
return TCL_OK;
@@ -405,6 +408,26 @@
fontHeadPtr = headPtr;
return headPtr;
+}
+
+int
+Dvi_FontIterate(callbackProc)
+ Dvi_FontIterateCallbackProc *callbackProc;
+{
+ FontHead *headPtr;
+ Dvi_Font *fontPtr;
+
+ for (headPtr = fontHeadPtr; headPtr != 0; headPtr = headPtr->nextPtr) {
+ for (fontPtr = headPtr->fonts; fontPtr; fontPtr = fontPtr->nextPtr) {
+ Dvi_FontIterateProc *iterateProc
+ = fontTypes[fontPtr->type].iterateProc;
+
+ if (iterateProc != 0) {
+ (* iterateProc)(fontPtr, callbackProc);
+ }
+ }
+ }
+ return 1;
}
/*
Index: dvi/fontPK.c
===================================================================
RCS file: /usr/local/cvsroot/tkdvi/dvi/fontPK.c,v
retrieving revision 1.3
diff -u -r1.3 fontPK.c
--- dvi/fontPK.c 2000/05/18 12:50:32 1.3
+++ dvi/fontPK.c 2000/07/14 10:21:47
@@ -62,6 +62,8 @@
static Dvi_Glyph *PkRunCount _ANSI_ARGS_((U8 *codePtr));
static int PkClose _ANSI_ARGS_((Dvi_Font *dviFont));
+static int PkIterate _ANSI_ARGS_((Dvi_Font *dviFont,
+ Dvi_FontIterateCallbackProc *callbackProc));
/*
* ------------------------------------------------------------------------
@@ -83,7 +85,8 @@
int
Dvi_CreateFontType_PK ()
{
- return Dvi_CreateFontType(dvi_font_pk, "pk", PkLoad, PkGlyph, PkClose);
+ return Dvi_CreateFontType(dvi_font_pk, "pk", PkLoad, PkGlyph, PkClose,
+ PkIterate);
}
static int
@@ -622,4 +625,27 @@
}
ckfree((char *)charInfoPtr);
return TCL_OK;
+}
+
+static int
+PkIterate(dviFont, callback)
+ Dvi_Font *dviFont;
+ Dvi_FontIterateCallbackProc callback;
+{
+ PkInfo *infoPtr = (PkInfo *)dviFont->fontData;
+ PkCharInfo *charInfoPtr;
+ S32 i;
+
+ if (infoPtr == (PkInfo *)0) {
+ return 0;
+ }
+
+ charInfoPtr = infoPtr->charInfoPtr;
+ for (i = infoPtr->minChar; i <= infoPtr->maxChar; i++) {
+ if (charInfoPtr[i - infoPtr->minChar].glyphPtr) {
+ (* callback)(dviFont, i,
+ charInfoPtr[i - infoPtr->minChar].glyphPtr);
+ }
+ }
+ return 1;
}
Index: dvi/image.c
===================================================================
RCS file: /usr/local/cvsroot/tkdvi/dvi/image.c,v
retrieving revision 1.12
diff -u -r1.12 image.c
--- dvi/image.c 2000/07/07 08:00:36 1.12
+++ dvi/image.c 2000/07/14 10:21:47
@@ -263,6 +263,8 @@
static int RenderFontDef _ANSI_ARGS_((ClientData, Dvi_Interp *,
Dvi_FontList **, S32, U32, U32,
U32, size_t, char *, Dvi_FontDefMode));
+
+static int ReleaseShrunkenGlyph _ANSI_ARGS_((Dvi_Font *, S32, Dvi_Glyph *));
/*
* This is a fixed version of the Tk_InitImageArgs function from the
@@ -768,6 +770,17 @@
return TCL_OK;
}
+static int
+ReleaseShrunkenGlyph (junk0, junk1, glyphPtr)
+ Dvi_Font *junk0;
+ S32 junk1;
+ Dvi_Glyph *glyphPtr;
+{
+ XDestroyImage((XImage *)(glyphPtr->shrinkGlyphPtr));
+ glyphPtr->shrinkGlyphPtr = 0;
+ glyphPtr->shrink = 0;
+}
+
static ColorContext *
FindColorContext (instancePtr, fgUid, bgUid)
DviInstance *instancePtr;
@@ -837,6 +850,8 @@
colorContextPtr->nextPtr = instancePtr->colorCachePtr;
instancePtr->colorCachePtr = colorContextPtr;
+
+ Dvi_FontIterate(ReleaseShrunkenGlyph);
return colorContextPtr;
}
Index: lib/browser.tcl
===================================================================
RCS file: /usr/local/cvsroot/tkdvi/lib/browser.tcl,v
retrieving revision 1.12
diff -u -r1.12 browser.tcl
--- lib/browser.tcl 2000/07/07 09:02:32 1.12
+++ lib/browser.tcl 2000/07/14 10:21:47
@@ -31,6 +31,7 @@
measureunit {MeasureUnit cm}
sourcespecials {SourceSpecials 0}
freehandcolor {FreehandColor red}
+ gamma {Gamma 1.2}
}
foreach {option cv} [array get Options] {
@@ -59,7 +60,10 @@
[namespace code [list Images $name -1]]
trace variable Configure($name-shrink) w \
[namespace code [list Images $name -1]]
-
+
+ trace variable Configure($name-gamma) w \
+ [namespace code [list Images $name -1]]
+
trace variable Configure($name-titleformat) w \
[namespace code [list TitleFormat $name]]
@@ -378,6 +382,7 @@
set State($name-$key,i) [::image create dvi -file $State($name-code) \
-shrink $shrink -size $Configure($name-size) \
+ -gamma $Configure($name-gamma) \
-specialcommand \
[namespace code [list SpecialCmd $name $key %x %y %c %s]] \
-precommand [namespace code [list PreCmd $name $key %p]] \
@@ -1283,6 +1288,7 @@
set Dialog($name-defaultmode) [option get $name mode Mode]
set Dialog($name-measureunit) $Configure($name-measureunit)
+ set Dialog($name-gamma) $Configure($name-gamma)
label $p.layout-l -text {Default Display Mode: } -anchor e
eval OptionMenu $p.layout-m \
@@ -1298,6 +1304,14 @@
grid $p.unit-m -row $row -column 1 -sticky we -padx 2 -pady 2
incr row
+ label $p.gamma-l -text {Gamma value:} -anchor e
+ scale $p.gamma-s -orient horizontal -length 80 -resolution 0.1 \
+ -showvalue true -from 0 -to 5 -tickinterval 0 \
+ -variable tkdvi::browser::Dialog($name-gamma)
+ grid $p.gamma-l -row $row -column 0 -sticky e -ipadx 5 -ipady 5
+ grid $p.gamma-s -row $row -column 1 -sticky we -padx 2 -pady 2
+ incr row
+
frame $p.sep -relief sunken -borderwidth 1 -height 2
grid $p.sep -row $row -column 0 -columnspan 2 -sticky we
incr row
@@ -1319,6 +1333,7 @@
variable Dialog
set Configure($name-measureunit) $Dialog($name-measureunit)
+ set Configure($name-gamma) $Dialog($name-gamma)
option add *TkDVIBrowser.mode $Dialog($name-defaultmode) interactive
if {$quit} {