Formatting
publish / publish (push) Successful in 15m37s

This commit is contained in:
khodowany
2026-09-14 23:56:06 -05:00
parent 86cf029ad7
commit bb96aaf95d
30 changed files with 1030 additions and 950 deletions
+47 -44
View File
@@ -19,13 +19,14 @@
#include <luma/render.hpp>
#include <luma/theme.hpp>
namespace {
class scope_exit {
public:
explicit scope_exit(std::function<void()> action);
scope_exit(scope_exit const&) = delete;
auto operator=(scope_exit const&) -> scope_exit& = delete;
scope_exit(scope_exit const &) = delete;
auto operator=(scope_exit const &) -> scope_exit & = delete;
~scope_exit();
private:
std::function<void()> action_{};
@@ -37,7 +38,7 @@ auto finite_rect(luma::rect value) -> std::bool_t {
return std::isfinite(value.x) && std::isfinite(value.y) && std::isfinite(value.width) && std::isfinite(value.height) && value.width >= 0.0F && value.height >= 0.0F;
}
auto title_height(luma::window_options const& options, std::float32_t line_height) -> std::float32_t {
auto title_height(luma::window_options const &options, std::float32_t line_height) -> std::float32_t {
if (!options.decorated) {
return {};
}
@@ -45,7 +46,7 @@ auto title_height(luma::window_options const& options, std::float32_t line_heigh
return std::min(desired, options.bounds.height);
}
auto title_bounds(luma::window_options const& options, std::float32_t line_height) -> luma::rect {
auto title_bounds(luma::window_options const &options, std::float32_t line_height) -> luma::rect {
return {
.x = options.bounds.x,
.y = options.bounds.y,
@@ -54,7 +55,7 @@ auto title_bounds(luma::window_options const& options, std::float32_t line_heigh
};
}
auto client_bounds(luma::window_options const& options, std::float32_t line_height) -> luma::rect {
auto client_bounds(luma::window_options const &options, std::float32_t line_height) -> luma::rect {
if (!options.decorated) {
return options.bounds;
}
@@ -77,14 +78,15 @@ auto unavailable(std::string message) -> std::expected<VALUE, modulus::error> {
return luma::detail::fail<VALUE>(luma::detail::error_unavailable, std::move(message));
}
auto make_event(luma::touch_event const& event, luma::touch_point point) -> luma::touch_event {
auto make_event(luma::touch_event const &event, luma::touch_point point) -> luma::touch_event {
return {
.points = {point},
.time = event.time,
};
}
scope_exit::scope_exit(std::function<void()> action) : action_{std::move(action)} {}
scope_exit::scope_exit(std::function<void()> action)
: action_{std::move(action)} {}
scope_exit::~scope_exit() {
if (action_) {
@@ -94,7 +96,8 @@ scope_exit::~scope_exit() {
}
luma::window::window(std::uint64_t id, luma::window_options options, std::unique_ptr<luma::control> content) : id_{id}, options_{std::move(options)}, content_{std::move(content)} {
luma::window::window(std::uint64_t id, luma::window_options options, std::unique_ptr<luma::control> content)
: id_{id}, options_{std::move(options)}, content_{std::move(content)} {
assert(id_ != 0);
assert(finite_rect(options_.bounds));
assert(content_ != nullptr);
@@ -105,7 +108,7 @@ auto luma::window::id() const -> std::uint64_t {
return id_;
}
auto luma::window::options() const -> luma::window_options const& {
auto luma::window::options() const -> luma::window_options const & {
assert(finite_rect(options_.bounds));
return options_;
}
@@ -126,12 +129,12 @@ auto luma::window::visible() const -> std::bool_t {
return options_.visible;
}
auto luma::window::content() -> luma::control* {
auto luma::window::content() -> luma::control * {
assert(content_ != nullptr);
return content_.get();
}
auto luma::window::content() const -> luma::control const* {
auto luma::window::content() const -> luma::control const * {
assert(content_ != nullptr);
return content_.get();
}
@@ -246,11 +249,11 @@ auto luma::window_manager::set_visible(std::uint64_t id, std::bool_t visible) ->
return {};
}
auto luma::window_manager::find(std::uint64_t id) -> luma::window* {
auto luma::window_manager::find(std::uint64_t id) -> luma::window * {
if (id == 0) {
return nullptr;
}
auto found = std::find_if(windows_.begin(), windows_.end(), [id](auto const& window) { return window && window->id() == id; });
auto found = std::find_if(windows_.begin(), windows_.end(), [id](auto const &window) { return window && window->id() == id; });
return found == windows_.end() ? nullptr : found->get();
}
@@ -265,7 +268,7 @@ auto luma::window_manager::clear() -> void {
active_touches_.clear();
}
auto luma::window_manager::measure(luma::draw_context& context, luma::theme const& theme, luma::constraints limits) -> luma::size {
auto luma::window_manager::measure(luma::draw_context &context, luma::theme const &theme, luma::constraints limits) -> luma::size {
title_line_height_ = theme.body.line_height;
++mutation_depth_;
auto guard = scope_exit{[this] {
@@ -273,7 +276,7 @@ auto luma::window_manager::measure(luma::draw_context& context, luma::theme cons
--mutation_depth_;
apply_pending_operations();
}};
for (auto& window : windows_) {
for (auto &window : windows_) {
assert(window != nullptr);
if (!window->visible()) {
continue;
@@ -281,12 +284,12 @@ auto luma::window_manager::measure(luma::draw_context& context, luma::theme cons
assert(window->content() != nullptr);
auto client = client_bounds(window->options(), title_line_height_);
window->content()->measure(context, theme, {
.min = {},
.max = {
.width = client.width,
.height = client.height,
},
});
.min = {},
.max = {
.width = client.width,
.height = client.height,
},
});
}
return luma::clamp(limits.max, limits);
}
@@ -300,7 +303,7 @@ auto luma::window_manager::arrange(luma::rect bounds) -> void {
apply_pending_operations();
}};
luma::control::arrange(bounds);
for (auto& window : windows_) {
for (auto &window : windows_) {
assert(window != nullptr);
if (window->visible()) {
assert(window->content() != nullptr);
@@ -309,7 +312,7 @@ auto luma::window_manager::arrange(luma::rect bounds) -> void {
}
}
auto luma::window_manager::draw(luma::draw_context& context, luma::theme const& theme) const -> void {
auto luma::window_manager::draw(luma::draw_context &context, luma::theme const &theme) const -> void {
title_line_height_ = theme.body.line_height;
++mutation_depth_;
auto guard = scope_exit{[this] {
@@ -317,7 +320,7 @@ auto luma::window_manager::draw(luma::draw_context& context, luma::theme const&
--mutation_depth_;
apply_pending_operations();
}};
for (auto const& window : windows_) {
for (auto const &window : windows_) {
assert(window != nullptr);
if (!window->visible()) {
continue;
@@ -333,15 +336,16 @@ auto luma::window_manager::draw(luma::draw_context& context, luma::theme const&
auto title = title_bounds(window->options(), title_line_height_);
context.fill_rect(title, theme.surface_active);
context.draw_text(window->options().title, {
.x = title.x + 8.0F,
.y = title.y + window_title_vertical_padding,
}, theme.body, theme.text);
.x = title.x + 8.0F,
.y = title.y + window_title_vertical_padding,
},
theme.body, theme.text);
}
context.stroke_rect(bounds, 1.0F, theme.border);
}
}
auto luma::window_manager::handle_touch(luma::touch_event const& event) -> std::bool_t {
auto luma::window_manager::handle_touch(luma::touch_event const &event) -> std::bool_t {
if (event.points.empty()) {
return false;
}
@@ -352,10 +356,10 @@ auto luma::window_manager::handle_touch(luma::touch_event const& event) -> std::
apply_pending_operations();
}};
auto handled = false;
for (auto const& point : event.points) {
for (auto const &point : event.points) {
if (auto captured = active_touches_.find(point.id); captured != active_touches_.end()) {
auto const window_id = captured->second;
auto* captured_window = find(window_id);
auto *captured_window = find(window_id);
auto const captured_visible = captured_window != nullptr && captured_window->visible();
if (captured_visible) {
assert(captured_window->content() != nullptr);
@@ -368,7 +372,6 @@ auto luma::window_manager::handle_touch(luma::touch_event const& event) -> std::
}
continue;
}
for (auto current = windows_.rbegin(); current != windows_.rend(); ++current) {
assert(*current != nullptr);
if (!(*current)->visible()) {
@@ -400,8 +403,8 @@ auto luma::window_manager::contains_effective(std::uint64_t id) const -> std::bo
if (id == 0) {
return false;
}
auto exists = std::find_if(windows_.begin(), windows_.end(), [id](auto const& window) { return window && window->id() == id; }) != windows_.end();
for (auto const& operation : pending_operations_) {
auto exists = std::find_if(windows_.begin(), windows_.end(), [id](auto const &window) { return window && window->id() == id; }) != windows_.end();
for (auto const &operation : pending_operations_) {
switch (operation.kind) {
case luma::window_manager::pending_kind::OPEN:
if (operation.id == id) {
@@ -426,7 +429,7 @@ auto luma::window_manager::contains_effective(std::uint64_t id) const -> std::bo
}
auto luma::window_manager::close_now(std::uint64_t id) const -> void {
auto found = std::find_if(windows_.begin(), windows_.end(), [id](auto const& window) { return window && window->id() == id; });
auto found = std::find_if(windows_.begin(), windows_.end(), [id](auto const &window) { return window && window->id() == id; });
if (found == windows_.end()) {
return;
}
@@ -442,7 +445,7 @@ auto luma::window_manager::close_now(std::uint64_t id) const -> void {
}
auto luma::window_manager::bring_to_front_now(std::uint64_t id) const -> void {
auto found = std::find_if(windows_.begin(), windows_.end(), [id](auto const& window) { return window && window->id() == id; });
auto found = std::find_if(windows_.begin(), windows_.end(), [id](auto const &window) { return window && window->id() == id; });
if (found == windows_.end()) {
return;
}
@@ -452,14 +455,14 @@ auto luma::window_manager::bring_to_front_now(std::uint64_t id) const -> void {
}
auto luma::window_manager::set_bounds_now(std::uint64_t id, luma::rect bounds) const -> void {
auto* window = const_cast<luma::window_manager*>(this)->find(id);
auto *window = const_cast<luma::window_manager *>(this)->find(id);
if (window != nullptr) {
static_cast<void>(window->set_bounds(bounds));
}
}
auto luma::window_manager::set_visible_now(std::uint64_t id, std::bool_t visible) const -> void {
auto* window = const_cast<luma::window_manager*>(this)->find(id);
auto *window = const_cast<luma::window_manager *>(this)->find(id);
if (window != nullptr) {
window->set_visible(visible);
}
@@ -471,7 +474,7 @@ auto luma::window_manager::apply_pending_operations() const -> void {
}
auto pending = std::vector<luma::window_manager::pending_operation>{};
pending.swap(pending_operations_);
for (auto& operation : pending) {
for (auto &operation : pending) {
switch (operation.kind) {
case luma::window_manager::pending_kind::OPEN:
if (operation.window) {
@@ -505,20 +508,20 @@ auto luma::window_manager::invalidate_layout() -> void {
--mutation_depth_;
apply_pending_operations();
}};
auto controls = std::vector<luma::control*>{};
auto controls = std::vector<luma::control *>{};
controls.reserve(windows_.size() + pending_operations_.size());
for (auto& window : windows_) {
for (auto &window : windows_) {
assert(window != nullptr);
assert(window->content() != nullptr);
controls.push_back(window->content());
}
for (auto& operation : pending_operations_) {
for (auto &operation : pending_operations_) {
if (operation.window) {
assert(operation.window->content() != nullptr);
controls.push_back(operation.window->content());
}
}
for (auto* control : controls) {
for (auto *control : controls) {
assert(control != nullptr);
control->invalidate_layout();
}
@@ -526,12 +529,12 @@ auto luma::window_manager::invalidate_layout() -> void {
auto luma::window_manager::bind_layout_invalidator(std::function<void()> invalidator) -> void {
luma::control::bind_layout_invalidator(invalidator);
for (auto& window : windows_) {
for (auto &window : windows_) {
assert(window != nullptr);
assert(window->content() != nullptr);
window->content()->bind_layout_invalidator(invalidator);
}
for (auto& operation : pending_operations_) {
for (auto &operation : pending_operations_) {
if (operation.window) {
assert(operation.window->content() != nullptr);
operation.window->content()->bind_layout_invalidator(invalidator);