Calculate individual character positions, specifying a font context
int PfExtentTextCharPositionsCx(
struct _Pf_ctrl *context,
PhRect_t *ptsExtent,
PhPoint_t *ptsPos,
char *psz,
const char *pckFont,
long adata,
long bdata,
int32_t *piIndices,
int32_t *piPenPositions,
int32_t iArrayLen,
uint32_t ulFlags,
int32_t iBytes,
uint32_t uiExtentLen,
PhRect_t const *pktsClip );
For example, index 0 relates to the pen's x position at the start of the string, index 1 corresponds to the pen's x position after character 1, index 2 corresponds to the pen's x position after character 2, and so on.
The indexes must be in numerical order, in order to function as expected.
You can set up to one of the following to indicate the format of the string:
| Although this flag allows for 32-bit wide characters, the underlying font system currently supports only characters up to Unicode U+FFFE. |
If you don't set either of the above, the function assumes that the string is composed of UTF-8 multibyte characters.
You can OR in any of these flags:
If this bit isn't set, the bearing x value of the next symbols are applied to the pen x positions. This is useful when drawing symbols individually, where you need to know where to place the x origin of each symbol.
strlen( psz ) / wstrlen( psz )
ph
PfExtentTextCharPositionsCx() lets you obtain the pen's x position after every index specified in the function call. This routine is useful when an application has mutiple _Pf_ctrl contexts defined.
The generic design of this routine allows for future expansion.
In this example, the pixel pen x positions for each character in the string Lucy are placed in the integer array iaPos, according to the indexes specified in iaIndex. Index 0 corresponds to the position before the symbol L, index 1 corresponds to the position after L, index 2 corresponds to the position after u, and so on:
#include <stdio.h>
#include <photon/PtProto.h>
#include <photon/Pf.h>
#include <errno.h>
#define MAX_INDICES 5
#define FALSE 0
int iaIndex[MAX_INDICES] = {0, 1, 2, 3, 4};
int iaPosition[MAX_INDICES];
PhRect_t tsExtent;
char caBuff[MAX_FONT_TAG];
int main(int argc, char * argv[])
{ struct _Pf_ctrl * pf;
if(PtInit(NULL) == -1)
return(EXIT_FAILURE);
if((pf = PfAttach( NULL, 0 )) == NULL)
return(EXIT_FAILURE);
PfGenerateFontNameCx( pf, "Helvetica", 0, 24, caBuff);
if( PfExtentTextCharPositionsCx( pf, &tsExtent, NULL,
"Lucy", caBuff, 0, 0, iaIndex, iaPosition,
MAX_INDICES, 0L, 0, 0, NULL) != EOK)
{
printf("Error in PfExtentTextCharPositionsCx().\n");
}
else
{
printf("Pixel penx positions after each character \
in string %s, are as follows: %d %d %d %d %d.\n",
"Lucy", iaPosition[0], iaPosition[1],
iaPosition[2], iaPosition[3],
iaPosition[4]);
}
PfDetach(pf);
return(EXIT_SUCCESS);
}
Photon
| Safety: | |
|---|---|
| Interrupt handler | No |
| Signal handler | No |
| Thread | No |
PfAttach(), PfDetach(), PfExtentFractTextCharPositions(), PfExtentTextCharPositions(), PfGenerateFontName(), PhPoint_t, PhRect_t