summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2009-09-13 13:40:58 +0000
committerThomas Martitz <kugel@rockbox.org>2009-09-13 13:40:58 +0000
commitc0f1c49178b4c205e1c990ea2fb25a417305528c (patch)
tree637fdedd15f2119125cdaa257fbf7798e8687e74
parent541dd6fda5ae93073a0b9c499f62af2cf46f3529 (diff)
Get rid of some of the code duplication from checkwps, it still duplicates a lot though.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22695 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/gui/viewport.c106
-rw-r--r--apps/gui/viewport.h44
-rw-r--r--firmware/export/font.h2
-rw-r--r--tools/checkwps/SOURCES1
-rw-r--r--tools/checkwps/checkwps.c120
-rw-r--r--tools/checkwps/checkwps.h2
6 files changed, 83 insertions, 192 deletions
diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c
index 06caa2379d..ff3a110936 100644
--- a/apps/gui/viewport.c
+++ b/apps/gui/viewport.c
@@ -24,18 +24,10 @@
#include "lcd.h"
#include "lcd-remote.h"
#include "font.h"
-#include "sprintf.h"
-#include "string.h"
-#include "settings.h"
-#include "kernel.h"
-#include "system.h"
-#include "misc.h"
#include "viewport.h"
-#include "statusbar.h"
#include "screen_access.h"
-#include "appevents.h"
-
-
+#include "settings.h"
+#include "misc.h"
/*some short cuts for fg/bg/line selector handling */
#ifdef HAVE_LCD_COLOR
@@ -54,6 +46,17 @@
#define BG_FALLBACK LCD_DEFAULT_BG
#endif
+/* all below isn't needed for pc tools (i.e. checkwps/wps editor)
+ * only viewport_parse_viewport() is */
+#ifndef __PCTOOL__
+#include "sprintf.h"
+#include "string.h"
+#include "kernel.h"
+#include "system.h"
+#include "statusbar.h"
+#include "appevents.h"
+
+
static int statusbar_enabled = 0;
#ifdef HAVE_LCD_BITMAP
@@ -295,12 +298,55 @@ bool viewport_ui_vp_get_state(enum screen_type screen)
return ui_vp_info.active[screen];
}
+/*
+ * (re)parse the UI vp from the settings
+ * - Returns
+ * 0 if no UI vp is used at all
+ * else the bit for the screen (1<<screen) is set
+ */
+static unsigned viewport_init_ui_vp(void)
+{
+ int screen;
+ unsigned ret = 0;
+ char *setting;
+ FOR_NB_SCREENS(screen)
+ {
+#ifdef HAVE_REMOTE_LCD
+ if ((screen == SCREEN_REMOTE))
+ setting = global_settings.remote_ui_vp_config;
+ else
+#endif
+ setting = global_settings.ui_vp_config;
+
+
+ if (!(viewport_parse_viewport(&custom_vp[screen], screen,
+ setting, ',')))
+ viewport_set_fullscreen(&custom_vp[screen], screen);
+ else
+ ret |= BIT_N(screen);
+ }
+ return ret;
+}
+
+#ifdef HAVE_TOUCHSCREEN
+/* check if a point (x and y coordinates) are within a viewport */
+bool viewport_point_within_vp(const struct viewport *vp, int x, int y)
+{
+ bool is_x = (x >= vp->x && x < (vp->x + vp->width));
+ bool is_y = (y >= vp->y && y < (vp->y + vp->height));
+ return (is_x && is_y);
+}
+#endif /* HAVE_TOUCHSCREEN */
+#endif /* HAVE_LCD_BITMAP */
+#endif /* __PCTOOL__ */
+
#ifdef HAVE_LCD_COLOR
#define ARG_STRING(_depth) ((_depth) == 2 ? "dddddgg":"dddddcc")
#else
#define ARG_STRING(_depth) "dddddgg"
#endif
+#ifdef HAVE_LCD_BITMAP
const char* viewport_parse_viewport(struct viewport *vp,
enum screen_type screen,
const char *bufptr,
@@ -386,44 +432,4 @@ const char* viewport_parse_viewport(struct viewport *vp,
return ptr;
}
-
-/*
- * (re)parse the UI vp from the settings
- * - Returns
- * 0 if no UI vp is used at all
- * else the bit for the screen (1<<screen) is set
- */
-static unsigned viewport_init_ui_vp(void)
-{
- int screen;
- unsigned ret = 0;
- char *setting;
- FOR_NB_SCREENS(screen)
- {
-#ifdef HAVE_REMOTE_LCD
- if ((screen == SCREEN_REMOTE))
- setting = global_settings.remote_ui_vp_config;
- else
#endif
- setting = global_settings.ui_vp_config;
-
-
- if (!(viewport_parse_viewport(&custom_vp[screen], screen,
- setting, ',')))
- viewport_set_fullscreen(&custom_vp[screen], screen);
- else
- ret |= BIT_N(screen);
- }
- return ret;
-}
-
-#ifdef HAVE_TOUCHSCREEN
-/* check if a point (x and y coordinates) are within a viewport */
-bool viewport_point_within_vp(const struct viewport *vp, int x, int y)
-{
- bool is_x = (x >= vp->x && x < (vp->x + vp->width));
- bool is_y = (y >= vp->y && y < (vp->y + vp->height));
- return (is_x && is_y);
-}
-#endif /* HAVE_TOUCHSCREEN */
-#endif /* HAVE_LCD_BITMAP */
diff --git a/apps/gui/viewport.h b/apps/gui/viewport.h
index d431766ab5..9cabc00468 100644
--- a/apps/gui/viewport.h
+++ b/apps/gui/viewport.h
@@ -66,6 +66,7 @@ void viewport_set_defaults(struct viewport *vp, enum screen_type screen);
#define VP_SB_IGNORE_SETTING(screen) BIT_N(4+screen)
#define VP_SB_ALLSCREENS (VP_SB_ONSCREEN(0)|VP_SB_ONSCREEN(1))
+#ifndef __PCTOOL__
/*
* Initialize the viewportmanager, which in turns initializes the UI vp and
* statusbar stuff
@@ -86,25 +87,6 @@ void viewport_set_fullscreen(struct viewport *vp, enum screen_type screen);
#ifdef HAVE_LCD_BITMAP
/*
- * Parse a viewport definition (vp_def), which looks like:
- *
- * Screens with depth > 1:
- * X|Y|width|height|font|foregorund color|background color
- * Screens with depth = 1:
- * X|Y|width|height|font
- *
- * | is a separator and can be specified via the parameter
- *
- * Returns the pointer to the char after the last character parsed
- * if everything went OK or NULL if an error happened (some values
- * not specified in the definition)
- */
-const char* viewport_parse_viewport(struct viewport *vp,
- enum screen_type screen,
- const char *vp_def,
- const char separator);
-
-/*
* Returns a pointer to the current viewport
* - That could be the UI vp, or a viewport passed to do_menu() or the like
*/
@@ -129,4 +111,28 @@ bool viewport_point_within_vp(const struct viewport *vp, int x, int y);
#define viewport_set_current_vp(a)
#define viewport_get_current_vp() NULL
#endif
+
+#endif /* __PCTOOL__ */
+
+#ifdef HAVE_LCD_BITMAP
+
+/*
+ * Parse a viewport definition (vp_def), which looks like:
+ *
+ * Screens with depth > 1:
+ * X|Y|width|height|font|foregorund color|background color
+ * Screens with depth = 1:
+ * X|Y|width|height|font
+ *
+ * | is a separator and can be specified via the parameter
+ *
+ * Returns the pointer to the char after the last character parsed
+ * if everything went OK or NULL if an error happened (some values
+ * not specified in the definition)
+ */
+const char* viewport_parse_viewport(struct viewport *vp,
+ enum screen_type screen,
+ const char *vp_def,
+ const char separator);
+#endif /* HAVE_LCD_BITMAP */
#endif /* __VIEWPORT_H__ */
diff --git a/firmware/export/font.h b/firmware/export/font.h
index d17fa18b8b..75b012d722 100644
--- a/firmware/export/font.h
+++ b/firmware/export/font.h
@@ -62,13 +62,11 @@
* must be available at system startup.
* Fonts are specified in firmware/font.c.
*/
-#ifndef __PCTOOL__
enum {
FONT_SYSFIXED, /* system fixed pitch font*/
FONT_UI, /* system porportional font*/
MAXFONTS
};
-#endif
/*
* .fnt loadable font file format definition
diff --git a/tools/checkwps/SOURCES b/tools/checkwps/SOURCES
index 80b2f76510..4afa5587e1 100644
--- a/tools/checkwps/SOURCES
+++ b/tools/checkwps/SOURCES
@@ -7,4 +7,5 @@ checkwps.c
#ifdef HAVE_LCD_BITMAP
../../apps/recorder/bmp.c
+../../apps/gui/viewport.c
#endif
diff --git a/tools/checkwps/checkwps.c b/tools/checkwps/checkwps.c
index 6e985195fb..079454def1 100644
--- a/tools/checkwps/checkwps.c
+++ b/tools/checkwps/checkwps.c
@@ -28,6 +28,7 @@
#include "wps.h"
#include "wps_internals.h"
#include "settings.h"
+#include "viewport.h"
bool debug_wps = true;
int wps_verbose_level = 0;
@@ -294,125 +295,6 @@ struct skin_viewport* find_viewport(char label, struct wps_data *data)
return NULL;
}
-/* From viewport.c & misc.h */
-#define LIST_VALUE_PARSED(setvals, position) ((setvals) & BIT_N(position))
-
-/*some short cuts for fg/bg/line selector handling */
-#ifdef HAVE_LCD_COLOR
-#define LINE_SEL_FROM_SETTINGS(vp) \
- do { \
- vp->lss_pattern = global_settings.lss_color; \
- vp->lse_pattern = global_settings.lse_color; \
- vp->lst_pattern = global_settings.lst_color; \
- } while (0)
-#define FG_FALLBACK global_settings.fg_color
-#define BG_FALLBACK global_settings.bg_color
-#else
-/* mono/greyscale doesn't have most of the above */
-#define LINE_SEL_FROM_SETTINGS(vp)
-#define FG_FALLBACK LCD_DEFAULT_FG
-#define BG_FALLBACK LCD_DEFAULT_BG
-#endif
-
-#ifdef HAVE_LCD_COLOR
-#define ARG_STRING(_depth) ((_depth) == 2 ? "dddddgg":"dddddcc")
-#else
-#define ARG_STRING(_depth) "dddddgg"
-#endif
-
-extern const char* parse_list(const char *fmt, uint32_t *set_vals,
- const char sep, const char* str, ...);
-
-const char* viewport_parse_viewport(struct viewport *vp,
- enum screen_type screen,
- const char *bufptr,
- const char separator)
-{
- /* parse the list to the viewport struct */
- const char *ptr = bufptr;
- int depth;
- uint32_t set = 0;
-
- enum {
- PL_X = 0,
- PL_Y,
- PL_WIDTH,
- PL_HEIGHT,
- PL_FONT,
- PL_FG,
- PL_BG,
- };
-
- /* Work out the depth of this display */
- depth = screens[screen].depth;
-#if (LCD_DEPTH == 1) || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH == 1)
- if (depth == 1)
- {
-#ifdef HAVE_LCD_BITMAP
- if (!(ptr = parse_list("ddddd", &set, separator, ptr,
- &vp->x, &vp->y, &vp->width, &vp->height, &vp->font)))
- return NULL;
-#endif
- }
- else
-#endif
-#if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1)
- if (depth >= 2)
- {
- if (!(ptr = parse_list(ARG_STRING(depth), &set, separator, ptr,
- &vp->x, &vp->y, &vp->width, &vp->height, &vp->font,
- &vp->fg_pattern,&vp->bg_pattern)))
- return NULL;
- }
- else
-#endif
- {}
-#undef ARG_STRING
-
- /* X and Y *must* be set */
- if (!LIST_VALUE_PARSED(set, PL_X) || !LIST_VALUE_PARSED(set, PL_Y))
- return NULL;
-
- /* fix defaults */
- if (!LIST_VALUE_PARSED(set, PL_WIDTH))
- vp->width = screens[screen].lcdwidth - vp->x;
- if (!LIST_VALUE_PARSED(set, PL_HEIGHT))
- vp->height = screens[screen].lcdheight - vp->y;
-
-#if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1)
- if (!LIST_VALUE_PARSED(set, PL_FG))
- vp->fg_pattern = FG_FALLBACK;
- if (!LIST_VALUE_PARSED(set, PL_BG))
- vp->bg_pattern = BG_FALLBACK;
-#endif /* LCD_DEPTH > 1 || LCD_REMOTE_DEPTH > 1 */
-
- LINE_SEL_FROM_SETTINGS(vp);
-
- /* Validate the viewport dimensions - we know that the numbers are
- non-negative integers, ignore bars and assume the viewport takes them
- * into account */
- if ((vp->x >= screens[screen].lcdwidth) ||
- ((vp->x + vp->width) > screens[screen].lcdwidth) ||
- (vp->y >= screens[screen].lcdheight) ||
- ((vp->y + vp->height) > screens[screen].lcdheight))
- {
- return NULL;
- }
-
-#ifdef HAVE_LCD_BITMAP
- /* Default to using the user font if the font was an invalid number or '-'*/
- if (((vp->font != FONT_SYSFIXED) && (vp->font != FONT_UI))
- || !LIST_VALUE_PARSED(set, PL_FONT)
- )
- vp->font = FONT_UI;
-
- /* Set the defaults for fields not user-specified */
- vp->drawmode = DRMODE_SOLID;
-#endif
-
- return ptr;
-}
-
int main(int argc, char **argv)
{
int res;
diff --git a/tools/checkwps/checkwps.h b/tools/checkwps/checkwps.h
index 1032cca246..dd7da32776 100644
--- a/tools/checkwps/checkwps.h
+++ b/tools/checkwps/checkwps.h
@@ -25,8 +25,6 @@
#include <stdlib.h>
#include <stdbool.h>
-#define FONT_SYSFIXED 0
-#define FONT_UI 1
#define SYSFONT_HEIGHT 8
#ifndef MIN