From 6c91da054c8025606aecc1654534bd1059432412 Mon Sep 17 00:00:00 2001 From: kugel Date: Fri, 16 Oct 2009 20:30:09 +0000 Subject: [PATCH] initial custom statusbar commit git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23212 a1c6a512-1295-4272-9138-f99709370657 --- apps/SOURCES | 1 + apps/filetree.c | 17 ++++- apps/filetypes.h | 2 + apps/gui/list.c | 1 + apps/gui/skin_engine/skin_display.c | 36 ++++++++-- apps/gui/skin_engine/skin_parser.c | 7 ++ apps/gui/skin_engine/wps_internals.h | 2 +- apps/gui/statusbar-skinned.c | 127 +++++++++++++++++++++++++++++++++++ apps/gui/statusbar-skinned.h | 41 +++++++++++ apps/gui/viewport.c | 18 ++--- apps/gui/wps.c | 2 + apps/main.c | 1 + apps/settings.c | 12 ++++ apps/settings.h | 2 + apps/settings_list.c | 2 + wps/WPSLIST | 3 + wps/cabbiev2.176x220x16.sb | 20 ++++++ wps/wpsbuild.pl | 70 +++++++++++++++---- 18 files changed, 332 insertions(+), 32 deletions(-) create mode 100644 apps/gui/statusbar-skinned.c create mode 100644 apps/gui/statusbar-skinned.h create mode 100644 wps/cabbiev2.176x220x16.sb diff --git a/apps/SOURCES b/apps/SOURCES index bac376589..49d248d8f 100644 --- a/apps/SOURCES +++ b/apps/SOURCES @@ -78,6 +78,7 @@ gui/quickscreen.c #endif gui/wps.c +gui/statusbar-skinned.c gui/scrollbar.c gui/splash.c gui/statusbar.c diff --git a/apps/filetree.c b/apps/filetree.c index 8fbc39fa6..504c06c7f 100644 --- a/apps/filetree.c +++ b/apps/filetree.c @@ -477,7 +477,22 @@ int ft_enter(struct tree_context* c) break; #endif - +#ifdef HAVE_LCD_BITMAP + case FILE_ATTR_SB: + splash(0, ID2P(LANG_WAIT)); + set_file(buf, (char *)global_settings.sb_file, + MAX_FILENAME); + settings_apply_skins(); + break; +#endif +#ifdef HAVE_REMOTE_LCD + case FILE_ATTR_RSB: + splash(0, ID2P(LANG_WAIT)); + set_file(buf, (char *)global_settings.rsb_file, + MAX_FILENAME); + settings_apply_skins(); + break; +#endif /* wps config file */ case FILE_ATTR_WPS: splash(0, ID2P(LANG_WAIT)); diff --git a/apps/filetypes.h b/apps/filetypes.h index f872cf86f..472f79229 100644 --- a/apps/filetypes.h +++ b/apps/filetypes.h @@ -41,6 +41,8 @@ #define FILE_ATTR_KBD 0x0C00 /* keyboard file */ #define FILE_ATTR_FMR 0x0D00 /* preset file */ #define FILE_ATTR_CUE 0x0E00 /* cuesheet file */ +#define FILE_ATTR_SB 0x0F00 /* cuesheet file */ +#define FILE_ATTR_RSB 0x1000 /* cuesheet file */ #define FILE_ATTR_MASK 0xFF00 /* which bits tree.c uses for file types */ struct filetype { diff --git a/apps/gui/list.c b/apps/gui/list.c index d7ecdccd3..0090f44b4 100644 --- a/apps/gui/list.c +++ b/apps/gui/list.c @@ -29,6 +29,7 @@ #include "kernel.h" #include "system.h" +#include "appevents.h" #include "action.h" #include "screen_access.h" #include "list.h" diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c index a5ea28619..ef1c39c1c 100644 --- a/apps/gui/skin_engine/skin_display.c +++ b/apps/gui/skin_engine/skin_display.c @@ -168,7 +168,7 @@ static void draw_progressbar(struct gui_wps *gwps, elapsed = 0; length = 0; } - + if (pb->have_bitmap_pb) gui_bitmap_scrollbar_draw(display, pb->bm, pb->x, y, pb->width, pb->bm.height, @@ -482,7 +482,12 @@ static bool evaluate_conditional(struct gui_wps *gwps, int *token_index) #ifdef HAVE_LCD_BITMAP /* clear all pictures in the conditional and nested ones */ if (data->tokens[i].type == WPS_TOKEN_IMAGE_PRELOAD_DISPLAY) - clear_image_pos(gwps, find_image(data->tokens[i].value.i&0xFF, gwps->data)); + { + struct gui_img *tmp = find_image(data->tokens[i].value.i&0xFF, + data); + if (tmp) + clear_image_pos(gwps, tmp); + } #endif #ifdef HAVE_ALBUMART if (data->albumart && data->tokens[i].type == WPS_TOKEN_ALBUMART_DISPLAY) @@ -499,17 +504,35 @@ static bool evaluate_conditional(struct gui_wps *gwps, int *token_index) #ifdef HAVE_LCD_BITMAP struct gui_img* find_image(char label, struct wps_data *data) { + static int i = 0; + struct gui_img *ret = NULL; struct skin_token_list *list = data->images; + if (data->debug) + { + DEBUGF("%s >> requesting image (id: %d)\n", __func__, n); + DEBUGF("%s >> first list data (p: %p\n", __func__, data->images); + } while (list) { struct gui_img *img = (struct gui_img *)list->token->value.data; if (img->label == label) - return img; + { + i = 0; + ret = img; goto end; + } list = list->next; +/* + if (!list && data->debug) + DEBUGF("failed to find: %s\n", img->bm.data); +*/ } - return NULL; -} -#endif + i = 0; +end: + if (data->debug) + DEBUGF("%s >> returning %p\n", __func__, ret); + return ret; +} +#endif struct skin_viewport* find_viewport(char label, struct wps_data *data) { @@ -524,7 +547,6 @@ struct skin_viewport* find_viewport(char label, struct wps_data *data) return NULL; } - /* Read a (sub)line to the given alignment format buffer. linebuf is the buffer where the data is actually stored. align is the alignment format that'll be used to display the text. diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index fa35ed994..9a8d3f5ce 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -603,6 +603,8 @@ static int parse_image_load(const char *wps_bufptr, return WPS_ERROR_INVALID_PARAM; /* save a pointer to the filename */ img->bm.data = (char*)filename; + if (wps_data->debug) + DEBUGF("%s >> image parsed (label: %c)\n", __func__, *id); img->label = *id; img->x = x; img->y = y; @@ -1639,8 +1641,13 @@ void skin_data_reset(struct wps_data *wps_data) wps_data->wps_progress_pat[i] = 0; } wps_data->full_line_progressbar = false; + +#ifdef HAVE_REMOTE_LCD + data->remote_wps = rwps; #endif wps_data->wps_loaded = false; + if (wps_data->debug) + DEBUGF("%s >> wps_data trashed (%p)\n", __func__, data); } #ifdef HAVE_LCD_BITMAP diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h index 638fb0a08..1d1bcbc8e 100644 --- a/apps/gui/skin_engine/wps_internals.h +++ b/apps/gui/skin_engine/wps_internals.h @@ -263,7 +263,6 @@ struct wps_data int num_tokens; /* tick the volume button was last pressed */ unsigned int button_time_volume; - #ifdef HAVE_LCD_BITMAP bool peak_meter_enabled; bool wps_sb_tag; @@ -277,6 +276,7 @@ struct wps_data /* this must not be reset on skin loading */ bool remote_wps; #endif + bool debug; }; /* wps_data end */ diff --git a/apps/gui/statusbar-skinned.c b/apps/gui/statusbar-skinned.c new file mode 100644 index 000000000..bb77a5088 --- /dev/null +++ b/apps/gui/statusbar-skinned.c @@ -0,0 +1,127 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2009 Thomas Martitz + * + * 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. + * + ****************************************************************************/ +#include +#include +#include +#include "config.h" + +#include "system.h" +#include "settings.h" +#include "appevents.h" +#include "screens.h" +#include "screen_access.h" +#include "skin_engine/skin_engine.h" +#include "skin_engine/wps_internals.h" +#include "debug.h" + + +/* currently only one wps_state is needed */ +extern struct wps_state wps_state; +static struct gui_wps sb_skin[NB_SCREENS]; +static struct wps_data sb_skin_data[NB_SCREENS]; + +/* initial setup of wps_data */ +static void sb_skin_update(void*); +static bool loaded_ok = false; + +void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile) +{ + + loaded_ok = buf && skin_data_load(sb_skin[screen].data, + &screens[screen], buf, isfile); + + + if (loaded_ok) + add_event(GUI_EVENT_ACTIONUPDATE, false, sb_skin_update); + else + remove_event(GUI_EVENT_ACTIONUPDATE, sb_skin_update); + +#ifdef HAVE_REMOVE_LCD + sb_skin[screen].data->remote_wps = !(screen == SCREEN_MAIN); +#endif +} + +void sb_skin_data_init(enum screen_type screen) +{ + skin_data_init(sb_skin[screen].data); +} + +bool sb_skin_active(void) +{ + return loaded_ok; +} + +void sb_skin_update(void* param) +{ + int i; + (void)param; + FOR_NB_SCREENS(i) + { + skin_update(&sb_skin[i], wps_state.do_full_update? + WPS_REFRESH_ALL : WPS_REFRESH_NON_STATIC); + } +} + +void sb_skin_init(void) +{ + int i; + FOR_NB_SCREENS(i) + { + skin_data_init(&sb_skin_data[i]); +#ifdef HAVE_ALBUMART + sb_skin_data[i].wps_uses_albumart = 0; +#endif +#ifdef HAVE_REMOTE_LCD + sb_skin_data[i].remote_wps = (i == SCREEN_REMOTE); +#endif + sb_skin[i].data = &sb_skin_data[i]; + sb_skin[i].display = &screens[i]; + sb_skin[i].data->debug = true; + DEBUGF("data in init: %p, debug: %d\n", &sb_skin_data[i], sb_skin_data[i].debug); + /* Currently no seperate wps_state needed/possible + so use the only available ( "global" ) one */ + sb_skin[i].state = &wps_state; + } +#ifdef HAVE_LCD_BITMAP +/* + add_event(GUI_EVENT_STATUSBAR_TOGGLE, false, statusbar_toggle_handler); +*/ +#endif +} + +#ifdef HAVE_ALBUMART +bool sb_skin_uses_statusbar(int *width, int *height) +{ + int i; + FOR_NB_SCREENS(i) { + struct gui_wps *gwps = &sb_skin[i]; + if (gwps->data && (gwps->data->wps_uses_albumart != WPS_ALBUMART_NONE)) + { + if (width) + *width = sb_skin[0].data->albumart_max_width; + if (height) + *height = sb_skin[0].data->albumart_max_height; + return true; + } + } + return false; +} +#endif diff --git a/apps/gui/statusbar-skinned.h b/apps/gui/statusbar-skinned.h new file mode 100644 index 000000000..7714496e5 --- /dev/null +++ b/apps/gui/statusbar-skinned.h @@ -0,0 +1,41 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2009 Thomas Martitz + * + * 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. + * + ****************************************************************************/ +#include +#include +#include +#include "config.h" + +#ifndef __STATUSBAR_SKINNED_H__ +#define __STATUSBAR_SKINNED_H__ + + +void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile); +void sb_skin_data_init(enum screen_type screen); + +/* probably temporary, to shut the classic statusbar up */ +bool sb_skin_active(void); +void sb_skin_init(void); + +#ifdef HAVE_ALBUMART +bool sb_skin_uses_statusbar(int *width, int *height); +#endif + +#endif /* __STATUSBAR_SKINNED_H__ */ diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c index fdd06bdc4..1a2b29a65 100644 --- a/apps/gui/viewport.c +++ b/apps/gui/viewport.c @@ -189,7 +189,8 @@ int viewportmanager_set_statusbar(const int enabled) if (showing_bars(i)) gui_statusbar_draw(&statusbars.statusbars[i], true); } - add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw); + if (!sb_skin_active()) + add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw); } else { @@ -250,14 +251,13 @@ void viewportmanager_theme_changed(const int which) if (which & THEME_STATUSBAR) { statusbar_enabled = VP_SB_HIDE_ALL; - - FOR_NB_SCREENS(i) - { - if (statusbar_position(i) != STATUSBAR_OFF) - statusbar_enabled |= VP_SB_ONSCREEN(i); - } - - if (statusbar_enabled != VP_SB_HIDE_ALL) + if (global_settings.statusbar != STATUSBAR_OFF) + statusbar_enabled = VP_SB_ONSCREEN(SCREEN_MAIN); +#ifdef HAVE_REMOTE_LCD + if (global_settings.remote_statusbar != STATUSBAR_OFF) + statusbar_enabled |= VP_SB_ONSCREEN(SCREEN_REMOTE); +#endif + if (statusbar_enabled && !sb_skin_active()) add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw); else remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw); diff --git a/apps/gui/wps.c b/apps/gui/wps.c index 342ebdea2..3ea5cf97f 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c @@ -131,6 +131,7 @@ void wps_data_load(enum screen_type screen, const char *buf, bool isfile) loaded_ok = buf && skin_data_load(gui_wps[screen].data, &screens[screen], buf, isfile); + DEBUGF("%s >> wps loading\n", __func__); if (!loaded_ok) /* load the hardcoded default */ { char *skin_buf[NB_SCREENS] = { @@ -1291,6 +1292,7 @@ void gui_sync_wps_init(void) #ifdef HAVE_REMOTE_LCD wps_datas[i].remote_wps = (i == SCREEN_REMOTE); #endif + wps_datas[i].debug = false; gui_wps[i].data = &wps_datas[i]; gui_wps[i].display = &screens[i]; /* Currently no seperate wps_state needed/possible diff --git a/apps/main.c b/apps/main.c index f48dd2d0a..6e902a73b 100644 --- a/apps/main.c +++ b/apps/main.c @@ -322,6 +322,7 @@ static void init(void) settings_reset(); settings_load(SETTINGS_ALL); gui_sync_wps_init(); + sb_skin_init(); settings_apply(true); init_dircache(true); init_dircache(false); diff --git a/apps/settings.c b/apps/settings.c index 2a5e31824..2069bfced 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -740,6 +740,7 @@ void settings_apply_skins(void) char buf[MAX_PATH]; /* re-initialize the skin buffer before we start reloading skins */ skin_buffer_init(); + sb_skin_data_init(SCREEN_MAIN); if ( global_settings.wps_file[0] && global_settings.wps_file[0] != 0xff ) { @@ -751,6 +752,17 @@ void settings_apply_skins(void) { wps_data_load(SCREEN_MAIN, NULL, true); } + if ( global_settings.sb_file[0] && + global_settings.sb_file[0] != 0xff ) { + snprintf(buf, sizeof buf, WPS_DIR "/%s.sb", + global_settings.sb_file); + sb_skin_data_load(SCREEN_MAIN, buf, true); + } + else + { + sb_skin_data_init(SCREEN_MAIN); + sb_skin_data_load(SCREEN_MAIN, NULL, true); + } #if defined(HAVE_REMOTE_LCD) && (NB_SCREENS > 1) if ( global_settings.rwps_file[0]) { diff --git a/apps/settings.h b/apps/settings.h index ad250ed3b..305ffddcf 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -60,6 +60,7 @@ struct opt_items { #define FONT_DIR ROCKBOX_DIR "/fonts" #define LANG_DIR ROCKBOX_DIR "/langs" #define WPS_DIR ROCKBOX_DIR "/wps" +#define SB_DIR ROCKBOX_DIR "/statusbar" #define THEME_DIR ROCKBOX_DIR "/themes" #define ICON_DIR ROCKBOX_DIR "/icons" @@ -548,6 +549,7 @@ struct user_settings int peak_meter_max; /* range maximum */ unsigned char wps_file[MAX_FILENAME+1]; /* last wps */ + unsigned char sb_file[MAX_FILENAME+1]; /* last wps */ unsigned char lang_file[MAX_FILENAME+1]; /* last language */ unsigned char playlist_catalog_dir[MAX_FILENAME+1]; int skip_length; /* skip length */ diff --git a/apps/settings_list.c b/apps/settings_list.c index 62a935178..59638bbee 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -1440,6 +1440,8 @@ const struct settings_list settings[] = { #endif TEXT_SETTING(F_THEMESETTING,wps_file, "wps", DEFAULT_WPSNAME, WPS_DIR "/", ".wps"), + TEXT_SETTING(F_THEMESETTING,sb_file, "sb", + DEFAULT_WPSNAME, WPS_DIR "/", ".sb"), TEXT_SETTING(0,lang_file,"lang","",LANG_DIR "/",".lng"), #ifdef HAVE_REMOTE_LCD TEXT_SETTING(F_THEMESETTING,rwps_file,"rwps", diff --git a/wps/WPSLIST b/wps/WPSLIST index 662fb82cb..63b111e0d 100644 --- a/wps/WPSLIST +++ b/wps/WPSLIST @@ -268,6 +268,8 @@ Author: Jens Arnold Name: cabbiev2.wps RWPS: cabbiev2.rwps +SB: cabbiev2.sb +RSB: cabbiev2.rsb # Real name of the creator of the WPS Author: Johannes Voggenthaler, Apoo Maha, Marc Guay, Alex Vanderpol, Jerry Lange, Keith Perri, Mark Fawcus, and Marianne Arnold with support from Rockbox developers and forums. Based on Cabbie by Yohann Misquitta. @@ -352,6 +354,7 @@ Statusbar: top # list & remote ui viewports ui viewport: - +ui viewport.176x220x16: 0,0,-,180,-,-,- remote ui viewport: - diff --git a/wps/cabbiev2.176x220x16.sb b/wps/cabbiev2.176x220x16.sb new file mode 100644 index 000000000..505b57f1c --- /dev/null +++ b/wps/cabbiev2.176x220x16.sb @@ -0,0 +1,20 @@ +# cabbie 2.0 default for the Sansa e200 Series by Marc Guay +# derived from cabbie 2.0 default (C) 2007, Johannes Voggenthaler (Zinc Alloy) +%wd +%xl|A|lock-176x220x16.bmp|51|24|2| +%xl|B|battery-176x220x16.bmp|73|26|10| +%xl|C|volume-176x220x16.bmp|97|26|10| +%xl|D|shuffle-176x220x16.bmp|119|27| +%xl|E|repeat-176x220x16.bmp|144|24|4| +%xl|F|playmode-176x220x16.bmp|159|24|5| +#NowPlaying +%V|0|180|-|-|-|-|-| +%pb|pb-176x220x16.bmp|5|2|166|8| +%al %pc%ac%pp of %pe%ar%pr +%?mh<%xdAa|%xdAb> +%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>> +%?pv<%xdCa|%xdCb|%xdCc|%xdCd|%xdCe|%xdCf|%xdCg|%xdCh|%xdCi|%xdCj> +%?ps<%xdD> +%?mm<|%xdEa|%xdEb|%xdEc|%xdEd> +%?mp<%xdFa|%xdFb|%xdFc|%xdFd|%xdFe> +#%?C<%C> diff --git a/wps/wpsbuild.pl b/wps/wpsbuild.pl index e9e5c29a3..04e284602 100755 --- a/wps/wpsbuild.pl +++ b/wps/wpsbuild.pl @@ -32,9 +32,18 @@ my $cppdef = $target; my @depthlist = ( 16, 8, 4, 2, 1 ); # These parameters are filled in as we parse wpslist +my $req_size; +my $req_g_wps; +my $req_t; +my $req_t_wps; my $wps; my $wps_prefix; +my $sb_prefix; my $rwps; +my $sb; +my $sb_w_size; +my $rsb; +my $rsb_w_size; my $width; my $height; my $font; @@ -42,9 +51,6 @@ my $fgcolor; my $bgcolor; my $statusbar; my $author; -my $req_g; -my $req_g_wps; -my $req_t_wps; my $backdrop; my $lineselectstart; my $lineselectend; @@ -191,12 +197,26 @@ sub copywps my $dir; my @filelist; my $file; + my $__sb; if($wpslist =~ /(.*)WPSLIST/) { $dir = $1; -# system("cp $dir/$wps .rockbox/wps/"); - #print "$req_t_wps $req_g_wps\n"; + $__sb = $sb_prefix . "." . $req_size . ".sb"; + print "$req_t_wps $req_g_wps $sb_prefix\n"; + print "$dir/$__sb\n"; +# system("cp $dir/$wps .rockbox/wps/"); + # check for .WIDTHxHEIGHTxDEPTH.sb + if (-e "$dir/$__sb") { + system("cp $dir/$__sb $rbdir/wps/$sb"); + } + # check for .WIDTHxHEIGHTxDEPTH..sb and overwrite the + # previous sb if needed + $__sb = $sb_prefix . "." . $req_size . "." . $modelname . ".sb"; + if (-e "$dir/$__sb") { + system("cp $dir/$__sb $rbdir/wps/$sb"); + } + if (-e "$dir/$req_t_wps" ) { system("cp $dir/$req_t_wps $rbdir/wps/$wps"); @@ -210,9 +230,9 @@ sub copywps close(WPSFILE); if ($#filelist >= 0) { - if (-e "$dir/$wps_prefix/$req_g") { + if (-e "$dir/$wps_prefix/$req_size") { foreach $file (@filelist) { - system("cp $dir/$wps_prefix/$req_g/$file $rbdir/wps/$wps_prefix/"); + system("cp $dir/$wps_prefix/$req_size/$file $rbdir/wps/$wps_prefix/"); } } elsif (-e "$dir/$wps_prefix") { @@ -235,7 +255,7 @@ sub copywps sub buildcfg { my $cfg = $wps; - my @out; + my @out; $cfg =~ s/\.(r|)wps/.cfg/; @@ -338,6 +358,8 @@ while() { undef $wps; undef $wps_prefix; undef $rwps; + undef $sb; + undef $rsb; undef $width; undef $height; undef $font; @@ -386,23 +408,24 @@ while() { foreach my $d (@depthlist) { next if ($d > $rdepth); - $req_g = $rwidth . "x" . $rheight . "x" . $d; + $req_size = $rwidth . "x" . $rheight . "x" . $d; # check for model specific wps - $req_g_wps = $wps_prefix . "." . $req_g . "." . $modelname . ".wps"; + $req_g_wps = $wps_prefix . "." . $req_size . "." . $modelname . ".wps"; last if (-e "$wpsdir/$req_g_wps"); - $req_g_wps = $wps_prefix . "." . $req_g . ".wps"; + # check for normal wps (with WIDTHxHEIGHTxDEPTH) + $req_g_wps = $wps_prefix . "." . $req_size . ".wps"; last if (-e "$wpsdir/$req_g_wps"); if ($isrwps) { - $req_g = $req_g . "." . $main_width . "x" . $main_height . "x" . "$main_depth"; + $req_size = $req_size . "." . $main_width . "x" . $main_height . "x" . "$main_depth"; - $req_g_wps = $wps_prefix . "." . $req_g . ".wps"; + $req_g_wps = $wps_prefix . "." . $req_size . ".wps"; last if (-e "$wpsdir/$req_g_wps"); } } - $req_t_wps = $wps_prefix . ".txt" . ".wps"; + $req_t_wps = $wps_prefix . $req_t . ".wps"; #print "LCD: $wps wants $width x $height\n"; #print "LCD: is $rwidth x $rheight\n"; @@ -454,6 +477,19 @@ while() { elsif($l =~ /^RWPS\.${main_width}x${main_height}x$main_depth: *(.*)/i) { $rwps = $1; } + elsif($l =~ /^SB: *(.*)/i) { + $sb = $sb_prefix = $1; + $sb_prefix =~ s/\.(r|)sb//; + } + elsif($l =~ /^SB\.${main_width}x${main_height}x$main_depth: *(.*)/i) { + $sb = $1; + } + elsif($l =~ /^RSB: *(.*)/i) { + $rsb = $1; + } + elsif($l =~ /^RSB\.${main_width}x${main_height}x$main_depth: *(.*)/i) { + $rsb = $1; + } elsif($l =~ /^Author: *(.*)/i) { $author = $1; } @@ -526,9 +562,15 @@ while() { elsif($l =~ /^ui viewport: *(.*)/i) { $listviewport = $1; } + elsif($l =~ /^ui viewport\.${main_width}x${main_height}x$main_depth: *(.*)/i) { + $listviewport = $1; + } elsif($l =~ /^remote ui viewport: *(.*)/i) { $remotelistviewport = $1; } + elsif($l =~ /^remote ui viewport\.${main_width}x${main_height}x$main_depth: *(.*)/i) { + $remotelistviewport = $1; + } else{ #print "Unknown line: $l!\n"; } -- 2.11.4.GIT