Oh, it dawns me that this is due to adding an NSTextView instance that is being
removed when editing ends. This was in a sample project. Never mind.
Am 12.07.2012 um 12:09 schrieb Alexander Reichstadt:
> Hi,
>
> sorry for the delay and thanks for the response, I moved house. Anyway, this
> all worked fine and now the text while being edited is taking crossing paths
> into consideration and writes around them the way I wanted to. But it
> discards the layout whenever I end editing. I first thought this was due to a
> call of removeLayoutManager, but also after I removed this line it keeps on
> ignoring all layout efforts and just writes across all paths.
>
> - (NSRect)lineFragmentRectForProposedRect:(NSRect)proposedRect
> sweepDirection:(NSLineSweepDirection)sweepDirection
> movementDirection:(NSLineMovementDirection)movementDirection
> remainingRect:(NSRect *)remainingRect
>
> …is stopped being called after editing ended. Why? How can I freeze the
> layout in the view for after editing ended?
>
> Alex
>
>
> Am 20.06.2012 um 01:41 schrieb Graham Cox:
>
>>
>> On 19/06/2012, at 7:02 PM, Alexander Reichstadt wrote:
>>
>>> Hi,
>>>
>>> for the
>>>
>>> - (NSRect)lineFragmentRectForProposedRect:(NSRect)proposedRect
>>> sweepDirection:(NSLineSweepDirection)sweepDirection
>>> movementDirection:(NSLineMovementDirection)movementDirection
>>> remainingRect:(NSRect *)remainingRect {
>>>
>>> call I'd like to calculate the proposedRect in case there are bezierPaths
>>> limitations of custom shapes.
>>>
>>> So I thought there'd be a way to not only clipRect to shade out a piece of
>>> a path, but also a way to get that spare-piece from the NSBezierPath
>>> instance. Is there?
>>
>> No, not built-in anyway.
>>
>>> I wanted to split up the bounds rect of the path to circumvent with the
>>> text into stripes of the height of proposedRect passed into the call, then
>>> considering the offset from top, if any, then pick the stripe I need and
>>> see what the minimum bounds would be if the bezierpath stripe was an own
>>> bezier path on its own. Or is there another way?
>>
>>
>> I'm guessing you're trying to run text into an arbitrary path defined by a
>> bezier.
>>
>> If that's the case, I think your understanding of what the text system wants
>> from you here is a bit off. Basically, it tells you where it proposes to lay
>> the text down, and you can modify that to constrain it to lay it down
>> differently. So, for the proposedRect, you need to work out where that
>> intersects the edges of your path and pull the sides of that rect in until
>> they lie within the path. THERE IS NO BUILT-IN WAY TO DO THIS! But it's not
>> that hard. For the points representing the corners of the rect, you can find
>> out whether they are inside or outside the path with [NSBezierPath
>> containsPoint:], then use a binary approximation to shrink the rect until it
>> is "just inside" the path. In <remainingRect>, you return the bit of the
>> rect you are NOT using, in the direction of the text sweep. The text system
>> uses that to understand what part of the text it can't use this time round
>> and so will take that into account for the next fragment. You'll be called
>> again with the remainder rect as the proposedRect, so if your path shape is
>> such that more text could fit on the same line but horizontally displaced,
>> you have an opportunity to calculate that as well. This system allows any
>> path shape to work, even paths that are disjoint, or that have holes.
>>
>> If the object is to run text around the outside of a path, it's the same
>> idea, you just return the rects outside instead.
>>
>> This method is called repeatedly until all the text is laid out - so you
>> don't usually precalculate a series of strips and figure out which one to
>> return - you just have to focus on the single strip being considered right
>> now. There is no method to intersect a rect with a bezier and return another
>> bezier (arbitrary bezier path set operations would be wonderful, but they
>> ain't happening, even after years of asking for it).
>>
>> --Graham
>>
>>
>
> _______________________________________________
>
> Cocoa-dev mailing list ([email protected])
>
> 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:
> https://lists.apple.com/mailman/options/cocoa-dev/lxr%40mac.com
>
> This email sent to [email protected]
_______________________________________________
Cocoa-dev mailing list ([email protected])
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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]