This library looks / seems extremely promising... It's very clean and it appears to be very well thought out.
Right now, I'm experimenting with the API to see how well it will work with some rendering related tools. So far, it's looking promising but I've ran into a couple of issues that are triggering unexpected asserts. My test code is below:
MainWindow::MainWindow(Application * application)
{
auto describePanel_Color = [this](std::string const & title, Pixel::packedRGBA const & color)
{
Label * titleLabel = label_create();
label_text(titleLabel, title.c_str());
Label * redLabel = label_create();
label_text(redLabel, "Red:");
Slider * redSlider = slider_create();
slider_value(redSlider, .5f);
// slider_OnMoved(redSlider, listener(app, i_OnAngle, App));
Label * greenLabel = label_create();
label_text(greenLabel, "Green:");
Slider * greenSlider = slider_create();
slider_value(greenSlider, .5f);
// slider_OnMoved(greenSlider, listener(app, i_OnScale, App));
Label * blueLabel = label_create();
label_text(blueLabel, "Blue:");
Slider * blueSlider = slider_create();
slider_value(blueSlider, .5f);
// slider_OnMoved(blueSlider, listener(app, i_OnScale, App));
Layout * layout = layout_create(5, 4); // <--- why does ncols need to be >= 5. I'd expect 2 to be valid
layout_label(layout, titleLabel, 0, 0);
layout_label(layout, redLabel, 0, 1);
layout_slider(layout, redSlider, 1, 1);
layout_label(layout, greenLabel, 0, 2);
layout_slider(layout, greenSlider, 1, 2);
layout_label(layout, blueLabel, 0, 3);
layout_slider(layout, blueSlider, 1, 3);
layout_halign(layout, 0, 1, ekRIGHT);
layout_halign(layout, 0, 2, ekRIGHT);
layout_halign(layout, 0, 3, ekRIGHT);
layout_hmargin(layout, 0, 10);
layout_hmargin(layout, 1, 10);
Panel * panel = panel_create();
panel_layout(panel, layout);
return panel;
};
auto describePanel_Main = [&]()
{
Label * label = label_create();
label_text(label, "Hello!, I'm a label");
Button * button = button_push();
button_text(button, "Click Me!");
button_OnClick(button, IListen(this, MainWindow, onButton));
m_textView = textview_create();
m_view = view_create();
view_size(m_view, s2df(1024, 768));
view_OnDraw(m_view, IListen(this, MainWindow, onDraw));
Panel * panelColor0 = describePanel_Color("color0", m_color0);
Panel * panelColor1 = describePanel_Color("color1", m_color1);
// attempting to chain together multiple SplitView(s) to
// create 3 resizable columns <------
// ||XXXXXX||XXXXXX||XXXXXX||
// ||XXXXXX||XXXXXX||XXXXXX||
// ||XXXXXX||XXXXXX||XXXXXX||
// ||XXXXXX||XXXXXX||XXXXXX||
SplitView * split1 = splitview_vertical();
splitview_view( split1, m_view);
splitview_panel(split1, panelColor1);
splitview_size(split1, s2df(800, 480));
splitview_pos( split1, 0.25f);
SplitView * split0 = splitview_vertical();
splitview_panel(split0, panelColor0);
splitview_split(split0, split1);
splitview_size(split0, s2df(400, 480));
splitview_pos( split0, 0.5f);
Layout * layout = layout_create(1, 1);
layout_splitview(layout, split0, 0, 0);
Panel * panel = panel_create();
panel_layout(panel, layout);
return panel;
};
m_window = window_create(ekWINDOW_STDRES);
window_panel(m_window, describePanel_Main());
window_title(m_window, "Hello, C++!");
window_origin(m_window, v2df(500, 200));
window_OnClose(m_window, IListen(application, Application, onClose));
window_show(m_window);
}
the first issue is in describePanel_Color where I'm expecting to be able to use layout_create(2, 4) but instead anything with columns less than 5 causes an assert.
the second issue is when attempting to chain multiple horizontal SplitView(s) together to create 3 resizable columns (data | view/texture | data). Can SplitViews even be combined in this way?