56#define LACTE_GUI_FONT_FALLBACK_H \
58#define LACTE_GUI_SMALL_FALLBACK_MIN \
60#define LACTE_GUI_SMALL_FALLBACK_MULT \
77#define LACTE_GUI_WINDOW_BORDER_THICKNESS \
80#define LACTE_GUI_WINDOW_ROUNDING 16.0f
81#define LACTE_GUI_WINDOW_PADDING_X 30.0f
82#define LACTE_GUI_WINDOW_PADDING_Y 40.0f
83#define LACTE_GUI_WINDOW_SPACING_X 4.0f
84#define LACTE_GUI_WINDOW_SPACING_Y 4.0f
87#define LACTE_GUI_BUTTON_ROUNDING 12.0f
88#define LACTE_GUI_PROGRESS_ROUNDING \
125#define LACTE_GUI_SEPARATOR_WIDTH 2.0f
128#define LACTE_GUI_RHYTHM_MULT \
130#define LACTE_GUI_RHYTHM_MIN 7.0f
131#define LACTE_GUI_RHYTHM_MAX 12.0f
134#define LACTE_GUI_TITLE_MULT \
136#define LACTE_GUI_TITLE_MIN 48.0f
137#define LACTE_GUI_TITLE_MAX 48.0f
139#define LACTE_GUI_ERROR_MULT \
141#define LACTE_GUI_ERROR_MIN \
143#define LACTE_GUI_ERROR_MAX \
145#define LACTE_GUI_ERROR_EMPTY_H \
149#define LACTE_GUI_AFTER_HEADER_GAP_MULT \
151#define LACTE_GUI_AFTER_HEADER_GAP_MIN \
153#define LACTE_GUI_AFTER_HEADER_GAP_MAX \
157#define LACTE_GUI_LABEL_MULT 0.95f
158#define LACTE_GUI_LABEL_MIN 16.0f
159#define LACTE_GUI_LABEL_MAX 22.0f
161#define LACTE_GUI_VALUE_MULT 1.05f
162#define LACTE_GUI_VALUE_MIN 32.0f
163#define LACTE_GUI_VALUE_MAX 42.0f
165#define LACTE_GUI_BLOCK_GAP_MULT 0.90f
166#define LACTE_GUI_BLOCK_GAP_MIN \
168#define LACTE_GUI_BLOCK_GAP_MAX \
171#define LACTE_GUI_COL_TOP_PAD_MULT \
173#define LACTE_GUI_COL_TOP_PAD_MIN \
175#define LACTE_GUI_COL_TOP_PAD_MAX \
180#define LACTE_GUI_EXPIRY_PUSH_MULT \
182#define LACTE_GUI_EXPIRY_PUSH_MIN 0.0f
183#define LACTE_GUI_EXPIRY_PUSH_MAX 80.0f
184#define LACTE_GUI_EXPIRY_EXTRA_SHIFT_Y \
190#define LACTE_GUI_COL_MIN_H \
195#define LACTE_GUI_SEPARATOR_INSET_MIN \
197#define LACTE_GUI_SEPARATOR_INSET_MAX \
199#define LACTE_GUI_SEPARATOR_RAISE_Y \
204#define LACTE_GUI_COL_LEFT_RATIO 0.333f
205#define LACTE_GUI_COL_CENTER_RATIO 0.333f
208#define LACTE_GUI_FOAM_BTN_H_MULT \
210#define LACTE_GUI_FOAM_BTN_H_MIN \
212#define LACTE_GUI_FOAM_BTN_H_MAX \
215#define LACTE_GUI_FOAM_HEADER_GAP_MULT \
217#define LACTE_GUI_FOAM_HEADER_GAP_MIN \
219#define LACTE_GUI_FOAM_HEADER_GAP_MAX \
223#define LACTE_GUI_FOAM_SIDE_PAD \
225#define LACTE_GUI_FOAM_BTN_W 80.0f
228#define LACTE_GUI_QR_SHIFT_X \
231#define LACTE_GUI_QR_SIZE_MULT \
233#define LACTE_GUI_QR_SIZE_MIN 118.0f
234#define LACTE_GUI_QR_SIZE_MAX 170.0f
235#define LACTE_GUI_QR_SIZE_ABS_MIN \
238#define LACTE_GUI_QR_ROUNDING_MULT \
240#define LACTE_GUI_QR_ROUNDING_MIN 8.0f
241#define LACTE_GUI_QR_ROUNDING_MAX 14.0f
243#define LACTE_GUI_QR_PAD_MULT \
245#define LACTE_GUI_QR_PAD_MIN 6.0f
246#define LACTE_GUI_QR_PAD_MAX \
249#define LACTE_GUI_QR_DOT_ROUND_DIV \
251#define LACTE_GUI_QR_DOT_ROUND_MIN \
253#define LACTE_GUI_QR_DOT_ROUND_MAX \
257#define LACTE_GUI_QR_GAP1_MULT 0.85f
258#define LACTE_GUI_QR_GAP1_MIN 6.0f
259#define LACTE_GUI_QR_GAP1_MAX 10.0f
261#define LACTE_GUI_QR_DOMAIN_MULT \
263#define LACTE_GUI_QR_DOMAIN_MIN \
265#define LACTE_GUI_QR_DOMAIN_MAX \
268#define LACTE_GUI_QR_GAP2_MULT 0.70f
269#define LACTE_GUI_QR_GAP2_MIN 5.0f
270#define LACTE_GUI_QR_GAP2_MAX \
273#define LACTE_GUI_QR_FOOTER_LINE_MULT \
275#define LACTE_GUI_QR_FOOTER_LINE_MIN \
277#define LACTE_GUI_QR_FOOTER_LINE_MAX \
279#define LACTE_GUI_QR_FOOTER_PAD_X \
283#define LACTE_GUI_QR_FOOTER_ROW_GAP_COUNT \
285#define LACTE_GUI_QR_BLOCK_ROW_GAP_COUNT \
287#define LACTE_GUI_QR_FOOTER_LINES \
296#define LACTE_GUI_DEMO_MODE true
305#define LACTE_GUI_DEMO1_ONLINE_KNOWN true
306#define LACTE_GUI_DEMO1_ONLINE true
309#define LACTE_GUI_DEMO1_EXPIRY_DATE "01.01.2025"
315#define LACTE_GUI_DEMO2_ONLINE_KNOWN true
316#define LACTE_GUI_DEMO2_ONLINE true
318#define LACTE_GUI_DEMO2_EXPIRY_DATE "31.06.2026"
367#define LACTE_GUI_BOARD_ONLINE_KNOWN(b) ((b).online_known)
368#define LACTE_GUI_BOARD_ONLINE(b) ((b).online)
369#define LACTE_GUI_BOARD_EXPIRY_DATE(b) ((b).expiry_date)
370#define LACTE_GUI_BOARD_REMAINING_PERCENT(b) ((b).remaining_percent)
371#define LACTE_GUI_BOARD_ERROR_FLAGS(b) ((b).error_flags)
374#define LACTE_GUI_TEXT_TITLE \
375 "Дверь молочной системы открыта"
376#define LACTE_GUI_TEXT_STATUS_LABEL "Статус:"
377#define LACTE_GUI_TEXT_REMAINING_LABEL "Остаток молока:"
378#define LACTE_GUI_TEXT_EXPIRY_LABEL "Годен до:"
379#define LACTE_GUI_TEXT_NO_ERRORS \
381#define LACTE_GUI_TEXT_ERROR_PREFIX "Ошибка "
382#define LACTE_GUI_TEXT_DASH "-"
387#define LACTE_GUI_REMAINING_WARN_PREFIX " "
396#define LACTE_GUI_ERROR_FLAGS_SHIFT 8U
415#define LACTE_GUI_MAKE_ERROR_FLAGS(board_flags, service_flags) \
416 (static_cast<std::uint16_t>((board_flags) & 0xFFU) | \
417 static_cast<std::uint16_t>(((service_flags) & 0xFFU) \
418 << LACTE_GUI_ERROR_FLAGS_SHIFT))
constexpr int LACTE_GUI_TEXT_PRIMARY_R
constexpr int LACTE_GUI_BTN_HOVER_B
constexpr int LACTE_GUI_BTN_NORMAL_G
constexpr int LACTE_GUI_BOARD_ERROR_FLAG_RFID_BAD_CARD
constexpr int LACTE_GUI_GREEN_B
constexpr int LACTE_GUI_GREEN_R
constexpr int LACTE_GUI_WINDOW_BORDER_R
constexpr int LACTE_GUI_REMAINING_LOW_THRESHOLD
constexpr int LACTE_GUI_BOARD_ERROR_FLAG_SHELFLIFE_END
constexpr int LACTE_GUI_DEMO2_REMAINING_PERCENT
constexpr int LACTE_GUI_BOARD_ERROR_FLAG_INVALID_TIME
constexpr int LACTE_GUI_WINDOW_BORDER_A
constexpr int LACTE_GUI_BTN_ACTIVE_G
constexpr int LACTE_GUI_DEMO1_ERROR_FLAGS
constexpr int LACTE_GUI_WINDOW_BG_B
constexpr int LACTE_GUI_BTN_ACTIVE_R
constexpr int LACTE_GUI_RED_G
constexpr int LACTE_GUI_RED_B
constexpr int LACTE_GUI_WINDOW_BG_R
constexpr int LACTE_GUI_DEFAULT_OFFLINE_ERROR_NUMBER
constexpr int LACTE_GUI_TEXT_SECONDARY_R
constexpr int LACTE_GUI_WINDOW_BORDER_B
constexpr int LACTE_GUI_BTN_HOVER_G
constexpr int LACTE_GUI_WINDOW_BORDER_G
constexpr int LACTE_GUI_BTN_ACTIVE_B
constexpr int LACTE_GUI_BOARD_ERROR_FLAG_RFID_NO_CARD
constexpr int LACTE_GUI_GREEN_G
constexpr int LACTE_GUI_BOARD_ERROR_FLAG_MOTOR_ERROR
constexpr int LACTE_GUI_BTN_NORMAL_R
constexpr int LACTE_GUI_BOARD_ERROR_FLAG_CALIB_ERROR
constexpr int LACTE_GUI_SEPARATOR_A
constexpr int LACTE_GUI_SEPARATOR_R
constexpr int LACTE_GUI_BOARD_ERROR_FLAG_RFID_ERROR
constexpr int LACTE_GUI_SEPARATOR_B
constexpr int LACTE_GUI_WINDOW_BG_A
constexpr int LACTE_GUI_BTN_NORMAL_B
constexpr int LACTE_GUI_RED_R
constexpr int LACTE_GUI_BTN_HOVER_R
constexpr int LACTE_GUI_DEMO_SCENARIO
constexpr int LACTE_GUI_TEXT_PRIMARY_B
constexpr int LACTE_GUI_SEPARATOR_G
constexpr int LACTE_GUI_TEXT_SECONDARY_G
constexpr int LACTE_GUI_BOARD_ERROR_FLAG_USAGE_END
constexpr int LACTE_GUI_DEMO1_REMAINING_PERCENT
constexpr int LACTE_GUI_WINDOW_BG_G
constexpr int LACTE_GUI_TEXT_SECONDARY_B
constexpr int LACTE_GUI_TEXT_PRIMARY_G