@@ -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 */
158177void 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