summaryrefslogtreecommitdiff
path: root/pxl
diff options
context:
space:
mode:
Diffstat (limited to 'pxl')
-rw-r--r--pxl/pxl.mak2
-rw-r--r--pxl/pxpthr.c48
2 files changed, 25 insertions, 25 deletions
diff --git a/pxl/pxl.mak b/pxl/pxl.mak
index 7f718aef5..3f61145a9 100644
--- a/pxl/pxl.mak
+++ b/pxl/pxl.mak
@@ -110,7 +110,7 @@ $(PXLOBJ)pxpthr.$(OBJ): $(PXLSRC)pxpthr.c $(AK) \
$(gsstate_h) $(gscoord_h) $(gspath_h) $(gstypes_h) $(gsdevice_h)\
$(pcommand_h) $(pgmand_h) $(pcstate_h) $(pcparse_h) $(pctop_h)\
$(pcpage_h) $(pxstate_h) $(pxoper_h) $(stdio__h) $(pxpthr_h)\
- $(pxparse_h) $(pxgstate_h) $(pcdraw_h) $(gsicc_manage_h)
+ $(pxparse_h) $(pxgstate_h) $(pcdraw_h) $(pcfont_h) $(gsicc_manage_h)
$(PXLCCC) $(PXLSRC)pxpthr.c $(PXLO_)pxpthr.$(OBJ)
$(PXLOBJ)pxvalue.$(OBJ): $(PXLSRC)pxvalue.c $(AK) $(std_h) $(gsmemory_h) $(pxvalue_h)
diff --git a/pxl/pxpthr.c b/pxl/pxpthr.c
index 9a57395b6..9acc51f53 100644
--- a/pxl/pxpthr.c
+++ b/pxl/pxpthr.c
@@ -23,6 +23,7 @@
#include "pcommand.h"
#include "pgmand.h"
#include "pcstate.h"
+#include "pcfont.h"
#include "pcparse.h"
#include "pctop.h"
#include "pcpage.h"
@@ -345,11 +346,7 @@ int pxpcl_selectfont(px_args_t *par, px_state_t *pxs)
uint len = pstr->value.array.size;
px_gstate_t *pxgs = pxs->pxgs;
pcl_font_selection_t *pfp;
- float ppi;
- float scale;
- /* NB move these to a header file */
- extern void set_symbol_map(px_state_t *pxs, bool wide16);
- extern bool pcl_downloaded_and_bound(pl_font_t *plfont);
+
if ( !global_pcs )
pxPassthrough_init(pxs);
@@ -373,25 +370,33 @@ int pxpcl_selectfont(px_args_t *par, px_state_t *pxs)
if (code < 0)
return code;
pfp = &global_pcs->font_selection[global_pcs->font_selected];
- ppi = (pfp->font->scaling_technology == plfst_Intellifont) ? 72.307 : 72.0;
- if (pfp->font->params.proportional_spacing)
+
{
- scale = (pfp->params.height_4ths * 0.25) * pxs->units_per_measure.x / ppi;
+#define CP_PER_INCH (7200.0)
+#define CP_PER_MM (7200.0/25.4)
+#define CP_PER_10ths_of_MM (CP_PER_MM/10.0)
+
+ static const floatp centipoints_per_measure[4] = {
+ CP_PER_INCH, /* eInch */
+ CP_PER_MM, /* eMillimeter */
+ CP_PER_10ths_of_MM, /* eTenthsOfAMillimeter */
+ 1 /* pxeMeasure_next, won't reach */
+ };
+
+ gs_point sz;
+ pcl_font_scale(global_pcs, &sz);
+ pxgs->char_size = sz.x /
+ centipoints_per_measure[pxs->measure] *
+ pxs->units_per_measure.x;
}
- else
- {
- scale = 1200.0 / (pfp->params.pitch.per_inch_x100 / 100.0) * (72.0 / ppi);
+ pxgs->symbol_set = pfp->params.symbol_set;
- /* hack for a scalable lineprinter font. If a real
- lineprinter bitmap font is available it will be handled
- by the bitmap scaling case above */
- if (pfp->font->params.typeface_family == 0) {
- scale = 850.0;
- }
+ if (pcl_downloaded_and_bound(global_pcs->font)) {
+ pxgs->symbol_map = 0;
+ } else {
+ set_symbol_map(pxs, global_pcs->font->font_type == plft_16bit);
}
- pxgs->char_size = scale;
- pxgs->symbol_set = pfp->params.symbol_set;
{
pl_font_t *plf = global_pcs->font;
@@ -409,11 +414,6 @@ int pxpcl_selectfont(px_args_t *par, px_state_t *pxs)
pxgs->base_font = (px_font_t *)plf;
}
- if (pcl_downloaded_and_bound(global_pcs->font)) {
- pxgs->symbol_map = 0;
- } else {
- set_symbol_map(pxs, global_pcs->font->font_type == plft_16bit);
- }
pxgs->char_matrix_set = false;
return 0;
}