diff options
-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, max_shown = items; } - inner_x = x + 1; - inner_y = y + 1; - inner_wd = width - 2; - inner_ht = height - 2; - + if (flags & BORDER_NOFILL) + { + inner_x = x; + inner_y = y; + inner_wd = width; + inner_ht = height; + } + else + { + inner_x = x + 1; + inner_y = y + 1; + inner_wd = width - 2; + inner_ht = height - 2; + } /* Boundary check to make sure that height is reasonable, otherwise nothing * to do */ @@ -113,16 +122,18 @@ void gui_scrollbar_draw(struct screen * screen, int x, int y, scrollbar_helper(min_shown, max_shown, items, inner_len, &size, &start); /* draw box */ + if (!(flags & BORDER_NOFILL)) + { #ifdef HAVE_LCD_COLOR - /* must avoid corners if case of (flags & FOREGROUND) */ - screen->hline(inner_x, x + inner_wd, y); - screen->hline(inner_x, x + inner_wd, y + height - 1); - screen->vline(x, inner_y, y + inner_ht); - screen->vline(x + width - 1, inner_y, y + inner_ht); + /* must avoid corners if case of (flags & FOREGROUND) */ + screen->hline(inner_x, x + inner_wd, y); + screen->hline(inner_x, x + inner_wd, y + height - 1); + screen->vline(x, inner_y, y + inner_ht); + screen->vline(x + width - 1, inner_y, y + inner_ht); #else - screen->drawrect(x, y, width, height); + screen->drawrect(x, y, width, height); #endif - + } screen->set_drawmode(DRMODE_SOLID | DRMODE_INVERSEVID); #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 { HORIZONTAL = 0x0001, /* Horizontal orientation */ INVERTFILL = 0x0002, /* Invert the fill direction */ INNER_NOFILL = 0x0004, /* Do not fill inner part */ + BORDER_NOFILL = 0x0008, /* Do not fill border part */ #ifdef HAVE_LCD_COLOR FOREGROUND = 0x0020, /* Do not clear background pixels */ 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) flags |= INNER_NOFILL; } + if (pb->noborder) + { + flags |= BORDER_NOFILL; + } + if (SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->slider)) { 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, pb->vp = PTRTOSKINOFFSET(skin_buffer, vp); pb->follow_lang_direction = follow_lang_direction > 0; pb->nofill = false; + pb->noborder = false; pb->nobar = false; pb->image = PTRTOSKINOFFSET(skin_buffer, NULL); pb->slider = PTRTOSKINOFFSET(skin_buffer, NULL); @@ -978,6 +979,8 @@ static int parse_progressbar_tag(struct skin_element* element, pb->invert_fill_direction = true; else if (!strcmp(text, "nofill")) pb->nofill = true; + else if (!strcmp(text, "noborder")) + pb->noborder = true; else if (!strcmp(text, "nobar")) pb->nobar = true; else if (!strcmp(text, "slider")) @@ -1051,6 +1054,11 @@ static int parse_progressbar_tag(struct skin_element* element, if (image_filename) { + /* noborder is incompatible together with image. There is no border + * anyway. */ + if (pb->noborder) + return WPS_ERROR_INVALID_PARAM; + pb->image = PTRTOSKINOFFSET(skin_buffer, skin_find_item(image_filename, SKIN_FIND_IMAGE, wps_data)); 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 { bool invert_fill_direction; bool nofill; + bool noborder; bool nobar; OFFSETTYPE(struct gui_img *) slider; bool horizontal; |