summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pxl/pxgstate.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/pxl/pxgstate.c b/pxl/pxgstate.c
index 0a29bad11..6d33d3a89 100644
--- a/pxl/pxgstate.c
+++ b/pxl/pxgstate.c
@@ -615,12 +615,22 @@ pxSetCharScale(px_args_t *par, px_state_t *pxs)
const byte apxSetCharShear[] = {
pxaCharShear, 0, 0
};
+
+ /* experiments indicate the character shearing operands are
+ clamped after range checking though it is not documented in
+ the HP manual. */
+
+#define SHEAR_LIMIT 16383.0
+
int
pxSetCharShear(px_args_t *par, px_state_t *pxs)
{ real x_shear = real_value(par->pv[0], 0);
real y_shear = real_value(par->pv[0], 1);
px_gstate_t *pxgs = pxs->pxgs;
+ x_shear = x_shear > SHEAR_LIMIT ? SHEAR_LIMIT : x_shear;
+ y_shear = y_shear > SHEAR_LIMIT ? SHEAR_LIMIT : y_shear;
+
if ( x_shear != pxgs->char_shear.x || y_shear != pxgs->char_shear.y ||
pxgs->char_transforms[0] != pxct_shear
)