SimpleWindow
载入中...
搜索中...
未找到
GridLayout.h
1#pragma once
2
3#include "LayoutHost.h"
4#include "List.h"
5
6namespace sw
7{
15 uint16_t row;
16
20 uint16_t column;
21
25 uint16_t rowSpan;
26
30 uint16_t columnSpan;
31
36
40 GridLayoutTag(uint16_t row, uint16_t column, uint16_t rowSpan, uint16_t columnSpan);
41
45 GridLayoutTag(uint16_t row, uint16_t column);
46
50 GridLayoutTag(uint64_t layoutTag);
51
55 operator uint64_t() const;
56 };
57
61 enum class GridRCType {
62 FixSize, // 固定大小
63 AutoSize, // 自动大小
64 FillRemain, // 填充剩余空间
65 };
66
70 struct GridRow {
74 GridRCType type;
75
79 double height;
80
85
89 GridRow(GridRCType type, double height);
90
94 GridRow(double height);
95 };
96
100 struct FixSizeGridRow : public GridRow {
105 };
106
110 struct AutoSizeGridRow : public GridRow {
115 };
116
120 struct FillRemainGridRow : public GridRow {
124 FillRemainGridRow(double proportion = 1);
125 };
126
130 struct GridColumn {
134 GridRCType type;
135
139 double width;
140
145
149 GridColumn(GridRCType type, double width);
150
155 };
156
165 };
166
176
184 FillRemainGridColumn(double proportion = 1);
185 };
186
190 class GridLayout : public LayoutHost
191 {
192 private:
196 struct _ChildInfo {
197 ILayout *instance; // 子元素对象
198 GridLayoutTag layoutTag; // 布局标记
199 GridRCType rowMeasureType; // 元素measure行时的类型
200 GridRCType colMeasureType; // 元素measure列时的类型
201 };
202
206 struct _RowInfo {
207 GridRow row; // 行
208 double size = 0; // 所需空间大小
209 double proportion = 0; // 类型为FillRemain时该字段保存该行的高度占比,范围为0~1
210 };
211
215 struct _ColInfo {
216 GridColumn col; // 列
217 double size = 0; // 所需空间大小
218 double proportion = 0; // 类型为FillRemain时该字段保存该列的宽度占比,范围为0~1
219 };
220
224 struct {
225 std::vector<_RowInfo> rowsInfo; // 行信息
226 std::vector<_ColInfo> colsInfo; // 列信息
227 std::vector<_ChildInfo> childrenInfo; // 子元素信息
228 std::vector<Rect> cells; // 保存格信息
229 } _internalData;
230
231 public:
236
241
247 virtual Size MeasureOverride(const Size &availableSize) override;
248
253 virtual void ArrangeOverride(const Size &finalSize) override;
254
255 private:
259 void _UpdateInternalData();
260
264 Rect &_GetCell(int row, int col);
265 };
266}
网格布局方式
Definition GridLayout.h:191
virtual void ArrangeOverride(const Size &finalSize) override
安排子元素的位置,可重写该函数以实现自定义布局
List< GridColumn > columns
列定义
Definition GridLayout.h:240
List< GridRow > rows
行定义
Definition GridLayout.h:235
virtual Size MeasureOverride(const Size &availableSize) override
测量元素所需尺寸,无需考虑边框和边距
布局接口
Definition ILayout.h:13
用于托管元素的布局方式的对象类型,是所有布局方式类型的基类
Definition LayoutHost.h:11
列表类,内部维护了一个指向std::vector的智能指针
Definition List.h:27
自动宽度的列
Definition GridLayout.h:170
AutoSizeGridColumn()
初始化AutoSizeGridColumn
自动高度的行
Definition GridLayout.h:110
AutoSizeGridRow()
初始化AutoSizeGridRow
填充剩余宽度的列
Definition GridLayout.h:180
FillRemainGridColumn(double proportion=1)
初始化FillRemainGridColumn
填充剩余高度的行
Definition GridLayout.h:120
FillRemainGridRow(double proportion=1)
初始化FillRemainGridRow
固定宽度的列
Definition GridLayout.h:160
FixSizeGridColumn(double width)
初始化FixSizeGridColumn
固定高度的行
Definition GridLayout.h:100
FixSizeGridRow(double height)
初始化FixSizeGridRow
网格中的列信息
Definition GridLayout.h:130
GridColumn(double width)
固定大小的列
GridRCType type
类型
Definition GridLayout.h:134
GridColumn(GridRCType type, double width)
初始化GridColumn
GridColumn()
创建一个FillRemain的GridColumn
double width
宽度
Definition GridLayout.h:139
网格布局方式的布局标记
Definition GridLayout.h:11
GridLayoutTag()
GridLayoutTag默认值
uint16_t rowSpan
所跨行数
Definition GridLayout.h:25
uint16_t row
所在行
Definition GridLayout.h:15
GridLayoutTag(uint16_t row, uint16_t column)
初始化GridLayoutTag
uint16_t column
所在列
Definition GridLayout.h:20
uint16_t columnSpan
所跨列数
Definition GridLayout.h:30
GridLayoutTag(uint64_t layoutTag)
从LayoutTag创建
GridLayoutTag(uint16_t row, uint16_t column, uint16_t rowSpan, uint16_t columnSpan)
初始化GridLayoutTag
网格中的行信息
Definition GridLayout.h:70
GridRow(GridRCType type, double height)
初始化GridRow
GridRow()
创建一个FillRemain的GridRow
GridRow(double height)
固定大小的行
GridRCType type
类型
Definition GridLayout.h:74
double height
高度
Definition GridLayout.h:79
表示一个矩形区域
Definition Rect.h:17
尺寸
Definition Size.h:15