summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2010-05-31 11:12:15 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2010-05-31 11:12:15 +0000
commit22b12cafbb7aa4463170ad5752edcf2093b20c7b (patch)
tree88bcc32aa322c39b30aec5f8a949f55690105952
parent5b4a9b5e35594eafea7e0981a9fab9cd266debb1 (diff)
draw markers on the FM frequency bar for presets (like cuesheet markers in the WPS).
seems nice but if it ends up looking crap we can revert.. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26429 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/gui/skin_engine/skin_display.c23
-rw-r--r--apps/gui/skin_engine/skin_parser.c1
-rw-r--r--apps/radio/presets.c27
-rw-r--r--apps/radio/radio.h1
4 files changed, 45 insertions, 7 deletions
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c
index d0e94c7041..4b1c747706 100644
--- a/apps/gui/skin_engine/skin_display.c
+++ b/apps/gui/skin_engine/skin_display.c
@@ -185,17 +185,26 @@ static void draw_progressbar(struct gui_wps *gwps,
gui_scrollbar_draw(display, pb->x, y, pb->width, height,
length, 0, elapsed, HORIZONTAL);
- if (pb->type == WPS_TOKEN_PROGRESSBAR && id3 && id3->length)
+ if (pb->type == WPS_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);
+ 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 (id3->cuesheet)
+ cue_draw_markers(display, id3->cuesheet, id3->length,
+ pb->x, y+1, pb->width, height-2);
+ }
+#if CONFIG_TUNER
+ else if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF))
+ {
+ presets_draw_markers(display, pb->x, y, pb->width, height);
+ }
+#endif
}
}
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index 932c3baf6b..158f2eb7b7 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -1211,6 +1211,7 @@ static int parse_progressbar(const char *wps_bufptr,
pb->y = -line_num - 1; /* Will be computed during the rendering */
if (token->type == WPS_TOKEN_VOLUME || token->type == WPS_TOKEN_BATTERY_PERCENT)
return 0; /* dont add it, let the regular token handling do the work */
+ pb->type = token->type;
add_to_ll_chain(&wps_data->progressbars, item);
return 0;
}
diff --git a/apps/radio/presets.c b/apps/radio/presets.c
index d272d3472e..ea1d4022da 100644
--- a/apps/radio/presets.c
+++ b/apps/radio/presets.c
@@ -612,3 +612,30 @@ void presets_save(void)
else
radio_save_presets();
}
+
+#ifdef HAVE_LCD_BITMAP
+static inline void draw_veritcal_line_mark(struct screen * screen,
+ int x, int y, int h)
+{
+ screen->set_drawmode(DRMODE_COMPLEMENT);
+ screen->vline(x, y, y+h-1);
+}
+
+/* draw the preset markers for a track of length "tracklen",
+ between (x,y) and (x+w,y) */
+void presets_draw_markers(struct screen *screen,
+ int x, int y, int w, int h)
+{
+ int i,xi;
+ const struct fm_region_data *region_data =
+ &(fm_region_data[global_settings.fm_region]);
+ int len = region_data->freq_max - region_data->freq_min;
+ for (i=0; i < radio_preset_count(); i++)
+ {
+ int freq = radio_get_preset(i)->frequency;
+ int diff = freq - region_data->freq_min;
+ xi = x + (w * diff)/len;
+ draw_veritcal_line_mark(screen, xi, y, h);
+ }
+}
+#endif
diff --git a/apps/radio/radio.h b/apps/radio/radio.h
index f61ad026f3..01afdc5a25 100644
--- a/apps/radio/radio.h
+++ b/apps/radio/radio.h
@@ -65,6 +65,7 @@ struct fmstation
char name[MAX_FMPRESET_LEN+1];
};
const char* radio_get_preset_name(int preset);
+void presets_draw_markers(struct screen *screen, int x, int y, int w, int h);
#ifdef HAVE_ALBUMART
void radioart_init(bool entering_screen);