mirror of
https://repo.dec05eba.com/gpu-screen-recorder-ui
synced 2026-05-04 22:10:44 +09:00
Move settings ui to SettingsPage class, show different widgets for different settings page, show different widgets depending on combobox selections
This commit is contained in:
@@ -39,9 +39,14 @@ namespace gsr {
|
||||
Item &item = items[i];
|
||||
const mgl::FloatRect text_bounds = item.text.get_bounds();
|
||||
if(mgl::FloatRect(pos - mgl::vec2f(padding_left, padding_top), item_size).contains(mouse_pos)) {
|
||||
const size_t prev_selected_item = selected_item;
|
||||
selected_item = i;
|
||||
show_dropdown = false;
|
||||
remove_widget_as_selected_in_parent();
|
||||
|
||||
if(selected_item != prev_selected_item && on_selection_changed)
|
||||
on_selection_changed(item.text.get_string(), item.id);
|
||||
|
||||
return false;
|
||||
}
|
||||
pos.y += text_bounds.size.y + padding_top + padding_bottom;
|
||||
@@ -141,10 +146,16 @@ namespace gsr {
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
void ComboBox::set_selected_item(const std::string &id) {
|
||||
void ComboBox::set_selected_item(const std::string &id, bool trigger_event) {
|
||||
for(size_t i = 0; i < items.size(); ++i) {
|
||||
if(items[i].id == id) {
|
||||
auto &item = items[i];
|
||||
if(item.id == id) {
|
||||
const size_t prev_selected_item = selected_item;
|
||||
selected_item = i;
|
||||
|
||||
if(trigger_event && selected_item != prev_selected_item && on_selection_changed)
|
||||
on_selection_changed(item.text.get_string(), item.id);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace gsr {
|
||||
|
||||
// TODO: Handle start/end alignment
|
||||
const mgl::vec2f size = get_size();
|
||||
const mgl::vec2f parent_size = parent_widget ? parent_widget->get_size() : mgl::vec2f(0.0f, 0.0f);
|
||||
const mgl::vec2f parent_inner_size = parent_widget ? parent_widget->get_inner_size() : mgl::vec2f(0.0f, 0.0f);
|
||||
|
||||
const mgl::vec2f spacing = (spacing_scale * get_theme().window_height).floor();
|
||||
switch(orientation) {
|
||||
@@ -80,8 +80,8 @@ namespace gsr {
|
||||
// TODO: Do this parent widget alignment for horizontal alignment and for other types of widget alignment
|
||||
// and other widgets.
|
||||
// Also take this widget alignment into consideration in get_size.
|
||||
if(widget->get_horizontal_alignment() == Widget::Alignment::CENTER && parent_size.x > 0.001f)
|
||||
offset.x = floor(parent_size.x * 0.5f - widget_size.x * 0.5f);
|
||||
if(widget->get_horizontal_alignment() == Widget::Alignment::CENTER && parent_inner_size.x > 0.001f)
|
||||
offset.x = floor(parent_inner_size.x * 0.5f - widget_size.x * 0.5f);
|
||||
else if(content_alignment == Alignment::CENTER)
|
||||
offset.x = floor(size.x * 0.5f - widget_size.x * 0.5f);
|
||||
else
|
||||
|
||||
@@ -121,10 +121,16 @@ namespace gsr {
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
void RadioButton::set_selected_item(const std::string &id) {
|
||||
void RadioButton::set_selected_item(const std::string &id, bool trigger_event) {
|
||||
for(size_t i = 0; i < items.size(); ++i) {
|
||||
if(items[i].id == id) {
|
||||
auto &item = items[i];
|
||||
if(item.id == id) {
|
||||
const size_t prev_selected_item = selected_item;
|
||||
selected_item = i;
|
||||
|
||||
if(trigger_event && selected_item != prev_selected_item && on_selection_changed)
|
||||
on_selection_changed(item.text.get_string(), item.id);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace gsr {
|
||||
mgl_scissor prev_scissor;
|
||||
mgl_window_get_scissor(window.internal_window(), &prev_scissor);
|
||||
|
||||
const mgl::vec2f content_size = get_size();
|
||||
const mgl::vec2f content_size = get_inner_size();
|
||||
mgl_scissor new_scissor = {
|
||||
mgl_vec2i{(int)offset.x, (int)offset.y},
|
||||
mgl_vec2i{(int)content_size.x, (int)content_size.y}
|
||||
@@ -81,6 +81,13 @@ namespace gsr {
|
||||
if(!visible)
|
||||
return {0.0f, 0.0f};
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
mgl::vec2f ScrollablePage::get_inner_size() {
|
||||
if(!visible)
|
||||
return {0.0f, 0.0f};
|
||||
|
||||
const int margin_top = margin_top_scale * get_theme().window_height;
|
||||
const int margin_bottom = margin_bottom_scale * get_theme().window_height;
|
||||
const int margin_left = margin_left_scale * get_theme().window_height;
|
||||
|
||||
Reference in New Issue
Block a user