Skip to main content

Candera 3.12

VectorialRenderData and accordingrespective interfaces were removed

VectorialRenderData and accordingits respective interfaces in RenderDevice2D were removed because they were not used.

GlMaskEffect Scale behavior changed

In case thatWhen 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 changedis regarded as a bug fix.that Theis now fixed. With the GlMaskEffect allows to intentionally achieve the same scaling effect:effect Justcan be achieved, just use a dedicated mask node and apply there the accordingappropriate 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 also allows also other behaviors to process values with a ProcessValueBehavior chain. UnfortunatelyUnfortunately, for the purposes of backward compatibility the interface can't be changedchanged. isFurthermore, aalthough way that allows backward compatibility. Thethe creation of ProcessValueEvent is backward compatible. Butcompatible, the ProcessValueEvent::GetSender is not backward compatible.not. All usages of that interface have to be changed from ProcessValueBehavior const& to Behavior const&. The ProcessValueBehavior does not expose any additional interfaces. Hence,As such, the Dynamic_Cast to a dedicated derived class is tothe only possible option for the sender. This is still fully backward compatible. Hence,Accordingly, 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::CreateCompositeGroup2DByAssetIdCreateCompositeGroup2DByAssetId. InWhen casethere ofis aan override of the interfaceinterface, you must also provide the argument and delegate it whereas it is required.necessary. In the case ofthat there is a missing argument ofwhen a call ofcalling those interfacesinterfaces, you can safely provide a null pointer or provide a local (function stack) instance ofoff 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 ofWhen disposing the object involved in the call or when disposing the resultresulting objectsobjects, 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 considerheld the clipping rectangle in the incorrectwrong 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 considerconsidered every layout as a text text-related layout (resulting in endless recursion with stack overflow in some use cases). Only layout implementations derived from TextNode2DLayouter are valid text text-related layout implementationsimplementations, and these will correctly setupset up the expected corresponding values thatin are expectedorder to be set for obtainingobtain the corresponding bounding rectangle. Any incorrect custom text 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) arewere 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 exampleexample, 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 didwas setsetting the local space clipping area instead of the parent space clipping rectangle on render nodes (the clipping expects the clipping rectangle in parent space). This has been fixed and in additionaddition, the layout clipping area is now set for group nodes that have to be clipped when nested clipping is required (e.g. drawer control in list control). OverlayLayouter::OnArrange provided aan actual size that was too small actual size (this mainly has an impact in right-to-left-layout use cases). This has been fixed to considerallow consideration for the arrange area andas inwell caseas, of requiredwhen clipping alsois therequired, sizes that are too large size (thatwhich is required for correct alignment in combination with clipping). Any custom workaround related to this has to be checked and adapted. ClippingSetterTraverser didwas not applyapplying the correct clipping rectangles (due to some of the above issuesissues, the wrong space was used and clipping areas in nested clipping use cases had not been considered). This behavior has been fixed to considerallow consideration for the provided local clipping area andarea, all nested available local clipping areas, and correctlythe intersectcorrect allintersections of all of themthese 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 ishas been turned OFF by default. For texttext, 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)purposes).

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!