summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorTeruaki Kawashima <teru@rockbox.org>2009-10-15 13:11:31 +0000
committerTeruaki Kawashima <teru@rockbox.org>2009-10-15 13:11:31 +0000
commit889436816ec5c0b9e1900a0495ec0366b584a3b1 (patch)
tree2ee038efba11d0a7b60121f3950920097596e8df /apps
parent91933a3fef096d267b2aae1e32b7bff9fe4b3e02 (diff)
downloadrockbox-889436816ec5c0b9e1900a0495ec0366b584a3b1.tar.gz
rockbox-889436816ec5c0b9e1900a0495ec0366b584a3b1.tar.bz2
rockbox-889436816ec5c0b9e1900a0495ec0366b584a3b1.zip
FS#10554: Rockpaint: enable to set canvas size.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23188 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/plugins/rockpaint.c49
1 files changed, 38 insertions, 11 deletions
diff --git a/apps/plugins/rockpaint.c b/apps/plugins/rockpaint.c
index 78fe7b46fe..0f57b2b11c 100644
--- a/apps/plugins/rockpaint.c
+++ b/apps/plugins/rockpaint.c
@@ -322,6 +322,8 @@ static void draw_rect_full( int x1, int y1, int x2, int y2 );
static int drawcolor=0; /* Current color (in palette) */
static int bgdrawcolor=9; /* Current background color (in palette) */
+static int img_height = ROWS;
+static int img_width = COLS;
bool isbg = false; /* gruik ugly hack alert */
static int preview=false; /* Is preview mode on ? */
@@ -531,6 +533,7 @@ enum {
/* Main menu */
MAIN_MENU_RESUME,
MAIN_MENU_NEW, MAIN_MENU_LOAD, MAIN_MENU_SAVE,
+ MAIN_MENU_SET_WIDTH, MAIN_MENU_SET_HEIGHT,
MAIN_MENU_BRUSH_SIZE, MAIN_MENU_BRUSH_SPEED, MAIN_MENU_COLOR,
MAIN_MENU_GRID_SIZE,
MAIN_MENU_PLAYBACK_CONTROL,
@@ -551,6 +554,7 @@ enum {
MENUITEM_STRINGLIST(main_menu, "RockPaint", NULL,
"Resume", "New", "Load", "Save",
+ "Set Width", "Set Height",
"Brush Size", "Brush Speed",
"Choose Color", "Grid Size",
"Playback Control", "Exit");
@@ -1468,13 +1472,13 @@ static void show_grid( bool update )
if( gridsize > 0 )
{
rb->lcd_set_drawmode(DRMODE_COMPLEMENT);
- for( i = gridsize; i < COLS; i+= gridsize )
+ for( i = gridsize; i < img_width; i+= gridsize )
{
- rb->lcd_vline( i, 0, ROWS-1 );
+ rb->lcd_vline( i, 0, img_height-1 );
}
- for( i = gridsize; i < ROWS; i+= gridsize )
+ for( i = gridsize; i < img_height; i+= gridsize )
{
- rb->lcd_hline( 0, COLS-1, i );
+ rb->lcd_hline( 0, img_width-1, i );
}
rb->lcd_set_drawmode(DRMODE_SOLID);
if( update ) rb->lcd_update();
@@ -2443,10 +2447,8 @@ static void inv_cursor(bool update)
rb->lcd_set_foreground(COLOR_BLACK);
rb->lcd_set_drawmode(DRMODE_COMPLEMENT);
/* cross painting */
- rb->lcd_hline(x-4,x-1,y);
- rb->lcd_hline(x+1,x+4,y);
- rb->lcd_vline(x,y-4,y-1);
- rb->lcd_vline(x,y+1,y+4);
+ rb->lcd_hline(x-4,x+4,y);
+ rb->lcd_vline(x,y-4,y+4);
rb->lcd_set_foreground(rp_colors[drawcolor]);
rb->lcd_set_drawmode(DRMODE_SOLID);
@@ -2456,11 +2458,18 @@ static void inv_cursor(bool update)
static void restore_screen(void)
{
rb->lcd_bitmap( save_buffer, 0, 0, COLS, ROWS );
+ rb->lcd_set_drawmode(DRMODE_COMPLEMENT);
+ rb->lcd_vline( img_width, 0, ROWS );
+ rb->lcd_hline( 0, COLS, img_height );
+ rb->lcd_drawpixel( img_width, img_height );
+ rb->lcd_set_drawmode(DRMODE_SOLID);
}
static void clear_drawing(void)
{
init_buffer();
+ img_height = ROWS;
+ img_width = COLS;
rb->lcd_set_foreground( rp_colors[ bgdrawcolor ] );
rb->lcd_fillrect( 0, 0, COLS, ROWS );
rb->lcd_update();
@@ -2511,6 +2520,14 @@ static void goto_menu(void)
}
break;
+ case MAIN_MENU_SET_WIDTH:
+ rb->set_int( "Set Width", "px", UNIT_INT, &img_width,
+ NULL, 1, 1, COLS, NULL );
+ break;
+ case MAIN_MENU_SET_HEIGHT:
+ rb->set_int( "Set Height", "px", UNIT_INT, &img_height,
+ NULL, 1, 1, ROWS, NULL );
+ break;
case MAIN_MENU_BRUSH_SIZE:
for(multi = 0; multi<4; multi++)
if(bsize == times_list[multi]) break;
@@ -2742,11 +2759,13 @@ static bool rockpaint_loop( void )
break;
}
reset_tool();
+ restore_screen();
}
break;
case Fill:
draw_fill( x, y );
+ restore_screen();
break;
case ColorPicker:
@@ -2954,6 +2973,8 @@ static int load_bitmap( const char *file )
if((bm.width > COLS ) || ( bm.height > ROWS ))
return -1;
+ img_width = bm.width;
+ img_height = bm.height;
for( i = bm.height-1; i >= 0; i-- )
{
rb->memmove( save_buffer+i*COLS, save_buffer+i*bm.width,
@@ -2970,9 +2991,15 @@ static int load_bitmap( const char *file )
static int save_bitmap( char *file )
{
struct bitmap bm;
- bm.data = (char*)save_buffer;
- bm.height = ROWS;
- bm.width = COLS;
+ int i;
+ for(i = 0; i < img_height; i++)
+ {
+ rb->memcpy( buffer.clipboard+i*img_width, save_buffer+i*COLS,
+ sizeof( fb_data )*img_width );
+ }
+ bm.data = (char*)buffer.clipboard;
+ bm.height = img_height;
+ bm.width = img_width;
bm.format = FORMAT_NATIVE;
return save_bmp_file( file, &bm );
}