1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2008 by Jonathan Gordon
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
25 #include "lcd-remote.h"
34 #include "statusbar.h"
35 #include "screen_access.h"
36 #include "appevents.h"
38 static int statusbar_enabled
= 0;
40 int viewport_get_nb_lines(struct viewport
*vp
)
42 #ifdef HAVE_LCD_BITMAP
43 return vp
->height
/font_get(vp
->font
)->height
;
50 static bool showing_bars(enum screen_type screen
)
52 if (statusbar_enabled
& VP_SB_ONSCREEN(screen
))
54 #ifdef HAVE_LCD_BITMAP
55 bool ignore
= statusbar_enabled
& VP_SB_IGNORE_SETTING(screen
);
56 return ignore
|| (statusbar_position(screen
));
64 void viewport_set_defaults(struct viewport
*vp
, enum screen_type screen
)
67 vp
->width
= screens
[screen
].lcdwidth
;
69 #ifdef HAVE_LCD_BITMAP
70 vp
->drawmode
= DRMODE_SOLID
;
71 vp
->font
= FONT_UI
; /* default to UI to discourage SYSFONT use */
73 vp
->height
= screens
[screen
].lcdheight
;
74 if (statusbar_position(screen
) != STATUSBAR_BOTTOM
&& showing_bars(screen
))
75 vp
->y
= STATUSBAR_HEIGHT
;
81 vp
->height
= screens
[screen
].lcdheight
- (showing_bars(screen
)?STATUSBAR_HEIGHT
:0);
83 #ifdef HAVE_REMOTE_LCD
84 /* We only need this test if there is a remote LCD */
85 if (screen
== SCREEN_MAIN
)
89 vp
->fg_pattern
= global_settings
.fg_color
;
90 vp
->bg_pattern
= global_settings
.bg_color
;
91 vp
->lss_pattern
= global_settings
.lss_color
;
92 vp
->lse_pattern
= global_settings
.lse_color
;
93 vp
->lst_pattern
= global_settings
.lst_color
;
95 vp
->fg_pattern
= LCD_DEFAULT_FG
;
96 vp
->bg_pattern
= LCD_DEFAULT_BG
;
100 #if defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1
101 if (screen
== SCREEN_REMOTE
)
103 vp
->fg_pattern
= LCD_REMOTE_DEFAULT_FG
;
104 vp
->bg_pattern
= LCD_REMOTE_DEFAULT_BG
;
110 int viewportmanager_set_statusbar(int enabled
)
112 int old
= statusbar_enabled
;
113 statusbar_enabled
= enabled
;
120 gui_statusbar_draw(&statusbars
.statusbars
[i
], true);
122 add_event(GUI_EVENT_ACTIONUPDATE
, false, viewportmanager_draw_statusbars
);
126 remove_event(GUI_EVENT_ACTIONUPDATE
, viewportmanager_draw_statusbars
);
131 void viewportmanager_draw_statusbars(void* data
)
138 gui_statusbar_draw(&statusbars
.statusbars
[i
], (bool)data
);
142 void viewportmanager_statusbar_changed(void* data
)
145 statusbar_enabled
= 0;
146 if (global_settings
.statusbar
!= STATUSBAR_OFF
)
147 statusbar_enabled
= VP_SB_ONSCREEN(SCREEN_MAIN
);
148 #ifdef HAVE_REMOTE_LCD
149 if (global_settings
.remote_statusbar
!= STATUSBAR_OFF
)
150 statusbar_enabled
|= VP_SB_ONSCREEN(SCREEN_REMOTE
);
152 viewportmanager_set_statusbar(statusbar_enabled
);