Fonts
Apple Developer Connection
Advanced Search
Member Login Log In | Not a Member? Support

Return to Index

The Graphics State

Contents


Introduction


The graphics state variables establish the context in which TrueType instructions are executed. This chapter provides an alphabetical listing of the variables that make up the graphics state along with a brief description of their purpose and the essential facts needed to understand their role. In particular it provides information on each variable's default value, the instruction used to set its value and a list of instructions affected by its setting. An overall discussion of the role of the graphics state variables can be found in Chapter 2, "The Font Engine."

Most of the graphics state variables have a default value as shown below. That value is established the first time a particular font is accessed and again at the start of interpretation of any glyph.

It is possible to change the default values of the graphics state variables using instructions. If the value is changed in the control value program, that value becomes the new default value. If the value of a state variable is changed by instructions associated with a particular glyph, the new value is not a new default value and will hold only for that glyph.

Return to Contents

auto flip


	Default	TRUE	
	
	Set with	FLIPOFF[] 
				FLIPON[]
	
	Affects	MIRP[]	



Controls whether the sign of control value table entries will be changed to match the sign of the actual distance measurement with which it is compared. Setting auto flip to TRUE makes it possible to control distances measured with or against the projection vector with a single control value table entry. When auto flip is set to FALSE, distances must be measured with the projection vector.

 

Return to Contents

control value cut-in


	Default	17/16 pixels (F26Dot6)
	
	Set with	LCVTCI[]
	
	Affects	MIAP[] 
				MIRP[]				


Limits the regularizing effects of control value table entries to cases where the difference between the table value and the measurement taken from the original outline is sufficiently small.

 


Return to Contents

delta base


	Default	9
	
	Set with	SDB[]
	
	Affects	DELTAP1[] 
				DELTAP2[] 
				DELTAP3[] 
				DELTAC1[] 
				DELTAC2[] 
				DELTAC3[]


 

Establishes the base value used to calculate the range of point sizes to which a given DELTAC[] or DELTAP[] instruction will apply. The formulas given below are used to calculate the range of the various DELTA instructions.

 

   DELTAC1	  DELTAP1	  (delta_base) through (delta_base + 15)
   DELTAC2	  DELTAP2	  (delta_base + 16) through (delta_base + 31)
   DELTAC3	  DELTAP3	  (delta_base + 32) through (delta_base + 47)



Return to Contents

delta shift


	Default	3
	
	Set with	SDS[]
	
	Affects	DELTAP1[]
				DELTAP2[] 
				DELTAP3[] 
				DELTAC1[] 
				DELTAC2[] 
				DELTAC3[]


 

Determines the range of movement and smallest magnitude of movement (the step) in a DELTAC[] or DELTAP[] instruction. Changing the value of the delta shift makes it possible to trade off fine control of point movement for range of movement. A low delta shift favors range of movement over fine control. A high delta shift favors fine control over range of movement. The step has the value 1/2 to the power delta shift. The range of movement is calculated by taking the number of steps allowed (16) and multiplying it by the step.

The legal range for delta shift is zero through six. Negative values are illegal.


Return to Contents

dual projection vector


	Default	none
	
	Set with	SDPVTL[]
	
	Affects	IP[]
				GC[]   
				MD[]   
				MDRP[]   
				MIRP[]



A second projection vector set to a line defined by the original outline location of two points. The dual projection vector is used when it is necessary to measure distances from the scaled outline before any instructions were executed.


Return to Contents

freedom vector


	Default	x-axis
	
	Set with	SFVTCA[] 
				SFVTL[] 
				SFTPV[] 
				SVTCA[] 
				SFVFS[]

	Affects	ALIGNPTS[] 
				ALIGNRP[]
				DELTAP1[] 
				DELTAP2[] 
				DELTAP3[] 
				IP[] 
				MDAP[] 
				MDRP[] 
				MIAP[] 
				MIRP[] 
				MSIRP[] 
				ROUND[] 
				SCFS[] 
				SHC[] 
				SHPIX[] 
				SHZ[] 
				UTP[]


 

A unit vector that establishes an axis along which points can move.


Return to Contents

instruct control


	Default		0
	
	Set with		INSTCTRL[]
	
	Affects all	instructions


 

Makes it possible to turn off instructions under some circumstances. When set to TRUE, no instructions will be executed.


Return to Contents

loop


	Default	1
	
	Set with	SLOOP[]
	
	Affects	ALIGNRP[]  
				FLIPPT[]  
				IP[]  
				SHP[]  
				SHPIX[]


 

Makes it possible to repeat certain instructions a designated number of times. The default value of one assures that unless the value of loop is altered, these instructions will execute one time.

 

Return to Contents

minimum distance


	Default	1 pixel (F26Dot6)
	
	Set with	SMD[]
	
	Affects	MDRP[] 
				MIRP[]


 

Establishes the smallest possible value to which a distance will be rounded.


Return to Contents

projection vector


	Default	x-axis
	
	Set with	SPVTCA[]
	
				SPVTL[]
				SVTCA[] 
				SPVFS[]
				
	Affects	ALIGNPTS[] 
				ALIGNRP[] 
				DELTAP1[] 
				DELTAP2[] 
				DELTAP3[] 
				GC[] 
				IP[] 
				MD[] 
				MDAP[] 
				MDRP[] 
				MIAP[] 
				MIRP[] 
				MSIRP[] 
				SCFS[] 
				SHC[] 
				SHP[] 
				SHZ[]


 

A unit vector whose direction establishes an axis along which distances are measured.


Return to Contents

round state


	Default	1 (grid)

	Set with	RDTG[]
				ROFF[] 
				RTDG[] 
				RTG[] 
				RTHG[] 
				RUTG[] 
				SROUND[] 
				S45ROUND[]
					
	Affects	EVEN[]  
				ODD[]  
				MDAP[]  
				MIAP[]  
				MDRP[]  
				MIRP[]  
				ROUND[]


Determines the manner in which values are rounded. Can be set to a number of predefined states or to a customized state with the SROUND or S45ROUND instructions.


Return to Contents

rp0


	Default	0

	Set with	SRP0[], MDRP[], MIAP[], MSIRP[]


	Affects	ALIGNRP[]
				MDRP[] 
				MIRP[] 
				MSIRP[]


 

The first of three reference points. References a point number that together with a zone designation specifies a point in either the glyph zone or the twilight zone.


Return to Contents

rp1


	Default	0
	
	Set with	SRP1[], MDAP[], MDRP[], MIRP[]

	Affects	IP[]
				SHC[] 
				SHP[] 
				SHZ[]


 

The second of three reference points. References a point number that together with a zone designation specifies a point in either the glyph zone or the twilight zone.


Return to Contents

rp2


	Default			0

	Set with	SRP2[], MDRP[], MIRP[]

	Affects	IP[] 
				SHC[] 
				SHP[] 
				SHZ[]



The third of three reference points. References a point number that together with a zone designation specifies a point in to either the glyph zone or the twilight zone.


Return to Contents

scan control


	Default	FALSE

	Set with	SCANCTRL[]



Determines whether the interpreter will activate dropout control for the current glyph. Use of the dropout control mode can depend upon the currently prevailing combination of the following three conditions:

 

  1. Is the glyph rotated?
  2. Is the glyph stretched?
  3. Is the current pixel per em setting less than a specified threshold?

It is also possible to block dropout control if one of the above conditions is false.


Return to Contents

single_width_cut_in


	Default	0 pixels (F26Dot6)

	Set with	SSWCI[]

	Affects	MDRP[] 
				MIRP[]



The distance difference below which the interpreter will replace a CVT distance or an actual distance in favor of the single width value.


Return to Contents

single_width_value


	Default	0 pixels (F26Dot6)

	Set with	SSW[]
	
	Affects	MDRP[]
				MIRP[]



The value used in place of the control value table distance or the actual distance value when the difference between that distance and the single width value is less than the single width cut-in.


Return to Contents

zp0


	Default	1

	Set with	SZP0[]	
				SZPS[]

	Affects	ALIGNPTS[] 
				ALIGNRP[] 
				DELTAP1[] 
				DELTAP2[] 
				DELTAP3[] 
				FLIPPT[] 
				FLIPRGOFF[] 
				FLIPRGON[] 
				IP[] 
				ISECT[] 
				MD[] 
				MDAP[] 
				MDRP[] 
				MIAP[] 
				MIRP[] 
				MSIRP 
				SHC[] 
				SHP[] 
				UTP[]


 

The first of three zone pointers. Can be set to reference either the glyph zone (Z0) or the twilight zone (Z1).



Return to Contents

zp1


	Default	1

	Set with	SZP1[]
				SZPS[]
				
	Affects	ALIGNPTS[] 
				ALIGNRP[] 
				IP[] 
				ISECT[] 
				MD[] 
				MDRP[] 
				MIRP[] 
				MSIRP[] 
				SDPVTL[] 
				SFVTL[] 
				SHC[] 
				SHP[] 
				SHZ[] 
				SPVTL[]



The second of three zone pointers. Can be set to reference either the twilight zone (Z0) or the glyph zone (Z1).


Return to Contents

zp2


	Default	1

	Set with	SZP2[]
				SZPS[]
				
	Affects	GC[]
				IP[] 
				ISECT[] 
				IUP[] 
				SCFS[] 
				SDPVTL[] 
				SFVTL[] 
				SHC[] 
				SHP[] 
				SHPIX[] 
				SPVTL[]



The third of three zone pointers. Can be set to reference either the twilight zone (Z0) or the glyph zone (Z1).


Return to Contents

Return to Index