From: Carlos L. G. <gen...@gm...> - 2012-08-31 07:34:39
|
Hi folks! I need your feedback on some questions: As you probably know, Synfig's Text layer has some particular features. It has the following parameters: 1) Orientation (vector) 2) Horizontal Spacing (real) 3) Vertical Spacing (real) 4) Origin (vector) When Orientation is (0,0) the origin of the text (given by the Origin parameter) is placed at the top left corner of the text rendering area. When it is (1,1) (that is 60, 60 in pixels) the origin of the text is placed on the bottom right corner of the text rendering area. So when I started to implement this parameter I found that Pango has the possibility of calculate the inking rectangle and the logical rectangle of a text layout. Notice that a Layout can include more than one line of text. The ink rectangle coincides with the rectangle used by Synfig's to compute the Origin parameter. Usually, ink rectangle is inside the logical rectangle but that's not a rule. It depends on the typography, the used letters and the language orientation. When I render a Pango Layout in Cairo the origin of the layout is the top left corner of the logical rectangle. Then, doing some calculations with the logical and ink rectangles I can place a Pango Layout properly on the canvas based on the Orientation parameter. So far so good. The problem comes when the horizontal spacing and vertical spacing (from now on spacing to refer to any of them) are different than the default. By default spacing is 1.0. It is because it acts like a scale value of the natural spacing for the character (in case of horizontal spacing) and for the lines (in case of vertical spacing). When Synfig's software render draws the character glyphs, it moves horizontally and vertically the amount given by the glyph that is rendering on that moment *multiplied* by the spacing value. Son when it is 1.0 the default spacing is used. If different than 1.0 then the spacing is scaled proportionally to the default spacing value. But in Pango the spacing (between characters and between lines) is given by an absolute value (in Pango units) to *increase *the default space value for the given glyph (or text line). You must notice that the glyph spacing is different depending on the previous and next glyph and the same happen for the vertical spacing depending on the previous and next lines height. I can split the Pango Layout in lines and each line in glyphs and so do the same spacing that Synfig's software renderer does: Increase the spacing based on the glyph (line) width (height) using the spacing as multiplier. The relative spacing result of Synfig is ugly compared to the absolute Pango spacing plus the unneeded complication of split the layout in small units to calculate a spacing different for each glyph(line). All the text processors specify the spacing in absolute values, not relative, giving a uniform looking rather than a impression of scattered letters. Apart of that, I'm afraid that doing wicked things with the natural spacing of the lines, could deliver to the "waves" problem shown in my video on google+. Added to all this, I've noticed that even if I achieve the same character size after scaling the font size a certain value to match what Synfig's software renderer does, the layout size is never the same, due to the different default letter spacing of Synfig compared to Pango. So, I want you guys to tell me if it is worth to do the effort of splice the text into glyphs and lines to allow the emulation of the spacing in Synfig? <complain mode on> Pango - Cairo render will be always different than current Synfig's render and that doesn't have a solution plus I'm getting bored about the stupid parameters that controls the Text layer. They are simply breaking the Pango logical!! <complain mode off> Oh well, thanks for listen ^___^ Cheers 2012/8/27 Carlos López González <gen...@gm...> > Ok, so some first kind of results. > 1) Notice that the render speed has been increased to about 73 mili > seconds for Synfig software and 41 for Cairo. It is 1,78 times faster for > the sample file with a Serif font. > 2) I needed to multiply the size by a factor to achieve the size of > Synfig's software. > 3) There are pending parameters to implement: > *Horizontal and vertical spaces > *Y component of the size > *Font kerning > *Sharp edges > *Invert > 4) Style and Weight works out of the box with Cairo and with software > doesn't work. ^___^ > 5) Unicode characters works out of the box and it doesn't work with > software in many cases. > Also as usual the blending modes are missing. > Note: the examples renders a green rectangle for the original ink > rectangle and one blue rectangle for the original logical rectangle of the > layout. To place the text at the same place than software I had to do some > tricks to render each line shifted up the vertical gap between the two > rectangles. That's why it doesn't looks centered on them. > > > Cheers! > > > 2012/8/26 Carlos López González <gen...@gm...> > >> Hi! >> I've been playing with Pango library meanwhile was implementing the Cairo >> render to the Layer_Freetype class. >> I've found the following: >> >> 1) Currently I've not found any API in Pango that scales directly the >> font size vertically. If you're aware of it, please let me know. I know >> that it is possible to scale the entire layout using Pango matrix and >> probably it would do the job but it is not exactly what lib freetype does. >> 2) I've not found the Kerning feature yet in Pango. I'm sure it will be. >> 3) Alignment using Position parameter is cumbersome in Synfig. I can >> emulate that effect by rendering line by line in Pango and aligning each >> line using the position parameter like Synfig does now. I think that it is >> not professional to have that alignment (the result depends on the line >> length in characters). We should try to replace the position parameter by a >> drop down selection for type of alignment (left, center, right) for the >> whole paragraph. >> 4) In Pango the weight, font and style simply works! In Synfig they are >> just there, and doesn't work. >> 5) If I use the x component of the size parameter to establish the Pango >> font size I find that the Pango size result is correct, comparing the >> letter size with a checkerboard with the same size than the font. Synfig's >> render is bigger I don't find why. It looks like a bug in Software renderer >> to me. >> 6) Pango-Cairo render is faster than Software in all situations. I don't >> have statistics yet but it is about 1.5 to 2.5 times faster. >> 7) Pango offers a lot (many more!) options to control the text that makes >> me think to use them in the future. >> >> So it was just to inform you that the implementation is going on but that >> it is possible that there were some differences with the current software >> renderer. >> >> >> Cheers! >> -- >> Carlos >> http://synfig.org >> >> > > > -- > Carlos > http://synfig.org > > -- Carlos http://synfig.org |