Have ctk (at least on conio) work correctly without menus.

This commit is contained in:
oliverschmidt 2007-12-15 20:46:15 +00:00
parent 9765b76455
commit 4671ee3d10
2 changed files with 22 additions and 18 deletions

View file

@ -29,7 +29,7 @@
* *
* This file is part of the "ctk" console GUI toolkit for cc65 * This file is part of the "ctk" console GUI toolkit for cc65
* *
* $Id: ctk-conio.c,v 1.6 2007/11/30 21:50:09 oliverschmidt Exp $ * $Id: ctk-conio.c,v 1.7 2007/12/15 20:46:15 oliverschmidt Exp $
* *
*/ */
@ -240,7 +240,7 @@ ctk_draw_widget(struct ctk_widget *w,
unsigned char posx, posy; unsigned char posx, posy;
posx = win->x + 1; posx = win->x + 1;
posy = win->y + 2; posy = win->y + 1 + CTK_CONF_MENUS;
if(w == win->focused) { if(w == win->focused) {
focus |= CTK_FOCUS_WIDGET; focus |= CTK_FOCUS_WIDGET;
@ -272,10 +272,10 @@ ctk_draw_clear_window(struct ctk_window *window,
(void)textcolor(WINDOWCOLOR); (void)textcolor(WINDOWCOLOR);
} }
h = window->y + 2 + window->h; h = window->y + 1 + CTK_CONF_MENUS + window->h;
/* Clear window contents. */ /* Clear window contents. */
for(i = window->y + 2; i < h; ++i) { for(i = window->y + 1 + CTK_CONF_MENUS; i < h; ++i) {
if(i >= clipy1 && i < clipy2) { if(i >= clipy1 && i < clipy2) {
cclearxy(window->x + 1, i, window->w); cclearxy(window->x + 1, i, window->w);
} }
@ -324,12 +324,12 @@ ctk_draw_window(struct ctk_window *window, unsigned char focus,
unsigned char h; unsigned char h;
unsigned char x1, y1, x2, y2; unsigned char x1, y1, x2, y2;
if(window->y + 1 >= clipy2) { if(window->y + CTK_CONF_MENUS >= clipy2) {
return; return;
} }
x = window->x; x = window->x;
y = window->y + 1; y = window->y + CTK_CONF_MENUS;
x1 = x + 1; x1 = x + 1;
y1 = y + 1; y1 = y + 1;
x2 = x1 + window->w; x2 = x1 + window->w;
@ -356,7 +356,7 @@ ctk_draw_window(struct ctk_window *window, unsigned char focus,
if(clipy1 > y1) { if(clipy1 > y1) {
if(clipy1 - y1 < h) { if(clipy1 - y1 < h) {
h = clipy1 - y1; h = clipy1 - y1;
y1 = clipy1; y1 = clipy1;
} else { } else {
h = 0; h = 0;
} }
@ -395,7 +395,7 @@ ctk_draw_dialog(struct ctk_window *dialog)
(void)textcolor(DIALOGCOLOR); (void)textcolor(DIALOGCOLOR);
x = dialog->x; x = dialog->x;
y = dialog->y + 1; y = dialog->y + CTK_CONF_MENUS;
x1 = x + 1; x1 = x + 1;
y1 = y + 1; y1 = y + 1;

View file

@ -44,7 +44,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* $Id: ctk.c,v 1.14 2007/12/15 11:34:59 oliverschmidt Exp $ * $Id: ctk.c,v 1.15 2007/12/15 20:46:15 oliverschmidt Exp $
* *
*/ */
@ -94,7 +94,7 @@ static unsigned char redraw_widgetptr;
#if CTK_CONF_ICONS #if CTK_CONF_ICONS
static unsigned char iconx, icony; static unsigned char iconx, icony;
#define ICONX_START (width - 6) #define ICONX_START (width - 6)
#define ICONY_START (height - 7) #define ICONY_START (height - 6 - CTK_CONF_MENUS)
#define ICONX_DELTA -16 #define ICONX_DELTA -16
#define ICONY_DELTA -5 #define ICONY_DELTA -5
#define ICONY_MAX height #define ICONY_MAX height
@ -139,11 +139,9 @@ process_event_t
/** Same as ctk_signal_widget_select. */ /** Same as ctk_signal_widget_select. */
ctk_signal_hyperlink_hover; ctk_signal_hyperlink_hover;
#if CTK_CONF_MENUS
/** Emitted when a menu item is activated. The number of the menu /** Emitted when a menu item is activated. The number of the menu
item is passed as signal data. */ item is passed as signal data. */
process_event_t ctk_signal_menu_activate; process_event_t ctk_signal_menu_activate;
#endif /* CTK_CONF_MENUS */
/** Emitted when a window is closed. A pointer to the window is /** Emitted when a window is closed. A pointer to the window is
passed as signal data. */ passed as signal data. */
@ -638,7 +636,7 @@ ctk_desktop_redraw(struct ctk_desktop *d)
if(mode == CTK_MODE_NORMAL || if(mode == CTK_MODE_NORMAL ||
mode == CTK_MODE_WINDOWMOVE) { mode == CTK_MODE_WINDOWMOVE) {
do_redraw_all(1, height); do_redraw_all(CTK_CONF_MENUS, height);
} }
} else { } else {
height = ctk_draw_height(); height = ctk_draw_height();
@ -1392,8 +1390,10 @@ PROCESS_THREAD(ctk_process, ev, data)
#if CTK_CONF_MOUSE_SUPPORT #if CTK_CONF_MOUSE_SUPPORT
static unsigned char mxc, myc, mouse_button_changed, mouse_moved, static unsigned char mxc, myc, mouse_button_changed, mouse_moved,
mouse_clicked; mouse_clicked;
#if CTK_CONF_MENUS
static unsigned char menux; static unsigned char menux;
register struct ctk_menu *menu; register struct ctk_menu *menu;
#endif /* CTK_CONF_MENUS */
#endif /* CTK_CONF_MOUSE_SUPPORT */ #endif /* CTK_CONF_MOUSE_SUPPORT */
PROCESS_BEGIN(); PROCESS_BEGIN();
@ -1426,9 +1426,7 @@ PROCESS_THREAD(ctk_process, ev, data)
ctk_signal_hyperlink_activate = process_alloc_event(); ctk_signal_hyperlink_activate = process_alloc_event();
#if CTK_CONF_MENUS
ctk_signal_menu_activate = process_alloc_event(); ctk_signal_menu_activate = process_alloc_event();
#endif /* CTK_CONF_MENUS */
ctk_signal_window_close = process_alloc_event(); ctk_signal_window_close = process_alloc_event();
@ -1519,6 +1517,7 @@ PROCESS_THREAD(ctk_process, ev, data)
screensaver_timer = 0; screensaver_timer = 0;
#endif /* CTK_CONF_SCREENSAVER */ #endif /* CTK_CONF_SCREENSAVER */
#if CTK_CONF_MENUS
if(myc == 0) { if(myc == 0) {
/* Here we should do whatever needs to be done when the mouse /* Here we should do whatever needs to be done when the mouse
moves around and clicks in the menubar. */ moves around and clicks in the menubar. */
@ -1593,6 +1592,7 @@ PROCESS_THREAD(ctk_process, ev, data)
redraw |= REDRAW_MENUS; redraw |= REDRAW_MENUS;
} }
} else { } else {
#endif /* CTK_CONF_MENUS */
/* Walk through the windows from top to bottom to see in /* Walk through the windows from top to bottom to see in
which window the mouse pointer is. */ which window the mouse pointer is. */
@ -1706,8 +1706,10 @@ PROCESS_THREAD(ctk_process, ev, data)
} }
} }
} }
#if CTK_CONF_MENUS
} }
} }
#endif /* CTK_CONF_MENUS */
} }
#endif /* CTK_CONF_MOUSE_SUPPORT */ #endif /* CTK_CONF_MOUSE_SUPPORT */
@ -1839,9 +1841,11 @@ PROCESS_THREAD(ctk_process, ev, data)
} else { } else {
window->y = myc; window->y = myc;
} }
#if CTK_CONF_MENUS
if(window->y > 0) { if(window->y > 0) {
--window->y; --window->y;
} }
#endif /* CTK_CONF_MENUS */
redraw = REDRAW_ALL; redraw = REDRAW_ALL;
} }
@ -1879,7 +1883,7 @@ PROCESS_THREAD(ctk_process, ev, data)
break; break;
case CH_CURS_DOWN: case CH_CURS_DOWN:
++window->y; ++window->y;
if(window->y + window->h + 2 >= height) { if(window->y + window->h + 1 + CTK_CONF_MENUS >= height) {
--window->y; --window->y;
} }
redraw = REDRAW_ALL; redraw = REDRAW_ALL;
@ -1900,10 +1904,10 @@ PROCESS_THREAD(ctk_process, ev, data)
} }
if(redraw & REDRAW_ALL) { if(redraw & REDRAW_ALL) {
do_redraw_all(1, height); do_redraw_all(CTK_CONF_MENUS, height);
#if CTK_CONF_MENUS #if CTK_CONF_MENUS
} else if(redraw & REDRAW_MENUPART) { } else if(redraw & REDRAW_MENUPART) {
do_redraw_all(1, maxnitems + 1); do_redraw_all(CTK_CONF_MENUS, maxnitems + 1);
} else if(redraw & REDRAW_MENUS) { } else if(redraw & REDRAW_MENUS) {
ctk_draw_menus(&menus); ctk_draw_menus(&menus);
#endif /* CTK_CONF_MENUS */ #endif /* CTK_CONF_MENUS */