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 (Cocoa-dev@lists.apple.com) 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 arch...@mail-archive.com