Forums > Dev

Quartz text in qelems?

August 2, 2007 | 5:36 pm

Hi all-

I’m hacking away at the Kalim example in the SDK and have run across a
situation where it seems I can draw Quartz text if I call the update
function directly, but if I use a qelem, it doesn’t display:

(In this snippet, f_pad is a character string and f_pos is the position,
or number of characters in the string)

void kalim_update(t_kalim *x)
{
GrafPtr gp; // pointer to current GrafPort

// set the GrafPort to kalim’s wind and get and store a pointer to
// the current GrafPort
gp = wind_setport(x->k_wind);
if (gp) {
OSStatus quartz_status;
CGContextRef myContext;
quartz_status = QDBeginCGContext( gp, &myContext );

// post( "quartz_status: %d", quartz_status );
if( quartz_status == noErr ){
CGContextSetShouldAntialias( myContext, false );
CGContextSelectFont( myContext, "Monaco", 10,
kCGEncodingMacRoman);
CGContextSetTextDrawingMode( myContext, kCGTextFill );
CGContextSetRGBFillColor( myContext, 0, 0, 0, 1);
if( x->f_pos > 0 ) {
post( "x->f_pos: %d x->f_pad %s", x->f_pos, x->f_pad );
CGContextShowTextAtPoint( myContext, 3, 12, x->f_pad,
x->f_pos );
x->f_pos = 0;
}
CGContextShowTextAtPoint( myContext, 3, 24,
"01234567891234567890", 20 );

quartz_status = QDEndCGContext( gp, &myContext ); // Does
// this dispose of gp so I don’t need the below?
}
wind_restoreport(gp); // restore the saved GrafPort after drawing
}
}

void kalim_key( t_kalim *x, short key, short modifiers, short keycode )
{
if( key == 0x0d ){
x->f_pad[x->f_pos+1] = 0;
kalim_update( x );
// qelem_set(x->k_qelem);
}
else{
x->f_pad[x->f_pos++] = key;
post( "%c %d", key, x->f_pos );
if( x->f_pos > MAXLINE-1 ){
x->f_pos = MAXLINE-1;
post("bing!");
}
}
}

So if I use kalim_update(x) directly, everything’s OK.
qelem_set(x->k_qelem), however, fails to display text.

Any thoughts?

I could email or pastebin the entire file if anyone was interested.

Thanks in advance!

Charles Turner


August 3, 2007 | 12:54 am

Charles Turner wrote on 8/2/07 at 1:36 PM

>I’m hacking away at the Kalim example in the SDK and have run across a
>situation where it seems I can draw Quartz text if I call the update
>function directly, but if I use a qelem, it doesn’t display:

I’m beyond this version right now, so I can’t definitely confirm this,
but it seems that my update function, if called via a qelem, is working
with screen coordinates and not my window coordinates.

In other words, it didn’t seem to draw the text because it was drawing
it in the lower left-hand corner of my display.

I also omitted a call to either CGContextFlush() or
CGContextSynchronize() just prior to QDEndCGContext().

Best, Charles


Viewing 2 posts - 1 through 2 (of 2 total)