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/archive%40mail-archive.com
This email sent to [email protected]