Skip to content

Commit 8910deb

Browse files
committed
initialize style_small_padding only once for all the application
1 parent d0b65a7 commit 8910deb

File tree

1 file changed

+28
-24
lines changed

1 file changed

+28
-24
lines changed

lib/3rd_party_adapters/LVGL/Screen.cpp

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,25 @@ static void showNewAndDeleteOldScreen(lv_obj_t *screen)
4444
lv_obj_del(lv_screenOld);
4545
}
4646

47+
/**
48+
* get a singlenton style pointer for one pixel border padding in all directions
49+
*/
50+
static lv_style_t *getSmallPaddingStyle()
51+
{
52+
static lv_style_t style_small_padding{0};
53+
54+
/* only initialize the style if it was empty */
55+
if (style_small_padding.prop_cnt == 0)
56+
{
57+
lv_style_init(&style_small_padding);
58+
lv_style_set_pad_left(&style_small_padding, 1);
59+
lv_style_set_pad_top(&style_small_padding, 1);
60+
lv_style_set_pad_bottom(&style_small_padding, 1);
61+
lv_style_set_pad_right(&style_small_padding, 1);
62+
}
63+
64+
return &style_small_padding;
65+
}
4766
/**
4867
* @brief Event callback function for an item that calls another submenu
4968
* @note The lvgl event user data hold a pointer to the triggered submenu item
@@ -157,17 +176,10 @@ ScreenMenu::ScreenMenu(const MenuItemList &itemList)
157176
*/
158177
void ScreenMenu::draw()
159178
{
160-
/* adjust the style so everything has a 1 px padding in all directions */
161-
static lv_style_t style_small_padding;
162-
lv_style_init(&style_small_padding);
163-
lv_style_set_pad_left(&style_small_padding, 1);
164-
lv_style_set_pad_top(&style_small_padding, 1);
165-
lv_style_set_pad_bottom(&style_small_padding, 1);
166-
lv_style_set_pad_right(&style_small_padding, 1);
167179

168180
/* create the lvgl screen object and configure it's properties */
169181
lv_obj_t *screen = lv_obj_create(NULL);
170-
lv_obj_add_style(screen, &style_small_padding, 0);
182+
lv_obj_add_style(screen, getSmallPaddingStyle(), 0);
171183
lv_obj_set_flex_flow(screen, LV_FLEX_FLOW_COLUMN);
172184
lv_obj_set_style_pad_row(screen, 2, 0);
173185
lv_obj_set_flex_align(screen, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER);
@@ -183,7 +195,7 @@ void ScreenMenu::draw()
183195
auto btnItem = reinterpret_cast<const MenuItemSubmenu *const>(item);
184196
auto btn = lv_btn_create(screen);
185197
lv_obj_set_size(btn, lv_pct(100), 12);
186-
lv_obj_add_style(btn, &style_small_padding, 0);
198+
lv_obj_add_style(btn, getSmallPaddingStyle(), 0);
187199
lv_obj_add_event_cb(btn, ScreenMenu_submenu_cb, LV_EVENT_SHORT_CLICKED, (void *)item); /* assign the submenu callback for event short clicked */
188200
lv_obj_add_event_cb(btn, ScreenMenu_submenu_cb, LV_EVENT_KEY, nullptr); /* assign the submenu callback for event key press */
189201
auto lab = lv_label_create(btn);
@@ -203,7 +215,7 @@ void ScreenMenu::draw()
203215
auto swtItem = reinterpret_cast<const MenuItemSwitch *const>(item);
204216
auto cont = lv_obj_create(screen);
205217
lv_obj_set_size(cont, lv_pct(100), 12);
206-
lv_obj_add_style(cont, &style_small_padding, 0);
218+
lv_obj_add_style(cont, getSmallPaddingStyle(), 0);
207219
lv_obj_set_scrollbar_mode(cont, LV_SCROLLBAR_MODE_OFF);
208220
lv_obj_add_flag(cont, LV_OBJ_FLAG_OVERFLOW_VISIBLE);
209221
auto lab = lv_label_create(cont);
@@ -238,7 +250,7 @@ void ScreenMenu::draw()
238250
auto valItem = reinterpret_cast<const MenuItemValue *const>(item);
239251
auto btn = lv_btn_create(screen);
240252
lv_obj_set_size(btn, lv_pct(100), 12);
241-
lv_obj_add_style(btn, &style_small_padding, 0);
253+
lv_obj_add_style(btn, getSmallPaddingStyle(), 0);
242254
auto lab = lv_label_create(btn);
243255
lv_obj_set_width(lab, lv_pct(70));
244256
lv_obj_set_align(lab, LV_ALIGN_LEFT_MID);
@@ -406,23 +418,15 @@ void ScreenValueModifier::draw()
406418
lv_obj_t *btn;
407419
lv_obj_t *lab;
408420

409-
/* adjust the style so everything has a 1 px padding in all directions */
410-
static lv_style_t style_small_padding;
411-
lv_style_init(&style_small_padding);
412-
lv_style_set_pad_left(&style_small_padding, 1);
413-
lv_style_set_pad_top(&style_small_padding, 1);
414-
lv_style_set_pad_bottom(&style_small_padding, 1);
415-
lv_style_set_pad_right(&style_small_padding, 1);
416-
417421
/* create the lvgl screen object and configure it's properties */
418422
lv_obj_t *screen = lv_obj_create(NULL);
419-
lv_obj_add_style(screen, &style_small_padding, 0);
423+
lv_obj_add_style(screen, getSmallPaddingStyle(), 0);
420424

421425
/* draw spinbox */
422426
_spinbox = lv_spinbox_create(screen);
423427
lv_group_remove_obj(_spinbox); //remove the spinbox from being selectable by default
424428
lv_obj_set_width(_spinbox, lv_pct(55));
425-
lv_obj_add_style(_spinbox, &style_small_padding, 0);
429+
lv_obj_add_style(_spinbox, getSmallPaddingStyle(), 0);
426430
lv_obj_center(_spinbox);
427431
lv_spinbox_set_digit_format(_spinbox, 7, (7 - _menuItem->getDecimals()));
428432
int32_t min = ((_menuItem->getMin()) * std::pow(10, _menuItem->getDecimals()));
@@ -438,7 +442,7 @@ void ScreenValueModifier::draw()
438442
/* draw incrementation button */
439443
btn = lv_btn_create(screen);
440444
lv_obj_set_size(btn, h, h);
441-
lv_obj_add_style(btn, &style_small_padding, 0);
445+
lv_obj_add_style(btn, getSmallPaddingStyle(), 0);
442446
lv_obj_align_to(btn, _spinbox, LV_ALIGN_OUT_RIGHT_MID, 2, 0);
443447
lv_obj_add_event_cb(btn, ScreenValueModifier_inc_cb, LV_EVENT_LONG_PRESSED_REPEAT, _spinbox);
444448
lv_obj_add_event_cb(btn, ScreenValueModifier_inc_cb, LV_EVENT_SHORT_CLICKED, _spinbox);
@@ -450,7 +454,7 @@ void ScreenValueModifier::draw()
450454
/* draw decrementation button */
451455
btn = lv_btn_create(screen);
452456
lv_obj_set_size(btn, h, h);
453-
lv_obj_add_style(btn, &style_small_padding, 0);
457+
lv_obj_add_style(btn, getSmallPaddingStyle(), 0);
454458
lv_obj_align_to(btn, _spinbox, LV_ALIGN_OUT_LEFT_MID, -2, 0);
455459
lv_obj_add_event_cb(btn, ScreenValueModifier_dec_cb, LV_EVENT_LONG_PRESSED_REPEAT, _spinbox);
456460
lv_obj_add_event_cb(btn, ScreenValueModifier_dec_cb, LV_EVENT_SHORT_CLICKED, _spinbox);
@@ -462,7 +466,7 @@ void ScreenValueModifier::draw()
462466
/* draw step modification button */
463467
btn = lv_btn_create(screen);
464468
lv_obj_set_size(btn, 10, 10);
465-
lv_obj_add_style(btn, &style_small_padding, 0);
469+
lv_obj_add_style(btn, getSmallPaddingStyle(), 0);
466470
lv_obj_align_to(btn, _spinbox, LV_ALIGN_OUT_BOTTOM_MID, 0, 2);
467471
lv_obj_add_event_cb(btn, ScreenValueModifier_step_cb, LV_EVENT_LONG_PRESSED_REPEAT, _spinbox);
468472
lv_obj_add_event_cb(btn, ScreenValueModifier_step_cb, LV_EVENT_SHORT_CLICKED, _spinbox);

0 commit comments

Comments
 (0)