diff options
author | Thomas Martitz <kugel@rockbox.org> | 2014-01-12 15:11:46 +0100 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2014-01-12 15:22:29 +0100 |
commit | 3ae73433ab826c7a4f3c49b4d0a86fd9dc29a9cc (patch) | |
tree | fe285fbee6684aa0337723ac4af9280e13d8f3c9 /apps/gui | |
parent | 6e882b43b6242e102f4514904c57abb68ad69efe (diff) | |
download | rockbox-3ae73433ab826c7a4f3c49b4d0a86fd9dc29a9cc.tar.gz rockbox-3ae73433ab826c7a4f3c49b4d0a86fd9dc29a9cc.zip |
skin_engine: New param "noborder" for the bar tags.
By specifying this param the bar will not have a border/box. Instead
the inner part that fills up is maximized on the bar area.
Note that this only affects bars using foreground and background colors,
not those constructed with images.
Change-Id: Ib8dd49ecbaf9e16b96de840f5f365871b73d4fa4
Diffstat (limited to 'apps/gui')
-rw-r--r-- | apps/gui/scrollbar.c | 35 | ||||
-rw-r--r-- | apps/gui/scrollbar.h | 1 | ||||
-rwxr-xr-x | apps/gui/skin_engine/skin_display.c | 5 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 8 | ||||
-rw-r--r-- | apps/gui/skin_engine/wps_internals.h | 1 |
5 files changed, 38 insertions, 12 deletions
diff --git a/apps/gui/scrollbar.c b/apps/gui/scrollbar.c index aafd4b093a..2e4bd8580c 100644 --- a/apps/gui/scrollbar.c +++ b/apps/gui/scrollbar.c | |||
@@ -94,11 +94,20 @@ void gui_scrollbar_draw(struct screen * screen, int x, int y, | |||
94 | max_shown = items; | 94 | max_shown = items; |
95 | } | 95 | } |
96 | 96 | ||
97 | inner_x = x + 1; | 97 | if (flags & BORDER_NOFILL) |
98 | inner_y = y + 1; | 98 | { |
99 | inner_wd = width - 2; | 99 | inner_x = x; |
100 | inner_ht = height - 2; | 100 | inner_y = y; |
101 | 101 | inner_wd = width; | |
102 | inner_ht = height; | ||
103 | } | ||
104 | else | ||
105 | { | ||
106 | inner_x = x + 1; | ||
107 | inner_y = y + 1; | ||
108 | inner_wd = width - 2; | ||
109 | inner_ht = height - 2; | ||
110 | } | ||
102 | /* Boundary check to make sure that height is reasonable, otherwise nothing | 111 | /* Boundary check to make sure that height is reasonable, otherwise nothing |
103 | * to do | 112 | * to do |
104 | */ | 113 | */ |
@@ -113,16 +122,18 @@ void gui_scrollbar_draw(struct screen * screen, int x, int y, | |||
113 | scrollbar_helper(min_shown, max_shown, items, inner_len, &size, &start); | 122 | scrollbar_helper(min_shown, max_shown, items, inner_len, &size, &start); |
114 | 123 | ||
115 | /* draw box */ | 124 | /* draw box */ |
125 | if (!(flags & BORDER_NOFILL)) | ||
126 | { | ||
116 | #ifdef HAVE_LCD_COLOR | 127 | #ifdef HAVE_LCD_COLOR |
117 | /* must avoid corners if case of (flags & FOREGROUND) */ | 128 | /* must avoid corners if case of (flags & FOREGROUND) */ |
118 | screen->hline(inner_x, x + inner_wd, y); | 129 | screen->hline(inner_x, x + inner_wd, y); |
119 | screen->hline(inner_x, x + inner_wd, y + height - 1); | 130 | screen->hline(inner_x, x + inner_wd, y + height - 1); |
120 | screen->vline(x, inner_y, y + inner_ht); | 131 | screen->vline(x, inner_y, y + inner_ht); |
121 | screen->vline(x + width - 1, inner_y, y + inner_ht); | 132 | screen->vline(x + width - 1, inner_y, y + inner_ht); |
122 | #else | 133 | #else |
123 | screen->drawrect(x, y, width, height); | 134 | screen->drawrect(x, y, width, height); |
124 | #endif | 135 | #endif |
125 | 136 | } | |
126 | screen->set_drawmode(DRMODE_SOLID | DRMODE_INVERSEVID); | 137 | screen->set_drawmode(DRMODE_SOLID | DRMODE_INVERSEVID); |
127 | 138 | ||
128 | #ifdef HAVE_LCD_COLOR | 139 | #ifdef HAVE_LCD_COLOR |
diff --git a/apps/gui/scrollbar.h b/apps/gui/scrollbar.h index 606b9bd3d3..dcaef5721d 100644 --- a/apps/gui/scrollbar.h +++ b/apps/gui/scrollbar.h | |||
@@ -30,6 +30,7 @@ enum orientation { | |||
30 | HORIZONTAL = 0x0001, /* Horizontal orientation */ | 30 | HORIZONTAL = 0x0001, /* Horizontal orientation */ |
31 | INVERTFILL = 0x0002, /* Invert the fill direction */ | 31 | INVERTFILL = 0x0002, /* Invert the fill direction */ |
32 | INNER_NOFILL = 0x0004, /* Do not fill inner part */ | 32 | INNER_NOFILL = 0x0004, /* Do not fill inner part */ |
33 | BORDER_NOFILL = 0x0008, /* Do not fill border part */ | ||
33 | #ifdef HAVE_LCD_COLOR | 34 | #ifdef HAVE_LCD_COLOR |
34 | FOREGROUND = 0x0020, /* Do not clear background pixels */ | 35 | FOREGROUND = 0x0020, /* Do not clear background pixels */ |
35 | INNER_FILL = 0x0040, /* Fill inner part even if FOREGROUND */ | 36 | INNER_FILL = 0x0040, /* Fill inner part even if FOREGROUND */ |
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c index 82eaa1f553..137bced19b 100755 --- a/apps/gui/skin_engine/skin_display.c +++ b/apps/gui/skin_engine/skin_display.c | |||
@@ -202,6 +202,11 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb) | |||
202 | flags |= INNER_NOFILL; | 202 | flags |= INNER_NOFILL; |
203 | } | 203 | } |
204 | 204 | ||
205 | if (pb->noborder) | ||
206 | { | ||
207 | flags |= BORDER_NOFILL; | ||
208 | } | ||
209 | |||
205 | if (SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->slider)) | 210 | if (SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->slider)) |
206 | { | 211 | { |
207 | struct gui_img *img = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->slider); | 212 | struct gui_img *img = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->slider); |
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 1de1047583..06b37d875c 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c | |||
@@ -901,6 +901,7 @@ static int parse_progressbar_tag(struct skin_element* element, | |||
901 | pb->vp = PTRTOSKINOFFSET(skin_buffer, vp); | 901 | pb->vp = PTRTOSKINOFFSET(skin_buffer, vp); |
902 | pb->follow_lang_direction = follow_lang_direction > 0; | 902 | pb->follow_lang_direction = follow_lang_direction > 0; |
903 | pb->nofill = false; | 903 | pb->nofill = false; |
904 | pb->noborder = false; | ||
904 | pb->nobar = false; | 905 | pb->nobar = false; |
905 | pb->image = PTRTOSKINOFFSET(skin_buffer, NULL); | 906 | pb->image = PTRTOSKINOFFSET(skin_buffer, NULL); |
906 | pb->slider = PTRTOSKINOFFSET(skin_buffer, NULL); | 907 | pb->slider = PTRTOSKINOFFSET(skin_buffer, NULL); |
@@ -978,6 +979,8 @@ static int parse_progressbar_tag(struct skin_element* element, | |||
978 | pb->invert_fill_direction = true; | 979 | pb->invert_fill_direction = true; |
979 | else if (!strcmp(text, "nofill")) | 980 | else if (!strcmp(text, "nofill")) |
980 | pb->nofill = true; | 981 | pb->nofill = true; |
982 | else if (!strcmp(text, "noborder")) | ||
983 | pb->noborder = true; | ||
981 | else if (!strcmp(text, "nobar")) | 984 | else if (!strcmp(text, "nobar")) |
982 | pb->nobar = true; | 985 | pb->nobar = true; |
983 | else if (!strcmp(text, "slider")) | 986 | else if (!strcmp(text, "slider")) |
@@ -1051,6 +1054,11 @@ static int parse_progressbar_tag(struct skin_element* element, | |||
1051 | 1054 | ||
1052 | if (image_filename) | 1055 | if (image_filename) |
1053 | { | 1056 | { |
1057 | /* noborder is incompatible together with image. There is no border | ||
1058 | * anyway. */ | ||
1059 | if (pb->noborder) | ||
1060 | return WPS_ERROR_INVALID_PARAM; | ||
1061 | |||
1054 | pb->image = PTRTOSKINOFFSET(skin_buffer, | 1062 | pb->image = PTRTOSKINOFFSET(skin_buffer, |
1055 | skin_find_item(image_filename, SKIN_FIND_IMAGE, wps_data)); | 1063 | skin_find_item(image_filename, SKIN_FIND_IMAGE, wps_data)); |
1056 | if (!SKINOFFSETTOPTR(skin_buffer, pb->image)) /* load later */ | 1064 | if (!SKINOFFSETTOPTR(skin_buffer, pb->image)) /* load later */ |
diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h index 339669570a..e7996b0530 100644 --- a/apps/gui/skin_engine/wps_internals.h +++ b/apps/gui/skin_engine/wps_internals.h | |||
@@ -120,6 +120,7 @@ struct progressbar { | |||
120 | 120 | ||
121 | bool invert_fill_direction; | 121 | bool invert_fill_direction; |
122 | bool nofill; | 122 | bool nofill; |
123 | bool noborder; | ||
123 | bool nobar; | 124 | bool nobar; |
124 | OFFSETTYPE(struct gui_img *) slider; | 125 | OFFSETTYPE(struct gui_img *) slider; |
125 | bool horizontal; | 126 | bool horizontal; |