test

Dependencies:   GraphicsFramework GR-PEACH_video LCD_shield_config R_BSP

Committer:
shilianming
Date:
Tue Dec 01 07:32:37 2020 +0000
Revision:
0:66434fa5ef92
0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shilianming 0:66434fa5ef92 1 /*
shilianming 0:66434fa5ef92 2 Permission is hereby granted, free of charge, to any person obtaining a copy
shilianming 0:66434fa5ef92 3 of this software and associated documentation files (the "Software"), to deal
shilianming 0:66434fa5ef92 4 in the Software without restriction, including without limitation the rights
shilianming 0:66434fa5ef92 5 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
shilianming 0:66434fa5ef92 6 copies of the Software, and to permit persons to whom the Software is
shilianming 0:66434fa5ef92 7 furnished to do so, subject to the following conditions:
shilianming 0:66434fa5ef92 8
shilianming 0:66434fa5ef92 9 The above copyright notice and this permission notice shall be included in
shilianming 0:66434fa5ef92 10 all copies or substantial portions of the Software.
shilianming 0:66434fa5ef92 11
shilianming 0:66434fa5ef92 12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
shilianming 0:66434fa5ef92 13 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
shilianming 0:66434fa5ef92 14 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
shilianming 0:66434fa5ef92 15 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
shilianming 0:66434fa5ef92 16 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
shilianming 0:66434fa5ef92 17 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
shilianming 0:66434fa5ef92 18 THE SOFTWARE.
shilianming 0:66434fa5ef92 19 */
shilianming 0:66434fa5ef92 20
shilianming 0:66434fa5ef92 21 #include "mbed.h"
shilianming 0:66434fa5ef92 22 #include "rga_func.h"
shilianming 0:66434fa5ef92 23 #include "Images/BinaryImage_RZ_A1H.h"
shilianming 0:66434fa5ef92 24
shilianming 0:66434fa5ef92 25 #define ZOOM_SRC_CENTER_X (IMAGE_WIDTH_ZOOM_FUNC / 2)
shilianming 0:66434fa5ef92 26 #define ZOOM_SRC_CENTER_Y (IMAGE_HEIGHT_ZOOM_FUNC / 2)
shilianming 0:66434fa5ef92 27
shilianming 0:66434fa5ef92 28 #define CRYSTAL_DIAMETER (93)
shilianming 0:66434fa5ef92 29
shilianming 0:66434fa5ef92 30 Canvas2D_ContextClass canvas2d;
shilianming 0:66434fa5ef92 31
shilianming 0:66434fa5ef92 32 static animation_timing_function_t* accelerator;
shilianming 0:66434fa5ef92 33
shilianming 0:66434fa5ef92 34 void Set_RGAObject(frame_buffer_t* frmbuf_info) {
shilianming 0:66434fa5ef92 35 errnum_t err;
shilianming 0:66434fa5ef92 36 Canvas2D_ContextConfigClass config;
shilianming 0:66434fa5ef92 37
shilianming 0:66434fa5ef92 38 config.frame_buffer = frmbuf_info;
shilianming 0:66434fa5ef92 39 canvas2d = R_RGA_New_Canvas2D_ContextClass(config);
shilianming 0:66434fa5ef92 40 err = R_OSPL_GetErrNum();
shilianming 0:66434fa5ef92 41 if (err != 0) {
shilianming 0:66434fa5ef92 42 printf("Line %d, error %d\n", __LINE__, err);
shilianming 0:66434fa5ef92 43 while (1);
shilianming 0:66434fa5ef92 44 }
shilianming 0:66434fa5ef92 45 }
shilianming 0:66434fa5ef92 46
shilianming 0:66434fa5ef92 47 void RGA_Func_DrawTopScreen(frame_buffer_t* frmbuf_info) {
shilianming 0:66434fa5ef92 48 /* Clear */
shilianming 0:66434fa5ef92 49 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
shilianming 0:66434fa5ef92 50
shilianming 0:66434fa5ef92 51 /* Draw a image */
shilianming 0:66434fa5ef92 52 canvas2d.drawImage(TopScrn_jpg_File, 0, 0);
shilianming 0:66434fa5ef92 53
shilianming 0:66434fa5ef92 54 /* Complete drawing */
shilianming 0:66434fa5ef92 55 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
shilianming 0:66434fa5ef92 56 }
shilianming 0:66434fa5ef92 57
shilianming 0:66434fa5ef92 58 void RGA_Func_DrawRectangle(frame_buffer_t* frmbuf_info, draw_rectangle_pos_t * pos, int pos_num) {
shilianming 0:66434fa5ef92 59 int cnt;
shilianming 0:66434fa5ef92 60
shilianming 0:66434fa5ef92 61 /* Clear */
shilianming 0:66434fa5ef92 62 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
shilianming 0:66434fa5ef92 63
shilianming 0:66434fa5ef92 64 /* Draw description */
shilianming 0:66434fa5ef92 65 canvas2d.drawImage(decs_swipe_jpg_File, 230, 400);
shilianming 0:66434fa5ef92 66
shilianming 0:66434fa5ef92 67 /* Draw rectangle */
shilianming 0:66434fa5ef92 68 for (cnt = 0; cnt < pos_num; cnt++) {
shilianming 0:66434fa5ef92 69 canvas2d.fillStyle = pos->style;
shilianming 0:66434fa5ef92 70 canvas2d.fillRect(pos->x, pos->y, pos->w, pos->h);
shilianming 0:66434fa5ef92 71 pos++;
shilianming 0:66434fa5ef92 72 }
shilianming 0:66434fa5ef92 73
shilianming 0:66434fa5ef92 74 /* Draw return button */
shilianming 0:66434fa5ef92 75 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
shilianming 0:66434fa5ef92 76
shilianming 0:66434fa5ef92 77 /* Complete drawing */
shilianming 0:66434fa5ef92 78 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
shilianming 0:66434fa5ef92 79 }
shilianming 0:66434fa5ef92 80
shilianming 0:66434fa5ef92 81 void RGA_Func_DrawImage(frame_buffer_t* frmbuf_info, int x, int y) {
shilianming 0:66434fa5ef92 82 int draw_pos_x = x - (CRYSTAL_DIAMETER / 2);
shilianming 0:66434fa5ef92 83 int draw_pos_y = y - (CRYSTAL_DIAMETER / 2);
shilianming 0:66434fa5ef92 84
shilianming 0:66434fa5ef92 85 /* Clear */
shilianming 0:66434fa5ef92 86 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
shilianming 0:66434fa5ef92 87
shilianming 0:66434fa5ef92 88 /* Draw description */
shilianming 0:66434fa5ef92 89 canvas2d.drawImage(decs_swipe_jpg_File, 230, 400);
shilianming 0:66434fa5ef92 90
shilianming 0:66434fa5ef92 91 /* Draw the first image */
shilianming 0:66434fa5ef92 92 canvas2d.drawImage(Flower_jpg_File, 100, 100);
shilianming 0:66434fa5ef92 93
shilianming 0:66434fa5ef92 94 /* Draw the second image */
shilianming 0:66434fa5ef92 95 if ((frmbuf_info->pixel_format == PIXEL_FORMAT_ARGB8888) || (frmbuf_info->pixel_format == PIXEL_FORMAT_XRGB8888)) {
shilianming 0:66434fa5ef92 96 canvas2d.drawImage(Crystal_png_ARGB8888, draw_pos_x, draw_pos_y);
shilianming 0:66434fa5ef92 97 } else if (frmbuf_info->pixel_format != PIXEL_FORMAT_YUV422) {
shilianming 0:66434fa5ef92 98 canvas2d.drawImage(Crystal_png_ARGB4444, draw_pos_x, draw_pos_y);
shilianming 0:66434fa5ef92 99 } else {
shilianming 0:66434fa5ef92 100 canvas2d.drawImage(Crystal_png_File, draw_pos_x, draw_pos_y);
shilianming 0:66434fa5ef92 101 }
shilianming 0:66434fa5ef92 102
shilianming 0:66434fa5ef92 103 /* Draw return button */
shilianming 0:66434fa5ef92 104 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
shilianming 0:66434fa5ef92 105
shilianming 0:66434fa5ef92 106 /* Complete drawing */
shilianming 0:66434fa5ef92 107 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
shilianming 0:66434fa5ef92 108 }
shilianming 0:66434fa5ef92 109
shilianming 0:66434fa5ef92 110 void RGA_Func_Dissolve(frame_buffer_t* frmbuf_info, float32_t global_alpha) {
shilianming 0:66434fa5ef92 111 /* Dissolve = Fade Out + Fade In */
shilianming 0:66434fa5ef92 112 /* Clear */
shilianming 0:66434fa5ef92 113 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
shilianming 0:66434fa5ef92 114
shilianming 0:66434fa5ef92 115 /* Draw description */
shilianming 0:66434fa5ef92 116 canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
shilianming 0:66434fa5ef92 117
shilianming 0:66434fa5ef92 118 /* fade Out */
shilianming 0:66434fa5ef92 119 canvas2d.globalAlpha = 1.0f - global_alpha;
shilianming 0:66434fa5ef92 120 canvas2d.drawImage(Flower_jpg_File, 100, 100);
shilianming 0:66434fa5ef92 121
shilianming 0:66434fa5ef92 122 /* fade In */
shilianming 0:66434fa5ef92 123 canvas2d.globalAlpha = global_alpha;
shilianming 0:66434fa5ef92 124 canvas2d.drawImage(Landscape_jpg_File, 100, 100);
shilianming 0:66434fa5ef92 125
shilianming 0:66434fa5ef92 126 canvas2d.globalAlpha = 1.0f;
shilianming 0:66434fa5ef92 127
shilianming 0:66434fa5ef92 128 /* Draw return button */
shilianming 0:66434fa5ef92 129 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
shilianming 0:66434fa5ef92 130
shilianming 0:66434fa5ef92 131 /* Complete drawing */
shilianming 0:66434fa5ef92 132 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
shilianming 0:66434fa5ef92 133 }
shilianming 0:66434fa5ef92 134
shilianming 0:66434fa5ef92 135 void RGA_Func_Scroll(frame_buffer_t* frmbuf_info, int src_width_pos) {
shilianming 0:66434fa5ef92 136 /* Clear */
shilianming 0:66434fa5ef92 137 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
shilianming 0:66434fa5ef92 138
shilianming 0:66434fa5ef92 139 /* Draw description */
shilianming 0:66434fa5ef92 140 canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
shilianming 0:66434fa5ef92 141
shilianming 0:66434fa5ef92 142 /* Scroll from left to right */
shilianming 0:66434fa5ef92 143 canvas2d.drawImage(Landscape_wide_jpg_File,
shilianming 0:66434fa5ef92 144 /* src */ src_width_pos, 25, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT,
shilianming 0:66434fa5ef92 145 /* dst */ 100, 100, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT);
shilianming 0:66434fa5ef92 146
shilianming 0:66434fa5ef92 147 /* Draw return button */
shilianming 0:66434fa5ef92 148 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
shilianming 0:66434fa5ef92 149
shilianming 0:66434fa5ef92 150 /* Complete drawing */
shilianming 0:66434fa5ef92 151 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
shilianming 0:66434fa5ef92 152 }
shilianming 0:66434fa5ef92 153
shilianming 0:66434fa5ef92 154 void RGA_Func_Zoom(frame_buffer_t* frmbuf_info, int src_height_pos) {
shilianming 0:66434fa5ef92 155 /* Clear */
shilianming 0:66434fa5ef92 156 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
shilianming 0:66434fa5ef92 157
shilianming 0:66434fa5ef92 158 /* Draw description */
shilianming 0:66434fa5ef92 159 canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
shilianming 0:66434fa5ef92 160
shilianming 0:66434fa5ef92 161 /* Zoom out */
shilianming 0:66434fa5ef92 162 canvas2d.drawImage(Landscape_wide_jpg_File,
shilianming 0:66434fa5ef92 163 /* src X */ ZOOM_SRC_CENTER_X - (src_height_pos * IMG_DRAW_WIDTH / IMG_DRAW_HEIGHT),
shilianming 0:66434fa5ef92 164 /* src Y */ ZOOM_SRC_CENTER_Y - src_height_pos,
shilianming 0:66434fa5ef92 165 /* src W */ src_height_pos * 2 * IMG_DRAW_WIDTH / IMG_DRAW_HEIGHT,
shilianming 0:66434fa5ef92 166 /* src H */ src_height_pos * 2,
shilianming 0:66434fa5ef92 167 /* dst */ 100, 100, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT);
shilianming 0:66434fa5ef92 168
shilianming 0:66434fa5ef92 169 /* Draw return button */
shilianming 0:66434fa5ef92 170 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
shilianming 0:66434fa5ef92 171
shilianming 0:66434fa5ef92 172 /* Complete drawing */
shilianming 0:66434fa5ef92 173 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
shilianming 0:66434fa5ef92 174 }
shilianming 0:66434fa5ef92 175
shilianming 0:66434fa5ef92 176 void RGA_Func_Rotation(frame_buffer_t* frmbuf_info, graphics_matrix_float_t image_angle) {
shilianming 0:66434fa5ef92 177 /* Rotate the image to the right */
shilianming 0:66434fa5ef92 178 /* Clear */
shilianming 0:66434fa5ef92 179 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
shilianming 0:66434fa5ef92 180
shilianming 0:66434fa5ef92 181 /* Draw description */
shilianming 0:66434fa5ef92 182 canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
shilianming 0:66434fa5ef92 183
shilianming 0:66434fa5ef92 184 /* Move to drawing position */
shilianming 0:66434fa5ef92 185 canvas2d.translate((100 + (IMG_DRAW_WIDTH / 2)), (100 + (IMG_DRAW_HEIGHT / 2)));
shilianming 0:66434fa5ef92 186
shilianming 0:66434fa5ef92 187 /* Rotate */
shilianming 0:66434fa5ef92 188 canvas2d.rotate(image_angle * (3.14159 / 180));
shilianming 0:66434fa5ef92 189
shilianming 0:66434fa5ef92 190 /* Move to center to rotate */
shilianming 0:66434fa5ef92 191 canvas2d.translate((-IMG_DRAW_WIDTH / 2), (-IMG_DRAW_HEIGHT / 2));
shilianming 0:66434fa5ef92 192 canvas2d.drawImage(Flower_jpg_File, 0, 0);
shilianming 0:66434fa5ef92 193 canvas2d.setTransform(1, 0, 0, 1, 0, 0);
shilianming 0:66434fa5ef92 194
shilianming 0:66434fa5ef92 195 /* Draw return button */
shilianming 0:66434fa5ef92 196 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
shilianming 0:66434fa5ef92 197
shilianming 0:66434fa5ef92 198 /* Complete drawing */
shilianming 0:66434fa5ef92 199 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
shilianming 0:66434fa5ef92 200 }
shilianming 0:66434fa5ef92 201
shilianming 0:66434fa5ef92 202 void RGA_Func_Accelerate(frame_buffer_t* frmbuf_info, int animation_timing, float32_t relative_pos) {
shilianming 0:66434fa5ef92 203 /* Do accelerated motion from right to left */
shilianming 0:66434fa5ef92 204 int position;
shilianming 0:66434fa5ef92 205
shilianming 0:66434fa5ef92 206 /* Clear */
shilianming 0:66434fa5ef92 207 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
shilianming 0:66434fa5ef92 208
shilianming 0:66434fa5ef92 209 if (relative_pos == 0.0f) {
shilianming 0:66434fa5ef92 210 switch (animation_timing) {
shilianming 0:66434fa5ef92 211 case ANIMATION_TIMING_EASE:
shilianming 0:66434fa5ef92 212 R_Get_AnimationTimingFunction("ease", &accelerator);
shilianming 0:66434fa5ef92 213 break;
shilianming 0:66434fa5ef92 214 case ANIMATION_TIMING_LINEAR:
shilianming 0:66434fa5ef92 215 R_Get_AnimationTimingFunction("linear", &accelerator);
shilianming 0:66434fa5ef92 216 break;
shilianming 0:66434fa5ef92 217 case ANIMATION_TIMING_EASE_IN:
shilianming 0:66434fa5ef92 218 R_Get_AnimationTimingFunction("ease-in", &accelerator);
shilianming 0:66434fa5ef92 219 break;
shilianming 0:66434fa5ef92 220 case ANIMATION_TIMING_EASE_OUT:
shilianming 0:66434fa5ef92 221 R_Get_AnimationTimingFunction("ease-out", &accelerator);
shilianming 0:66434fa5ef92 222 break;
shilianming 0:66434fa5ef92 223 case ANIMATION_TIMING_EASE_IN_OUT:
shilianming 0:66434fa5ef92 224 default:
shilianming 0:66434fa5ef92 225 R_Get_AnimationTimingFunction("ease-in-out", &accelerator);
shilianming 0:66434fa5ef92 226 break;
shilianming 0:66434fa5ef92 227 }
shilianming 0:66434fa5ef92 228 }
shilianming 0:66434fa5ef92 229
shilianming 0:66434fa5ef92 230 /* Draw rectangle */
shilianming 0:66434fa5ef92 231 canvas2d.fillStyle = "#0000FF"; /* blue */
shilianming 0:66434fa5ef92 232 switch (animation_timing) {
shilianming 0:66434fa5ef92 233 case ANIMATION_TIMING_EASE:
shilianming 0:66434fa5ef92 234 canvas2d.fillRect(17, 420, 136, 10);
shilianming 0:66434fa5ef92 235 break;
shilianming 0:66434fa5ef92 236 case ANIMATION_TIMING_LINEAR:
shilianming 0:66434fa5ef92 237 canvas2d.fillRect(173, 420, 136, 10);
shilianming 0:66434fa5ef92 238 break;
shilianming 0:66434fa5ef92 239 case ANIMATION_TIMING_EASE_IN:
shilianming 0:66434fa5ef92 240 canvas2d.fillRect(330, 420, 136, 10);
shilianming 0:66434fa5ef92 241 break;
shilianming 0:66434fa5ef92 242 case ANIMATION_TIMING_EASE_OUT:
shilianming 0:66434fa5ef92 243 canvas2d.fillRect(487, 420, 136, 10);
shilianming 0:66434fa5ef92 244 break;
shilianming 0:66434fa5ef92 245 case ANIMATION_TIMING_EASE_IN_OUT:
shilianming 0:66434fa5ef92 246 default:
shilianming 0:66434fa5ef92 247 canvas2d.fillRect(644, 420, 136, 10);
shilianming 0:66434fa5ef92 248 break;
shilianming 0:66434fa5ef92 249 }
shilianming 0:66434fa5ef92 250
shilianming 0:66434fa5ef92 251 /* Draw button */
shilianming 0:66434fa5ef92 252 canvas2d.drawImage(animetion_timing_jpg_File, 0, 370);
shilianming 0:66434fa5ef92 253
shilianming 0:66434fa5ef92 254 position = R_ANIMATION_TIMING_FUNCTION_GetValue(accelerator, relative_pos, 550.0f, 10.0f);
shilianming 0:66434fa5ef92 255 canvas2d.drawImage(Flower_jpg_File, position, 100);
shilianming 0:66434fa5ef92 256
shilianming 0:66434fa5ef92 257 /* Draw return button */
shilianming 0:66434fa5ef92 258 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
shilianming 0:66434fa5ef92 259
shilianming 0:66434fa5ef92 260 /* Complete drawing */
shilianming 0:66434fa5ef92 261 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
shilianming 0:66434fa5ef92 262 }