Update active widgets on resolutions list when ribbon widget is scrolled

This commit is contained in:
Deve 2019-02-26 22:10:20 +01:00
parent ebde419566
commit cdff36f840
4 changed files with 32 additions and 4 deletions

View File

@ -62,6 +62,9 @@ DynamicRibbonWidget::DynamicRibbonWidget(const bool combo, const bool multi_row)
m_item_count_hint = 0; m_item_count_hint = 0;
m_max_label_width = 0; m_max_label_width = 0;
m_scroll_callback.callback = NULL;
m_scroll_callback.data = NULL;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
DynamicRibbonWidget::~DynamicRibbonWidget() DynamicRibbonWidget::~DynamicRibbonWidget()
@ -821,6 +824,11 @@ void DynamicRibbonWidget::scroll(int x_delta, bool evenIfDeactivated)
updateItemDisplay(); updateItemDisplay();
if (m_scroll_callback.callback != NULL)
{
m_scroll_callback.callback(m_scroll_callback.data);
}
// update selection markers in child ribbon // update selection markers in child ribbon
if (m_combo) if (m_combo)
{ {

View File

@ -64,6 +64,12 @@ namespace GUIEngine
unsigned int m_badges; unsigned int m_badges;
}; };
struct DynamicRibbonScrollCallback
{
void* data;
void (*callback)(void* data);
};
/** /**
* \brief An extended version of RibbonWidget, with more capabilities. * \brief An extended version of RibbonWidget, with more capabilities.
* A dynamic ribbon builds upon RibbonWidget, adding dynamic contents creation and sizing, * A dynamic ribbon builds upon RibbonWidget, adding dynamic contents creation and sizing,
@ -191,6 +197,7 @@ namespace GUIEngine
/** Max length of a label, in characters */ /** Max length of a label, in characters */
unsigned int m_max_label_length; unsigned int m_max_label_length;
DynamicRibbonScrollCallback m_scroll_callback;
public: public:
LEAK_CHECK() LEAK_CHECK()
@ -313,6 +320,12 @@ namespace GUIEngine
/** Set max length of displayed text. */ /** Set max length of displayed text. */
void setMaxLabelLength(int length) { m_max_label_length = length; } void setMaxLabelLength(int length) { m_max_label_length = length; }
void registerScrollCallback(void (*callback)(void* data), void* data)
{
m_scroll_callback.callback = callback;
m_scroll_callback.data = data;
}
}; };
} }

View File

@ -191,11 +191,10 @@ void OptionsScreenVideo::init()
assert( vsync != NULL ); assert( vsync != NULL );
vsync->setState( UserConfigParams::m_vsync ); vsync->setState( UserConfigParams::m_vsync );
// ---- video modes // ---- video modes
DynamicRibbonWidget* res = getWidget<DynamicRibbonWidget>("resolutions"); DynamicRibbonWidget* res = getWidget<DynamicRibbonWidget>("resolutions");
assert( res != NULL ); assert(res != NULL);
res->registerScrollCallback(onScrollResolutionsList, this);
CheckBoxWidget* full = getWidget<CheckBoxWidget>("fullscreen"); CheckBoxWidget* full = getWidget<CheckBoxWidget>("fullscreen");
assert( full != NULL ); assert( full != NULL );
@ -398,6 +397,14 @@ void OptionsScreenVideo::updateResolutionsList()
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void OptionsScreenVideo::onScrollResolutionsList(void* data)
{
OptionsScreenVideo* screen = (OptionsScreenVideo*)data;
screen->updateResolutionsList();
}
// ----------------------------------------------------------------------------
void OptionsScreenVideo::updateGfxSlider() void OptionsScreenVideo::updateGfxSlider()
{ {
GUIEngine::SpinnerWidget* gfx = GUIEngine::SpinnerWidget* gfx =

View File

@ -89,8 +89,8 @@ private:
void updateTooltip(); void updateTooltip();
void updateResolutionsList(); void updateResolutionsList();
void initPresets(); void initPresets();
static void onScrollResolutionsList(void* data);
public: public:
friend class GUIEngine::ScreenSingleton<OptionsScreenVideo>; friend class GUIEngine::ScreenSingleton<OptionsScreenVideo>;