On Tue, 2008-02-26 at 17:28 +0000, Matthew Allum wrote: > So clutter has 2 painting modes - the regular one you see and the > picking one - which essentially just renders offscreen per reactive > actor color coded silhouettes (usually just quads) of actors so it can > quickly figure out what actor a pointer event relates to. Thats > basically what the above is doing though Im not sure why we are checking > the mapped flag - that probably isn't needed - pippin, ebassi ?
Thanks. I'd really like some more clues about this because I hate to write about something I don't understand. I understand that all containers must call clutter_actor_pick() on all their children(), but I don't understand what regular actors should do in their ClutterActor::pick(): implementation. Most of the pick() implementations in core clutter just use the default implementation in ClutterActor, which draws a rectangle. I can't find any non-container pick() implementation in clutter or tidy that doesn't use that. Below are some more that I found in Tidy, but I don't see a pattern yet, so I don't see what they are actually trying to achieve. If this is just for some kind of cursor-is-inside-the-shape detection then why is the color significant? Why do some just call their paint() function instead of drawing an outline? static void tidy_frame_pick (ClutterActor *actor, const ClutterColor *pick_color) { /* chain up, so we get a box with our coordinates */ CLUTTER_ACTOR_CLASS (tidy_frame_parent_class)->pick (actor, pick_color); /* paint our child, if any */ if (CLUTTER_ACTOR_IS_MAPPED (actor)) { TidyFramePrivate *priv = TIDY_FRAME (actor)->priv; if (priv->child && CLUTTER_ACTOR_IS_MAPPED (priv->child)) clutter_actor_paint (priv->child); } } static void tidy_scroll_view_pick (ClutterActor *actor, const ClutterColor *color) { gint x, y, width, height; TidyScrollViewPrivate *priv = TIDY_SCROLL_VIEW (actor)->priv; /* Paint a background */ cogl_color (color); x = CLUTTER_UNITS_TO_INT (priv->box.x1); y = CLUTTER_UNITS_TO_INT (priv->box.y1); width = CLUTTER_UNITS_TO_INT (priv->box.x2) - x; height = CLUTTER_UNITS_TO_INT (priv->box.y2) - y; cogl_rectangle (x, y, width, height); tidy_scroll_view_paint (actor); } static void tidy_notebook_pick (ClutterActor *self, const ClutterColor *color) { tidy_notebook_paint (self); } static void tidy_viewport_pick (ClutterActor *self, const ClutterColor *color) { tidy_viewport_paint (self); } -- [EMAIL PROTECTED] www.murrayc.com www.openismus.com > -- To unsubscribe send a mail to [EMAIL PROTECTED]