123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430 |
- /**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the LICENSE
- * file in the root directory of this source tree.
- */
- #pragma once
- #include <assert.h>
- #include <math.h>
- #include <stdarg.h>
- #include <stdint.h>
- #include <stdio.h>
- #include <stdlib.h>
- #ifndef __cplusplus
- #include <stdbool.h>
- #endif
- #include "YGEnums.h"
- #include "YGMacros.h"
- #include "YGValue.h"
- YG_EXTERN_C_BEGIN
- typedef struct YGSize {
- float width;
- float height;
- } YGSize;
- typedef struct YGConfig* YGConfigRef;
- typedef struct YGNode* YGNodeRef;
- typedef YGSize (*YGMeasureFunc)(
- YGNodeRef node,
- float width,
- YGMeasureMode widthMode,
- float height,
- YGMeasureMode heightMode);
- typedef float (
- *YGBaselineFunc)(YGNodeRef node, const float width, const float height);
- typedef void (*YGDirtiedFunc)(YGNodeRef node);
- typedef void (*YGPrintFunc)(YGNodeRef node);
- typedef void (*YGNodeCleanupFunc)(YGNodeRef node);
- typedef int (*YGLogger)(
- const YGConfigRef config,
- const YGNodeRef node,
- YGLogLevel level,
- const char* format,
- va_list args);
- typedef YGNodeRef (
- *YGCloneNodeFunc)(YGNodeRef oldNode, YGNodeRef owner, int childIndex);
- // YGNode
- WIN_EXPORT YGNodeRef YGNodeNew(void);
- WIN_EXPORT YGNodeRef YGNodeNewWithConfig(const YGConfigRef config);
- WIN_EXPORT YGNodeRef YGNodeClone(const YGNodeRef node);
- WIN_EXPORT void YGNodeFree(const YGNodeRef node);
- WIN_EXPORT void YGNodeFreeRecursiveWithCleanupFunc(
- const YGNodeRef node,
- YGNodeCleanupFunc cleanup);
- WIN_EXPORT void YGNodeFreeRecursive(const YGNodeRef node);
- WIN_EXPORT void YGNodeReset(const YGNodeRef node);
- WIN_EXPORT int32_t YGNodeGetInstanceCount(void);
- WIN_EXPORT void YGNodeInsertChild(
- const YGNodeRef node,
- const YGNodeRef child,
- const uint32_t index);
- WIN_EXPORT void YGNodeRemoveChild(const YGNodeRef node, const YGNodeRef child);
- WIN_EXPORT void YGNodeRemoveAllChildren(const YGNodeRef node);
- WIN_EXPORT YGNodeRef YGNodeGetChild(const YGNodeRef node, const uint32_t index);
- WIN_EXPORT YGNodeRef YGNodeGetOwner(const YGNodeRef node);
- WIN_EXPORT YGNodeRef YGNodeGetParent(const YGNodeRef node);
- WIN_EXPORT uint32_t YGNodeGetChildCount(const YGNodeRef node);
- WIN_EXPORT void YGNodeSetChildren(
- YGNodeRef const owner,
- const YGNodeRef children[],
- const uint32_t count);
- WIN_EXPORT void YGNodeSetIsReferenceBaseline(
- YGNodeRef node,
- bool isReferenceBaseline);
- WIN_EXPORT bool YGNodeIsReferenceBaseline(YGNodeRef node);
- WIN_EXPORT void YGNodeCalculateLayout(
- const YGNodeRef node,
- const float availableWidth,
- const float availableHeight,
- const YGDirection ownerDirection);
- // Mark a node as dirty. Only valid for nodes with a custom measure function
- // set.
- //
- // Yoga knows when to mark all other nodes as dirty but because nodes with
- // measure functions depend on information not known to Yoga they must perform
- // this dirty marking manually.
- WIN_EXPORT void YGNodeMarkDirty(const YGNodeRef node);
- // Marks the current node and all its descendants as dirty.
- //
- // Intended to be used for Uoga benchmarks. Don't use in production, as calling
- // `YGCalculateLayout` will cause the recalculation of each and every node.
- WIN_EXPORT void YGNodeMarkDirtyAndPropogateToDescendants(const YGNodeRef node);
- WIN_EXPORT void YGNodePrint(const YGNodeRef node, const YGPrintOptions options);
- WIN_EXPORT bool YGFloatIsUndefined(const float value);
- WIN_EXPORT bool YGNodeCanUseCachedMeasurement(
- const YGMeasureMode widthMode,
- const float width,
- const YGMeasureMode heightMode,
- const float height,
- const YGMeasureMode lastWidthMode,
- const float lastWidth,
- const YGMeasureMode lastHeightMode,
- const float lastHeight,
- const float lastComputedWidth,
- const float lastComputedHeight,
- const float marginRow,
- const float marginColumn,
- const YGConfigRef config);
- WIN_EXPORT void YGNodeCopyStyle(
- const YGNodeRef dstNode,
- const YGNodeRef srcNode);
- WIN_EXPORT void* YGNodeGetContext(YGNodeRef node);
- WIN_EXPORT void YGNodeSetContext(YGNodeRef node, void* context);
- void YGConfigSetPrintTreeFlag(YGConfigRef config, bool enabled);
- bool YGNodeHasMeasureFunc(YGNodeRef node);
- WIN_EXPORT void YGNodeSetMeasureFunc(YGNodeRef node, YGMeasureFunc measureFunc);
- bool YGNodeHasBaselineFunc(YGNodeRef node);
- void YGNodeSetBaselineFunc(YGNodeRef node, YGBaselineFunc baselineFunc);
- YGDirtiedFunc YGNodeGetDirtiedFunc(YGNodeRef node);
- void YGNodeSetDirtiedFunc(YGNodeRef node, YGDirtiedFunc dirtiedFunc);
- void YGNodeSetPrintFunc(YGNodeRef node, YGPrintFunc printFunc);
- WIN_EXPORT bool YGNodeGetHasNewLayout(YGNodeRef node);
- WIN_EXPORT void YGNodeSetHasNewLayout(YGNodeRef node, bool hasNewLayout);
- YGNodeType YGNodeGetNodeType(YGNodeRef node);
- void YGNodeSetNodeType(YGNodeRef node, YGNodeType nodeType);
- WIN_EXPORT bool YGNodeIsDirty(YGNodeRef node);
- bool YGNodeLayoutGetDidUseLegacyFlag(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetDirection(
- const YGNodeRef node,
- const YGDirection direction);
- WIN_EXPORT YGDirection YGNodeStyleGetDirection(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetFlexDirection(
- const YGNodeRef node,
- const YGFlexDirection flexDirection);
- WIN_EXPORT YGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetJustifyContent(
- const YGNodeRef node,
- const YGJustify justifyContent);
- WIN_EXPORT YGJustify YGNodeStyleGetJustifyContent(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetAlignContent(
- const YGNodeRef node,
- const YGAlign alignContent);
- WIN_EXPORT YGAlign YGNodeStyleGetAlignContent(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetAlignItems(
- const YGNodeRef node,
- const YGAlign alignItems);
- WIN_EXPORT YGAlign YGNodeStyleGetAlignItems(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetAlignSelf(
- const YGNodeRef node,
- const YGAlign alignSelf);
- WIN_EXPORT YGAlign YGNodeStyleGetAlignSelf(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetPositionType(
- const YGNodeRef node,
- const YGPositionType positionType);
- WIN_EXPORT YGPositionType YGNodeStyleGetPositionType(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetFlexWrap(
- const YGNodeRef node,
- const YGWrap flexWrap);
- WIN_EXPORT YGWrap YGNodeStyleGetFlexWrap(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetOverflow(
- const YGNodeRef node,
- const YGOverflow overflow);
- WIN_EXPORT YGOverflow YGNodeStyleGetOverflow(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetDisplay(
- const YGNodeRef node,
- const YGDisplay display);
- WIN_EXPORT YGDisplay YGNodeStyleGetDisplay(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetFlex(const YGNodeRef node, const float flex);
- WIN_EXPORT float YGNodeStyleGetFlex(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetFlexGrow(
- const YGNodeRef node,
- const float flexGrow);
- WIN_EXPORT float YGNodeStyleGetFlexGrow(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetFlexShrink(
- const YGNodeRef node,
- const float flexShrink);
- WIN_EXPORT float YGNodeStyleGetFlexShrink(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetFlexBasis(
- const YGNodeRef node,
- const float flexBasis);
- WIN_EXPORT void YGNodeStyleSetFlexBasisPercent(
- const YGNodeRef node,
- const float flexBasis);
- WIN_EXPORT void YGNodeStyleSetFlexBasisAuto(const YGNodeRef node);
- WIN_EXPORT YGValue YGNodeStyleGetFlexBasis(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetPosition(
- const YGNodeRef node,
- const YGEdge edge,
- const float position);
- WIN_EXPORT void YGNodeStyleSetPositionPercent(
- const YGNodeRef node,
- const YGEdge edge,
- const float position);
- WIN_EXPORT YGValue
- YGNodeStyleGetPosition(const YGNodeRef node, const YGEdge edge);
- WIN_EXPORT void YGNodeStyleSetMargin(
- const YGNodeRef node,
- const YGEdge edge,
- const float margin);
- WIN_EXPORT void YGNodeStyleSetMarginPercent(
- const YGNodeRef node,
- const YGEdge edge,
- const float margin);
- WIN_EXPORT void YGNodeStyleSetMarginAuto(
- const YGNodeRef node,
- const YGEdge edge);
- WIN_EXPORT YGValue
- YGNodeStyleGetMargin(const YGNodeRef node, const YGEdge edge);
- WIN_EXPORT void YGNodeStyleSetPadding(
- const YGNodeRef node,
- const YGEdge edge,
- const float padding);
- WIN_EXPORT void YGNodeStyleSetPaddingPercent(
- const YGNodeRef node,
- const YGEdge edge,
- const float padding);
- WIN_EXPORT YGValue
- YGNodeStyleGetPadding(const YGNodeRef node, const YGEdge edge);
- WIN_EXPORT void YGNodeStyleSetBorder(
- const YGNodeRef node,
- const YGEdge edge,
- const float border);
- WIN_EXPORT float YGNodeStyleGetBorder(const YGNodeRef node, const YGEdge edge);
- WIN_EXPORT void YGNodeStyleSetWidth(const YGNodeRef node, const float width);
- WIN_EXPORT void YGNodeStyleSetWidthPercent(
- const YGNodeRef node,
- const float width);
- WIN_EXPORT void YGNodeStyleSetWidthAuto(const YGNodeRef node);
- WIN_EXPORT YGValue YGNodeStyleGetWidth(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetHeight(const YGNodeRef node, const float height);
- WIN_EXPORT void YGNodeStyleSetHeightPercent(
- const YGNodeRef node,
- const float height);
- WIN_EXPORT void YGNodeStyleSetHeightAuto(const YGNodeRef node);
- WIN_EXPORT YGValue YGNodeStyleGetHeight(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetMinWidth(
- const YGNodeRef node,
- const float minWidth);
- WIN_EXPORT void YGNodeStyleSetMinWidthPercent(
- const YGNodeRef node,
- const float minWidth);
- WIN_EXPORT YGValue YGNodeStyleGetMinWidth(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetMinHeight(
- const YGNodeRef node,
- const float minHeight);
- WIN_EXPORT void YGNodeStyleSetMinHeightPercent(
- const YGNodeRef node,
- const float minHeight);
- WIN_EXPORT YGValue YGNodeStyleGetMinHeight(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetMaxWidth(
- const YGNodeRef node,
- const float maxWidth);
- WIN_EXPORT void YGNodeStyleSetMaxWidthPercent(
- const YGNodeRef node,
- const float maxWidth);
- WIN_EXPORT YGValue YGNodeStyleGetMaxWidth(const YGNodeRef node);
- WIN_EXPORT void YGNodeStyleSetMaxHeight(
- const YGNodeRef node,
- const float maxHeight);
- WIN_EXPORT void YGNodeStyleSetMaxHeightPercent(
- const YGNodeRef node,
- const float maxHeight);
- WIN_EXPORT YGValue YGNodeStyleGetMaxHeight(const YGNodeRef node);
- // Yoga specific properties, not compatible with flexbox specification Aspect
- // ratio control the size of the undefined dimension of a node. Aspect ratio is
- // encoded as a floating point value width/height. e.g. A value of 2 leads to a
- // node with a width twice the size of its height while a value of 0.5 gives the
- // opposite effect.
- //
- // - On a node with a set width/height aspect ratio control the size of the
- // unset dimension
- // - On a node with a set flex basis aspect ratio controls the size of the node
- // in the cross axis if unset
- // - On a node with a measure function aspect ratio works as though the measure
- // function measures the flex basis
- // - On a node with flex grow/shrink aspect ratio controls the size of the node
- // in the cross axis if unset
- // - Aspect ratio takes min/max dimensions into account
- WIN_EXPORT void YGNodeStyleSetAspectRatio(
- const YGNodeRef node,
- const float aspectRatio);
- WIN_EXPORT float YGNodeStyleGetAspectRatio(const YGNodeRef node);
- WIN_EXPORT float YGNodeLayoutGetLeft(const YGNodeRef node);
- WIN_EXPORT float YGNodeLayoutGetTop(const YGNodeRef node);
- WIN_EXPORT float YGNodeLayoutGetRight(const YGNodeRef node);
- WIN_EXPORT float YGNodeLayoutGetBottom(const YGNodeRef node);
- WIN_EXPORT float YGNodeLayoutGetWidth(const YGNodeRef node);
- WIN_EXPORT float YGNodeLayoutGetHeight(const YGNodeRef node);
- WIN_EXPORT YGDirection YGNodeLayoutGetDirection(const YGNodeRef node);
- WIN_EXPORT bool YGNodeLayoutGetHadOverflow(const YGNodeRef node);
- bool YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(const YGNodeRef node);
- // Get the computed values for these nodes after performing layout. If they were
- // set using point values then the returned value will be the same as
- // YGNodeStyleGetXXX. However if they were set using a percentage value then the
- // returned value is the computed value used during layout.
- WIN_EXPORT float YGNodeLayoutGetMargin(const YGNodeRef node, const YGEdge edge);
- WIN_EXPORT float YGNodeLayoutGetBorder(const YGNodeRef node, const YGEdge edge);
- WIN_EXPORT float YGNodeLayoutGetPadding(
- const YGNodeRef node,
- const YGEdge edge);
- WIN_EXPORT void YGConfigSetLogger(const YGConfigRef config, YGLogger logger);
- WIN_EXPORT void YGAssert(const bool condition, const char* message);
- WIN_EXPORT void YGAssertWithNode(
- const YGNodeRef node,
- const bool condition,
- const char* message);
- WIN_EXPORT void YGAssertWithConfig(
- const YGConfigRef config,
- const bool condition,
- const char* message);
- // Set this to number of pixels in 1 point to round calculation results If you
- // want to avoid rounding - set PointScaleFactor to 0
- WIN_EXPORT void YGConfigSetPointScaleFactor(
- const YGConfigRef config,
- const float pixelsInPoint);
- void YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour(
- const YGConfigRef config,
- const bool shouldDiffLayout);
- // Yoga previously had an error where containers would take the maximum space
- // possible instead of the minimum like they are supposed to. In practice this
- // resulted in implicit behaviour similar to align-self: stretch; Because this
- // was such a long-standing bug we must allow legacy users to switch back to
- // this behaviour.
- WIN_EXPORT void YGConfigSetUseLegacyStretchBehaviour(
- const YGConfigRef config,
- const bool useLegacyStretchBehaviour);
- // YGConfig
- WIN_EXPORT YGConfigRef YGConfigNew(void);
- WIN_EXPORT void YGConfigFree(const YGConfigRef config);
- WIN_EXPORT void YGConfigCopy(const YGConfigRef dest, const YGConfigRef src);
- WIN_EXPORT int32_t YGConfigGetInstanceCount(void);
- WIN_EXPORT void YGConfigSetExperimentalFeatureEnabled(
- const YGConfigRef config,
- const YGExperimentalFeature feature,
- const bool enabled);
- WIN_EXPORT bool YGConfigIsExperimentalFeatureEnabled(
- const YGConfigRef config,
- const YGExperimentalFeature feature);
- // Using the web defaults is the prefered configuration for new projects. Usage
- // of non web defaults should be considered as legacy.
- WIN_EXPORT void YGConfigSetUseWebDefaults(
- const YGConfigRef config,
- const bool enabled);
- WIN_EXPORT bool YGConfigGetUseWebDefaults(const YGConfigRef config);
- WIN_EXPORT void YGConfigSetCloneNodeFunc(
- const YGConfigRef config,
- const YGCloneNodeFunc callback);
- // Export only for C#
- WIN_EXPORT YGConfigRef YGConfigGetDefault(void);
- WIN_EXPORT void YGConfigSetContext(const YGConfigRef config, void* context);
- WIN_EXPORT void* YGConfigGetContext(const YGConfigRef config);
- WIN_EXPORT float YGRoundValueToPixelGrid(
- const float value,
- const float pointScaleFactor,
- const bool forceCeil,
- const bool forceFloor);
- YG_EXTERN_C_END
- #ifdef __cplusplus
- #include <functional>
- #include <vector>
- // Calls f on each node in the tree including the given node argument.
- extern void YGTraversePreOrder(
- YGNodeRef const node,
- std::function<void(YGNodeRef node)>&& f);
- extern void YGNodeSetChildren(
- YGNodeRef const owner,
- const std::vector<YGNodeRef>& children);
- #endif
|