Re: Drawing FULL NSAttributedString
Re: Drawing FULL NSAttributedString
- Subject: Re: Drawing FULL NSAttributedString
- From: "Rimas M." <email@hidden>
- Date: Tue, 03 May 2011 18:36:37 +0300
Hello Aki,
Thank you for reply.
Looks like I will need to learn lots of new things, because fonts
metrics are unknown world for me.
I have played a bit with "rect of glyph" from NSFont and
NSLayoutManager. Some useful information can be found. But lots of
unclear things are mostly with baselines and offsets of them.. For
example NSFont's boundingRectForGlyph: returns rect, which looks like
gonna fit whole glyph, but currently I have no idea how to calculate
its position (x and y) in the line of TextView/LayoutManager.
Regards,
Rimas M.
On Wed, Apr 27, 2011 at 11:06 PM, Aki Inoue <email@hidden> wrote:
> Rimas,
>
> Typically the text layout system including the Cocoa Text System works in the typographic metrics that's based on the information embedded in the font. So, most layout information returned by NSLayoutManager is in the typographic metrics if not documented otherwise.
>
> The information you're seeking here is usually called the rendering or image metrics. They are based on the actual rendering results in the graphics system.
>
> The typographic metrics and image metrics are usually not compatible. Also, the image metrics usually requires the rendering result (various graphical settings could change the pixels touched).
>
>
>> 2. With some fonts (for example Eccentric Std, Palemonas, some others
>> which i can't remember right now) the [myLayoutManager
>> usedRectForTextContainer:myTextContainer] returns rect which does not
>> covers WHOLE text.
>
> You can calculate the image bounds by union'ing the bounds of each glyph in the layout manager. See -[NSFont getBoundingRects:forGlyphs:count:].
>
>> To draw it correctly, I need a bounding (used) rect,
>> which counts in a shadow attribute. Is it possible at all using cocoa
>> text system?
> This really requires the rendering result. You can "estimate" the bounds by applying the shadow params to the bounding rect from above.
>
> Aki
>
> On 2011/04/27, at 8:34, Rimas M. wrote:
>
>> Hi folks,
>>
>> Last few days I am trying to solve very strange puzzle - how to draw
>> FULL attributed string.
>>
>> Short story:
>>
>> I have a NSTextStorage object, which holds my formatted string
>> information. I am editing it via NSTextView (NSLayoutManager +
>> NSTextContainer + my NSTextStorage) mechanism. That works great until
>> I am dealing with drawing. To find out rect, which will be required to
>> fit my text, I am using -
>> (NSRect)usedRectForTextContainer:(NSTextContainer *)aTextContainer of
>> NSLayoutManager. To draw actual content I am using
>> drawBackgroundForGlyphRange:(NSRange)glyphsToShow
>> atPoint:(NSPoint)origin and
>> drawGlyphsForGlyphRange:(NSRange)glyphsToShow atPoint:(NSPoint)origin
>> from the same NSLayoutManager. And that works great for 90% of time.
>> But I need 100%.
>>
>> Problem:
>>
>> Actually I am dealing with two drawing problems:
>>
>> 1. When my attributed string (NSTextStorage) has a shadow, made by
>> using Fonts panel, it is NOT INCLUDED when trying to find out used
>> rect by calling [myLayoutManager
>> usedRectForTextContainer:myTextContainer]. Never. The situation can be
>> easily demonstrated with TextEdit:
>> https://www.dropbox.com/s/vt21zpq46xl0gb5/Text-with-cropped-shadow.png
>> . The same I am getting in my app. But I need a shadow, therefor I
>> have set it. To draw it correctly, I need a bounding (used) rect,
>> which counts in a shadow attribute. Is it possible at all using cocoa
>> text system?
>>
>> 2. With some fonts (for example Eccentric Std, Palemonas, some others
>> which i can't remember right now) the [myLayoutManager
>> usedRectForTextContainer:myTextContainer] returns rect which does not
>> covers WHOLE text. Sometimes diacritic symbols of the very top line
>> are missing (https://www.dropbox.com/s/dpjjugzxcnp771r/Missing-diacrytic-symbol.png
>> <- both letters are the same "Alt + e + e = é" combination), sometimes
>> the first left symbol is cropped
>> (https://www.dropbox.com/s/33mfgoqwbgwcvg1/Cropped-left-side-1.png,
>> https://www.dropbox.com/s/kbgfdzuhcr1svht/Cropped-left-side-2.png,
>> https://www.dropbox.com/s/ntxgufl8e562uep/Cropped-left-side-3.png).
>> Question is the same - how to get rect, which would fit my whole text.
>>
>> Any help is very appreciate.
>>
>> p.s. don't hesitate to ask for an additional information. I could even
>> make a small sample app if required.
>>
>> Regards,
>>
>> Rimas M.
>> _______________________________________________
>>
>> Cocoa-dev mailing list (email@hidden)
>>
>> Please do not post admin requests or moderator comments to the list.
>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>
>> Help/Unsubscribe/Update your Subscription:
>>
>> This email sent to email@hidden
>
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden