Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

egui 学习

2022 4.13

根据不同的布局, 比如: 自上到下布局中,组件 自左到右/居中/自右到左 放置, 这里涉及到一个 frame_rect 和 widget_rect,分别表示 组件需要的空间大小, 组件本身的大小(包含margin)

还有一个justify, 这个参数用来控制一个组件是否需要铺满这个宽或高, 就是 widget_rect 的宽或高是满的

如果是垂直布局 水平居中对齐 或 水平布局 垂直居中对齐, 则 frame_rect 的宽或高是满的

拉伸边界线 无法让panel变宽, 原因是 拉伸改变了 ui.placer.region 的 max_rect, 但是最终生成的 Shape 是根据当前ui 的 ui.placer.region.min_rect,(根据代码中min_rect的注释, 有点难理解它的意思) 每一次分配一个新空间 (最终调用 allocate_space_impl), 会根据布局计算出需要的Rect, 然后修改 ui.placer.region的 min_rect 和 max_rect, 再移动 cursor 以确定下一次分配空间的位置.

2022 4.12 笔记

当实际分配的宽度不够某个窗口时, 窗口就会收缩, 而不管窗口有多大的宽度

关于 frame_rect 和 widget_rect,

frame_rect 表示: 根据布局得到一个空间, 用于放置 widget. widget_rect 表示: 一个 widget 的实际形状.

比如说: 水平居中布局, 这个 frame_rect 的宽度 等于 ui 的有效宽度

2022 3.13 笔记

当执行 App 的 update时, CtxRef对象 已经从Input得到了足够的数据, 比如获取到了 屏幕尺寸 鼠标移动 按键 等等.

当执行 egui::SidePanel::right("side_panel").min_width(250.0) 时, 只是构建了一个基本的 Panel对象, 当执行 panel.show(ctx, |ui|{}) 时, 会根据 当前有效区域 和 屏幕尺寸 构建一个 Ui 对象. panel 的layer_id 是 LayerId::background() Ui对象中, 会构建一个 Painter对象, Placer对象

Placer::new(max_rect, Layout::default()) 根据当前有效区域, 默认布局是 从上到下, 向左对齐,

Layout

方向:
    从上到下
    从下到上
    从左到右
    从右到左

对齐:
    Min: 左或上
    Center: 水平或垂直居中
    Max: 右或下

main_dir 主轴方向

main_wrap, 当到达主轴方向结束的地方时, 就截断

main_align, 主轴上 对齐方向

铺满规则

宽度铺满, 两种情况:
    1. 主轴垂直 且 水平方向 居中对齐
    2. 主轴水平 且 主轴的justify 为true

高度铺满, 两种情况:
    1. 主轴水平 且 垂直方向 居中对齐
    2. 主轴垂直 且 主轴的justify 为true

Ui对象

每次创建Ui对象时, ui的有效区域已经确定好了,

    ui.max_rect() 表示 ui的有效区域

layout, 包含了 组件的排列方式, 比如: 从上到下? 超出截断? 高度或宽度铺满?

placer, 包含了 min_

选中时 显示边框

参考 crates\egui\src\widgets\selected_label.rs

ScrollArea::vertical(), 宽度是自适应的, 如果需要父容器