diff options
Diffstat (limited to 'apps/plugins/imageviewer/imageviewer.h')
| -rw-r--r-- | apps/plugins/imageviewer/imageviewer.h | 414 |
1 files changed, 414 insertions, 0 deletions
diff --git a/apps/plugins/imageviewer/imageviewer.h b/apps/plugins/imageviewer/imageviewer.h new file mode 100644 index 0000000..3851e1f --- /dev/null +++ b/apps/plugins/imageviewer/imageviewer.h @@ -0,0 +1,414 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * user intereface of image viewers (jpeg, png, etc.) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#ifndef _IMGVIEW_IMGVIEW_H +#define _IMGVIEW_IMGVIEW_H + +#include "plugin.h" + +/* variable button definitions */ +#if CONFIG_KEYPAD == RECORDER_PAD +#define IMGVIEW_ZOOM_IN BUTTON_PLAY +#define IMGVIEW_ZOOM_OUT BUTTON_ON +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_F3 +#define IMGVIEW_PREVIOUS BUTTON_F2 +#define IMGVIEW_MENU BUTTON_OFF + +#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD +#define IMGVIEW_ZOOM_IN BUTTON_SELECT +#define IMGVIEW_ZOOM_OUT BUTTON_ON +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_F3 +#define IMGVIEW_PREVIOUS BUTTON_F2 +#define IMGVIEW_MENU BUTTON_OFF + +#elif CONFIG_KEYPAD == ONDIO_PAD +#define IMGVIEW_ZOOM_PRE BUTTON_MENU +#define IMGVIEW_ZOOM_IN (BUTTON_MENU | BUTTON_REL) +#define IMGVIEW_ZOOM_OUT (BUTTON_MENU | BUTTON_DOWN) +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT (BUTTON_MENU | BUTTON_RIGHT) +#define IMGVIEW_PREVIOUS (BUTTON_MENU | BUTTON_LEFT) +#define IMGVIEW_MENU BUTTON_OFF + +#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) +#define IMGVIEW_ZOOM_IN BUTTON_SELECT +#define IMGVIEW_ZOOM_OUT BUTTON_MODE +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) +#define IMGVIEW_NEXT BUTTON_ON +#define IMGVIEW_PREVIOUS BUTTON_REC +#else +#define IMGVIEW_NEXT BUTTON_REC +#define IMGVIEW_PREVIOUS BUTTON_ON +#endif +#define IMGVIEW_MENU BUTTON_OFF +#define IMGVIEW_RC_MENU BUTTON_RC_STOP + +#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ + (CONFIG_KEYPAD == IPOD_1G2G_PAD) +#define IMGVIEW_ZOOM_IN BUTTON_SCROLL_FWD +#define IMGVIEW_ZOOM_OUT BUTTON_SCROLL_BACK +#define IMGVIEW_UP BUTTON_MENU +#define IMGVIEW_DOWN BUTTON_PLAY +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT (BUTTON_SELECT | BUTTON_RIGHT) +#define IMGVIEW_PREVIOUS (BUTTON_SELECT | BUTTON_LEFT) +#define IMGVIEW_MENU (BUTTON_SELECT | BUTTON_MENU) + +#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD +#define IMGVIEW_ZOOM_PRE BUTTON_SELECT +#define IMGVIEW_ZOOM_IN (BUTTON_SELECT | BUTTON_REL) +#define IMGVIEW_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT) +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_PLAY +#define IMGVIEW_PREVIOUS BUTTON_REC +#define IMGVIEW_MENU BUTTON_POWER + +#elif CONFIG_KEYPAD == GIGABEAT_PAD +#define IMGVIEW_ZOOM_IN BUTTON_VOL_UP +#define IMGVIEW_ZOOM_OUT BUTTON_VOL_DOWN +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT (BUTTON_A | BUTTON_RIGHT) +#define IMGVIEW_PREVIOUS (BUTTON_A | BUTTON_LEFT) +#define IMGVIEW_MENU BUTTON_MENU + +#elif CONFIG_KEYPAD == SANSA_E200_PAD +#define IMGVIEW_ZOOM_PRE BUTTON_SELECT +#define IMGVIEW_ZOOM_IN (BUTTON_SELECT | BUTTON_REL) +#define IMGVIEW_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT) +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_SCROLL_FWD +#define IMGVIEW_NEXT_REPEAT (BUTTON_SCROLL_FWD|BUTTON_REPEAT) +#define IMGVIEW_PREVIOUS BUTTON_SCROLL_BACK +#define IMGVIEW_PREVIOUS_REPEAT (BUTTON_SCROLL_BACK|BUTTON_REPEAT) +#define IMGVIEW_MENU BUTTON_POWER +#define IMGVIEW_SLIDE_SHOW BUTTON_REC + +#elif CONFIG_KEYPAD == SANSA_FUZE_PAD +#define IMGVIEW_ZOOM_PRE BUTTON_SELECT +#define IMGVIEW_ZOOM_IN (BUTTON_SELECT | BUTTON_REL) +#define IMGVIEW_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT) +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_SCROLL_FWD +#define IMGVIEW_NEXT_REPEAT (BUTTON_SCROLL_FWD|BUTTON_REPEAT) +#define IMGVIEW_PREVIOUS BUTTON_SCROLL_BACK +#define IMGVIEW_PREVIOUS_REPEAT (BUTTON_SCROLL_BACK|BUTTON_REPEAT) +#define IMGVIEW_MENU (BUTTON_HOME|BUTTON_REPEAT) + +#elif CONFIG_KEYPAD == SANSA_C200_PAD +#define IMGVIEW_ZOOM_PRE BUTTON_SELECT +#define IMGVIEW_ZOOM_IN (BUTTON_SELECT | BUTTON_REL) +#define IMGVIEW_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT) +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_VOL_UP +#define IMGVIEW_NEXT_REPEAT (BUTTON_VOL_UP|BUTTON_REPEAT) +#define IMGVIEW_PREVIOUS BUTTON_VOL_DOWN +#define IMGVIEW_PREVIOUS_REPEAT (BUTTON_VOL_DOWN|BUTTON_REPEAT) +#define IMGVIEW_MENU BUTTON_POWER +#define IMGVIEW_SLIDE_SHOW BUTTON_REC + +#elif CONFIG_KEYPAD == SANSA_CLIP_PAD +#define IMGVIEW_ZOOM_PRE BUTTON_SELECT +#define IMGVIEW_ZOOM_IN (BUTTON_SELECT | BUTTON_REL) +#define IMGVIEW_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT) +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_VOL_UP +#define IMGVIEW_NEXT_REPEAT (BUTTON_VOL_UP|BUTTON_REPEAT) +#define IMGVIEW_PREVIOUS BUTTON_VOL_DOWN +#define IMGVIEW_PREVIOUS_REPEAT (BUTTON_VOL_DOWN|BUTTON_REPEAT) +#define IMGVIEW_MENU BUTTON_POWER +#define IMGVIEW_SLIDE_SHOW BUTTON_HOME + +#elif CONFIG_KEYPAD == SANSA_M200_PAD +#define IMGVIEW_ZOOM_PRE BUTTON_SELECT +#define IMGVIEW_ZOOM_IN (BUTTON_SELECT | BUTTON_REL) +#define IMGVIEW_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT) +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_VOL_UP +#define IMGVIEW_NEXT_REPEAT (BUTTON_VOL_UP|BUTTON_REPEAT) +#define IMGVIEW_PREVIOUS BUTTON_VOL_DOWN +#define IMGVIEW_PREVIOUS_REPEAT (BUTTON_VOL_DOWN|BUTTON_REPEAT) +#define IMGVIEW_MENU BUTTON_POWER +#define IMGVIEW_SLIDE_SHOW (BUTTON_SELECT | BUTTON_UP) + +#elif CONFIG_KEYPAD == IRIVER_H10_PAD +#define IMGVIEW_ZOOM_PRE BUTTON_PLAY +#define IMGVIEW_ZOOM_IN (BUTTON_PLAY | BUTTON_REL) +#define IMGVIEW_ZOOM_OUT (BUTTON_PLAY | BUTTON_REPEAT) +#define IMGVIEW_UP BUTTON_SCROLL_UP +#define IMGVIEW_DOWN BUTTON_SCROLL_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_FF +#define IMGVIEW_PREVIOUS BUTTON_REW +#define IMGVIEW_MENU BUTTON_POWER + +#elif CONFIG_KEYPAD == MROBE500_PAD +#define IMGVIEW_MENU BUTTON_POWER + +#elif CONFIG_KEYPAD == GIGABEAT_S_PAD +#define IMGVIEW_ZOOM_IN BUTTON_VOL_UP +#define IMGVIEW_ZOOM_OUT BUTTON_VOL_DOWN +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_NEXT +#define IMGVIEW_PREVIOUS BUTTON_PREV +#define IMGVIEW_MENU BUTTON_MENU + +#elif CONFIG_KEYPAD == MROBE100_PAD +#define IMGVIEW_ZOOM_IN BUTTON_SELECT +#define IMGVIEW_ZOOM_OUT BUTTON_PLAY +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT (BUTTON_DISPLAY | BUTTON_RIGHT) +#define IMGVIEW_PREVIOUS (BUTTON_DISPLAY | BUTTON_LEFT) +#define IMGVIEW_MENU BUTTON_MENU + +#elif CONFIG_KEYPAD == IAUDIO_M3_PAD +#define IMGVIEW_ZOOM_PRE BUTTON_RC_PLAY +#define IMGVIEW_ZOOM_IN (BUTTON_RC_PLAY|BUTTON_REL) +#define IMGVIEW_ZOOM_OUT (BUTTON_RC_PLAY|BUTTON_REPEAT) +#define IMGVIEW_UP BUTTON_RC_VOL_UP +#define IMGVIEW_DOWN BUTTON_RC_VOL_DOWN +#define IMGVIEW_LEFT BUTTON_RC_REW +#define IMGVIEW_RIGHT BUTTON_RC_FF +#define IMGVIEW_NEXT BUTTON_RC_MODE +#define IMGVIEW_PREVIOUS BUTTON_RC_MENU +#define IMGVIEW_MENU BUTTON_RC_REC + +#elif CONFIG_KEYPAD == COWON_D2_PAD + +#elif CONFIG_KEYPAD == IAUDIO67_PAD +#define IMGVIEW_ZOOM_IN BUTTON_VOLUP +#define IMGVIEW_ZOOM_OUT BUTTON_VOLDOWN +#define IMGVIEW_UP BUTTON_STOP +#define IMGVIEW_DOWN BUTTON_PLAY +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT (BUTTON_PLAY|BUTTON_VOLUP) +#define IMGVIEW_PREVIOUS (BUTTON_PLAY|BUTTON_VOLDOWN) +#define IMGVIEW_MENU BUTTON_MENU + +#elif CONFIG_KEYPAD == CREATIVEZVM_PAD + +#define IMGVIEW_ZOOM_IN BUTTON_PLAY +#define IMGVIEW_ZOOM_OUT BUTTON_CUSTOM +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_SELECT +#define IMGVIEW_PREVIOUS BUTTON_BACK +#define IMGVIEW_MENU BUTTON_MENU + +#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD +#define IMGVIEW_ZOOM_IN BUTTON_VOL_UP +#define IMGVIEW_ZOOM_OUT BUTTON_VOL_DOWN +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_VIEW +#define IMGVIEW_PREVIOUS BUTTON_PLAYLIST +#define IMGVIEW_MENU BUTTON_MENU + +#elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD +#define IMGVIEW_ZOOM_IN BUTTON_VOL_UP +#define IMGVIEW_ZOOM_OUT BUTTON_VOL_DOWN +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_PREV +#define IMGVIEW_RIGHT BUTTON_NEXT +#define IMGVIEW_NEXT BUTTON_RIGHT +#define IMGVIEW_PREVIOUS BUTTON_LEFT +#define IMGVIEW_MENU BUTTON_MENU + +#elif CONFIG_KEYPAD == ONDAVX747_PAD +#elif CONFIG_KEYPAD == ONDAVX777_PAD + +#elif CONFIG_KEYPAD == SAMSUNG_YH_PAD +#define IMGVIEW_ZOOM_IN (BUTTON_PLAY|BUTTON_UP) +#define IMGVIEW_ZOOM_OUT (BUTTON_PLAY|BUTTON_DOWN) +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_FFWD +#define IMGVIEW_PREVIOUS BUTTON_REW +#define IMGVIEW_MENU BUTTON_PLAY + +#else +#error No keymap defined! +#endif + +#ifdef HAVE_TOUCHSCREEN +#ifndef IMGVIEW_UP +#define IMGVIEW_UP BUTTON_TOPMIDDLE +#endif +#ifndef IMGVIEW_DOWN +#define IMGVIEW_DOWN BUTTON_BOTTOMMIDDLE +#endif +#ifndef IMGVIEW_LEFT +#define IMGVIEW_LEFT BUTTON_MIDLEFT +#endif +#ifndef IMGVIEW_RIGHT +#define IMGVIEW_RIGHT BUTTON_MIDRIGHT +#endif +#ifndef IMGVIEW_ZOOM_IN +#define IMGVIEW_ZOOM_IN BUTTON_TOPRIGHT +#endif +#ifndef IMGVIEW_ZOOM_OUT +#define IMGVIEW_ZOOM_OUT BUTTON_TOPLEFT +#endif +#ifndef IMGVIEW_MENU +#define IMGVIEW_MENU (BUTTON_CENTER|BUTTON_REL) +#endif +#ifndef IMGVIEW_NEXT +#define IMGVIEW_NEXT BUTTON_BOTTOMRIGHT +#endif +#ifndef IMGVIEW_PREVIOUS +#define IMGVIEW_PREVIOUS BUTTON_BOTTOMLEFT +#endif +#endif + +/* different graphics libraries */ +#if LCD_DEPTH < 8 +#define USEGSLIB +#include <lib/grey.h> +#define MYLCD(fn) grey_ub_ ## fn +#define MYLCD_UPDATE() +#define MYXLCD(fn) grey_ub_ ## fn +#else +#include <lib/xlcd.h> +#define MYLCD(fn) rb->lcd_ ## fn +#define MYLCD_UPDATE() rb->lcd_update(); +#define MYXLCD(fn) xlcd_ ## fn +#endif + +/* Min memory allowing us to use the plugin buffer + * and thus not stopping the music + * *Very* rough estimation: + * Max 10 000 dir entries * 4bytes/entry (char **) = 40000 bytes + * + 30k code size = 70 000 + * + 50k min for image = 120 000 + */ +#define MIN_MEM 120000 + +/* State code for output with return. */ +#define PLUGIN_OTHER 10 +#define PLUGIN_ABORT 11 +#define PLUGIN_OUTOFMEM 12 + +#if !defined(SIMULATOR) && defined(HAVE_DISK_STORAGE) +#define DISK_SPINDOWN +#endif + +/* Settings. jpeg needs these */ +struct imgview_settings +{ + /* include all settings for varias decoders as using same setting file. */ +#ifdef HAVE_LCD_COLOR + int jpeg_colour_mode; + int jpeg_dither_mode; +#endif + int ss_timeout; +}; + +/* structure passed to decoder. */ +struct image_info { + int x_size, y_size; /* set size of loaded image in load_image(). */ + int width, height; /* set size of resized image in get_image(). */ + int x, y; /* display position */ + void *data; /* use freely in decoder. not touched in ui. */ +}; + +/* callback updating a progress meter while image decoding */ +extern void cb_progress(int current, int total); + +extern struct imgview_settings settings; +extern bool slideshow_enabled; +extern bool running_slideshow; +#ifdef DISK_SPINDOWN +extern bool immediate_ata_off; +#endif +#if PLUGIN_BUFFER_SIZE >= MIN_MEM +extern bool plug_buf; +#endif + +/* functions needed to be implemented in each image decoders. */ +/* return true if ext is supported by the decoder. */ +extern bool img_ext(const char *ext); +/* return needed size of buffer to store downscaled image by ds */ +extern int img_mem(int ds); +/* load image from filename. set width and height of info properly. alos, set + * buf_size to remaining size of buf after load image. it is used to caluclate + * min downscale. */ +extern int load_image(char *filename, struct image_info *info, + unsigned char *buf, ssize_t *buf_size); +/* downscale loaded image by ds. note that buf to store reszied image is not + * provided. return PLUGIN_ERROR for error. ui will skip to next image. */ +extern int get_image(struct image_info *info, int ds); +/* draw part of image */ +extern void draw_image_rect(struct image_info *info, + int x, int y, int width, int height); + +#endif /* _IMGVIEW_IMGVIEW_H */ |