Changed screensaver code so that it allows loadable screensavers, added CTK_CONF_WIDGETUP_KEY and CTK_CONF_WIDGETDOWN_KEY which are now used for switching between widgets
diff --git a/contiki/ctk/ctk.c b/contiki/ctk/ctk.c
index 65b336e..4be2980 100644
--- a/contiki/ctk/ctk.c
+++ b/contiki/ctk/ctk.c
@@ -32,7 +32,7 @@
*
* This file is part of the "ctk" console GUI toolkit for cc65
*
- * $Id: ctk.c,v 1.23 2003/08/09 13:34:16 adamdunkels Exp $
+ * $Id: ctk.c,v 1.24 2003/08/09 23:32:37 adamdunkels Exp $
*
*/
@@ -103,9 +103,8 @@
ctk_signal_pointer_button;
#if CTK_CONF_SCREENSAVER
-ek_signal_t ctk_signal_screensaver_start,
- ctk_signal_screensaver_stop,
- ctk_signal_screensaver_uninstall;
+ek_signal_t ctk_signal_screensaver_stop,
+ ctk_signal_screensaver_start;
#endif /* CTK_CONF_SCREENSAVER */
@@ -113,10 +112,9 @@
unsigned short mouse_x, mouse_y, mouse_button;
#endif /* CTK_CONF_MOUSE_SUPPORT */
-static unsigned short screensaver_timer;
+static unsigned short screensaver_timer = 0;
unsigned short ctk_screensaver_timeout = (5*60);
-static u16_t start, current;
-/*#define SCREENSAVER_TIMEOUT (5*60)*/
+static ek_clock_t start, current;
#if CTK_CONF_MENUS
/*-----------------------------------------------------------------------------------*/
@@ -194,7 +192,6 @@
#if CTK_CONF_SCREENSAVER
ctk_signal_screensaver_start = dispatcher_sigalloc();
ctk_signal_screensaver_stop = dispatcher_sigalloc();
- ctk_signal_screensaver_uninstall = dispatcher_sigalloc();
#endif /* CTK_CONF_SCREENSAVER */
@@ -457,7 +454,7 @@
}
}
/*-----------------------------------------------------------------------------------*/
-void
+void
ctk_window_redraw(struct ctk_window *w)
{
/* Only redraw the window if it is a dialog or if it is the foremost
@@ -524,8 +521,7 @@
{
window_new(window, w, h, NULL);
}
-/*-----------------------------------------------------------------------------------*/
-void
+/*-----------------------------------------------------------------------------------*/void
ctk_menu_new(CC_REGISTER_ARG struct ctk_menu *menu,
char *title)
{
@@ -574,7 +570,7 @@
}
}
/*-----------------------------------------------------------------------------------*/
-void
+void
ctk_widget_redraw(struct ctk_widget *widget)
{
struct ctk_window *window;
@@ -606,15 +602,15 @@
if(window == dialog) {
ctk_draw_widget(widget, CTK_FOCUS_DIALOG, 0, height);
} else if(dialog == NULL &&
- window == windows ||
- window == &desktop_window) {
+ (window == windows ||
+ window == &desktop_window)) {
ctk_draw_widget(widget, CTK_FOCUS_WINDOW, 0, height);
}
}
}
}
/*-----------------------------------------------------------------------------------*/
-void
+void
ctk_widget_add(CC_REGISTER_ARG struct ctk_window *window,
CC_REGISTER_ARG struct ctk_widget *widget)
{
@@ -645,7 +641,7 @@
return ctk_draw_height();
}
/*-----------------------------------------------------------------------------------*/
-static void
+static void
select_widget(struct ctk_widget *focus)
{
struct ctk_window *window;
@@ -678,7 +674,7 @@
#define DOWN 1
#define LEFT 2
#define RIGHT 3
-static void
+static void
switch_focus_widget(unsigned char direction)
{
register struct ctk_window *window;
@@ -768,7 +764,7 @@
/* ctk_desktop_redraw();*/
}
/*-----------------------------------------------------------------------------------*/
-static void
+static void
switch_menu_item(unsigned char updown)
{
register struct ctk_menu *m;
@@ -847,7 +843,7 @@
return REDRAW_NONE;
}
/*-----------------------------------------------------------------------------------*/
-static void
+static void
textentry_input(ctk_arch_key_t c,
CC_REGISTER_ARG struct ctk_textentry *t)
{
@@ -923,6 +919,15 @@
#endif /* CTK_CONF_TEXTENTRY_MULTILINE */
break;
+ case CTK_CONF_WIDGETDOWN_KEY:
+ t->state = CTK_TEXTENTRY_NORMAL;
+ switch_focus_widget(DOWN);
+ break;
+ case CTK_CONF_WIDGETUP_KEY:
+ t->state = CTK_TEXTENTRY_NORMAL;
+ switch_focus_widget(UP);
+ break;
+
default:
len = tlen - txpos - 1;
if(c == CH_DEL) {
@@ -952,7 +957,7 @@
}
/*-----------------------------------------------------------------------------------*/
#if CTK_CONF_MENUS
-static unsigned char
+static unsigned char
activate_menu(void)
{
struct ctk_window *w;
@@ -1019,14 +1024,14 @@
{
if(mode == CTK_MODE_NORMAL) {
++screensaver_timer;
- if(screensaver_timer == ctk_screensaver_timeout) {
+ if(screensaver_timer >= ctk_screensaver_timeout) {
#if CTK_CONF_SCREENSAVER
dispatcher_emit(ctk_signal_screensaver_start, NULL,
DISPATCHER_BROADCAST);
#ifdef CTK_SCREENSAVER_INIT
CTK_SCREENSAVER_INIT();
#endif /* CTK_SCREENSAVER_INIT */
- mode = CTK_MODE_SCREENSAVER;
+
#endif /* CTK_CONF_SCREENSAVER */
screensaver_timer = 0;
}
@@ -1052,7 +1057,7 @@
current = ek_clock();
- if((current - start) >= CLK_TCK/2) {
+ if((current - start) >= CLK_TCK) {
timer();
start = current;
}
@@ -1319,16 +1324,10 @@
#endif /* CTK_CONF_MENUS */
} else {
switch(c) {
- case CH_CURS_RIGHT:
- switch_focus_widget(RIGHT);
- break;
- case CH_CURS_DOWN:
+ case CTK_CONF_WIDGETDOWN_KEY:
switch_focus_widget(DOWN);
break;
- case CH_CURS_LEFT:
- switch_focus_widget(LEFT);
- break;
- case CH_CURS_UP:
+ case CTK_CONF_WIDGETUP_KEY:
switch_focus_widget(UP);
break;
case CH_ENTER: