summaryrefslogtreecommitdiff
path: root/src/bdf
diff options
context:
space:
mode:
authorWu, Chia-I (吳佳一) <olvaffe@gmail.com>2006-01-14 05:09:30 +0000
committerWu, Chia-I (吳佳一) <olvaffe@gmail.com>2006-01-14 05:09:30 +0000
commite33dc2ebeef85f78805a422f089307606925e062 (patch)
tree92105b33699a60b667b3c0db0e3c88419d1db551 /src/bdf
parentf1c2b91e149dd24cb7ad54bcc6210ece8b076aa0 (diff)
downloadfreetype2-e33dc2ebeef85f78805a422f089307606925e062.tar.gz
* docs/CHANGES: Mention the size selection change.
* src/bdf/bdfdrivr.c (BDF_Size_Request, BDF_Size_Select), src/pcf/pcfdrivr.c (PCF_Size_Request, PCF_Size_Select), src/winfonts/winfnt.c (FNT_Size_Request, FNT_Size_Select): Do size matching for request of type NOMINAL and REAL_DIM. * src/winfonts/winfnt.c (FNT_Face_Init): Print trace message when `pixel_height' is used for nominal height. * src/base/ftobjs.c (FT_Request_Size): Call `FT_Match_Size' if the face is bitmap only and driver doesn't provide `request_size'. This is added merely for completion as no driver satisfies the conditions.
Diffstat (limited to 'src/bdf')
-rw-r--r--src/bdf/bdfdrivr.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/src/bdf/bdfdrivr.c b/src/bdf/bdfdrivr.c
index 445fb9fa8..213abcb99 100644
--- a/src/bdf/bdfdrivr.c
+++ b/src/bdf/bdfdrivr.c
@@ -592,6 +592,8 @@ THE SOFTWARE.
size->metrics.ascender = bdffont->font_ascent << 6;
size->metrics.descender = -bdffont->font_descent << 6;
+ size->metrics.height = ( bdffont->font_ascent +
+ bdffont->font_descent ) << 6;
size->metrics.max_advance = bdffont->bbx.width << 6;
return BDF_Err_Ok;
@@ -602,20 +604,40 @@ THE SOFTWARE.
BDF_Size_Request( FT_Size size,
FT_Size_Request req )
{
- FT_Face face = size->face;
- FT_Error error;
+ FT_Face face = size->face;
+ FT_Bitmap_Size* bsize = face->available_sizes;
+ bdf_font_t* bdffont = ( (BDF_Face)face )->bdffont;
+ FT_Error error = BDF_Err_Invalid_Pixel_Size;
+ FT_Long height;
- error = FT_Match_Size( face, req, 1, NULL );
+ if ( req->vertResolution )
+ height = ( req->height * req->vertResolution + 36 ) / 72;
+ else
+ height = req->height;
+
+ height = ( height + 32 ) >> 6;
+
+ switch ( req->type )
+ {
+ case FT_SIZE_REQUEST_TYPE_NOMINAL:
+ if ( height == ( bsize->y_ppem + 32 ) >> 6 )
+ error = BDF_Err_Ok;
+ break;
+ case FT_SIZE_REQUEST_TYPE_REAL_DIM:
+ if ( height == ( bdffont->font_ascent +
+ bdffont->font_descent ) )
+ error = BDF_Err_Ok;
+ break;
+ default:
+ error = BDF_Err_Unimplemented_Feature;
+ break;
+ }
if ( error )
return error;
else
- {
- size->metrics.height = face->available_sizes->height << 6;
-
return BDF_Size_Select( size, 0 );
- }
}