From 7d1a1d3c5ba5ec838de8c85c8b88b239d4d85e08 Mon Sep 17 00:00:00 2001 From: Howard Su Date: Tue, 19 Feb 2019 21:09:53 +0800 Subject: [PATCH 1/4] Prototype of layout --- src/pages/128x64x1/about_page.c | 8 +++++--- src/pages/common/_pages.h | 2 ++ src/pages/common/layout.h | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 src/pages/common/layout.h diff --git a/src/pages/128x64x1/about_page.c b/src/pages/128x64x1/about_page.c index 36aa998579..ae701c1245 100644 --- a/src/pages/128x64x1/about_page.c +++ b/src/pages/128x64x1/about_page.c @@ -35,7 +35,9 @@ void PAGE_AboutInit(int page) (void)page; PAGE_ShowHeader(PAGE_GetName(PAGEID_ABOUT)); - GUI_CreateLabelBox(&gui->label[0], ROW_1_X, ROW_1_Y, LCD_WIDTH, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, "www.deviationtx.com"); - GUI_CreateLabelBox(&gui->label[1], ROW_2_X, ROW_2_Y, LCD_WIDTH, LINE_HEIGHT, &DEFAULT_FONT, GUI_Localize, NULL, _tr_noop("Deviation FW version:")); - GUI_CreateLabelBox(&gui->label[2], ROW_3_X, ROW_3_Y, LCD_WIDTH, LINE_HEIGHT, &TINY_FONT, GUI_Localize, NULL, _tr_noop(DeviationVersion)); + BeginGridLayout(4, 1) { + GUI_CreateLabelBox(&gui->label[0], Grid_XY(1, 1), LCD_WIDTH, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, "www.deviationtx.com"); + GUI_CreateLabelBox(&gui->label[1], Grid_XY(2, 1), LCD_WIDTH, LINE_HEIGHT, &DEFAULT_FONT, GUI_Localize, NULL, _tr_noop("Deviation FW version:")); + GUI_CreateLabelBox(&gui->label[2], Grid_XY(3, 1), LCD_WIDTH, LINE_HEIGHT, &TINY_FONT, GUI_Localize, NULL, _tr_noop(DeviationVersion)); + } } diff --git a/src/pages/common/_pages.h b/src/pages/common/_pages.h index c8943441d9..2665988aa8 100644 --- a/src/pages/common/_pages.h +++ b/src/pages/common/_pages.h @@ -25,6 +25,8 @@ #include "voiceconfig_page.h" #include "scanner_page.h" +#include "layout.h" + #define PAGE_NAME_MAX 10 #define PAGEDEF(id, init, event, exit, menu, name) id, diff --git a/src/pages/common/layout.h b/src/pages/common/layout.h new file mode 100644 index 0000000000..b3f6ab5a17 --- /dev/null +++ b/src/pages/common/layout.h @@ -0,0 +1,16 @@ +#ifndef _LAYOUT_H_ +#define _LAYOUT_H_ + +typedef struct _grid_layout_data { + int w, h, x, y; +}GridData; + +#define BeginGridLayout(row, col) BeginGridLayout2(0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT, row, col) + +#define BeginGridLayout2(startx, starty, width, height, row, col) \ + for (GridData _grid = { width/col, height/row, startx, starty}; _grid.w > 0; _grid.w = 0) + +#define Grid_XY(row, col) \ + (_grid.x + _grid.w * ((col) - 1)), (_grid.y + _grid.h * ((row) - 1)) + +#endif // _LAYOUT_H_ \ No newline at end of file From ef69d128548c0a640851bb43db426e29d0e6b2d7 Mon Sep 17 00:00:00 2001 From: Howard Su Date: Tue, 19 Feb 2019 21:32:00 +0800 Subject: [PATCH 2/4] remove override in text mode --- src/pages/128x64x1/about_page.c | 11 ----------- src/pages/text/about_page.c | 13 ------------- 2 files changed, 24 deletions(-) diff --git a/src/pages/128x64x1/about_page.c b/src/pages/128x64x1/about_page.c index ae701c1245..8292316602 100644 --- a/src/pages/128x64x1/about_page.c +++ b/src/pages/128x64x1/about_page.c @@ -13,21 +13,10 @@ along with Deviation. If not, see . */ -#ifndef OVERRIDE_PLACEMENT #include "common.h" #include "pages.h" #include "gui/gui.h" -enum { - ROW_1_X = 0, - ROW_1_Y = 15, - ROW_2_X = 0, - ROW_2_Y = 30, - ROW_3_X = 0, - ROW_3_Y = 45 -}; -#endif //OVERRIDE_PLACEMENT - static struct about_obj * const gui = &gui_objs.u.about; void PAGE_AboutInit(int page) diff --git a/src/pages/text/about_page.c b/src/pages/text/about_page.c index 82a3ca2313..82a9a078a3 100644 --- a/src/pages/text/about_page.c +++ b/src/pages/text/about_page.c @@ -13,17 +13,4 @@ along with Deviation. If not, see . */ -#include "common.h" -#include "pages.h" -#include "gui/gui.h" - -#define OVERRIDE_PLACEMENT -enum { - ROW_1_X = 0, - ROW_1_Y = 1*LINE_HEIGHT, - ROW_2_X = 0, - ROW_2_Y = 4 * LINE_HEIGHT, - ROW_3_X = 0, - ROW_3_Y = 5 * LINE_HEIGHT, -}; #include "../128x64x1/about_page.c" From f1344b2087322645d1512dbc01797ff6c93c9be2 Mon Sep 17 00:00:00 2001 From: Howard Su Date: Tue, 19 Feb 2019 23:07:06 +0800 Subject: [PATCH 3/4] change model configure page to grid layout --- src/pages/320x240x16/lang_select.c | 1 - src/pages/320x240x16/menus.c | 3 -- src/pages/320x240x16/model_page.c | 72 ++++++++++++------------------ src/pages/320x240x16/pages.h | 4 ++ src/pages/common/layout.h | 14 ++++-- 5 files changed, 42 insertions(+), 52 deletions(-) diff --git a/src/pages/320x240x16/lang_select.c b/src/pages/320x240x16/lang_select.c index c02e2ec76d..8c710ae40c 100644 --- a/src/pages/320x240x16/lang_select.c +++ b/src/pages/320x240x16/lang_select.c @@ -20,7 +20,6 @@ #include #include "../common/_lang_select.c" -#define LINE_HEIGHT 24 static struct lang_obj * const gui = &gui_objs.u.lang; static int row_cb(int absrow, int relrow, int y, void *data) diff --git a/src/pages/320x240x16/menus.c b/src/pages/320x240x16/menus.c index f36036d60b..2912fb3a49 100644 --- a/src/pages/320x240x16/menus.c +++ b/src/pages/320x240x16/menus.c @@ -26,9 +26,6 @@ enum { MENU_X = 20, MENU_WIDTH = (LCD_WIDTH - MENU_X * 2), }; -#define HEADER_HEIGHT (LCD_HEIGHT==240 ? 37 : 40) -#define LINE_SPACE 29 -#define LINE_HEIGHT 20 #include "../common/_menus.c" static void menu_press_cb(guiObject_t *obj, s8 press_type, const void *data) diff --git a/src/pages/320x240x16/model_page.c b/src/pages/320x240x16/model_page.c index 9b4aa94647..baa3549b96 100644 --- a/src/pages/320x240x16/model_page.c +++ b/src/pages/320x240x16/model_page.c @@ -44,7 +44,6 @@ static const char *_mixermode_cb(guiObject_t *obj, int dir, void *data) void PAGE_ModelInit(int page) { (void)page; - u8 row; mp->last_mixermode = Model.mixer_mode; mp->last_txpower = Model.tx_power; @@ -52,57 +51,42 @@ void PAGE_ModelInit(int page) PAGE_SetModal(0); PAGE_ShowHeader(PAGE_GetName(PAGEID_MODEL)); - enum { - COL1 = (8 + ((LCD_WIDTH - 320) / 2)), - COL2 = (COL1 + 128), - COL3 = (COL1 + 228), - ROW1 = (44 + ((LCD_HEIGHT - 240) / 2)), - LABEL_WIDTH = (COL2 - COL1), - }; - row = ROW1; - GUI_CreateLabelBox(&gui->filelbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("File")); - GUI_CreateTextSelect(&gui->file, COL2, row, TEXTSELECT_96, file_press_cb, file_val_cb, NULL); + BeginGridLayout(9, 8) { + GUI_CreateLabelBox(&gui->filelbl, Grid_XY(1, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("File")); + GUI_CreateTextSelect(&gui->file, Grid_XY(1, 4), TEXTSELECT_96, file_press_cb, file_val_cb, NULL); -#if HAS_STANDARD_GUI - row+= 20; - GUI_CreateLabelBox(&gui->guilbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Mixer GUI")); - GUI_CreateTextSelect(&gui->guits, COL2, row, TEXTSELECT_96, NULL, _mixermode_cb, NULL); -#endif + GUI_CreateLabelBox(&gui->namelbl, Grid_XY(2, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Model name")); // use the same naming convention for devo8 and devo10 + GUI_CreateButton(&gui->name, Grid_XY(2, 4), BUTTON_96x16, show_text_cb, _changename_cb, Model.name); + GUI_CreateButton(&gui->icon, Grid_XY(2, 7), BUTTON_64x16, show_text_cb, changeicon_cb, _tr("Icon")); - row += 20; - GUI_CreateLabelBox(&gui->namelbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Model name")); // use the same naming convention for devo8 and devo10 - GUI_CreateButton(&gui->name, COL2, row, BUTTON_96x16, show_text_cb, _changename_cb, Model.name); - GUI_CreateButton(&gui->icon, COL3, row, BUTTON_64x16, show_text_cb, changeicon_cb, _tr("Icon")); + GUI_CreateLabelBox(&gui->typelbl, Grid_XY(3, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Model type")); + GUI_CreateTextSelect(&gui->type, Grid_XY(3, 4), TEXTSELECT_96, type_press_cb, type_val_cb, NULL); - row += 20; - GUI_CreateLabelBox(&gui->typelbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Model type")); - GUI_CreateTextSelect(&gui->type, COL2, row, TEXTSELECT_96, type_press_cb, type_val_cb, NULL); + GUI_CreateLabelBox(&gui->ppmlbl, Grid_XY(4, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("PPM In")); + GUI_CreateTextSelect(&gui->ppm, Grid_XY(4, 4), TEXTSELECT_96, ppmin_press_cb, ppmin_select_cb, NULL); - row += 24; - GUI_CreateLabelBox(&gui->ppmlbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("PPM In")); - GUI_CreateTextSelect(&gui->ppm, COL2, row, TEXTSELECT_96, ppmin_press_cb, ppmin_select_cb, NULL); + GUI_CreateLabelBox(&gui->protolbl, Grid_XY(5, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Protocol")); + GUI_CreateTextSelect(&gui->proto, Grid_XY(5, 4), TEXTSELECT_96, proto_press_cb, protoselect_cb, NULL); - row += 20; - GUI_CreateLabelBox(&gui->protolbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Protocol")); - GUI_CreateTextSelect(&gui->proto, COL2, row, TEXTSELECT_96, proto_press_cb, protoselect_cb, NULL); + GUI_CreateLabelBox(&gui->numchlbl, Grid_XY(6, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("# Channels")); + GUI_CreateTextSelect(&gui->numch, Grid_XY(6, 4), TEXTSELECT_96, NULL, numchanselect_cb, NULL); - row += 20; - GUI_CreateLabelBox(&gui->numchlbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("# Channels")); - GUI_CreateTextSelect(&gui->numch, COL2, row, TEXTSELECT_96, NULL, numchanselect_cb, NULL); + GUI_CreateLabelBox(&gui->pwrlbl, Grid_XY(7, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Tx power")); + GUI_CreateTextSelect(&gui->pwr, Grid_XY(7, 4), TEXTSELECT_96, NULL, powerselect_cb, NULL); + if (Model.fixed_id == 0) + strlcpy(mp->fixed_id, _tr("None"), sizeof(mp->fixed_id)); + else + sprintf(mp->fixed_id, "%d", (int)Model.fixed_id); + GUI_CreateLabelBox(&gui->fixedidlbl, Grid_XY(8, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Fixed ID")); + GUI_CreateButton(&gui->fixedid, Grid_XY(8, 4), BUTTON_96x16, show_text_cb, fixedid_cb, mp->fixed_id); + GUI_CreateButton(&gui->bind, Grid_XY(8, 7), BUTTON_64x16, show_bindtext_cb, bind_cb, NULL); - row += 24; - GUI_CreateLabelBox(&gui->pwrlbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Tx power")); - GUI_CreateTextSelect(&gui->pwr, COL2, row, TEXTSELECT_96, NULL, powerselect_cb, NULL); - - row += 20; - if(Model.fixed_id == 0) - strlcpy(mp->fixed_id, _tr("None"), sizeof(mp->fixed_id)); - else - sprintf(mp->fixed_id, "%d", (int)Model.fixed_id); - GUI_CreateLabelBox(&gui->fixedidlbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Fixed ID")); - GUI_CreateButton(&gui->fixedid, COL2, row, BUTTON_96x16, show_text_cb, fixedid_cb, mp->fixed_id); - GUI_CreateButton(&gui->bind, COL3, row, BUTTON_64x16, show_bindtext_cb, bind_cb, NULL); + #if HAS_STANDARD_GUI + GUI_CreateLabelBox(&gui->guilbl, Grid_XY(9, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Mixer GUI")); + GUI_CreateTextSelect(&gui->guits, Grid_XY(9, 4), TEXTSELECT_96, NULL, _mixermode_cb, NULL); + #endif + } configure_bind_button(); } diff --git a/src/pages/320x240x16/pages.h b/src/pages/320x240x16/pages.h index 665a526b1a..bf464fad73 100644 --- a/src/pages/320x240x16/pages.h +++ b/src/pages/320x240x16/pages.h @@ -39,6 +39,10 @@ struct pagemem { u8 modal_page; }; +#define HEADER_HEIGHT (LCD_HEIGHT == 240 ? 37 : 40) +#define LINE_SPACE 29 +#define LINE_HEIGHT 20 + #define TOGGLE_FILE ("media/toggle" IMG_EXT) #define MODELMENU_FILE ("media/modelmnu" IMG_EXT) #define SPLASH_FILE ("media/splash" IMG_EXT) diff --git a/src/pages/common/layout.h b/src/pages/common/layout.h index b3f6ab5a17..fa1403c700 100644 --- a/src/pages/common/layout.h +++ b/src/pages/common/layout.h @@ -2,15 +2,21 @@ #define _LAYOUT_H_ typedef struct _grid_layout_data { - int w, h, x, y; + int w, h, x, y; }GridData; -#define BeginGridLayout(row, col) BeginGridLayout2(0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT, row, col) +#define BeginGridLayout(row, col) BeginGridLayout2(0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, row, col) #define BeginGridLayout2(startx, starty, width, height, row, col) \ - for (GridData _grid = { width/col, height/row, startx, starty}; _grid.w > 0; _grid.w = 0) + for (GridData _grid = { (width)/(col), (height)/(row), (startx), (starty)}; _grid.w > 0; _grid.w = 0) #define Grid_XY(row, col) \ (_grid.x + _grid.w * ((col) - 1)), (_grid.y + _grid.h * ((row) - 1)) -#endif // _LAYOUT_H_ \ No newline at end of file +#define Grid_WH() \ + _grid.w, _grid.h + +#define Grid_WH_Span(span_w, span_h) \ + _grid.w * span_w, _grid.h * span_h + +#endif // _LAYOUT_H_ From d2f5fe3bf5e295b8157f53c7d1d6bf8aae960f8f Mon Sep 17 00:00:00 2001 From: Howard Su Date: Thu, 21 Feb 2019 00:26:21 +0800 Subject: [PATCH 4/4] use const to see if helps --- src/pages/common/layout.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/common/layout.h b/src/pages/common/layout.h index fa1403c700..253cf605c6 100644 --- a/src/pages/common/layout.h +++ b/src/pages/common/layout.h @@ -8,7 +8,8 @@ typedef struct _grid_layout_data { #define BeginGridLayout(row, col) BeginGridLayout2(0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, row, col) #define BeginGridLayout2(startx, starty, width, height, row, col) \ - for (GridData _grid = { (width)/(col), (height)/(row), (startx), (starty)}; _grid.w > 0; _grid.w = 0) + unsigned _d = 1; \ + for (const GridData _grid = { (width)/(col), (height)/(row), (startx), (starty)}; _d > 0 ; _d = 0 ) #define Grid_XY(row, col) \ (_grid.x + _grid.w * ((col) - 1)), (_grid.y + _grid.h * ((row) - 1))