• Neil Roberts's avatar
    clutter-actor: Add a 'has_overlaps' virtual · 701440ef
    Neil Roberts authored
    This adds a virtual to ClutterActor so that an actor subclass can
    report whether it has overlapping primitives. ClutterActor uses this
    to determine whether it needs to use ClutterFlattenEffect to implement
    the opacity property. The default implementation of the virtual
    returns TRUE which means that most actors will end up being redirected
    offscreen when the opacity != 255. ClutterTexture and ClutterRectangle
    override this to return FALSE because they should never need to be
    redirected. ClutterClone overrides it to divert to the source.
    
    The values for the ClutterOffscreenRedirect enum have changed to:
    
    AUTOMATIC_FOR_OPACITY
    
     The actor will only be redirected if has_overlaps returns TRUE and
     the opacity is < 255
    
    ALWAYS_FOR_OPACITY
    
     The actor will always be redirected if the opacity < 255 regardless
     of the return value of has_overlaps
    
    ALWAYS
    
     The actor will always be redirected offscreen.
    
    This means that the property can't be used to prevent the actor from
    being redirected but only to increase the likelihood that it will be
    redirected.
    
    ClutterActor now adds and removes the flatten effect depending on
    whether flattening is needed directly in clutter_actor_paint(). There
    are new internal versions of add/remove_effect that don't queue a
    redraw. This means that ClutterFlattenEffect is now just a no-op
    subclass of ClutterOffscreen. It is only needed because
    ClutterOffscreen is abstract. Removing the effect also makes it so
    that the cached image will be freed as soon as an actor is repainted
    without being flattened.
    701440ef
clutter-flatten-effect.h 2.81 KB