summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/gui/scrollbar.c35
-rw-r--r--apps/gui/scrollbar.h1
-rwxr-xr-xapps/gui/skin_engine/skin_display.c5
-rw-r--r--apps/gui/skin_engine/skin_parser.c8
-rw-r--r--apps/gui/skin_engine/wps_internals.h1
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;