... |
... |
@@ -3280,34 +3280,49 @@ |
3280
|
3280
|
scaled_h = FT_REQUEST_HEIGHT( req );
|
3281
|
3281
|
|
3282
|
3282
|
/* determine scales */
|
3283
|
|
- if ( req->width )
|
|
3283
|
+ if ( req->height || !req->width )
|
3284
|
3284
|
{
|
3285
|
|
- metrics->x_scale = FT_DivFix( scaled_w, w );
|
3286
|
|
-
|
3287
|
|
- if ( req->height )
|
|
3285
|
+ if ( h == 0 )
|
3288
|
3286
|
{
|
3289
|
|
- metrics->y_scale = FT_DivFix( scaled_h, h );
|
3290
|
|
-
|
3291
|
|
- if ( req->type == FT_SIZE_REQUEST_TYPE_CELL )
|
3292
|
|
- {
|
3293
|
|
- if ( metrics->y_scale > metrics->x_scale )
|
3294
|
|
- metrics->y_scale = metrics->x_scale;
|
3295
|
|
- else
|
3296
|
|
- metrics->x_scale = metrics->y_scale;
|
3297
|
|
- }
|
|
3287
|
+ FT_ERROR(( "FT_Request_Metrics: Divide by zero\n" ));
|
|
3288
|
+ error = FT_ERR( Divide_By_Zero );
|
|
3289
|
+ goto Exit;
|
3298
|
3290
|
}
|
3299
|
|
- else
|
|
3291
|
+
|
|
3292
|
+ metrics->y_scale = FT_DivFix( scaled_h, h );
|
|
3293
|
+ }
|
|
3294
|
+
|
|
3295
|
+ if ( req->width )
|
|
3296
|
+ {
|
|
3297
|
+ if ( w == 0 )
|
3300
|
3298
|
{
|
3301
|
|
- metrics->y_scale = metrics->x_scale;
|
3302
|
|
- scaled_h = FT_MulDiv( scaled_w, h, w );
|
|
3299
|
+ FT_ERROR(( "FT_Request_Metrics: Divide by zero\n" ));
|
|
3300
|
+ error = FT_ERR( Divide_By_Zero );
|
|
3301
|
+ goto Exit;
|
3303
|
3302
|
}
|
|
3303
|
+
|
|
3304
|
+ metrics->x_scale = FT_DivFix( scaled_w, w );
|
3304
|
3305
|
}
|
3305
|
3306
|
else
|
3306
|
3307
|
{
|
3307
|
|
- metrics->x_scale = metrics->y_scale = FT_DivFix( scaled_h, h );
|
|
3308
|
+ metrics->x_scale = metrics->y_scale;
|
3308
|
3309
|
scaled_w = FT_MulDiv( scaled_h, w, h );
|
3309
|
3310
|
}
|
3310
|
3311
|
|
|
3312
|
+ if ( !req->height )
|
|
3313
|
+ {
|
|
3314
|
+ metrics->y_scale = metrics->x_scale;
|
|
3315
|
+ scaled_h = FT_MulDiv( scaled_w, h, w );
|
|
3316
|
+ }
|
|
3317
|
+
|
|
3318
|
+ if ( req->type == FT_SIZE_REQUEST_TYPE_CELL )
|
|
3319
|
+ {
|
|
3320
|
+ if ( metrics->y_scale > metrics->x_scale )
|
|
3321
|
+ metrics->y_scale = metrics->x_scale;
|
|
3322
|
+ else
|
|
3323
|
+ metrics->x_scale = metrics->y_scale;
|
|
3324
|
+ }
|
|
3325
|
+
|
3311
|
3326
|
Calculate_Ppem:
|
3312
|
3327
|
/* calculate the ppems */
|
3313
|
3328
|
if ( req->type != FT_SIZE_REQUEST_TYPE_NOMINAL )
|