This work, written by Dave Arnold <darnold@adobe.com> and fully integrated into FreeType by me, is a donation by Adobe in collaboration with Google. It is vastly superior to the old CFF engine, and it will replace it soon. Right now, it is still off by default, and you have to explicitly select it using the new `hinting-engine' property of the cff driver. For convenience, (most of) the new files are committed separately. * include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro. * include/freetype/ftcffdrv.h: New file to access CFF driver properties. * include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error code. * include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints', and `cf2interp'. * src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'. * src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine' and `no_stem_darkening'. * src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'. * src/cff/cff.c: Include new files. * src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle `hinting-engine' and `no-stem-darkening' properties (only the Adobe engine listens to them). * src/cff/cffgload.c: Include `cf2ft.h'. (cff_decoder_prepare): Initialize `current_subfont'. (cff_build_add_point): Handle Adobe engine which uses 16.16 coordinates. (cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING separately. Choose rendering engine based on `hinting_engine' property. * src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe engine. * src/cff/cffobjs.c: Include FT_CFF_DRIVER_H. (cff_driver_init): Set default property values. * src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files. * src/cff/cf2*.*: New files, containing the Adobe engine.2.6.5
parent
283c8ed817
commit
06474c3e5b
15 changed files with 384 additions and 26 deletions
@ -0,0 +1,150 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* ftcffdrv.h */ |
||||
/* */ |
||||
/* FreeType API for controlling the CFF driver (specification only). */ |
||||
/* */ |
||||
/* Copyright 2013 by */ |
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used, */ |
||||
/* modified, and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
|
||||
#ifndef __FTCFFDRV_H__ |
||||
#define __FTCFFDRV_H__ |
||||
|
||||
#include <ft2build.h> |
||||
#include FT_FREETYPE_H |
||||
|
||||
#ifdef FREETYPE_H |
||||
#error "freetype.h of FreeType 1 has been loaded!" |
||||
#error "Please fix the directory search order for header files" |
||||
#error "so that freetype.h of FreeType 2 is found first." |
||||
#endif |
||||
|
||||
|
||||
FT_BEGIN_HEADER |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* @section: |
||||
* cff_driver |
||||
* |
||||
* @title: |
||||
* The CFF driver |
||||
* |
||||
* @abstract: |
||||
* Controlling the CFF driver module. |
||||
* |
||||
* @description: |
||||
* While FreeType's CFF driver doesn't expose API functions by itself, |
||||
* it is possible to control its behaviour with @FT_Property_Set and |
||||
* @FT_Property_Get. The following lists the available properties |
||||
* together with the necessary macros and structures. |
||||
* |
||||
* The CFF driver's module name is `cff'. |
||||
* |
||||
*/ |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* @property: |
||||
* hinting-engine |
||||
* |
||||
* @description: |
||||
* Thanks to Adobe, which contributed a new hinting (and parsing) |
||||
* engine, an application can select between `freetype' and `adobe'. |
||||
* |
||||
* Right now, the default engine is `freetype'. However, this will |
||||
* change: After a certain time of intensive testing it is planned to |
||||
* make `adobe' the default due to its superior rendering results. |
||||
* |
||||
* The following example code demonstrates how to select Adobe's hinting |
||||
* engine (omitting the error handling). |
||||
* |
||||
* { |
||||
* FT_Library library; |
||||
* FT_Face face; |
||||
* FT_UInt hinting_engine = FT_CFF_HINTING_ADOBE; |
||||
* |
||||
* |
||||
* FT_Init_FreeType( &library ); |
||||
* |
||||
* FT_Property_Set( library, "cff", |
||||
* "hinting-engine", &hinting_engine ); |
||||
* } |
||||
* |
||||
* @note: |
||||
* This property can be used with @FT_Property_Get also. |
||||
* |
||||
*/ |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* @enum: |
||||
* FT_CFF_HINTING_XXX |
||||
* |
||||
* @description: |
||||
* A list of constants used for the @hinting-engine property to select |
||||
* the hinting engine for CFF fonts. |
||||
* |
||||
* @values: |
||||
* FT_CFF_HINTING_FREETYPE :: |
||||
* Use the old FreeType hinting engine. |
||||
* |
||||
* FT_CFF_HINTING_ADOBE :: |
||||
* Use the hinting engine contributed by Adobe. |
||||
* |
||||
*/ |
||||
#define FT_CFF_HINTING_FREETYPE 0 |
||||
#define FT_CFF_HINTING_ADOBE 1 |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* @property: |
||||
* no-stem-darkening |
||||
* |
||||
* @description: |
||||
* By default, the Adobe CFF engine darkens stems at smaller sizes, |
||||
* regardless of hinting, to enhance contrast. Setting this property, |
||||
* stem darkening gets switched off. |
||||
* |
||||
* Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set. |
||||
* |
||||
* { |
||||
* FT_Library library; |
||||
* FT_Face face; |
||||
* FT_Bool no_stem_darkening = TRUE; |
||||
* |
||||
* |
||||
* FT_Init_FreeType( &library ); |
||||
* |
||||
* FT_Property_Set( library, "cff", |
||||
* "no-stem-darkening", &no_stem_darkening ); |
||||
* } |
||||
* |
||||
* @note: |
||||
* This property can be used with @FT_Property_Get also. |
||||
* |
||||
*/ |
||||
|
||||
|
||||
/* */ |
||||
|
||||
FT_END_HEADER |
||||
|
||||
|
||||
#endif /* __FTCFFDRV_H__ */ |
||||
|
||||
|
||||
/* END */ |
Loading…
Reference in new issue