X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=app%2Fdemo%2Fdemo.c;h=729abe090357eed78814e4c12e8c8e5281459cb9;hb=4cc44c9888a0336b9d01121ec0b7ad95f4a76195;hp=f94496b6f93c8687f82583a80c1d67dde5c77243;hpb=969f9a6fd4c736973771e39a7516ba56d9453216;p=bertos.git diff --git a/app/demo/demo.c b/app/demo/demo.c old mode 100755 new mode 100644 index f94496b6..729abe09 --- a/app/demo/demo.c +++ b/app/demo/demo.c @@ -1,105 +1,74 @@ /** * \file * * - * \version $Id$ + * \version $Id: demo.c 18242 2007-10-08 17:35:23Z marco $ * - * \author Bernardo Innocenti + * \author Bernie Innocenti * * \brief Windowing system test. */ -/*#* - *#* $Log$ - *#* Revision 1.5 2006/05/15 07:25:29 bernie - *#* Move menu to gui/. - *#* - *#* Revision 1.4 2006/04/27 05:43:07 bernie - *#* Fix naming conventions. - *#* - *#* Revision 1.3 2006/04/11 00:07:32 bernie - *#* Implemenent MF_SAVESEL flag. - *#* - *#* Revision 1.2 2006/03/27 04:49:50 bernie - *#* Add bouncing logo demo. - *#* - *#* Revision 1.1 2006/03/22 09:52:13 bernie - *#* Add demo application. - *#* - *#* Revision 1.1 2006/01/23 23:14:29 bernie - *#* Implement simple, but impressive windowing system. - *#* - *#*/ +#include #include + #include +#include + #include #include #include #include + #include #include #include #include + #include #include -#include - - -/* SETTINGS SUBMENU ***************************/ - -static struct MenuItem settings_items[] = -{ - { (const_iptr_t)"System", 0, (MenuHook)0, (iptr_t)0 }, - { (const_iptr_t)"Mouse", 0, (MenuHook)0, (iptr_t)0 }, - { (const_iptr_t)"Keyboard", 0, (MenuHook)0, (iptr_t)0 }, - { (const_iptr_t)"Networking", 0, (MenuHook)0, (iptr_t)0 }, - { (const_iptr_t)"Date & Time",0, (MenuHook)0, (iptr_t)0 }, - { (const_iptr_t)"Power Saving", MIF_TOGGLE, (MenuHook)0, (iptr_t)0 }, - { (const_iptr_t)0, 0, NULL, (iptr_t)0 } -}; -static struct Menu settings_menu = { settings_items, "Settings Menu", MF_STICKY | MF_SAVESEL, &lcd_bitmap, 0 }; - -/*** DISPLAY MENU ****************************/ - -static struct MenuItem display_items[] = -{ - { (const_iptr_t)"Background", 0, (MenuHook)0, (iptr_t)0 }, - { (const_iptr_t)"Colors", 0, (MenuHook)0, (iptr_t)0 }, - { (const_iptr_t)"Style", 0, (MenuHook)0, (iptr_t)0 }, - { (const_iptr_t)"Icon Theme", 0, (MenuHook)0, (iptr_t)0 }, - { (const_iptr_t)0, 0, NULL, (iptr_t)0 } -}; -static struct Menu display_menu = { display_items, "Display Menu", MF_SAVESEL, &lcd_bitmap, 0 }; - - -/*** SETUP MENU ******************************/ - -static struct MenuItem setup_items[] = -{ - { (const_iptr_t)"Setup 0", 0, (MenuHook)NULL, (iptr_t)0 }, - { (const_iptr_t)"Setup 1", 0, (MenuHook)NULL, (iptr_t)0 }, - { (const_iptr_t)"Setup 2", 0, (MenuHook)NULL, (iptr_t)0 }, - { (const_iptr_t)"Setup 3", 0, (MenuHook)NULL, (iptr_t)0 }, - { (const_iptr_t)0, 0, NULL, NULL } -}; -static struct Menu setup_menu = { setup_items, "Setup Menu", MF_STICKY | MF_SAVESEL, &lcd_bitmap, 0 }; - - -/*** MAIN MENU *******************************/ -static struct MenuItem main_items[] = +/** + * Draw a pentacle in the provided bitmap. + */ +void schedule(void) { - { (const_iptr_t)"Settings", 0, (MenuHook)menu_handle, (iptr_t)&settings_menu }, - { (const_iptr_t)"Display", 0, (MenuHook)menu_handle, (iptr_t)&display_menu }, - { (const_iptr_t)"Setup", 0, (MenuHook)menu_handle, (iptr_t)&setup_menu }, - { (const_iptr_t)0, 0, NULL, (iptr_t)0 } -}; -static struct Menu main_menu = { main_items, "Main Menu", MF_STICKY, &lcd_bitmap, 0 }; + lcd_blitBitmap(&lcd_bitmap); + emul_idle(); +} +/** + * Draw a pentacle in the provided bitmap. + */ static void magic(struct Bitmap *bitmap, coord_t x, coord_t y) { static const coord_t coords[] = { 120, 34, 90, 90, 30, 90, 0, 34, 60, 0, 90, 90, 0, 34, 120, 34, 30, 90, 60, 0 }; @@ -110,45 +79,35 @@ static void magic(struct Bitmap *bitmap, coord_t x, coord_t y) gfx_lineTo(bitmap, coords[i]/2 + x, coords[i+1]/3 + y); } -Window root_win; - -void schedule(void) -{ -// win_compose(&root_win); - lcd_blitBitmap(root_win.bitmap); - emul_idle(); - usleep(10000); -} - -void hello_world(void) +static void hello_world(Bitmap *bm) { - gfx_bitmapClear(&lcd_bitmap); - extern const Font font_10x20; - extern const Font font_helvB10; - extern const Font font_courB08; - extern const Font font_courB14; - extern const Font font_mono17; - extern const Font font_luBS14; extern const Font font_ncenB18; - gfx_setFont(&lcd_bitmap, &font_luBS14); + const Font *old_font = bm->font; - text_xprintf(&lcd_bitmap, 1, 0, STYLEF_BOLD | TEXT_FILL | TEXT_CENTER, "Hello, world!"); - for (int i = 0; i < 1000; ++i) - { - lcd_blitBitmap(&lcd_bitmap); - emul_idle(); - } + gfx_bitmapClear(bm); + + /* Set big font */ + gfx_setFont(bm, &font_ncenB18); + + text_xprintf(bm, 1, 0, STYLEF_BOLD | TEXT_FILL | TEXT_CENTER, + "Hello, world!"); + + lcd_blitBitmap(bm); + timer_delay(1000); + + /* Restore old font */ + gfx_setFont(bm, old_font); } /** * Show the splash screen */ -void bouncing_logo(void) +static void bouncing_logo(Bitmap *bm) { const long SPEED_SCALE = 1000; const long GRAVITY_ACCEL = 10; const long BOUNCE_ELASTICITY = 2; - long h = (long)(-project_grl_logo.height) * SPEED_SCALE; + long h = (long)(-bertos_logo.height) * SPEED_SCALE; long speed = 1000; /* Repeat until logo stands still on the bottom edge */ @@ -168,38 +127,28 @@ void bouncing_logo(void) } /* Update graphics */ - gfx_bitmapClear(&lcd_bitmap); - gfx_blitImage(&lcd_bitmap, - (lcd_bitmap.width - project_grl_logo.width) / 2, + gfx_bitmapClear(bm); + gfx_blitImage(bm, + (bm->width - bertos_logo.width) / 2, h / SPEED_SCALE, - &project_grl_logo); - lcd_blitBitmap(&lcd_bitmap); + &bertos_logo); + lcd_blitBitmap(bm); timer_delay(10); } } -int main(int argc, char *argv[]) +void win_demo(Bitmap *bm) { - emul_init(&argc, argv); - timer_init(); - buz_init(); - kbd_init(); - lcd_init(); - proc_init(); - - hello_world(); - bouncing_logo(); - const coord_t small_left = 45, small_top = 30, small_width = 50, small_height = 30; const coord_t large_left = -10, large_top = 10, large_width = 85, large_height = 41; - Window small_win, large_win; + Window root_win, small_win, large_win; Bitmap small_bm, large_bm; - uint8_t small_raster[RASTER_SIZE(small_width, small_height)]; - uint8_t large_raster[RASTER_SIZE(large_width, large_height)]; + uint8_t small_raster[RAST_SIZE(small_width, small_height)]; + uint8_t large_raster[RAST_SIZE(large_width, large_height)]; - win_create(&root_win, &lcd_bitmap); + win_create(&root_win, bm); gfx_bitmapInit(&large_bm, large_raster, large_width, large_height); win_create(&large_win, &large_bm); @@ -218,17 +167,16 @@ int main(int argc, char *argv[]) coord_t ydir_small = +1; int raise_counter = 0; int i; - Bitmap *bm; for(;;) { /* Background animation */ - bm = &lcd_bitmap; + bm = root_win.bitmap; gfx_bitmapClear(bm); -/* gfx_setClipRect(bm, 0, 0, bm->width, bm->height); - gfx_rectDraw(bm, 10, 10, bm->width-10, bm->height-10); - gfx_setClipRect(bm, 11, 11, bm->width-11, bm->height-11); -*/ magic(bm, x, y); +// gfx_setClipRect(bm, 0, 0, bm->width, bm->height); +// gfx_rectDraw(bm, 10, 10, bm->width-10, bm->height-10); +// gfx_setClipRect(bm, 11, 11, bm->width-11, bm->height-11); + magic(bm, x, y); x += xdir; y += ydir; if (x >= bm->width) xdir = -1; @@ -236,8 +184,6 @@ int main(int argc, char *argv[]) if (y >= bm->height) ydir = -1; if (y <= -50) ydir = +1; - menu_handle(&main_menu); - /* Large window animation */ bm = large_win.bitmap; gfx_bitmapClear(bm); @@ -268,10 +214,88 @@ int main(int argc, char *argv[]) win_raise(&large_win); win_compose(&root_win); - lcd_blitBitmap(root_win.bitmap); - emul_idle(); - usleep(10000); + + /* Also does LCD refresh, etc. */ + if (kbd_peek()) + break; } +} + +void proc_demo(void) +{ + extern void proc_test(void); +// FIXME: proc_test() cause segmentation fault. + proc_test(); +} + + +/* SETTINGS SUBMENU */ + +static struct MenuItem settings_items[] = +{ + { (const_iptr_t)"System", 0, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Language", 0, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Networking", 0, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Date & Time",0, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Power Saving", MIF_TOGGLE, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)0, 0, NULL, (iptr_t)0 } +}; +static struct Menu settings_menu = { settings_items, "Settings Menu", MF_STICKY | MF_SAVESEL, &lcd_bitmap, 0 }; + + +/* MX SUBMENU */ + +static struct MenuItem mx_items[] = +{ + { (const_iptr_t)"Mouse", MIF_CHECKIT | MIF_EXCLUDE_1 | MIF_EXCLUDE_2, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Keyboard", MIF_CHECKED | MIF_CHECKIT | MIF_EXCLUDE_0 | MIF_EXCLUDE_2, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Joystick", MIF_CHECKIT | MIF_EXCLUDE_0 | MIF_EXCLUDE_1, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Autosave", MIF_CHECKED | MIF_CHECKIT | MIF_TOGGLE, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)0, 0, NULL, (iptr_t)0 } +}; + +static struct Menu mx_menu = { mx_items, (const_iptr_t)0, MF_STICKY | MF_SAVESEL, &lcd_bitmap, 0 }; + + +/* DISPLAY SUBMENU */ + +static struct MenuItem display_items[] = +{ + { (const_iptr_t)"Background", 0, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Colors", 0, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Style", 0, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Icon Theme", 0, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)0, 0, NULL, (iptr_t)0 } +}; +static struct Menu display_menu = { display_items, "Display Menu", MF_SAVESEL, &lcd_bitmap, 0 }; + + +/* MAIN MENU */ + +static struct MenuItem main_items[] = +{ + { (const_iptr_t)"Win Fly", 0, (MenuHook)win_demo, (iptr_t)&lcd_bitmap }, + { (const_iptr_t)"Bounce!", 0, (MenuHook)bouncing_logo,(iptr_t)&lcd_bitmap }, + { (const_iptr_t)"Hello World", 0, (MenuHook)hello_world, (iptr_t)&lcd_bitmap }, + { (const_iptr_t)"Scheduling", 0, (MenuHook)proc_demo, (iptr_t)&lcd_bitmap }, + { (const_iptr_t)"Menu MX", 0, (MenuHook)menu_handle, (iptr_t)&mx_menu }, + { (const_iptr_t)"Display", 0, (MenuHook)menu_handle, (iptr_t)&display_menu }, + { (const_iptr_t)"Settings", 0, (MenuHook)menu_handle, (iptr_t)&settings_menu }, + { (const_iptr_t)0, 0, NULL, (iptr_t)0 } +}; +static struct Menu main_menu = { main_items, "Main Menu", MF_STICKY, &lcd_bitmap, 0 }; + + +int main(int argc, char *argv[]) +{ + emul_init(&argc, argv); + timer_init(); + buz_init(); + kbd_init(); + lcd_init(); + proc_init(); + + menu_handle(&main_menu); emul_cleanup(); return 0;