From dce2ef805c17a124548c95c52237af6cc4726a86 Mon Sep 17 00:00:00 2001 From: Marianne Arnold Date: Sat, 2 Feb 2008 12:10:42 +0000 Subject: Small improvements to sliding puzzle. (1) Don't draw the 'Moves' box at fixed size, and display 'Moves:' and number of moves on one line for square and portrait screens. (2) Use 4x4 spots on Archos too, to make the spots look square on the Archos display - change the default 80x64 image accordingly. (3) Replace the 110x110 images with 108x108 so that the width is evenly divisible by 4 (number of spots) as mentioned in the comment. (4) Make the greyscale images look a little less broken, could be even better though. -- The code could be made simpler and more flexible but one step at a time. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16200 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/bitmaps/native/SOURCES | 8 ++-- .../bitmaps/native/sliding_puzzle.108x108x16.bmp | Bin 0 -> 35046 bytes .../bitmaps/native/sliding_puzzle.108x108x2.bmp | Bin 0 -> 11734 bytes .../bitmaps/native/sliding_puzzle.110x110x16.bmp | Bin 36574 -> 0 bytes .../bitmaps/native/sliding_puzzle.110x110x2.bmp | Bin 13398 -> 0 bytes .../bitmaps/native/sliding_puzzle.128x128x2.bmp | Bin 17462 -> 16454 bytes .../bitmaps/native/sliding_puzzle.80x64x1.bmp | Bin 830 -> 830 bytes apps/plugins/sliding_puzzle.c | 49 +++++++++------------ 8 files changed, 26 insertions(+), 31 deletions(-) create mode 100644 apps/plugins/bitmaps/native/sliding_puzzle.108x108x16.bmp create mode 100644 apps/plugins/bitmaps/native/sliding_puzzle.108x108x2.bmp delete mode 100644 apps/plugins/bitmaps/native/sliding_puzzle.110x110x16.bmp delete mode 100644 apps/plugins/bitmaps/native/sliding_puzzle.110x110x2.bmp diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES index 2c667c10e8..2f6c7d344f 100644 --- a/apps/plugins/bitmaps/native/SOURCES +++ b/apps/plugins/bitmaps/native/SOURCES @@ -550,14 +550,14 @@ matrix_normal.bmp #if (LCD_WIDTH != LCD_HEIGHT) #define SMALLER_DIMENSION ((LCD_WIDTH < LCD_HEIGHT) ? LCD_WIDTH : LCD_HEIGHT) #else /* 5/6GB H10 with square display */ -#define SMALLER_DIMENSION (LCD_HEIGHT - 18) +#define SMALLER_DIMENSION (LCD_HEIGHT - 20) #endif #if defined HAVE_LCD_COLOR #if SMALLER_DIMENSION <= 80 sliding_puzzle.80x80x16.bmp -#elif SMALLER_DIMENSION <= 112 - sliding_puzzle.110x110x16.bmp +#elif SMALLER_DIMENSION <= 108 + sliding_puzzle.108x108x16.bmp #elif SMALLER_DIMENSION <= 128 sliding_puzzle.128x128x16.bmp #elif SMALLER_DIMENSION <= 132 @@ -569,7 +569,7 @@ matrix_normal.bmp #endif #elif (LCD_DEPTH > 1) #if SMALLER_DIMENSION <= 110 - sliding_puzzle.110x110x2.bmp + sliding_puzzle.108x108x2.bmp #elif SMALLER_DIMENSION <= 128 sliding_puzzle.128x128x2.bmp #endif diff --git a/apps/plugins/bitmaps/native/sliding_puzzle.108x108x16.bmp b/apps/plugins/bitmaps/native/sliding_puzzle.108x108x16.bmp new file mode 100644 index 0000000000..50b997223b Binary files /dev/null and b/apps/plugins/bitmaps/native/sliding_puzzle.108x108x16.bmp differ diff --git a/apps/plugins/bitmaps/native/sliding_puzzle.108x108x2.bmp b/apps/plugins/bitmaps/native/sliding_puzzle.108x108x2.bmp new file mode 100644 index 0000000000..25e7e41df8 Binary files /dev/null and b/apps/plugins/bitmaps/native/sliding_puzzle.108x108x2.bmp differ diff --git a/apps/plugins/bitmaps/native/sliding_puzzle.110x110x16.bmp b/apps/plugins/bitmaps/native/sliding_puzzle.110x110x16.bmp deleted file mode 100644 index 740b957d46..0000000000 Binary files a/apps/plugins/bitmaps/native/sliding_puzzle.110x110x16.bmp and /dev/null differ diff --git a/apps/plugins/bitmaps/native/sliding_puzzle.110x110x2.bmp b/apps/plugins/bitmaps/native/sliding_puzzle.110x110x2.bmp deleted file mode 100644 index e21531ec70..0000000000 Binary files a/apps/plugins/bitmaps/native/sliding_puzzle.110x110x2.bmp and /dev/null differ diff --git a/apps/plugins/bitmaps/native/sliding_puzzle.128x128x2.bmp b/apps/plugins/bitmaps/native/sliding_puzzle.128x128x2.bmp index e8ef4eead8..1a8317c4ba 100644 Binary files a/apps/plugins/bitmaps/native/sliding_puzzle.128x128x2.bmp and b/apps/plugins/bitmaps/native/sliding_puzzle.128x128x2.bmp differ diff --git a/apps/plugins/bitmaps/native/sliding_puzzle.80x64x1.bmp b/apps/plugins/bitmaps/native/sliding_puzzle.80x64x1.bmp index a394e8eba3..6624bd7987 100644 Binary files a/apps/plugins/bitmaps/native/sliding_puzzle.80x64x1.bmp and b/apps/plugins/bitmaps/native/sliding_puzzle.80x64x1.bmp differ diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c index ce2ae810d5..f1119614ea 100644 --- a/apps/plugins/sliding_puzzle.c +++ b/apps/plugins/sliding_puzzle.c @@ -102,20 +102,14 @@ PLUGIN_HEADER #define IMAGE_SIZE IMAGE_WIDTH static struct plugin_api* rb; -#if LCD_DEPTH==1 -/* for Archos, use rectangular image, 5x4 puzzle */ -#define SPOTS_X 5 -#define SPOTS_Y 4 -#else -/* for other targets, use a square image, 4x4 puzzle + +/* use a square image, (the default Archos bitmap looks square on its display) Puzzle image dimension is min(lcd_height,lcd_width) - 4x4 is more convenient than 5x4 for square puzzles + 4x4 is more convenient for square puzzles Note: sliding_puzzle.bmp should be evenly divisible by SPOTS_X and SPOTS_Y, otherwise lcd_bitmap_part stride won't be correct */ #define SPOTS_X 4 #define SPOTS_Y 4 -#endif - #define SPOTS_WIDTH (IMAGE_WIDTH / SPOTS_X) #define SPOTS_HEIGHT (IMAGE_HEIGHT / SPOTS_Y) #define NUM_SPOTS (SPOTS_X*SPOTS_Y) @@ -321,12 +315,11 @@ static void move_spot(int x, int y) moves++; rb->snprintf(s, sizeof(s), "%d", moves); s[sizeof(s)-1] = '\0'; -#if (LCD_WIDTH>IMAGE_SIZE) +#if ((LCD_WIDTH - IMAGE_SIZE) > (LCD_HEIGHT - IMAGE_HEIGHT)) rb->lcd_putsxy(IMAGE_WIDTH+5, 20, (unsigned char *)s); #else - rb->lcd_putsxy(5, IMAGE_HEIGHT+20, (unsigned char *)s); + rb->lcd_putsxy(40, IMAGE_HEIGHT+7, (unsigned char *)s); #endif - for(i=1;i<=4;i++) { draw_spot(HOLE_ID, @@ -358,14 +351,15 @@ static void puzzle_init(void) rb->lcd_clear_display(); rb->snprintf(s, sizeof(s), "%d", moves); -#if (LCD_WIDTH>IMAGE_SIZE) - rb->lcd_drawrect(IMAGE_WIDTH, 0, 32, 64); +#if ((LCD_WIDTH - IMAGE_SIZE) > (LCD_HEIGHT - IMAGE_HEIGHT)) + rb->lcd_drawrect(IMAGE_WIDTH, 0, LCD_WIDTH-IMAGE_WIDTH, IMAGE_HEIGHT); rb->lcd_putsxy(IMAGE_WIDTH+1, 10, (unsigned char *)"Moves"); rb->lcd_putsxy(IMAGE_WIDTH+5, 20, (unsigned char *)s); #else - rb->lcd_drawrect(0, IMAGE_HEIGHT, 32, 64); - rb->lcd_putsxy(1, IMAGE_HEIGHT+10, (unsigned char *)"Moves"); - rb->lcd_putsxy(5, IMAGE_HEIGHT+20, (unsigned char *)s); + rb->lcd_drawrect(0, IMAGE_HEIGHT, IMAGE_WIDTH, + (LCD_HEIGHT-IMAGE_HEIGHT)); + rb->lcd_putsxy(3, IMAGE_HEIGHT+7, (unsigned char *)"Moves: "); + rb->lcd_putsxy(40, IMAGE_HEIGHT+7, (unsigned char *)s); #endif /* shuffle spots */ @@ -468,14 +462,15 @@ static int puzzle_loop(void) /* tell the user what mode we picked in the end! */ rb->splash(HZ,picmode_descriptions[ picmode ] ); rb->lcd_clear_display(); -#if (LCD_WIDTH>IMAGE_SIZE) - rb->lcd_drawrect(IMAGE_WIDTH, 0, 32, 64); +#if ((LCD_WIDTH - IMAGE_SIZE) > (LCD_HEIGHT - IMAGE_HEIGHT)) + rb->lcd_drawrect(IMAGE_WIDTH, 0, LCD_WIDTH-IMAGE_WIDTH, + IMAGE_HEIGHT); rb->lcd_putsxy(IMAGE_WIDTH+1, 10, (unsigned char *)"Moves"); #else - rb->lcd_drawrect(0,IMAGE_HEIGHT,32,64); - rb->lcd_putsxy(1,IMAGE_HEIGHT+10, (unsigned char *)"Moves"); + rb->lcd_drawrect(0, IMAGE_HEIGHT, IMAGE_WIDTH, + (LCD_HEIGHT-IMAGE_HEIGHT)); + rb->lcd_putsxy(3, IMAGE_HEIGHT+7, (unsigned char *)"Moves: "); #endif - for (i=0; ilcd_clear_display(); -#if (LCD_WIDTH>IMAGE_SIZE) - rb->lcd_drawrect(IMAGE_WIDTH, 0, 32, 64); +#if ((LCD_WIDTH - IMAGE_SIZE) > (LCD_HEIGHT - IMAGE_HEIGHT)) + rb->lcd_drawrect(IMAGE_WIDTH, 0, LCD_WIDTH-IMAGE_WIDTH, IMAGE_HEIGHT); rb->lcd_putsxy(IMAGE_WIDTH+1, 10, (unsigned char *)"Moves"); #else - rb->lcd_drawrect(0,IMAGE_HEIGHT,32,64); - rb->lcd_putsxy(1,IMAGE_HEIGHT+10, (unsigned char *)"Moves"); + rb->lcd_drawrect(0, IMAGE_HEIGHT, IMAGE_WIDTH, + (LCD_HEIGHT-IMAGE_HEIGHT)); + rb->lcd_putsxy(3, IMAGE_HEIGHT+7, (unsigned char *)"Moves: "); #endif - for (i=0; i