1
0
Fork 0
forked from len0rd/rockbox

correct drawing of the bar type tags when nofill is set.

draw the slider bitmap before drawing A-B repeat markers so that they are visible.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28204 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Teruaki Kawashima 2010-10-03 14:19:30 +00:00
parent c80dd635ab
commit 0f8fe94f46
3 changed files with 39 additions and 44 deletions

View file

@ -151,6 +151,9 @@ void gui_scrollbar_draw(struct screen * screen, int x, int y,
screen->set_drawmode(DRMODE_SOLID); screen->set_drawmode(DRMODE_SOLID);
if (flags & INNER_NOFILL)
return;
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
if (infill == INNER_BGFILL) if (infill == INNER_BGFILL)
{ {
@ -190,7 +193,12 @@ void gui_bitmap_scrollbar_draw(struct screen * screen, struct bitmap *bm, int x,
/* clear pixels in progress bar */ /* clear pixels in progress bar */
screen->fillrect(x, y, width, height); screen->fillrect(x, y, width, height);
screen->set_drawmode(DRMODE_SOLID);
if (flags & INNER_NOFILL)
return;
if (flags & INVERTFILL) if (flags & INVERTFILL)
{ {
min_shown = items - max_shown; min_shown = items - max_shown;
@ -204,8 +212,6 @@ void gui_bitmap_scrollbar_draw(struct screen * screen, struct bitmap *bm, int x,
scrollbar_helper(min_shown, max_shown, items, inner_len, &size, &start); scrollbar_helper(min_shown, max_shown, items, inner_len, &size, &start);
screen->set_drawmode(DRMODE_SOLID);
if (flags & HORIZONTAL) { if (flags & HORIZONTAL) {
x += start; x += start;
width = size; width = size;

View file

@ -29,6 +29,7 @@ enum orientation {
VERTICAL = 0x0000, /* Vertical orientation */ VERTICAL = 0x0000, /* Vertical orientation */
HORIZONTAL = 0x0001, /* Horizontal orientation */ HORIZONTAL = 0x0001, /* Horizontal orientation */
INVERTFILL = 0x0002, /* Invert the fill direction */ INVERTFILL = 0x0002, /* Invert the fill direction */
INNER_NOFILL = 0x0004, /* Do not fill inner part */
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
FOREGROUND = 0x0020, /* Do not clear background pixels */ FOREGROUND = 0x0020, /* Do not clear background pixels */
INNER_FILL = 0x0040, /* Fill inner part even if FOREGROUND */ INNER_FILL = 0x0040, /* Fill inner part even if FOREGROUND */

View file

@ -135,8 +135,6 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
unsigned long length, end; unsigned long length, end;
int flags = HORIZONTAL; int flags = HORIZONTAL;
int drawn_length, drawn_end;
if (height < 0) if (height < 0)
height = font_get(vp->font)->height; height = font_get(vp->font)->height;
@ -180,17 +178,6 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
end = 0; end = 0;
} }
if (pb->nofill)
{
drawn_length = 1;
drawn_end = 0;
}
else
{
drawn_length = length;
drawn_end = end;
}
if (!pb->horizontal) if (!pb->horizontal)
{ {
/* we want to fill upwards which is technically inverted. */ /* we want to fill upwards which is technically inverted. */
@ -202,37 +189,19 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
flags ^= INVERTFILL; flags ^= INVERTFILL;
} }
if (pb->nofill)
{
flags |= INNER_NOFILL;
}
if (pb->have_bitmap_pb) if (pb->have_bitmap_pb)
gui_bitmap_scrollbar_draw(display, &pb->bm, gui_bitmap_scrollbar_draw(display, &pb->bm,
pb->x, y, pb->width, pb->bm.height, pb->x, y, pb->width, pb->bm.height,
drawn_length, 0, drawn_end, flags); length, 0, end, flags);
else else
gui_scrollbar_draw(display, pb->x, y, pb->width, height, gui_scrollbar_draw(display, pb->x, y, pb->width, height,
drawn_length, 0, drawn_end, flags); length, 0, end, flags);
if (pb->type == SKIN_TOKEN_PROGRESSBAR)
{
if (id3 && id3->length)
{
#ifdef AB_REPEAT_ENABLE
if (ab_repeat_mode_enabled())
ab_draw_markers(display, id3->length,
pb->x, y, pb->width, height);
#endif
if (id3->cuesheet)
cue_draw_markers(display, id3->cuesheet, id3->length,
pb->x, y+1, pb->width, height-2);
}
#if 0 /* disable for now CONFIG_TUNER */
else if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF))
{
presets_draw_markers(display, pb->x, y, pb->width, height);
}
#endif
}
if (pb->slider) if (pb->slider)
{ {
int x = pb->x, y = pb->y; int x = pb->x, y = pb->y;
@ -265,6 +234,28 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
img->bm.width, img->bm.height), img->bm.width, img->bm.height),
x, y, width, height); x, y, width, height);
} }
#endif
}
if (pb->type == SKIN_TOKEN_PROGRESSBAR)
{
if (id3 && id3->length)
{
#ifdef AB_REPEAT_ENABLE
if (ab_repeat_mode_enabled())
ab_draw_markers(display, id3->length,
pb->x, y, pb->width, height);
#endif
if (id3->cuesheet)
cue_draw_markers(display, id3->cuesheet, id3->length,
pb->x, y+1, pb->width, height-2);
}
#if 0 /* disable for now CONFIG_TUNER */
else if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF))
{
presets_draw_markers(display, pb->x, y, pb->width, height);
}
#endif #endif
} }
} }
@ -783,6 +774,3 @@ int skin_wait_for_action(enum skinnable_screens skin, int context, int timeout)
} }
return button; return button;
} }