[cairo] Fwd: embedding arbitrary graphics in text
Travis Griggs
travisgriggs at gmail.com
Wed Sep 8 08:26:59 PDT 2010
A Pango-Cairo question or two I had sent to the Pango list yesterday,
hoping someone here on the Cairo list might know the answers.
> On Sep 7, 2010, at 9:15 AM, Behdad Esfahbod wrote:
>
>> Also see pango/examples/cairoshape.c for an example.
>
> OK, I followed it, thank you so much. The only thing that I had to
> look at 3 or so times, before I caught the importance of it, is the
> translate to the cr current point at the top of the render function.
> I'm trying to imagine when I wouldn't want to actually do that.
>
> Question 1
>
> What is the difference between the ink rect and the logical rect. I
> mean, I think I mostly get it. But I'm curious if there are cases
> where portions of the ink would ever lie outside the logical rect?
> Is the "origin (x,y) of the rects always at the baseline of the
> characters, I noticed that they all seem to have negative heights to
> go nominally "upwards". I was curious if there was an example or two
> in the docs somewhere, that showed something I was missing.
>
> Question 2
>
> The example demonstrates how to completely draw something other than
> the font's glyph in place of a character (or more). I'm curious if
> it's possible to still let it draw the character glyphs it was going
> to draw, but do some additional annotation. For example, I'd like to
> insert a stop sign graphic in front of the character run the
> attributes stand for, and nudge them to the right by that much. Or
> do I have to inject filler characters into my text to do that?
>
> What My Binding Ended up Looking Like (for now)
>
> With Behdad's and Tony's direction, I established a single shape
> renderer for any Context I create a binding for in Smalltalk. When
> I'm creating the attribute, I do it with the two rectangles, and
> with a Block Closure. Block Closures are Smalltalk arbitrary
> functions, that close over any current values needed for the
> function. So I get both data and behavior all in one, a lot, or a
> little. I keep a table on the Smalltalk side, which maps Smalltalk
> blocks, to an arbitrary incrementing counter. The index, is what I
> stuff in the data of the attribute. So when I get the callback, I
> fetch the Smalltalk block associated with the particular attribute's
> data key, execute the block with the mapped arguments. Works pretty
> well.
--
Travis Griggs
Objologist
"I did not have time to write you a short program, so I wrote you a
long one instead."
More information about the cairo
mailing list