Changeset fa01c05 in mainline
- Timestamp:
- 2020-11-03T18:46:35Z (4 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- b71c0fc
- Parents:
- 4ac11ff
- Location:
- uspace
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/uidemo/uidemo.c
r4ac11ff rfa01c05 33 33 */ 34 34 35 #include <gfx/color.h>36 35 #include <gfx/coord.h> 37 #include <gfx/render.h>38 36 #include <io/pos_event.h> 39 37 #include <stdio.h> … … 50 48 51 49 static void wnd_close(ui_window_t *, void *); 50 static errno_t wnd_paint(ui_window_t *, void *); 52 51 static void wnd_pos(ui_window_t *, void *, pos_event_t *pos); 53 52 54 53 static ui_window_cb_t window_cb = { 55 54 .close = wnd_close, 55 .paint = wnd_paint, 56 56 .pos = wnd_pos 57 57 }; … … 73 73 74 74 ui_quit(demo->ui); 75 } 76 77 /** Window paint request. 78 * 79 * @param window Window 80 * @param arg Argument (demo) 81 * @return EOK on success or an error code 82 */ 83 static errno_t wnd_paint(ui_window_t *window, void *arg) 84 { 85 ui_demo_t *demo = (ui_demo_t *) arg; 86 errno_t rc; 87 88 /* Let window paint its background */ 89 rc = ui_window_def_paint(window); 90 if (rc != EOK) 91 return rc; 92 93 return ui_fixed_paint(demo->fixed); 75 94 } 76 95 … … 122 141 ui_demo_t demo; 123 142 gfx_rect_t rect; 124 gfx_rect_t app_rect;125 gfx_color_t *color;126 143 ui_resource_t *ui_res; 127 gfx_context_t *gc;128 144 errno_t rc; 129 145 … … 156 172 157 173 ui_res = ui_window_get_res(window); 158 gc = ui_window_get_gc(window);159 ui_window_get_app_rect(window, &app_rect);160 174 161 175 rc = ui_fixed_create(&demo.fixed); … … 226 240 } 227 241 228 rc = gfx_color_new_rgb_i16(0xc8c8, 0xc8c8, 0xc8c8, &color); 229 if (rc != EOK) { 230 printf("Error allocating color.\n"); 231 return rc; 232 } 233 234 rc = gfx_set_color(gc, color); 235 if (rc != EOK) { 236 printf("Error setting color.\n"); 237 return rc; 238 } 239 240 rc = gfx_fill_rect(gc, &app_rect); 241 if (rc != EOK) { 242 printf("Error filling background.\n"); 243 return rc; 244 } 245 246 rc = ui_fixed_paint(demo.fixed); 247 if (rc != EOK) { 248 printf("Error painting UI controls.\n"); 242 rc = ui_window_paint(window); 243 if (rc != EOK) { 244 printf("Error painting window.\n"); 249 245 return rc; 250 246 } -
uspace/lib/ui/include/types/ui/window.h
r4ac11ff rfa01c05 37 37 #define _UI_TYPES_WINDOW_H 38 38 39 #include <errno.h> 39 40 #include <io/kbd_event.h> 40 41 #include <io/pos_event.h> … … 56 57 void (*focus)(ui_window_t *, void *); 57 58 void (*kbd)(ui_window_t *, void *, kbd_event_t *); 59 errno_t (*paint)(ui_window_t *, void *); 58 60 void (*pos)(ui_window_t *, void *, pos_event_t *); 59 61 void (*unfocus)(ui_window_t *, void *); -
uspace/lib/ui/include/ui/window.h
r4ac11ff rfa01c05 52 52 extern gfx_context_t *ui_window_get_gc(ui_window_t *); 53 53 extern void ui_window_get_app_rect(ui_window_t *, gfx_rect_t *); 54 extern errno_t ui_window_paint(ui_window_t *); 55 extern errno_t ui_window_def_paint(ui_window_t *); 54 56 55 57 #endif -
uspace/lib/ui/private/window.h
r4ac11ff rfa01c05 38 38 #define _UI_PRIVATE_WINDOW_H 39 39 40 #include <errno.h> 40 41 #include <display.h> 41 42 #include <gfx/context.h> … … 64 65 }; 65 66 66 extern void ui_window_close(ui_window_t *); 67 extern void ui_window_focus(ui_window_t *); 68 extern void ui_window_kbd(ui_window_t *, kbd_event_t *); 69 extern void ui_window_pos(ui_window_t *, pos_event_t *); 70 extern void ui_window_unfocus(ui_window_t *); 67 extern void ui_window_send_close(ui_window_t *); 68 extern void ui_window_send_focus(ui_window_t *); 69 extern void ui_window_send_kbd(ui_window_t *, kbd_event_t *); 70 extern errno_t ui_window_send_paint(ui_window_t *); 71 extern void ui_window_send_pos(ui_window_t *, pos_event_t *); 72 extern void ui_window_send_unfocus(ui_window_t *); 71 73 72 74 #endif -
uspace/lib/ui/src/window.c
r4ac11ff rfa01c05 37 37 #include <errno.h> 38 38 #include <gfx/context.h> 39 #include <gfx/render.h> 39 40 #include <io/kbd_event.h> 40 41 #include <io/pos_event.h> … … 45 46 #include <ui/window.h> 46 47 #include "../private/dummygc.h" 48 #include "../private/resource.h" 47 49 #include "../private/ui.h" 48 50 #include "../private/wdecor.h" … … 205 207 } 206 208 209 errno_t ui_window_paint(ui_window_t *window) 210 { 211 return ui_window_send_paint(window); 212 } 213 207 214 /** Handle window close event. */ 208 215 static void dwnd_close_event(void *arg) … … 210 217 ui_window_t *window = (ui_window_t *) arg; 211 218 212 ui_window_ close(window);219 ui_window_send_close(window); 213 220 } 214 221 … … 223 230 } 224 231 225 ui_window_ focus(window);232 ui_window_send_focus(window); 226 233 } 227 234 … … 232 239 233 240 (void) window; 234 ui_window_ kbd(window, kbd_event);241 ui_window_send_kbd(window, kbd_event); 235 242 } 236 243 … … 245 252 246 253 ui_wdecor_pos_event(window->wdecor, event); 247 ui_window_ pos(window, event);254 ui_window_send_pos(window, event); 248 255 } 249 256 … … 258 265 } 259 266 260 ui_window_ unfocus(window);267 ui_window_send_unfocus(window); 261 268 } 262 269 … … 270 277 ui_window_t *window = (ui_window_t *) arg; 271 278 272 ui_window_ close(window);279 ui_window_send_close(window); 273 280 } 274 281 … … 290 297 * @param window Window 291 298 */ 292 void ui_window_ close(ui_window_t *window)299 void ui_window_send_close(ui_window_t *window) 293 300 { 294 301 if (window->cb != NULL && window->cb->close != NULL) … … 300 307 * @param window Window 301 308 */ 302 void ui_window_ focus(ui_window_t *window)309 void ui_window_send_focus(ui_window_t *window) 303 310 { 304 311 if (window->cb != NULL && window->cb->focus != NULL) … … 310 317 * @param window Window 311 318 */ 312 void ui_window_ kbd(ui_window_t *window, kbd_event_t *kbd)319 void ui_window_send_kbd(ui_window_t *window, kbd_event_t *kbd) 313 320 { 314 321 if (window->cb != NULL && window->cb->kbd != NULL) … … 316 323 } 317 324 325 /** Send window paint event. 326 * 327 * @param window Window 328 */ 329 errno_t ui_window_send_paint(ui_window_t *window) 330 { 331 if (window->cb != NULL && window->cb->paint != NULL) 332 return window->cb->paint(window, window->arg); 333 else 334 return ui_window_def_paint(window); 335 } 336 318 337 /** Send window position event. 319 338 * 320 339 * @param window Window 321 340 */ 322 void ui_window_ pos(ui_window_t *window, pos_event_t *pos)341 void ui_window_send_pos(ui_window_t *window, pos_event_t *pos) 323 342 { 324 343 if (window->cb != NULL && window->cb->pos != NULL) … … 330 349 * @param window Window 331 350 */ 332 void ui_window_ unfocus(ui_window_t *window)351 void ui_window_send_unfocus(ui_window_t *window) 333 352 { 334 353 if (window->cb != NULL && window->cb->unfocus != NULL) … … 336 355 } 337 356 357 /** Default window paint routine. 358 * 359 * @param window Window 360 * @return EOK on success or an error code 361 */ 362 errno_t ui_window_def_paint(ui_window_t *window) 363 { 364 gfx_rect_t app_rect; 365 errno_t rc; 366 367 rc = gfx_set_color(window->gc, window->res->wnd_face_color); 368 if (rc != EOK) 369 return rc; 370 371 ui_window_get_app_rect(window, &app_rect); 372 373 rc = gfx_fill_rect(window->gc, &app_rect); 374 if (rc != EOK) 375 return rc; 376 377 return EOK; 378 } 379 338 380 /** @} 339 381 */ -
uspace/lib/ui/test/window.c
r4ac11ff rfa01c05 46 46 static void test_window_focus(ui_window_t *, void *); 47 47 static void test_window_kbd(ui_window_t *, void *, kbd_event_t *); 48 static errno_t test_window_paint(ui_window_t *, void *); 48 49 static void test_window_pos(ui_window_t *, void *, pos_event_t *); 49 50 static void test_window_unfocus(ui_window_t *, void *); … … 53 54 .focus = test_window_focus, 54 55 .kbd = test_window_kbd, 56 .paint = test_window_paint, 55 57 .pos = test_window_pos, 56 58 .unfocus = test_window_unfocus … … 61 63 62 64 typedef struct { 65 errno_t rc; 63 66 bool close; 64 67 bool focus; 65 68 bool kbd; 66 69 kbd_event_t kbd_event; 70 bool paint; 67 71 bool pos; 68 72 pos_event_t pos_event; … … 131 135 } 132 136 133 /** ui_window_close() calls close callback set via ui_window_set_cb() */ 134 PCUT_TEST(close) 137 /** Test ui_window_paint() */ 138 PCUT_TEST(paint) 139 { 140 errno_t rc; 141 ui_t *ui = NULL; 142 ui_wnd_params_t params; 143 ui_window_t *window = NULL; 144 145 rc = ui_create_disp(NULL, &ui); 146 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 147 148 ui_wnd_params_init(¶ms); 149 params.caption = "Hello"; 150 151 rc = ui_window_create(ui, ¶ms, &window); 152 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 153 PCUT_ASSERT_NOT_NULL(window); 154 155 ui_window_paint(window); 156 157 ui_window_destroy(window); 158 ui_destroy(ui); 159 } 160 161 /** Test ui_window_def_paint() */ 162 PCUT_TEST(def_paint) 163 { 164 errno_t rc; 165 ui_t *ui = NULL; 166 ui_wnd_params_t params; 167 ui_window_t *window = NULL; 168 169 rc = ui_create_disp(NULL, &ui); 170 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 171 172 ui_wnd_params_init(¶ms); 173 params.caption = "Hello"; 174 175 rc = ui_window_create(ui, ¶ms, &window); 176 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 177 PCUT_ASSERT_NOT_NULL(window); 178 179 ui_window_def_paint(window); 180 181 ui_window_destroy(window); 182 ui_destroy(ui); 183 } 184 185 /** ui_window_send_close() calls close callback set via ui_window_set_cb() */ 186 PCUT_TEST(send_close) 135 187 { 136 188 errno_t rc; … … 151 203 152 204 /* Close callback with no callbacks set */ 153 ui_window_ close(window);205 ui_window_send_close(window); 154 206 155 207 /* Close callback with close callback not implemented */ 156 208 ui_window_set_cb(window, &dummy_window_cb, NULL); 157 ui_window_ close(window);209 ui_window_send_close(window); 158 210 159 211 /* Close callback with real callback set */ 160 212 resp.close = false; 161 213 ui_window_set_cb(window, &test_window_cb, &resp); 162 ui_window_ close(window);214 ui_window_send_close(window); 163 215 PCUT_ASSERT_TRUE(resp.close); 164 216 … … 167 219 } 168 220 169 /** ui_window_ focus() calls focus callback set via ui_window_set_cb() */170 PCUT_TEST( focus)221 /** ui_window_send_focus() calls focus callback set via ui_window_set_cb() */ 222 PCUT_TEST(send_focus) 171 223 { 172 224 errno_t rc; … … 187 239 188 240 /* Focus callback with no callbacks set */ 189 ui_window_ focus(window);241 ui_window_send_focus(window); 190 242 191 243 /* Focus callback with focus callback not implemented */ 192 244 ui_window_set_cb(window, &dummy_window_cb, NULL); 193 ui_window_ focus(window);245 ui_window_send_focus(window); 194 246 195 247 /* Focus callback with real callback set */ 196 resp. close= false;197 ui_window_set_cb(window, &test_window_cb, &resp); 198 ui_window_ focus(window);248 resp.focus = false; 249 ui_window_set_cb(window, &test_window_cb, &resp); 250 ui_window_send_focus(window); 199 251 PCUT_ASSERT_TRUE(resp.focus); 200 252 … … 203 255 } 204 256 205 /** ui_window_ kbd() calls kbd callback set via ui_window_set_cb() */206 PCUT_TEST( kbd)257 /** ui_window_send_kbd() calls kbd callback set via ui_window_set_cb() */ 258 PCUT_TEST(send_kbd) 207 259 { 208 260 errno_t rc; … … 229 281 230 282 /* Kbd callback with no callbacks set */ 231 ui_window_ kbd(window, &kbd_event);283 ui_window_send_kbd(window, &kbd_event); 232 284 233 285 /* Kbd callback with kbd callback not implemented */ 234 286 ui_window_set_cb(window, &dummy_window_cb, NULL); 235 ui_window_ kbd(window, &kbd_event);287 ui_window_send_kbd(window, &kbd_event); 236 288 237 289 /* Kbd callback with real callback set */ 238 290 resp.kbd = false; 239 291 ui_window_set_cb(window, &test_window_cb, &resp); 240 ui_window_ kbd(window, &kbd_event);292 ui_window_send_kbd(window, &kbd_event); 241 293 PCUT_ASSERT_TRUE(resp.kbd); 242 294 PCUT_ASSERT_EQUALS(kbd_event.type, resp.kbd_event.type); … … 249 301 } 250 302 251 /** ui_window_pos() calls pos callback set via ui_window_set_cb() */ 252 PCUT_TEST(pos) 303 /** ui_window_send_paint() calls paint callback set via ui_window_set_cb() */ 304 PCUT_TEST(send_paint) 305 { 306 errno_t rc; 307 ui_t *ui = NULL; 308 ui_wnd_params_t params; 309 ui_window_t *window = NULL; 310 test_cb_resp_t resp; 311 312 rc = ui_create_disp(NULL, &ui); 313 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 314 315 ui_wnd_params_init(¶ms); 316 params.caption = "Hello"; 317 318 rc = ui_window_create(ui, ¶ms, &window); 319 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 320 PCUT_ASSERT_NOT_NULL(window); 321 322 /* Paint callback with no callbacks set */ 323 ui_window_send_paint(window); 324 325 /* Paint callback with paint callback not implemented */ 326 ui_window_set_cb(window, &dummy_window_cb, NULL); 327 ui_window_send_paint(window); 328 329 /* Paint callback with real callback set */ 330 resp.paint = false; 331 resp.rc = EOK; 332 ui_window_set_cb(window, &test_window_cb, &resp); 333 rc = ui_window_send_paint(window); 334 PCUT_ASSERT_ERRNO_VAL(resp.rc, rc); 335 PCUT_ASSERT_TRUE(resp.paint); 336 337 ui_window_destroy(window); 338 ui_destroy(ui); 339 } 340 341 /** ui_window_send_pos() calls pos callback set via ui_window_set_cb() */ 342 PCUT_TEST(send_pos) 253 343 { 254 344 errno_t rc; … … 276 366 277 367 /* Pos callback with no callbacks set */ 278 ui_window_ pos(window, &pos_event);368 ui_window_send_pos(window, &pos_event); 279 369 280 370 /* Pos callback with pos callback not implemented */ 281 371 ui_window_set_cb(window, &dummy_window_cb, NULL); 282 ui_window_ pos(window, &pos_event);372 ui_window_send_pos(window, &pos_event); 283 373 284 374 /* Pos callback with real callback set */ 285 375 resp.pos = false; 286 376 ui_window_set_cb(window, &test_window_cb, &resp); 287 ui_window_ pos(window, &pos_event);377 ui_window_send_pos(window, &pos_event); 288 378 PCUT_ASSERT_TRUE(resp.pos); 289 379 PCUT_ASSERT_INT_EQUALS(pos_event.pos_id, resp.pos_event.pos_id); … … 297 387 } 298 388 299 /** ui_window_ unfocus() calls unfocus callback set via ui_window_set_cb() */300 PCUT_TEST( unfocus)389 /** ui_window_send_unfocus() calls unfocus callback set via ui_window_set_cb() */ 390 PCUT_TEST(send_unfocus) 301 391 { 302 392 errno_t rc; … … 317 407 318 408 /* Unfocus callback with no callbacks set */ 319 ui_window_ unfocus(window);409 ui_window_send_unfocus(window); 320 410 321 411 /* Unfocus callback with unfocus callback not implemented */ 322 412 ui_window_set_cb(window, &dummy_window_cb, NULL); 323 ui_window_ unfocus(window);413 ui_window_send_unfocus(window); 324 414 325 415 /* Unfocus callback with real callback set */ 326 416 resp.close = false; 327 417 ui_window_set_cb(window, &test_window_cb, &resp); 328 ui_window_ unfocus(window);418 ui_window_send_unfocus(window); 329 419 PCUT_ASSERT_TRUE(resp.unfocus); 330 420 … … 356 446 } 357 447 448 static errno_t test_window_paint(ui_window_t *window, void *arg) 449 { 450 test_cb_resp_t *resp = (test_cb_resp_t *) arg; 451 452 resp->paint = true; 453 return resp->rc; 454 } 455 358 456 static void test_window_pos(ui_window_t *window, void *arg, 359 457 pos_event_t *event)
Note:
See TracChangeset
for help on using the changeset viewer.