Candera 3.12
VectorialRenderData and according interfaces were removed
VectorialRenderData and according interfaces in RenderDevice2D were removed because they were not used.
GlMaskEffect Scale behavior changed
In case that the size of the mask image was bigger than the size of the source image, the mask image was scaled down to the source image size. This behavior was not intended and changed as a bug fix. The GlMaskEffect allows to intentionally achieve the same scaling effect: Just use a dedicated mask node and apply there the according scale to the node transformation.
ProcessValueEvent sender changed from ProcessValueBehavior to Behavior
To enable a more generic processing of ProcessValueEvent the ProcessValueEvent sender has been changed from ProcessValueBehavior to Behavior. This allows also other behaviors to process values with a ProcessValueBehavior chain. Unfortunately the interface can't be changed is a way that allows backward compatibility. The creation of ProcessValueEvent is backward compatible. But the ProcessValueEvent::GetSender is not backward compatible. All usages of that interface have to be changed from ProcessValueBehavior const& to Behavior const&. The ProcessValueBehavior does not expose any additional interfaces. Hence, the Dynamic_Cast to a dedicated derived class is to only possible option for the sender. This is still fully backward compatible. Hence, the type change is the only required change.
AssetLoaderPostponedTasks argument have been added to the following interfaces:
virtual bool Candera::MetaInfo::PropertyMetaInfo::Set(HostType* object, const Char *value, Candera::AssetLoaderPostponedTasks* assetLoaderPostponedTasks) AssetProvider::CreateCompositeGroupByAssetId and AssetProvider::CreateCompositeGroup2DByAssetId In case of a override of the interface you must also provide the argument and delegate it where it is required. In case of a missing argument of a call of those interfaces you can safely provide a null pointer or provide a local (function stack) instance of AssetLoaderPostponedTasks. The AssetLoaderPostponedTasks instance will collect all initialization steps that have to be postponed and process them in the destructor of AssetLoaderPostponedTasks (scoped mechanism). In case of disposing the object involved in the call or disposing the result objects you have to call the Clear method of th AssetLoaderPostponedTasks instance.
Several clipping related issues have been fixed.
RenderNode::GetComputedBoundingRectangle with ignoreInvisible set to true did consider the clipping rectangle in the incorrect coordinate system (the clipping rectangle must be given in the parent space; the bounding rectangle must be in the local space; the transformation of the clipping rectangle to the local space was missing and has been fixed). Any custom workaround related to this has to be checked and adapted. TextNode2D::IsLayouterAttached did consider every layout as a text related layout (resulting in endless recursion with stack overflow in some use cases). Only layout implementations derived from TextNode2DLayouter are valid text related layout implementations and will correctly setup the corresponding values that are expected to be set for obtaining the corresponding bounding rectangle. Any incorrect custom text related layout implementation has to be adapted. BoundingRectTraverser delivered the bounding rectangle in the wrong space when the processed node (argument of Traverse) and the root node (argument of constructor) are the same. Any custom workaround related to this has to be checked and adapted. Layouter::Arrange provided incorrect arrange/clipping area values for OnArrange/OnClipping. The arrange area contained values from the previous layout run (the positioning is performed by the generic layout code after determining the actual size by the OnArrange call and therefore anyway not allowed to be performed by the derived implementation; values from the previous run caused incorrect behavior in layout implementations that do not consider this fact). The clipping area did not consider any outcome of the generic arrange processing and therefore contained incorrect values (for example infinite size for automatic size configuration and incorrect alignment results). The arrange/clipping area has been fixed. Any custom workaround related to custom OnClipping implementation has to be checked and adapted. Layouter::OnClipping did set the local space clipping area instead of parent space clipping rectangle on render nodes (the clipping expects the clipping rectangle in parent space). This has been fixed and in addition the layout clipping area is set for group nodes that have to be clipped when nested clipping is required (e.g. drawer control in list control). OverlayLayouter::OnArrange provided a too small actual size (this mainly has an impact in right-to-left-layout use cases). This has been fixed to consider the arrange area and in case of required clipping also the too large size (that is required for correct alignment in combination with clipping). Any custom workaround related to this has to be checked and adapted. ClippingSetterTraverser did not apply the correct clipping rectangles (due to some of the above issues the wrong space was used and clipping areas in nested clipping use cases had not been considered). This behavior has been fixed to consider the provided local clipping area and all nested available local clipping areas, and correctly intersect all all of them into a parent space clipping rectangle for each render node. Any custom workaround related to ClippingSetterTraverser has to be checked and adapted.
Deprecated TextBrush effects removed
The deprecated 2D effects with TextBrush have been removed from builds. A newly introduced flag CANDERA_DEPRECATED_TEXTBRUSH_ENABLED is turned OFF by default. For text the TextNode2D node type shall be used. The new flag reduces code size. If backward compatibility is required, then this flag can be set to true (e.g. for porting purpose).
-
The flag CANDERA_DEPRECATED_TEXTBRUSH_ENABLED and all related source code (TextBrush, related combined effects, caches, and so on) will be removed in one of the next releases!