Summary: marginLeft(node, margin) -> margin(node, CSSEdgeLeft, margin) This reduces the api surface of CSSLayout as well as puts the api more in line with the java version. This also adds support for CSSEdgeAll which java has had support for for a while. This also open up the possibility of doing margin(node, CSSEdgeLeft | CSSEdgeTop, margin) in the future. Reviewed By: lucasr Differential Revision: D3715201 fbshipit-source-id: ea81ed426f0f7853bb542355c01fc16ae4360238
94 lines
2.3 KiB
C
94 lines
2.3 KiB
C
/**
|
|
* Copyright (c) 2014-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <CSSLayout/CSSLayout.h>
|
|
#include <CSSLayout/CSSNodeList.h>
|
|
|
|
CSS_EXTERN_C_BEGIN
|
|
|
|
typedef struct CSSCachedMeasurement {
|
|
float availableWidth;
|
|
float availableHeight;
|
|
CSSMeasureMode widthMeasureMode;
|
|
CSSMeasureMode heightMeasureMode;
|
|
|
|
float computedWidth;
|
|
float computedHeight;
|
|
} CSSCachedMeasurement;
|
|
|
|
// This value was chosen based on empiracle data. Even the most complicated
|
|
// layouts should not require more than 16 entries to fit within the cache.
|
|
enum { CSS_MAX_CACHED_RESULT_COUNT = 16 };
|
|
|
|
typedef struct CSSLayout {
|
|
float position[4];
|
|
float dimensions[2];
|
|
CSSDirection direction;
|
|
|
|
float computedFlexBasis;
|
|
|
|
// Instead of recomputing the entire layout every single time, we
|
|
// cache some information to break early when nothing changed
|
|
uint32_t generationCount;
|
|
CSSDirection lastParentDirection;
|
|
|
|
uint32_t nextCachedMeasurementsIndex;
|
|
CSSCachedMeasurement cachedMeasurements[CSS_MAX_CACHED_RESULT_COUNT];
|
|
float measuredDimensions[2];
|
|
|
|
CSSCachedMeasurement cached_layout;
|
|
} CSSLayout;
|
|
|
|
typedef struct CSSStyle {
|
|
CSSDirection direction;
|
|
CSSFlexDirection flexDirection;
|
|
CSSJustify justifyContent;
|
|
CSSAlign alignContent;
|
|
CSSAlign alignItems;
|
|
CSSAlign alignSelf;
|
|
CSSPositionType positionType;
|
|
CSSWrapType flexWrap;
|
|
CSSOverflow overflow;
|
|
float flexGrow;
|
|
float flexShrink;
|
|
float flexBasis;
|
|
float margin[6];
|
|
float position[6];
|
|
float padding[6];
|
|
float border[6];
|
|
float dimensions[2];
|
|
float minDimensions[2];
|
|
float maxDimensions[2];
|
|
} CSSStyle;
|
|
|
|
typedef struct CSSNode {
|
|
CSSStyle style;
|
|
CSSLayout layout;
|
|
uint32_t lineIndex;
|
|
bool hasNewLayout;
|
|
bool isTextNode;
|
|
CSSNodeRef parent;
|
|
CSSNodeListRef children;
|
|
bool isDirty;
|
|
|
|
struct CSSNode *nextChild;
|
|
|
|
CSSSize (*measure)(void *context,
|
|
float width,
|
|
CSSMeasureMode widthMode,
|
|
float height,
|
|
CSSMeasureMode heightMode);
|
|
void (*print)(void *context);
|
|
void *context;
|
|
} CSSNode;
|
|
|
|
CSS_EXTERN_C_END
|