1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2007 Jonas Hurrelmann
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 /* Resizing test plugin. Loads /test.bmp (max 100x100) and displays a resized
23 * version. Use the scrollwheel or the left/right keys to change the size of
24 * the resizded version.
28 #include "lib/pluginlib_actions.h"
29 #include "lib/pluginlib_bmp.h"
33 const struct button_mapping
*plugin_contexts
[]
38 #define SIZE_INCREASE PLA_UP
39 #define SIZE_INCREASE_REPEAT PLA_UP_REPEAT
40 #define SIZE_DECREASE PLA_DOWN
41 #define SIZE_DECREASE_REPEAT PLA_DOWN_REPEAT
43 #define WIDTH_INCREASE PLA_RIGHT
44 #define WIDTH_INCREASE_REPEAT PLA_RIGHT_REPEAT
45 #define WIDTH_DECREASE PLA_LEFT
46 #define WIDTH_DECREASE_REPEAT PLA_LEFT_REPEAT
48 #define BUTTON_QUIT PLA_EXIT
49 #define CHANGE_MODE PLA_SELECT
51 #define MAX_OUTPUT_WIDTH LCD_WIDTH
52 #define MAX_OUTPUT_HEIGHT LCD_HEIGHT
56 static struct bitmap input_bmp
;
57 static struct bitmap output_bmp
;
59 static fb_data input_bmp_data
[200*200];
60 static fb_data output_bmp_data
[MAX_OUTPUT_WIDTH
*MAX_OUTPUT_HEIGHT
];
63 /* this is the plugin entry point */
64 enum plugin_status
plugin_start(const void* parameter
)
68 b
= rb
->lcd_framebuffer
;
70 rb
->lcd_set_background(LCD_RGBPACK(0,0,0));
71 rb
->lcd_clear_display(); // TODO: Optimizes this by e.g. invalidating rects
73 input_bmp
.data
= (char*)input_bmp_data
;
74 output_bmp
.data
= (char*)output_bmp_data
;
76 int ret
= rb
->read_bmp_file("/test.bmp", &input_bmp
, sizeof(input_bmp_data
),
80 rb
->splash(HZ
, "Could not load /test.bmp");
85 output_bmp
.width
= 50;
86 output_bmp
.height
= 50;
88 DEBUGF("input_bmp_data starts at %p\n", input_bmp_data
);
89 DEBUGF("output_bmp_data starts at %p\n", output_bmp_data
);
91 int scale_algorithm
= 0;
94 rb
->lcd_clear_display();
95 rb
->lcd_bitmap(input_bmp_data
, 0, 0, input_bmp
.width
, input_bmp
.height
);
97 switch ( scale_algorithm
) {
99 smooth_resize_bitmap(&input_bmp
, &output_bmp
);
100 rb
->lcd_putsxy(0,0,"smooth_resize_bitmap");
103 simple_resize_bitmap(&input_bmp
, &output_bmp
);
104 rb
->lcd_putsxy(0,0,"simple_resize_bitmap");
108 rb
->lcd_bitmap(output_bmp_data
, 0, 100, output_bmp
.width
,
112 button
= pluginlib_getaction(HZ
, plugin_contexts
,
113 ARRAYLEN(plugin_contexts
));
118 case SIZE_INCREASE_REPEAT
:
119 if (output_bmp
.width
< MAX_OUTPUT_WIDTH
- 2)
120 output_bmp
.width
+= 2;
121 if (output_bmp
.height
< MAX_OUTPUT_HEIGHT
- 2)
122 output_bmp
.height
+= 2;
126 case SIZE_DECREASE_REPEAT
:
127 if (output_bmp
.width
> 2) output_bmp
.width
-= 2;
128 if (output_bmp
.height
> 2) output_bmp
.height
-= 2;
132 case WIDTH_INCREASE_REPEAT
:
133 if (output_bmp
.width
< MAX_OUTPUT_WIDTH
- 2)
134 output_bmp
.width
+= 2;
138 case WIDTH_DECREASE_REPEAT
:
139 if (output_bmp
.width
> 2) output_bmp
.width
-= 2;
143 scale_algorithm
= (scale_algorithm
+1)%2;