• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: mouseDown: with Core Animation
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mouseDown: with Core Animation


  • Subject: Re: mouseDown: with Core Animation
  • From: Quincey Morris <email@hidden>
  • Date: Fri, 1 Feb 2008 21:41:07 -0800


On Feb 1, 2008, at 17:11, Keith Duncan wrote:

I decided to use Core Animation for the shadows and simply have my control draw it's content. One particular view is a calendar which selects a day in mouseDown:, the code works perfectly without Core Animation layer backing enabled; however when I enable it random days are selected instead of the one I intended.

I discovered that the reason behind this was that I got the mouse down point using convertPointFromBase:, changing this to use convertPoint:fromView: with a nil view argument (I assumed this was the same as sending my previous message) works as expected.

I believe your assumption is incorrect. convertPoint:fromView:NIL converts from window coordinates to view coordinates. convertPointFromBase: converts from base coordinates to view coordinates, and base coordinates are defined by the CA layer.


Here's the relevant quote from the Leopard Developer Release Notes:

Pixel Alignment and Transforming View Coordinates To and From "Base" Space (Updated since WWDC 2007 Seed)

In Leopard, NSView provides a new set of methods that should be used when performing pixel-alignment of view content. They provide the means to transform geometry to and from a "base" coordinate space that is pixel-aligned with the backing store into which the view is being drawn

	- (NSRect)convertRectToBase:(NSRect)aRect;
	- (NSPoint)convertPointToBase:(NSPoint)aPoint;
	- (NSSize)convertSizeToBase:(NSSize)aSize;
	- (NSRect)convertRectFromBase:(NSRect)aRect;
	- (NSPoint)convertPointFromBase:(NSPoint)aPoint;
	- (NSSize)convertSizeFromBase:(NSSize)aSize;

For conventional view rendering, in which a view hierarchy is drawn flattened into a window backing store, this "base" space is the same as the coordinate system of the window, and the results of using these new methods are the same as converting geometry to and from view "nil" using the existing -covert[Rect/Point/Size]:[to/ from]View: methods.

Views that are rendered into backing layers in a Core Animation layer tree, however, have their own individual backing stores, which may be aligned such that window space is not necessarily the appropriate coordinate system in which to perform pixel alignment calculations."

Mouse event locations are in window coordinates, so passing them to convertPointFromBase will accidentally work with no layer backing, but fail with layer backing turned on. As you saw.



_______________________________________________

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


  • Follow-Ups:
    • Re: mouseDown: with Core Animation
      • From: Keith Duncan <email@hidden>
References: 
 >mouseDown: with Core Animation (From: Keith Duncan <email@hidden>)

  • Prev by Date: Relationships during awakeFromInsert
  • Next by Date: Howto issue stopModal to NSApp if the Window is close?
  • Previous by thread: mouseDown: with Core Animation
  • Next by thread: Re: mouseDown: with Core Animation
  • Index(es):
    • Date
    • Thread