Skip to main content

Candera 3.12

VectorialRenderData and respective interfaces were removed

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

GlMaskEffect Scale behavior changed

When 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 is regarded as a bug that is now fixed. With the GlMaskEffect the same scaling effect can be achieved, just use a dedicated mask node and apply there the appropriate 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 other behaviors to process values with a ProcessValueBehavior chain. Unfortunately, for the purposes of backward compatibility the interface can't be changed. Furthermore, although the creation of ProcessValueEvent is backward compatible, the ProcessValueEvent::GetSender is not. All usages of that interface have to be changed from ProcessValueBehavior const& to Behavior const&. The ProcessValueBehavior does not expose any additional interfaces. As such, the Dynamic_Cast to a dedicated derived class is the only possible option for the sender. This is still fully backward compatible. 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::CreateCompositeGroup2DByAssetId. When there is an override of the interface, you must also provide the argument and delegate it as necessary. In the case that there is a missing argument when calling those interfaces, you can safely provide a null pointer or provide a local (function stack) instance off AssetLoaderPostponedTasks. The AssetLoaderPostponedTasks instance will collect all initialization steps that have to be postponed and process them in the destructor of AssetLoaderPostponedTasks (scoped mechanism). When disposing the object involved in the call or when disposing the resulting 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 held the clipping rectangle in the wrong 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 considered 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 these will correctly set up the expected corresponding values in order to obtain 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) were 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 was setting 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 addition, 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 an actual size that was too small (this mainly has an impact in right-to-left-layout use cases). This has been fixed to allow consideration for the arrange area as well as, when clipping is required, sizes that are too large (which is required for correct alignment in combination with clipping). Any custom workaround related to this has to be checked and adapted. ClippingSetterTraverser was not applying 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 allow consideration for the provided local clipping area, all nested available local clipping areas, and the correct intersections of all of these into a parent space clipping rectangle for each render node. Any custom workaround related to ClippingSetterTraverser has to be checked and adapted.

Changed order of Courier Component::PostProcess

The execution order of Component::Execute() and Component::PostProcess() has changed.

Interfaces deprecated by CGI 3.7.0 and 3.8.0 have been removed

All interfaces that have been marked with CANDERA_DEPRECATED_3_7_0 or CANDERA_DEPRECATED_3_8_0 have been removed.

Deprecated TextBrush effects removed

The deprecated 2D effects with TextBrush have been removed from builds. A newly introduced flag CANDERA_DEPRECATED_TEXTBRUSH_ENABLED has been 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 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!