Changes in / [aa2b32c:06b0211b] in mainline
- Files:
-
- 3 added
- 5 deleted
- 39 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/genarch/Makefile.inc
raa2b32c r06b0211b 66 66 GENARCH_SOURCES += \ 67 67 genarch/src/fb/font-8x16.c \ 68 genarch/src/fb/logo-196x66.c \ 68 69 genarch/src/fb/fb.c \ 69 70 genarch/src/fb/bfb.c -
kernel/genarch/src/fb/fb.c
raa2b32c r06b0211b 35 35 36 36 #include <genarch/fb/font-8x16.h> 37 #include <genarch/fb/logo-196x66.h> 37 38 #include <genarch/fb/fb.h> 38 39 #include <console/chardev.h> … … 52 53 #include <byteorder.h> 53 54 54 #define BG_COLOR 0x00 162055 #define FG_COLOR 0xf 3cf6555 #define BG_COLOR 0x000080 56 #define FG_COLOR 0xffff00 56 57 #define INV_COLOR 0xaaaaaa 57 58 … … 92 93 unsigned int yres; 93 94 95 unsigned int ylogo; 96 unsigned int ytrim; 94 97 unsigned int rowtrim; 95 98 … … 210 213 } 211 214 215 /** Hide logo and refresh screen 216 * 217 */ 218 static void logo_hide(fb_instance_t *instance) 219 { 220 instance->ylogo = 0; 221 instance->ytrim = instance->yres; 222 instance->rowtrim = instance->rows; 223 224 if ((!instance->parea.mapped) || (console_override)) 225 fb_redraw_internal(instance); 226 } 227 212 228 /** Draw character at given position 213 229 * … … 220 236 unsigned int yd; 221 237 238 if (y >= instance->ytrim) 239 logo_hide(instance); 240 222 241 if (!overlay) 223 242 instance->backbuf[BB_POS(instance, col, row)] = glyph; … … 225 244 if ((!instance->parea.mapped) || (console_override)) { 226 245 for (yd = 0; yd < FONT_SCANLINES; yd++) 227 memcpy(&instance->addr[FB_POS(instance, x, y + yd )],246 memcpy(&instance->addr[FB_POS(instance, x, y + yd + instance->ylogo)], 228 247 &instance->glyphs[GLYPH_POS(instance, glyph, yd)], 229 248 instance->glyphscanline); … … 237 256 static void screen_scroll(fb_instance_t *instance) 238 257 { 258 if (instance->ylogo > 0) { 259 logo_hide(instance); 260 return; 261 } 262 239 263 if ((!instance->parea.mapped) || (console_override)) { 240 264 unsigned int row; … … 388 412 static void fb_redraw_internal(fb_instance_t *instance) 389 413 { 414 if (instance->ylogo > 0) { 415 unsigned int y; 416 417 for (y = 0; y < LOGO_HEIGHT; y++) { 418 unsigned int x; 419 420 for (x = 0; x < instance->xres; x++) 421 instance->rgb_conv(&instance->addr[FB_POS(instance, x, y)], 422 (x < LOGO_WIDTH) ? 423 fb_logo[y * LOGO_WIDTH + x] : 424 LOGO_COLOR); 425 } 426 } 427 390 428 unsigned int row; 391 429 392 430 for (row = 0; row < instance->rowtrim; row++) { 393 unsigned int y = ROW2Y(row);431 unsigned int y = instance->ylogo + ROW2Y(row); 394 432 unsigned int yd; 395 433 … … 414 452 (instance->xres - COL2X(instance->cols)) * instance->pixelbytes; 415 453 416 for (y = 0; y < instance->yres; y++)454 for (y = instance->ylogo; y < instance->yres; y++) 417 455 memcpy(&instance->addr[FB_POS(instance, COL2X(instance->cols), y)], 418 456 instance->bgscan, size); 419 457 } 420 458 421 if (ROW2Y(instance->rowtrim) < instance->yres) {459 if (ROW2Y(instance->rowtrim) + instance->ylogo < instance->yres) { 422 460 unsigned int y; 423 461 424 for (y = ROW2Y(instance->rowtrim); y < instance->yres; y++) 462 for (y = ROW2Y(instance->rowtrim) + instance->ylogo; 463 y < instance->yres; y++) 425 464 memcpy(&instance->addr[FB_POS(instance, 0, y)], 426 465 instance->bgscan, instance->bgscanbytes); … … 528 567 instance->rows = Y2ROW(instance->yres); 529 568 530 instance->rowtrim = instance->rows; 569 if (instance->yres > LOGO_HEIGHT) { 570 instance->ylogo = LOGO_HEIGHT; 571 instance->rowtrim = instance->rows - Y2ROW(instance->ylogo); 572 if (instance->ylogo % FONT_SCANLINES > 0) 573 instance->rowtrim--; 574 instance->ytrim = ROW2Y(instance->rowtrim); 575 } else { 576 instance->ylogo = 0; 577 instance->ytrim = instance->yres; 578 instance->rowtrim = instance->rows; 579 } 531 580 532 581 instance->glyphscanline = FONT_WIDTH * instance->pixelbytes; -
uspace/app/bdsh/cmds/modules/cat/cat.c
raa2b32c r06b0211b 117 117 static void waitkey() 118 118 { 119 cons_event_t ev; 120 kbd_event_t *kev; 119 kbd_event_t ev; 121 120 122 121 while (true) { 123 if (!console_get_ event(console, &ev)) {122 if (!console_get_kbd_event(console, &ev)) { 124 123 return; 125 124 } 126 if (ev.type == CEV_KEY && ev.ev.key.type == KEY_PRESS) { 127 kev = &ev.ev.key; 128 129 if (kev->key == KC_ESCAPE || kev->key == KC_Q) { 125 if (ev.type == KEY_PRESS) { 126 if (ev.key == KC_ESCAPE || ev.key == KC_Q) { 130 127 should_quit = true; 131 128 return; 132 129 } 133 if ( kev->key == KC_C) {130 if (ev.key == KC_C) { 134 131 paging_enabled = false; 135 132 return; 136 133 } 137 if ( kev->key == KC_ENTER || kev->key == KC_SPACE ||138 kev->key == KC_PAGE_DOWN) {134 if (ev.key == KC_ENTER || ev.key == KC_SPACE || 135 ev.key == KC_PAGE_DOWN) { 139 136 return; 140 137 } -
uspace/app/bdsh/cmds/modules/cp/cp.c
raa2b32c r06b0211b 152 152 153 153 while (true) { 154 cons_event_t ev;154 kbd_event_t ev; 155 155 console_flush(con); 156 console_get_ event(con, &ev);157 if ( ev.type != CEV_KEY || ev.ev.key.type != KEY_PRESS ||158 (ev.ev.key.mods & (KM_CTRL | KM_ALT)) != 0) {156 console_get_kbd_event(con, &ev); 157 if ((ev.type != KEY_PRESS) 158 || (ev.mods & (KM_CTRL | KM_ALT)) != 0) { 159 159 continue; 160 160 } 161 161 162 switch(ev. ev.key.key) {162 switch(ev.key) { 163 163 case KC_Y: 164 164 printf("y\n"); -
uspace/app/edit/edit.c
raa2b32c r06b0211b 80 80 tag_t sel_start; 81 81 82 /** Active keyboard modifiers */83 keymod_t keymod;84 85 82 /** 86 83 * Ideal column where the caret should try to get. This is used … … 122 119 static void cursor_setvis(bool visible); 123 120 124 static void key_handle_press(kbd_event_t *ev);125 121 static void key_handle_unmod(kbd_event_t const *ev); 126 122 static void key_handle_ctrl(kbd_event_t const *ev); … … 128 124 static void key_handle_shift_ctrl(kbd_event_t const *ev); 129 125 static void key_handle_movement(unsigned int key, bool shift); 130 131 static void pos_handle(pos_event_t *ev);132 126 133 127 static int file_save(char const *fname); … … 188 182 int main(int argc, char *argv[]) 189 183 { 190 cons_event_t ev;184 kbd_event_t ev; 191 185 bool new_file; 192 186 int rc; … … 251 245 252 246 while (!done) { 253 console_get_ event(con, &ev);247 console_get_kbd_event(con, &ev); 254 248 pane.rflags = 0; 255 249 256 switch (ev.type) { 257 case CEV_KEY: 258 pane.keymod = ev.ev.key.mods; 259 if (ev.ev.key.type == KEY_PRESS) 260 key_handle_press(&ev.ev.key); 261 break; 262 case CEV_POS: 263 pos_handle(&ev.ev.pos); 264 break; 250 if (ev.type == KEY_PRESS) { 251 /* Handle key press. */ 252 if (((ev.mods & KM_ALT) == 0) && 253 ((ev.mods & KM_SHIFT) == 0) && 254 (ev.mods & KM_CTRL) != 0) { 255 key_handle_ctrl(&ev); 256 } else if (((ev.mods & KM_ALT) == 0) && 257 ((ev.mods & KM_CTRL) == 0) && 258 (ev.mods & KM_SHIFT) != 0) { 259 key_handle_shift(&ev); 260 } else if (((ev.mods & KM_ALT) == 0) && 261 ((ev.mods & KM_CTRL) != 0) && 262 (ev.mods & KM_SHIFT) != 0) { 263 key_handle_shift_ctrl(&ev); 264 } else if ((ev.mods & (KM_CTRL | KM_ALT | KM_SHIFT)) == 0) { 265 key_handle_unmod(&ev); 266 } 265 267 } 266 268 … … 284 286 285 287 return 0; 286 }287 288 /* Handle key press. */289 static void key_handle_press(kbd_event_t *ev)290 {291 if (((ev->mods & KM_ALT) == 0) &&292 ((ev->mods & KM_SHIFT) == 0) &&293 (ev->mods & KM_CTRL) != 0) {294 key_handle_ctrl(ev);295 } else if (((ev->mods & KM_ALT) == 0) &&296 ((ev->mods & KM_CTRL) == 0) &&297 (ev->mods & KM_SHIFT) != 0) {298 key_handle_shift(ev);299 } else if (((ev->mods & KM_ALT) == 0) &&300 ((ev->mods & KM_CTRL) != 0) &&301 (ev->mods & KM_SHIFT) != 0) {302 key_handle_shift_ctrl(ev);303 } else if ((ev->mods & (KM_CTRL | KM_ALT | KM_SHIFT)) == 0) {304 key_handle_unmod(ev);305 }306 288 } 307 289 … … 480 462 } 481 463 482 static void pos_handle(pos_event_t *ev)483 {484 coord_t bc;485 spt_t pt;486 bool select;487 488 if (ev->type == POS_PRESS && ev->vpos < (unsigned)pane.rows) {489 bc.row = pane.sh_row + ev->vpos;490 bc.column = pane.sh_column + ev->hpos;491 sheet_get_cell_pt(doc.sh, &bc, dir_before, &pt);492 493 select = (pane.keymod & KM_SHIFT) != 0;494 495 caret_move(pt, select, true);496 }497 }498 499 464 /** Move caret while preserving or resetting selection. */ 500 465 static void caret_move(spt_t new_caret_pt, bool select, bool update_ideal_column) … … 627 592 static char *prompt(char const *prompt, char const *init_value) 628 593 { 629 cons_event_t ev; 630 kbd_event_t *kev; 594 kbd_event_t ev; 631 595 char *str; 632 596 wchar_t buffer[INFNAME_MAX_LEN + 1]; … … 648 612 649 613 while (!done) { 650 console_get_event(con, &ev); 651 652 if (ev.type == CEV_KEY && ev.ev.key.type == KEY_PRESS) { 653 kev = &ev.ev.key; 654 614 console_get_kbd_event(con, &ev); 615 616 if (ev.type == KEY_PRESS) { 655 617 /* Handle key press. */ 656 if ((( kev->mods & KM_ALT) == 0) &&657 ( kev->mods & KM_CTRL) != 0) {618 if (((ev.mods & KM_ALT) == 0) && 619 (ev.mods & KM_CTRL) != 0) { 658 620 ; 659 } else if (( kev->mods & (KM_CTRL | KM_ALT)) == 0) {660 switch ( kev->key) {621 } else if ((ev.mods & (KM_CTRL | KM_ALT)) == 0) { 622 switch (ev.key) { 661 623 case KC_ESCAPE: 662 624 return NULL; … … 672 634 break; 673 635 default: 674 if ( kev->c >= 32 && nc < max_len) {675 putchar( kev->c);636 if (ev.c >= 32 && nc < max_len) { 637 putchar(ev.c); 676 638 console_flush(con); 677 buffer[nc++] = kev->c;639 buffer[nc++] = ev.c; 678 640 } 679 641 break; -
uspace/app/mkbd/main.c
raa2b32c r06b0211b 178 178 179 179 while (1) { 180 cons_event_t ev;181 bool ok = console_get_ event(con, &ev);180 kbd_event_t ev; 181 bool ok = console_get_kbd_event(con, &ev); 182 182 if (!ok) { 183 183 printf("Connection with console broken: %s.\n", … … 186 186 } 187 187 188 if (ev.type == CEV_KEY && ev.ev.key.type == KEY_PRESS && 189 ev.ev.key.key == KC_ESCAPE) { 188 if (ev.key == KC_ESCAPE) { 190 189 break; 191 190 } -
uspace/app/msim/arch_helenos/input.c
raa2b32c r06b0211b 91 91 bool stdin_poll(char *key) 92 92 { 93 cons_event_t ev;93 kbd_event_t ev; 94 94 suseconds_t timeout = 0; 95 95 errno = EOK; 96 96 console_flush(input_prompt->console); 97 bool has_input = console_get_ event_timeout(input_prompt->console, &ev, &timeout);97 bool has_input = console_get_kbd_event_timeout(input_prompt->console, &ev, &timeout); 98 98 if (!has_input) { 99 99 return false; 100 100 } 101 101 102 if (ev.type != CEV_KEY || ev.ev.key.type !=KEY_PRESS)102 if (ev.type != KEY_PRESS) 103 103 return false; 104 104 105 *key = ev. ev.key.c;105 *key = ev.c; 106 106 107 107 return true; -
uspace/app/nterm/nterm.c
raa2b32c r06b0211b 109 109 int main(int argc, char *argv[]) 110 110 { 111 cons_event_t ev;111 kbd_event_t ev; 112 112 int rc; 113 113 … … 129 129 done = false; 130 130 while (!done) { 131 console_get_ event(con, &ev);132 if (ev.type == CEV_KEY && ev.ev.key.type ==KEY_PRESS)133 key_handle(&ev .ev.key);131 console_get_kbd_event(con, &ev); 132 if (ev.type == KEY_PRESS) 133 key_handle(&ev); 134 134 } 135 135 -
uspace/app/ping/ping.c
raa2b32c r06b0211b 188 188 { 189 189 console_ctrl_t *con; 190 cons_event_t ev;190 kbd_event_t ev; 191 191 192 192 con = console_init(stdin, stdout); … … 194 194 195 195 while (true) { 196 if (!console_get_ event(con, &ev))196 if (!console_get_kbd_event(con, &ev)) 197 197 break; 198 198 199 if (ev.type == CEV_KEY && ev.ev.key.type == KEY_PRESS && 200 (ev.ev.key.mods & (KM_ALT | KM_SHIFT)) == 201 0 && (ev.ev.key.mods & KM_CTRL) != 0) { 199 if (ev.type == KEY_PRESS && (ev.mods & (KM_ALT | KM_SHIFT)) == 200 0 && (ev.mods & KM_CTRL) != 0) { 202 201 /* Ctrl+key */ 203 if (ev. ev.key.key == KC_Q) {202 if (ev.key == KC_Q) { 204 203 ping_signal_done(); 205 204 return 0; -
uspace/app/taskdump/symtab.c
raa2b32c r06b0211b 267 267 continue; 268 268 269 if ( saddr <= addr && (best_name == NULL ||saddr > best_addr)) {269 if (best_name == NULL || (saddr <= addr && saddr > best_addr)) { 270 270 best_name = sname; 271 271 best_addr = saddr; -
uspace/app/tester/ipc/starve.c
raa2b32c r06b0211b 62 62 break; 63 63 64 cons_event_t ev;64 kbd_event_t ev; 65 65 suseconds_t timeout = 0; 66 bool has_event = console_get_ event_timeout(console, &ev, &timeout);67 if (has_event && ev.type == CEV_KEY && ev.ev.key.type == KEY_PRESS) {68 TPRINTF("Key %d pressed, terminating.\n", ev. ev.key.key);66 bool has_event = console_get_kbd_event_timeout(console, &ev, &timeout); 67 if (has_event && (ev.type == KEY_PRESS)) { 68 TPRINTF("Key %d pressed, terminating.\n", ev.key); 69 69 break; 70 70 } -
uspace/app/tetris/scores.c
raa2b32c r06b0211b 125 125 int j; 126 126 size_t off; 127 cons_event_t ev; 128 kbd_event_t *kev; 127 kbd_event_t ev; 129 128 130 129 clear_screen(); … … 142 141 while (1) { 143 142 console_flush(console); 144 if (!console_get_ event(console, &ev))143 if (!console_get_kbd_event(console, &ev)) 145 144 exit(1); 146 145 147 if (ev.type != CEV_KEY || ev.ev.key.type== KEY_RELEASE)146 if (ev.type == KEY_RELEASE) 148 147 continue; 149 148 150 kev = &ev.ev.key; 151 152 if (kev->key == KC_ENTER || kev->key == KC_NENTER) 149 if (ev.key == KC_ENTER || ev.key == KC_NENTER) 153 150 break; 154 151 155 if ( kev->key == KC_BACKSPACE) {152 if (ev.key == KC_BACKSPACE) { 156 153 if (i > 0) { 157 154 wchar_t uc; … … 169 166 scores[NUMSPOTS - 1].hs_name[off] = '\0'; 170 167 } 171 } else if ( kev->c != '\0') {168 } else if (ev.c != '\0') { 172 169 if (i < (MAXLOGNAME - 1)) { 173 if (chr_encode( kev->c, scores[NUMSPOTS - 1].hs_name,170 if (chr_encode(ev.c, scores[NUMSPOTS - 1].hs_name, 174 171 &off, STR_BOUNDS(MAXLOGNAME) + 1) == EOK) { 175 172 ++i; -
uspace/app/tetris/screen.c
raa2b32c r06b0211b 344 344 345 345 while (timeout > 0) { 346 cons_event_t event;347 348 if (!console_get_ event_timeout(console, &event, &timeout))346 kbd_event_t event; 347 348 if (!console_get_kbd_event_timeout(console, &event, &timeout)) 349 349 break; 350 350 } … … 376 376 377 377 while (c == 0) { 378 cons_event_t event;379 380 if (!console_get_ event_timeout(console, &event, &timeleft)) {378 kbd_event_t event; 379 380 if (!console_get_kbd_event_timeout(console, &event, &timeleft)) { 381 381 timeleft = 0; 382 382 return -1; 383 383 } 384 384 385 if (event.type == CEV_KEY && event.ev.key.type ==KEY_PRESS)386 c = event. ev.key.c;385 if (event.type == KEY_PRESS) 386 c = event.c; 387 387 } 388 388 … … 398 398 399 399 while (c == 0) { 400 cons_event_t event;401 402 if (!console_get_ event(console, &event))400 kbd_event_t event; 401 402 if (!console_get_kbd_event(console, &event)) 403 403 return -1; 404 404 405 if (event.type == CEV_KEY && event.ev.key.type ==KEY_PRESS)406 c = event. ev.key.c;405 if (event.type == KEY_PRESS) 406 c = event.c; 407 407 } 408 408 -
uspace/app/top/screen.c
raa2b32c r06b0211b 556 556 557 557 while (c == 0) { 558 cons_event_t event;558 kbd_event_t event; 559 559 560 560 warning_timeleft -= timeleft; 561 if (!console_get_ event_timeout(console, &event, &timeleft)) {561 if (!console_get_kbd_event_timeout(console, &event, &timeleft)) { 562 562 timeleft = 0; 563 563 return -1; … … 565 565 warning_timeleft += timeleft; 566 566 567 if (event.type == CEV_KEY && event.ev.key.type ==KEY_PRESS)568 c = event. ev.key.c;567 if (event.type == KEY_PRESS) 568 c = event.c; 569 569 } 570 570 -
uspace/app/trace/trace.c
raa2b32c r06b0211b 565 565 static int cev_fibril(void *arg) 566 566 { 567 cons_event_t event;568 569 567 (void) arg; 570 568 … … 577 575 fibril_mutex_unlock(&state_lock); 578 576 579 if (!console_get_ event(console, &event))577 if (!console_get_kbd_event(console, &cev)) 580 578 return -1; 581 579 582 if (event.type == CEV_KEY) { 583 fibril_mutex_lock(&state_lock); 584 cev = event.ev.key; 585 cev_valid = true; 586 fibril_condvar_broadcast(&state_cv); 587 fibril_mutex_unlock(&state_lock); 588 } 580 fibril_mutex_lock(&state_lock); 581 cev_valid = true; 582 fibril_condvar_broadcast(&state_cv); 583 fibril_mutex_unlock(&state_lock); 589 584 } 590 585 } -
uspace/app/vdemo/vdemo.c
raa2b32c r06b0211b 141 141 lbl_action->cancel); 142 142 143 grid->add(grid, &lbl_action->label.widget, 0, 0, 2, 1);144 grid->add(grid, &btn_confirm->widget, 0, 1, 1, 1);143 grid->add(grid, &lbl_action->label.widget, 0, 0, 1, 2); 144 grid->add(grid, &btn_confirm->widget, 1, 0, 1, 1); 145 145 grid->add(grid, &btn_cancel->widget, 1, 1, 1, 1); 146 window_resize(main_window, 200, 7 6);146 window_resize(main_window, 200, 70); 147 147 148 148 window_exec(main_window); -
uspace/app/vlaunch/Makefile
raa2b32c r06b0211b 35 35 36 36 SOURCES = \ 37 vlaunch.c \ 38 images.c 39 40 IMAGES = \ 41 gfx/helenos.tga 42 43 PRE_DEPEND = images.c images.h 44 EXTRA_CLEAN = images.c images.h 37 vlaunch.c 45 38 46 39 include $(USPACE_PREFIX)/Makefile.common 47 48 images.c images.h: $(IMAGES)49 $(ROOT_PATH)/tools/mkarray.py images COMPOSITOR_IMAGES $^ -
uspace/app/vlaunch/vlaunch.c
raa2b32c r06b0211b 46 46 #include <button.h> 47 47 #include <label.h> 48 #include <canvas.h>49 48 50 #include <surface.h> 51 #include <source.h> 52 #include <drawctx.h> 53 #include <codec/tga.h> 54 55 #include "images.h" 56 57 #define NAME "vlaunch" 58 59 #define LOGO_WIDTH 196 60 #define LOGO_HEIGHT 66 49 #define NAME "vlaunch" 61 50 62 51 static char *winreg = NULL; … … 108 97 } 109 98 110 surface_t *logo = decode_tga((void *) helenos_tga, helenos_tga_size, 0);111 if (!logo) {112 printf("Unable to decode logo.\n");113 return 1;114 }115 116 99 winreg = argv[1]; 117 100 window_t *main_window = window_open(argv[1], true, true, "vlaunch", 0, 0); … … 121 104 } 122 105 123 pixel_t grd_bg = PIXEL(255, 2 55, 255, 255);106 pixel_t grd_bg = PIXEL(255, 240, 240, 240); 124 107 pixel_t btn_bg = PIXEL(255, 0, 0, 0); 125 108 pixel_t btn_fg = PIXEL(255, 240, 240, 240); 126 pixel_t lbl_bg = PIXEL(255, 2 55, 255, 255);109 pixel_t lbl_bg = PIXEL(255, 240, 240, 240); 127 110 pixel_t lbl_fg = PIXEL(255, 0, 0, 0); 128 111 129 canvas_t *logo_canvas = create_canvas(NULL, LOGO_WIDTH, LOGO_HEIGHT,130 logo);131 112 label_t *lbl_caption = create_label(NULL, "Launch application:", 16, 132 113 lbl_bg, lbl_fg); … … 137 118 button_t *btn_vlaunch = create_button(NULL, "vlaunch", 16, btn_bg, 138 119 btn_fg); 139 grid_t *grid = create_grid(window_root(main_window), 1, 5, grd_bg);120 grid_t *grid = create_grid(window_root(main_window), 4, 1, grd_bg); 140 121 141 if ((!l ogo_canvas) || (!lbl_caption) || (!btn_vterm) ||142 (!btn_v demo) || (!btn_vlaunch) || (!grid)) {122 if ((!lbl_caption) || (!btn_vterm) || (!btn_vdemo) || 123 (!btn_vlaunch) || (!grid)) { 143 124 window_close(main_window); 144 125 printf("Cannot create widgets.\n"); … … 150 131 sig_connect(&btn_vlaunch->clicked, NULL, on_vlaunch); 151 132 152 grid->add(grid, &logo_canvas->widget, 0, 0, 1, 1); 153 grid->add(grid, &lbl_caption->widget, 0, 1, 1, 1); 154 grid->add(grid, &btn_vterm->widget, 0, 2, 1, 1); 155 grid->add(grid, &btn_vdemo->widget, 0, 3, 1, 1); 156 grid->add(grid, &btn_vlaunch->widget, 0, 4, 1, 1); 133 grid->add(grid, &lbl_caption->widget, 0, 0, 1, 1); 134 grid->add(grid, &btn_vterm->widget, 1, 0, 1, 1); 135 grid->add(grid, &btn_vdemo->widget, 2, 0, 1, 1); 136 grid->add(grid, &btn_vlaunch->widget, 3, 0, 1, 1); 157 137 158 window_resize(main_window, 210, 130 + LOGO_HEIGHT);138 window_resize(main_window, 180, 130); 159 139 window_exec(main_window); 160 161 140 task_retval(0); 162 141 async_manager(); -
uspace/dist/src/c/demos/tetris/scores.c
raa2b32c r06b0211b 125 125 int j; 126 126 size_t off; 127 cons_event_t ev; 128 kbd_event_t *kev; 127 kbd_event_t ev; 129 128 130 129 clear_screen(); … … 142 141 while (1) { 143 142 console_flush(console); 144 if (!console_get_ event(console, &ev))143 if (!console_get_kbd_event(console, &ev)) 145 144 exit(1); 146 145 147 if (ev.type != CEV_KEY || ev.ev.key.type== KEY_RELEASE)146 if (ev.type == KEY_RELEASE) 148 147 continue; 149 148 150 kev = &ev.ev.key; 151 152 if (kev->key == KC_ENTER || kev->key == KC_NENTER) 149 if (ev.key == KC_ENTER || ev.key == KC_NENTER) 153 150 break; 154 151 155 if ( kev->key == KC_BACKSPACE) {152 if (ev.key == KC_BACKSPACE) { 156 153 if (i > 0) { 157 154 wchar_t uc; … … 169 166 scores[NUMSPOTS - 1].hs_name[off] = '\0'; 170 167 } 171 } else if ( kev->c != '\0') {168 } else if (ev.c != '\0') { 172 169 if (i < (MAXLOGNAME - 1)) { 173 if (chr_encode( kev->c, scores[NUMSPOTS - 1].hs_name,170 if (chr_encode(ev.c, scores[NUMSPOTS - 1].hs_name, 174 171 &off, STR_BOUNDS(MAXLOGNAME) + 1) == EOK) { 175 172 ++i; -
uspace/dist/src/c/demos/top/screen.c
raa2b32c r06b0211b 553 553 554 554 while (c == 0) { 555 cons_event_t event;556 557 if (!console_get_ event_timeout(console, &event, &timeleft)) {555 kbd_event_t event; 556 557 if (!console_get_kbd_event_timeout(console, &event, &timeleft)) { 558 558 timeleft = 0; 559 559 return -1; 560 560 } 561 561 562 if (event.type == CEV_KEY && event.ev.key.type ==KEY_PRESS)563 c = event. ev.key.c;562 if (event.type == KEY_PRESS) 563 c = event.c; 564 564 } 565 565 -
uspace/drv/char/ns8250/ns8250.c
raa2b32c r06b0211b 160 160 /** I/O registers **/ 161 161 ns8250_regs_t *regs; 162 /** Is there any client conn ected to the device? */162 /** Is there any client conntected to the device? */ 163 163 bool client_connected; 164 164 /** The irq assigned to this device. */ … … 168 168 /** The i/o port used to access the serial ports registers. */ 169 169 ioport8_t *port; 170 /** The buffer for incom ing data. */170 /** The buffer for incomming data. */ 171 171 cyclic_buffer_t input_buffer; 172 172 /** The fibril mutex for synchronizing the access to the device. */ … … 190 190 } 191 191 192 /** Find out if there is some incom ing data available on the serial port.192 /** Find out if there is some incomming data available on the serial port. 193 193 * 194 194 * @param port The base address of the serial port device's ports. -
uspace/lib/c/generic/io/con_srv.c
raa2b32c r06b0211b 35 35 */ 36 36 #include <errno.h> 37 #include <io/cons_event.h>38 37 #include <ipc/console.h> 39 38 #include <stdlib.h> … … 41 40 42 41 #include <io/con_srv.h> 43 44 static int console_ev_encode(cons_event_t *event, ipc_call_t *call)45 {46 IPC_SET_ARG1(*call, event->type);47 48 switch (event->type) {49 case CEV_KEY:50 IPC_SET_ARG2(*call, event->ev.key.type);51 IPC_SET_ARG3(*call, event->ev.key.key);52 IPC_SET_ARG4(*call, event->ev.key.mods);53 IPC_SET_ARG5(*call, event->ev.key.c);54 break;55 case CEV_POS:56 IPC_SET_ARG2(*call, (event->ev.pos.pos_id << 16) | (event->ev.pos.type & 0xffff));57 IPC_SET_ARG3(*call, event->ev.pos.btn_num);58 IPC_SET_ARG4(*call, event->ev.pos.hpos);59 IPC_SET_ARG5(*call, event->ev.pos.vpos);60 break;61 default:62 return EIO;63 }64 65 return EOK;66 }67 42 68 43 static void con_read_srv(con_srv_t *srv, ipc_callid_t callid, … … 298 273 { 299 274 int rc; 300 cons_event_t event; 301 ipc_call_t result; 275 kbd_event_t event; 302 276 303 277 if (srv->srvs->ops->get_event == NULL) { … … 307 281 308 282 rc = srv->srvs->ops->get_event(srv, &event); 309 if (rc != EOK) { 310 async_answer_0(callid, rc); 311 return; 312 } 313 314 rc = console_ev_encode(&event, &result); 315 if (rc != EOK) { 316 async_answer_0(callid, rc); 317 return; 318 } 319 320 async_answer_5(callid, rc, IPC_GET_ARG1(result), IPC_GET_ARG2(result), 321 IPC_GET_ARG3(result), IPC_GET_ARG4(result), IPC_GET_ARG5(result)); 283 async_answer_4(callid, rc, event.type, event.key, event.mods, event.c); 322 284 } 323 285 -
uspace/lib/c/generic/io/console.c
raa2b32c r06b0211b 154 154 } 155 155 156 static int console_ev_decode(ipc_call_t *call, cons_event_t *event) 157 { 158 event->type = IPC_GET_ARG1(*call); 159 160 switch (event->type) { 161 case CEV_KEY: 162 event->ev.key.type = IPC_GET_ARG2(*call); 163 event->ev.key.key = IPC_GET_ARG3(*call); 164 event->ev.key.mods = IPC_GET_ARG4(*call); 165 event->ev.key.c = IPC_GET_ARG5(*call); 166 break; 167 case CEV_POS: 168 event->ev.pos.pos_id = IPC_GET_ARG2(*call) >> 16; 169 event->ev.pos.type = IPC_GET_ARG2(*call) & 0xffff; 170 event->ev.pos.btn_num = IPC_GET_ARG3(*call); 171 event->ev.pos.hpos = IPC_GET_ARG4(*call); 172 event->ev.pos.vpos = IPC_GET_ARG5(*call); 173 break; 174 default: 175 return EIO; 176 } 177 178 return EOK; 179 } 180 181 bool console_get_event(console_ctrl_t *ctrl, cons_event_t *event) 156 bool console_get_kbd_event(console_ctrl_t *ctrl, kbd_event_t *event) 182 157 { 183 158 if (ctrl->input_aid == 0) { 184 ipc_call_t result; 159 sysarg_t type; 160 sysarg_t key; 161 sysarg_t mods; 162 sysarg_t c; 185 163 186 164 async_exch_t *exch = async_exchange_begin(ctrl->input_sess); 187 aid_t aid = async_send_0(exch, CONSOLE_GET_EVENT, &result);165 int rc = async_req_0_4(exch, CONSOLE_GET_EVENT, &type, &key, &mods, &c); 188 166 async_exchange_end(exch); 189 190 sysarg_t rc;191 async_wait_for(aid, &rc);192 167 193 168 if (rc != EOK) { … … 196 171 } 197 172 198 rc = console_ev_decode(&result, event); 199 if (rc != EOK) { 200 errno = rc; 201 return false; 202 } 173 event->type = type; 174 event->key = key; 175 event->mods = mods; 176 event->c = c; 203 177 } else { 204 178 sysarg_t retval; … … 212 186 } 213 187 214 int rc = console_ev_decode(&ctrl->input_call, event); 215 if (rc != EOK) { 216 errno = rc; 217 return false; 218 } 188 event->type = IPC_GET_ARG1(ctrl->input_call); 189 event->key = IPC_GET_ARG2(ctrl->input_call); 190 event->mods = IPC_GET_ARG3(ctrl->input_call); 191 event->c = IPC_GET_ARG4(ctrl->input_call); 219 192 } 220 193 … … 222 195 } 223 196 224 bool console_get_ event_timeout(console_ctrl_t *ctrl, cons_event_t *event,197 bool console_get_kbd_event_timeout(console_ctrl_t *ctrl, kbd_event_t *event, 225 198 suseconds_t *timeout) 226 199 { … … 250 223 } 251 224 252 rc = console_ev_decode(&ctrl->input_call, event); 253 if (rc != EOK) { 254 errno = rc; 255 return false; 256 } 225 event->type = IPC_GET_ARG1(ctrl->input_call); 226 event->key = IPC_GET_ARG2(ctrl->input_call); 227 event->mods = IPC_GET_ARG3(ctrl->input_call); 228 event->c = IPC_GET_ARG4(ctrl->input_call); 257 229 258 230 /* Update timeout */ -
uspace/lib/c/include/io/con_srv.h
raa2b32c r06b0211b 41 41 #include <io/color.h> 42 42 #include <io/concaps.h> 43 #include <io/ cons_event.h>43 #include <io/kbd_event.h> 44 44 #include <io/pixel.h> 45 45 #include <io/style.h> … … 82 82 void (*set_rgb_color)(con_srv_t *, pixel_t, pixel_t); 83 83 void (*set_cursor_visibility)(con_srv_t *, bool); 84 int (*get_event)(con_srv_t *, cons_event_t *);84 int (*get_event)(con_srv_t *, kbd_event_t *); 85 85 } con_ops_t; 86 86 -
uspace/lib/c/include/io/console.h
raa2b32c r06b0211b 39 39 #include <io/concaps.h> 40 40 #include <io/kbd_event.h> 41 #include <io/cons_event.h>42 41 #include <io/keycode.h> 43 42 #include <async.h> … … 83 82 extern void console_cursor_visibility(console_ctrl_t *, bool); 84 83 extern int console_get_color_cap(console_ctrl_t *, sysarg_t *); 85 extern bool console_get_ event(console_ctrl_t *, cons_event_t *);86 extern bool console_get_ event_timeout(console_ctrl_t *, cons_event_t *,84 extern bool console_get_kbd_event(console_ctrl_t *, kbd_event_t *); 85 extern bool console_get_kbd_event_timeout(console_ctrl_t *, kbd_event_t *, 87 86 suseconds_t *); 88 87 -
uspace/lib/c/include/io/window.h
raa2b32c r06b0211b 40 40 #include <async.h> 41 41 #include <loc.h> 42 #include <io/kbd_event.h> 43 #include <io/pos_event.h> 42 #include <io/console.h> 43 44 typedef enum { 45 POS_UPDATE, 46 POS_PRESS, 47 POS_RELEASE 48 } pos_event_type_t; 49 50 typedef struct { 51 sysarg_t pos_id; 52 pos_event_type_t type; 53 sysarg_t btn_num; 54 sysarg_t hpos; 55 sysarg_t vpos; 56 } pos_event_t; 44 57 45 58 typedef struct { -
uspace/lib/clui/tinput.c
raa2b32c r06b0211b 45 45 #define LIN_TO_COL(ti, lpos) ((lpos) % ((ti)->con_cols)) 46 46 #define LIN_TO_ROW(ti, lpos) ((lpos) / ((ti)->con_cols)) 47 #define LIN_POS(ti, col, row) ((col) + (row) * (ti)->con_cols)48 47 49 48 /** Seek direction */ … … 381 380 } 382 381 383 tinput_post_seek(ti, shift_held);384 }385 386 static void tinput_seek_scrpos(tinput_t *ti, int col, int line, bool shift_held)387 {388 unsigned lpos;389 tinput_pre_seek(ti, shift_held);390 391 lpos = LIN_POS(ti, col, line);392 393 if (lpos > ti->text_coord)394 ti->pos = lpos - ti->text_coord;395 else396 ti->pos = 0;397 if (ti->pos > ti->nc)398 ti->pos = ti->nc;399 400 382 tinput_post_seek(ti, shift_held); 401 383 } … … 805 787 } 806 788 807 /** Handle key press event. */808 static void tinput_key_press(tinput_t *ti, kbd_event_t *kev)809 {810 if (kev->key == KC_LSHIFT)811 ti->lshift_held = true;812 if (kev->key == KC_RSHIFT)813 ti->rshift_held = true;814 815 if (((kev->mods & KM_CTRL) != 0) &&816 ((kev->mods & (KM_ALT | KM_SHIFT)) == 0))817 tinput_key_ctrl(ti, kev);818 819 if (((kev->mods & KM_SHIFT) != 0) &&820 ((kev->mods & (KM_CTRL | KM_ALT)) == 0))821 tinput_key_shift(ti, kev);822 823 if (((kev->mods & KM_CTRL) != 0) &&824 ((kev->mods & KM_SHIFT) != 0) &&825 ((kev->mods & KM_ALT) == 0))826 tinput_key_ctrl_shift(ti, kev);827 828 if ((kev->mods & (KM_CTRL | KM_ALT | KM_SHIFT)) == 0)829 tinput_key_unmod(ti, kev);830 831 if (kev->c >= ' ') {832 tinput_sel_delete(ti);833 tinput_insert_char(ti, kev->c);834 }835 }836 837 /** Handle key release event. */838 static void tinput_key_release(tinput_t *ti, kbd_event_t *kev)839 {840 if (kev->key == KC_LSHIFT)841 ti->lshift_held = false;842 if (kev->key == KC_RSHIFT)843 ti->rshift_held = false;844 }845 846 /** Position event */847 static void tinput_pos(tinput_t *ti, pos_event_t *ev)848 {849 if (ev->type == POS_PRESS) {850 tinput_seek_scrpos(ti, ev->hpos, ev->vpos,851 ti->lshift_held || ti->rshift_held);852 }853 }854 855 789 /** Read in one line of input. 856 790 * … … 882 816 console_flush(ti->console); 883 817 884 cons_event_t ev;885 if (!console_get_ event(ti->console, &ev))818 kbd_event_t ev; 819 if (!console_get_kbd_event(ti->console, &ev)) 886 820 return EIO; 887 821 888 switch (ev.type) { 889 case CEV_KEY: 890 if (ev.ev.key.type == KEY_PRESS) 891 tinput_key_press(ti, &ev.ev.key); 892 else 893 tinput_key_release(ti, &ev.ev.key); 894 break; 895 case CEV_POS: 896 tinput_pos(ti, &ev.ev.pos); 897 break; 822 if (ev.type != KEY_PRESS) 823 continue; 824 825 if (((ev.mods & KM_CTRL) != 0) && 826 ((ev.mods & (KM_ALT | KM_SHIFT)) == 0)) 827 tinput_key_ctrl(ti, &ev); 828 829 if (((ev.mods & KM_SHIFT) != 0) && 830 ((ev.mods & (KM_CTRL | KM_ALT)) == 0)) 831 tinput_key_shift(ti, &ev); 832 833 if (((ev.mods & KM_CTRL) != 0) && 834 ((ev.mods & KM_SHIFT) != 0) && 835 ((ev.mods & KM_ALT) == 0)) 836 tinput_key_ctrl_shift(ti, &ev); 837 838 if ((ev.mods & (KM_CTRL | KM_ALT | KM_SHIFT)) == 0) 839 tinput_key_unmod(ti, &ev); 840 841 if (ev.c >= ' ') { 842 tinput_sel_delete(ti); 843 tinput_insert_char(ti, ev.c); 898 844 } 899 845 } -
uspace/lib/clui/tinput.h
raa2b32c r06b0211b 146 146 /** @c true if user requested to abort interactive loop */ 147 147 bool exit_clui; 148 149 /** @c true if left shift key is currently held */150 bool lshift_held;151 152 /** @c true if right shift key is currently held */153 bool rshift_held;154 148 } tinput_t; 155 149 -
uspace/lib/gui/Makefile
raa2b32c r06b0211b 35 35 SOURCES = \ 36 36 button.c \ 37 canvas.c \38 37 connection.c \ 39 38 grid.c \ -
uspace/lib/gui/grid.c
raa2b32c r06b0211b 1 1 /* 2 2 * Copyright (c) 2012 Petr Koupy 3 * Copyright (c) 2013 Martin Decky4 3 * All rights reserved. 5 4 * … … 39 38 #include <malloc.h> 40 39 #include <surface.h> 40 41 41 #include "window.h" 42 42 #include "grid.h" 43 43 44 typedef struct { 45 sysarg_t min; 46 sysarg_t max; 47 sysarg_t val; 48 } constraints_t; 49 50 static void paint_internal(widget_t *widget) 51 { 52 grid_t *grid = (grid_t *) widget; 53 44 static void paint_internal(widget_t *w) 45 { 46 grid_t *grid = (grid_t *) w; 47 54 48 surface_t *surface = window_claim(grid->widget.window); 55 49 if (!surface) { 56 50 window_yield(grid->widget.window); 57 return; 58 } 59 60 // FIXME: Replace with (accelerated) rectangle fill 61 for (sysarg_t y = widget->vpos; y < widget->vpos + widget->height; y++) { 62 for (sysarg_t x = widget->hpos; x < widget->hpos + widget->width; x++) 51 } 52 53 for (sysarg_t y = w->vpos; y < w->vpos + w->height; ++y) { 54 for (sysarg_t x = w->hpos; x < w->hpos + w->width; ++x) { 63 55 surface_put_pixel(surface, x, y, grid->background); 64 } 65 56 } 57 } 58 66 59 window_yield(grid->widget.window); 67 60 } 68 61 69 static grid_cell_t *grid_cell_at(grid_t *grid, size_t col, size_t row)70 { 71 if ( (col < grid->cols) && (row < grid->rows))62 static widget_t **widget_at(grid_t *grid, size_t row, size_t col) 63 { 64 if (row < grid->rows && col < grid->cols) { 72 65 return grid->layout + (row * grid->cols + col); 73 74 return NULL; 75 } 76 77 static grid_cell_t *grid_coords_at(grid_t *grid, sysarg_t hpos, sysarg_t vpos) 78 { 79 for (size_t c = 0; c < grid->cols; c++) { 80 for (size_t r = 0; r < grid->rows; r++) { 81 grid_cell_t *cell = grid_cell_at(grid, c, r); 82 if (cell) { 83 widget_t *widget = cell->widget; 84 85 if ((widget) && (hpos >= widget->hpos) && 86 (vpos >= widget->vpos) && 87 (hpos < widget->hpos + widget->width) && 88 (vpos < widget->vpos + widget->height)) 89 return cell; 90 } 91 } 92 } 93 94 return NULL; 66 } else { 67 return NULL; 68 } 95 69 } 96 70 … … 104 78 { 105 79 grid_t *grid = (grid_t *) widget; 106 80 107 81 deinit_grid(grid); 82 108 83 free(grid); 109 84 } … … 111 86 static void grid_reconfigure(widget_t *widget) 112 87 { 113 /* No-op */ 114 } 115 116 static void adjust_constraints(constraints_t *cons, size_t run, 117 sysarg_t dim_min, sysarg_t dim_max) 118 { 119 assert(run > 0); 120 121 sysarg_t dim_min_part = dim_min / run; 122 sysarg_t dim_min_rem = dim_min % run; 123 124 sysarg_t dim_max_part = dim_max / run; 125 sysarg_t dim_max_rem = dim_max % run; 126 127 for (size_t i = 0; i < run; i++) { 128 sysarg_t dim_min_cur = dim_min_part; 129 sysarg_t dim_max_cur = dim_max_part; 130 131 if (i == run - 1) { 132 dim_min_cur += dim_min_rem; 133 dim_max_cur += dim_max_rem; 134 } 135 136 /* 137 * We want the strongest constraint 138 * for the minimum. 139 */ 140 if (cons[i].min < dim_min_cur) 141 cons[i].min = dim_min_cur; 142 143 /* 144 * The comparison is correct, we want 145 * the weakest constraint for the 146 * maximum. 147 */ 148 if (cons[i].max < dim_max_cur) 149 cons[i].max = dim_max_cur; 150 } 151 } 152 153 static void solve_constraints(constraints_t *cons, size_t run, sysarg_t sum) 154 { 155 /* Initial solution */ 156 sysarg_t cur_sum = 0; 157 158 for (size_t i = 0; i < run; i++) { 159 cons[i].val = cons[i].min; 160 cur_sum += cons[i].val; 161 } 162 163 /* Iterative improvement */ 164 while (cur_sum < sum) { 165 sysarg_t delta = (sum - cur_sum) / run; 166 if (delta == 0) 167 break; 168 169 cur_sum = 0; 170 171 for (size_t i = 0; i < run; i++) { 172 if (cons[i].val + delta < cons[i].max) 173 cons[i].val += delta; 174 175 cur_sum += cons[i].val; 176 } 177 } 88 /* no-op */ 178 89 } 179 90 … … 182 93 { 183 94 grid_t *grid = (grid_t *) widget; 184 95 185 96 widget_modify(widget, hpos, vpos, width, height); 186 97 paint_internal(widget); 187 188 /* Compute column widths */ 189 constraints_t *widths = 190 (constraints_t *) calloc(grid->cols, sizeof(constraints_t)); 191 if (widths) { 192 /* Constrain widths */ 193 for (size_t c = 0; c < grid->cols; c++) { 194 widths[c].min = 0; 195 196 for (size_t r = 0; r < grid->rows; r++) { 197 grid_cell_t *cell = grid_cell_at(grid, c, r); 198 if (!cell) 199 continue; 200 201 widget_t *widget = cell->widget; 202 if (widget) 203 adjust_constraints(&widths[c], cell->cols, 204 widget->width_min, widget->width_max); 205 } 206 } 207 208 solve_constraints(widths, grid->cols, width); 209 } 210 211 /* Compute row heights */ 212 constraints_t *heights = 213 (constraints_t *) calloc(grid->rows, sizeof(constraints_t)); 214 if (heights) { 215 /* Constrain heights */ 216 for (size_t r = 0; r < grid->rows; r++) { 217 heights[r].min = 0; 218 219 for (size_t c = 0; c < grid->cols; c++) { 220 grid_cell_t *cell = grid_cell_at(grid, c, r); 221 if (!cell) 222 continue; 223 224 widget_t *widget = cell->widget; 225 if (widget) { 226 adjust_constraints(&heights[r], cell->rows, 227 widget->height_min, widget->height_max); 98 99 sysarg_t cell_width = width / grid->cols; 100 sysarg_t cell_height = height / grid->rows; 101 102 list_foreach(widget->children, link) { 103 widget_t *child = list_get_instance(link, widget_t, link); 104 105 sysarg_t widget_hpos = 0; 106 sysarg_t widget_vpos = 0; 107 sysarg_t widget_width = 0; 108 sysarg_t widget_height = 0; 109 110 size_t r = 0; 111 size_t c = 0; 112 for (r = 0; r < grid->rows; ++r) { 113 bool found = false; 114 for (c = 0; c < grid->cols; ++c) { 115 widget_t **cell = widget_at(grid, r, c); 116 if (cell && *cell == child) { 117 found = true; 118 break; 228 119 } 229 120 } 230 } 231 232 solve_constraints(heights, grid->rows, height); 233 } 234 235 /* Rearrange widgets */ 236 if ((widths) && (heights)) { 237 sysarg_t cur_vpos = vpos; 238 239 for (size_t r = 0; r < grid->rows; r++) { 240 sysarg_t cur_hpos = hpos; 241 242 for (size_t c = 0; c < grid->cols; c++) { 243 grid_cell_t *cell = grid_cell_at(grid, c, r); 244 if (!cell) 245 continue; 246 247 widget_t *widget = cell->widget; 248 if (widget) { 249 sysarg_t cur_width = 0; 250 sysarg_t cur_height = 0; 251 252 for (size_t cd = 0; cd < cell->cols; cd++) 253 cur_width += widths[c + cd].val; 254 255 for (size_t rd = 0; rd < cell->rows; rd++) 256 cur_height += heights[r + rd].val; 257 258 if ((cur_width > 0) && (cur_height > 0)) { 259 sysarg_t wwidth = cur_width; 260 sysarg_t wheight = cur_height; 261 262 /* 263 * Make sure the widget is respects its 264 * maximal constrains. 265 */ 266 267 if ((widget->width_max > 0) && 268 (wwidth > widget->width_max)) 269 wwidth = widget->width_max; 270 271 if ((widget->height_max > 0) && 272 (wheight > widget->height_max)) 273 wheight = widget->height_max; 274 275 widget->rearrange(widget, cur_hpos, cur_vpos, 276 wwidth, wheight); 277 } 278 279 280 } 281 282 cur_hpos += widths[c].val; 283 } 284 285 cur_vpos += heights[r].val; 286 } 287 } 288 289 if (widths) 290 free(widths); 291 292 if (heights) 293 free(heights); 121 if (found) { 122 break; 123 } 124 } 125 126 widget_hpos = cell_width * c + hpos; 127 widget_vpos = cell_height * r + vpos; 128 129 for (size_t _c = c; _c < grid->cols; ++_c) { 130 widget_t **cell = widget_at(grid, r, _c); 131 if (cell && *cell == child) { 132 widget_width += cell_width; 133 } else { 134 break; 135 } 136 } 137 138 for (size_t _r = r; _r < grid->rows; ++_r) { 139 widget_t **cell = widget_at(grid, _r, c); 140 if (cell && *cell == child) { 141 widget_height += cell_height; 142 } else { 143 break; 144 } 145 } 146 147 if (widget_width > 0 && widget_height > 0) { 148 child->rearrange(child, 149 widget_hpos, widget_vpos, widget_width, widget_height); 150 } 151 } 294 152 } 295 153 … … 297 155 { 298 156 paint_internal(widget); 299 300 157 list_foreach(widget->children, link) { 301 158 widget_t *child = list_get_instance(link, widget_t, link); 302 159 child->repaint(child); 303 160 } 304 305 161 window_damage(widget->window); 306 162 } … … 308 164 static void grid_handle_keyboard_event(widget_t *widget, kbd_event_t event) 309 165 { 310 /* No-op */166 /* no-op */ 311 167 } 312 168 … … 314 170 { 315 171 grid_t *grid = (grid_t *) widget; 316 317 grid_cell_t *cell = grid_coords_at(grid, event.hpos, event.vpos); 318 if ((cell) && (cell->widget)) 319 cell->widget->handle_position_event(cell->widget, event); 320 } 321 322 static bool grid_add(struct grid *grid, widget_t *widget, size_t col, 323 size_t row, size_t cols, size_t rows) 324 { 325 if ((cols == 0) || (rows == 0) || (col + cols > grid->cols) || 326 (row + rows > grid->rows)) 327 return false; 328 329 grid_cell_t *cell = grid_cell_at(grid, col, row); 330 if (!cell) 331 return false; 332 333 /* 334 * Check whether the cell is not occupied by an 335 * extension of a different cell. 336 */ 337 if ((!cell->widget) && (cell->cols > 0) && (cell->rows > 0)) 338 return false; 339 172 173 if ((widget->height / grid->rows) == 0) { 174 return; 175 } 176 if ((widget->width / grid->cols) == 0) { 177 return; 178 } 179 180 sysarg_t row = (event.vpos - widget->vpos) / (widget->height / grid->rows); 181 sysarg_t col = (event.hpos - widget->hpos) / (widget->width / grid->cols); 182 183 widget_t **cell = widget_at(grid, row, col); 184 if (cell && *cell) { 185 (*cell)->handle_position_event(*cell, event); 186 } 187 } 188 189 static void grid_add(grid_t *grid, widget_t *widget, 190 size_t row, size_t col, size_t rows, size_t cols) 191 { 192 assert(row + rows <= grid->rows); 193 assert(col + cols <= grid->cols); 194 340 195 widget->parent = (widget_t *) grid; 341 342 196 list_append(&widget->link, &grid->widget.children); 343 197 widget->window = grid->widget.window; 344 345 /* Mark cells in layout */ 346 for (size_t r = row; r < row + rows; r++) { 347 for (size_t c = col; c < col + cols; c++) { 348 if ((r == row) && (c == col)) { 349 cell->widget = widget; 350 cell->cols = cols; 351 cell->rows = rows; 352 } else { 353 grid_cell_t *extension = grid_cell_at(grid, c, r); 354 if (extension) { 355 extension->widget = NULL; 356 extension->cols = 1; 357 extension->rows = 1; 358 } 359 } 360 } 361 } 362 363 return true; 364 } 365 366 bool init_grid(grid_t *grid, widget_t *parent, size_t cols, size_t rows, 367 pixel_t background) 368 { 369 if ((cols == 0) || (rows == 0)) 198 199 for (size_t r = row; r < row + rows; ++r) { 200 for (size_t c = col; c < col + cols; ++c) { 201 widget_t **cell = widget_at(grid, r, c); 202 if (cell) { 203 *cell = widget; 204 } 205 } 206 } 207 } 208 209 bool init_grid(grid_t *grid, 210 widget_t *parent, size_t rows, size_t cols, pixel_t background) 211 { 212 assert(rows > 0); 213 assert(cols > 0); 214 215 widget_t **layout = (widget_t **) malloc(rows * cols * sizeof(widget_t *)); 216 if (!layout) { 370 217 return false; 371 372 grid->layout = 373 (grid_cell_t *) calloc(cols * rows, sizeof(grid_cell_t)); 374 if (!grid->layout) 375 return false; 376 377 memset(grid->layout, 0, cols * rows * sizeof(grid_cell_t)); 378 218 } 219 memset(layout, 0, rows * cols * sizeof(widget_t *)); 220 379 221 widget_init(&grid->widget, parent); 380 222 381 223 grid->widget.destroy = grid_destroy; 382 224 grid->widget.reconfigure = grid_reconfigure; … … 385 227 grid->widget.handle_keyboard_event = grid_handle_keyboard_event; 386 228 grid->widget.handle_position_event = grid_handle_position_event; 387 229 388 230 grid->add = grid_add; 389 231 grid->background = background; 232 grid->rows = rows; 390 233 grid->cols = cols; 391 grid-> rows = rows;392 234 grid->layout = layout; 235 393 236 return true; 394 237 } 395 238 396 grid_t *create_grid(widget_t *parent, size_t cols, size_t rows, pixel_t background)239 grid_t *create_grid(widget_t *parent, size_t rows, size_t cols, pixel_t background) 397 240 { 398 241 grid_t *grid = (grid_t *) malloc(sizeof(grid_t)); 399 if (!grid) 242 if (!grid) { 400 243 return NULL; 401 402 if (init_grid(grid, parent, cols, rows, background)) 244 } 245 246 if (init_grid(grid, parent, rows, cols, background)) { 403 247 return grid; 404 405 free(grid); 406 return NULL; 248 } else { 249 free(grid); 250 return NULL; 251 } 407 252 } 408 253 -
uspace/lib/gui/grid.h
raa2b32c r06b0211b 39 39 #include <sys/types.h> 40 40 #include <io/pixel.h> 41 41 42 #include "widget.h" 42 43 43 typedef struct { 44 widget_t *widget; 45 size_t cols; 46 size_t rows; 47 } grid_cell_t; 44 struct grid; 45 typedef struct grid grid_t; 48 46 49 47 typedef struct grid { 50 48 widget_t widget; 51 49 pixel_t background; 50 size_t rows; 52 51 size_t cols; 53 size_t rows; 54 grid_cell_t *layout; 55 bool (*add)(struct grid *, widget_t *, size_t, size_t, size_t, size_t); 52 widget_t **layout; 53 void (*add)(grid_t *, widget_t *, size_t, size_t, size_t, size_t); 56 54 } grid_t; 57 55 -
uspace/lib/gui/terminal.c
raa2b32c r06b0211b 77 77 static void term_set_rgb_color(con_srv_t *, pixel_t, pixel_t); 78 78 static void term_set_cursor_visibility(con_srv_t *, bool); 79 static int term_get_event(con_srv_t *, cons_event_t *);79 static int term_get_event(con_srv_t *, kbd_event_t *); 80 80 81 81 static con_ops_t con_ops = { … … 420 420 if (pos < size) { 421 421 link_t *link = prodcons_consume(&term->input_pc); 422 cons_event_t *event = list_get_instance(link, cons_event_t, link);422 kbd_event_t *event = list_get_instance(link, kbd_event_t, link); 423 423 424 424 /* Accept key presses of printable chars only. */ 425 if (event->type == CEV_KEY && event->ev.key.type == KEY_PRESS && 426 event->ev.key.c != 0) { 425 if ((event->type == KEY_PRESS) && (event->c != 0)) { 427 426 wchar_t tmp[2] = { 428 event-> ev.key.c,427 event->c, 429 428 0 430 429 }; … … 580 579 } 581 580 582 static int term_get_event(con_srv_t *srv, cons_event_t *event)581 static int term_get_event(con_srv_t *srv, kbd_event_t *event) 583 582 { 584 583 terminal_t *term = srv_to_terminal(srv); 585 584 link_t *link = prodcons_consume(&term->input_pc); 586 cons_event_t *ev = list_get_instance(link, cons_event_t, link);587 588 *event = * ev;589 free( ev);585 kbd_event_t *kevent = list_get_instance(link, kbd_event_t, link); 586 587 *event = *kevent; 588 free(kevent); 590 589 return EOK; 591 590 } … … 635 634 } 636 635 637 static void terminal_queue_cons_event(terminal_t *term, cons_event_t *ev) 638 { 636 static void terminal_handle_keyboard_event(widget_t *widget, 637 kbd_event_t kbd_event) 638 { 639 terminal_t *term = (terminal_t *) widget; 640 639 641 /* Got key press/release event */ 640 cons_event_t *event =641 ( cons_event_t *) malloc(sizeof(cons_event_t));642 kbd_event_t *event = 643 (kbd_event_t *) malloc(sizeof(kbd_event_t)); 642 644 if (event == NULL) 643 645 return; 644 646 645 *event = *ev;646 647 link_initialize(&event->link); 648 event->type = kbd_event.type; 649 event->key = kbd_event.key; 650 event->mods = kbd_event.mods; 651 event->c = kbd_event.c; 647 652 648 653 prodcons_produce(&term->input_pc, &event->link); 649 654 } 650 655 651 /* Got key press/release event */ 652 static void terminal_handle_keyboard_event(widget_t *widget, 653 kbd_event_t kbd_event) 654 { 655 terminal_t *term = (terminal_t *) widget; 656 cons_event_t event; 657 658 event.type = CEV_KEY; 659 event.ev.key = kbd_event; 660 661 terminal_queue_cons_event(term, &event); 662 } 663 664 static void terminal_handle_position_event(widget_t *widget, pos_event_t pos_event) 665 { 666 cons_event_t event; 667 terminal_t *term = (terminal_t *) widget; 668 sysarg_t sx = term->widget.hpos; 669 sysarg_t sy = term->widget.vpos; 670 671 if (pos_event.type == POS_PRESS) { 672 event.type = CEV_POS; 673 event.ev.pos.type = pos_event.type; 674 event.ev.pos.pos_id = pos_event.pos_id; 675 event.ev.pos.btn_num = pos_event.btn_num; 676 677 event.ev.pos.hpos = (pos_event.hpos - sx) / FONT_WIDTH; 678 event.ev.pos.vpos = (pos_event.vpos - sy) / FONT_SCANLINES; 679 terminal_queue_cons_event(term, &event); 680 } 656 static void terminal_handle_position_event(widget_t *widget, pos_event_t event) 657 { 658 /* 659 * Mouse events are ignored so far. 660 * There is no consumer for it. 661 */ 681 662 } 682 663 -
uspace/lib/gui/window.c
raa2b32c r06b0211b 424 424 425 425 while (!list_empty(&win->events.list)) { 426 window_event_t *event = (window_event_t *) list_first(&win->events.list); 427 list_remove(&event->link); 428 free(event); 426 list_remove(list_first(&win->events.list)); 429 427 } 430 428 -
uspace/srv/hid/compositor/Makefile
raa2b32c r06b0211b 38 38 39 39 IMAGES = \ 40 gfx/helenos.tga \ 40 41 gfx/nameic.tga 41 42 -
uspace/srv/hid/compositor/compositor.c
raa2b32c r06b0211b 90 90 typedef struct { 91 91 link_t link; 92 atomic_t ref_cnt;93 92 service_id_t in_dsid; 94 93 service_id_t out_dsid; … … 139 138 } viewport_t; 140 139 141 static desktop_rect_t viewport_bound_rect;142 140 static FIBRIL_MUTEX_INITIALIZE(viewport_list_mtx); 143 141 static LIST_INITIALIZE(viewport_list); … … 217 215 218 216 link_initialize(&win->link); 219 atomic_set(&win->ref_cnt, 0);220 217 prodcons_initialize(&win->queue); 221 218 transform_identity(&win->transform); … … 235 232 static void window_destroy(window_t *win) 236 233 { 237 if (win && atomic_get(&win->ref_cnt) == 0) { 238 while (!list_empty(&win->queue.list)) { 239 window_event_t *event = (window_event_t *) list_first(&win->queue.list); 240 list_remove(&event->link); 241 free(event); 242 } 243 234 if (win) { 244 235 if (win->surface) { 245 236 surface_destroy(win->surface); … … 319 310 } 320 311 321 static void comp_restrict_pointers(void)322 {323 fibril_mutex_lock(&viewport_list_mtx);324 325 sysarg_t x_res = coord_origin;326 sysarg_t y_res = coord_origin;327 sysarg_t w_res = 0;328 sysarg_t h_res = 0;329 330 if (!list_empty(&viewport_list)) {331 viewport_t *vp = (viewport_t *) list_first(&viewport_list);332 x_res = vp->pos.x;333 y_res = vp->pos.y;334 surface_get_resolution(vp->surface, &w_res, &h_res);335 }336 337 list_foreach(viewport_list, link) {338 viewport_t *vp = list_get_instance(link, viewport_t, link);339 sysarg_t w_vp, h_vp;340 surface_get_resolution(vp->surface, &w_vp, &h_vp);341 rectangle_union(342 x_res, y_res, w_res, h_res,343 vp->pos.x, vp->pos.y, w_vp, h_vp,344 &x_res, &y_res, &w_res, &h_res);345 }346 347 viewport_bound_rect.x = x_res;348 viewport_bound_rect.y = y_res;349 viewport_bound_rect.w = w_res;350 viewport_bound_rect.h = h_res;351 352 fibril_mutex_unlock(&viewport_list_mtx);353 354 fibril_mutex_lock(&pointer_list_mtx);355 356 list_foreach(pointer_list, link) {357 pointer_t *ptr = list_get_instance(link, pointer_t, link);358 ptr->pos.x = ptr->pos.x > viewport_bound_rect.x ? ptr->pos.x : viewport_bound_rect.x;359 ptr->pos.y = ptr->pos.y > viewport_bound_rect.y ? ptr->pos.y : viewport_bound_rect.y;360 ptr->pos.x = ptr->pos.x < viewport_bound_rect.x + viewport_bound_rect.w ?361 ptr->pos.x : viewport_bound_rect.x + viewport_bound_rect.w;362 ptr->pos.y = ptr->pos.y < viewport_bound_rect.y + viewport_bound_rect.h ?363 ptr->pos.y : viewport_bound_rect.y + viewport_bound_rect.h;364 }365 366 fibril_mutex_unlock(&pointer_list_mtx);367 }368 369 312 static void comp_damage(sysarg_t x_dmg_glob, sysarg_t y_dmg_glob, 370 313 sysarg_t w_dmg_glob, sysarg_t h_dmg_glob) … … 752 695 } 753 696 754 loc_service_unregister(win->in_dsid);755 loc_service_unregister(win->out_dsid);756 757 /* In case the client was killed, input fibril of the window might be758 * still blocked on the condition within comp_window_get_event. */759 window_event_t *event_dummy = (window_event_t *) malloc(sizeof(window_event_t));760 if (event_dummy) {761 link_initialize(&event_dummy->link);762 prodcons_produce(&win->queue, &event_dummy->link);763 }764 765 697 /* Calculate damage. */ 766 698 sysarg_t x = 0; … … 774 706 } 775 707 708 /* Release window resources. */ 709 loc_service_unregister(win->in_dsid); 710 loc_service_unregister(win->out_dsid); 711 while (!list_empty(&win->queue.list)) { 712 list_remove(list_first(&win->queue.list)); 713 } 714 window_destroy(win); 715 776 716 comp_damage(x, y, width, height); 777 717 … … 873 813 874 814 if (win) { 875 atomic_inc(&win->ref_cnt);876 815 async_answer_0(iid, EOK); 877 816 } else { … … 886 825 887 826 if (!IPC_GET_IMETHOD(call)) { 888 async_answer_0(callid, EOK); 889 atomic_dec(&win->ref_cnt); 890 window_destroy(win); 827 async_answer_0(callid, EINVAL); 891 828 return; 892 829 } … … 905 842 906 843 if (!IPC_GET_IMETHOD(call)) { 907 comp_window_close(win, callid, &call); 908 atomic_dec(&win->ref_cnt); 909 window_destroy(win); 844 async_answer_0(callid, EINVAL); 910 845 return; 911 846 } … … 922 857 break; 923 858 case WINDOW_CLOSE: 924 /* Postpone the closing until the phone is hung up to cover 925 * the case when the client is killed abruptly. */ 926 async_answer_0(callid, EOK); 859 comp_window_close(win, callid, &call); 927 860 break; 928 861 case WINDOW_CLOSE_REQUEST: … … 978 911 async_answer_0(iid, EOK); 979 912 980 comp_restrict_pointers();981 913 comp_damage(0, 0, UINT32_MAX, UINT32_MAX); 982 914 } … … 1024 956 fibril_mutex_unlock(&viewport_list_mtx); 1025 957 async_answer_0(iid, EOK); 1026 1027 comp_restrict_pointers();1028 comp_damage(0, 0, UINT32_MAX, UINT32_MAX);1029 958 } 1030 959 } … … 1462 1391 surface_get_resolution(pointer->cursor.states[pointer->state], 1463 1392 &cursor_width, &cursor_height); 1464 if (pointer->pos.x + dx < viewport_bound_rect.x) {1465 dx = -1 * (pointer->pos.x - viewport_bound_rect.x);1466 }1467 if (pointer->pos.y + dy < viewport_bound_rect.y) {1468 dy = -1 * (pointer->pos.y - viewport_bound_rect.y);1469 }1470 if (pointer->pos.x + dx > viewport_bound_rect.x + viewport_bound_rect.w) {1471 dx = (viewport_bound_rect.x + viewport_bound_rect.w - pointer->pos.x);1472 }1473 if (pointer->pos.y + dy > viewport_bound_rect.y + viewport_bound_rect.h) {1474 dy = (viewport_bound_rect.y + viewport_bound_rect.h - pointer->pos.y);1475 }1476 1393 pointer->pos.x += dx; 1477 1394 pointer->pos.y += dy; … … 1993 1910 fibril_mutex_unlock(&viewport_list_mtx); 1994 1911 1995 comp_restrict_pointers();1996 1912 comp_damage(x, y, width, height); 1997 1913 } else { … … 2046 1962 } 2047 1963 list_prepend(&blue_win->link, &window_list); 2048 1964 1965 window_t *helenos_win = window_create(0, 0); 1966 helenos_win->surface = decode_tga((void *) helenos_tga, helenos_tga_size, 0); 1967 list_prepend(&helenos_win->link, &window_list); 1968 2049 1969 window_t *nameic_win = window_create(0, 0); 2050 1970 nameic_win->surface = decode_tga((void *) nameic_tga, nameic_tga_size, 0); … … 2206 2126 return -1; 2207 2127 } 2208 2209 comp_restrict_pointers(); 2128 2210 2129 comp_damage(0, 0, UINT32_MAX, UINT32_MAX); 2211 2130 -
uspace/srv/hid/console/console.c
raa2b32c r06b0211b 129 129 static void cons_set_rgb_color(con_srv_t *, pixel_t, pixel_t); 130 130 static void cons_set_cursor_visibility(con_srv_t *, bool); 131 static int cons_get_event(con_srv_t *, cons_event_t *);131 static int cons_get_event(con_srv_t *, kbd_event_t *); 132 132 133 133 static con_ops_t con_ops = { … … 490 490 } 491 491 492 static int cons_get_event(con_srv_t *srv, cons_event_t *event)492 static int cons_get_event(con_srv_t *srv, kbd_event_t *event) 493 493 { 494 494 console_t *cons = srv_to_console(srv); … … 496 496 kbd_event_t *kevent = list_get_instance(link, kbd_event_t, link); 497 497 498 event->type = CEV_KEY; 499 event->ev.key = *kevent; 498 *event = *kevent; 500 499 free(kevent); 501 500 return EOK; -
uspace/srv/hid/remcons/remcons.c
raa2b32c r06b0211b 80 80 static int remcons_get_size(con_srv_t *, sysarg_t *, sysarg_t *); 81 81 static int remcons_get_color_cap(con_srv_t *, console_caps_t *); 82 static int remcons_get_event(con_srv_t *, cons_event_t *);82 static int remcons_get_event(con_srv_t *, kbd_event_t *); 83 83 84 84 static con_ops_t con_ops = { … … 185 185 } 186 186 187 static int remcons_get_event(con_srv_t *srv, cons_event_t *event) 188 { 189 telnet_user_t *user = srv_to_user(srv); 190 kbd_event_t kevent; 187 static int remcons_get_event(con_srv_t *srv, kbd_event_t *event) 188 { 189 telnet_user_t *user = srv_to_user(srv); 191 190 int rc; 192 191 193 rc = telnet_user_get_next_keyboard_event(user, &kevent);192 rc = telnet_user_get_next_keyboard_event(user, event); 194 193 if (rc != EOK) { 195 194 /* XXX What? */ … … 197 196 return EOK; 198 197 } 199 200 event->type = CEV_KEY;201 event->ev.key = kevent;202 198 203 199 return EOK; -
uspace/srv/net/ethip/ethip.c
raa2b32c r06b0211b 221 221 case ETYPE_IP: 222 222 log_msg(LOG_DEFAULT, LVL_DEBUG, " - construct SDU"); 223 sdu.lsrc.ipv4 = 0;224 sdu.ldest.ipv4 = 0;223 sdu.lsrc.ipv4 = (192 << 24) | (168 << 16) | (0 << 8) | 1; 224 sdu.ldest.ipv4 = (192 << 24) | (168 << 16) | (0 << 8) | 4; 225 225 sdu.data = frame.data; 226 226 sdu.size = frame.size; -
uspace/srv/ns/task.c
raa2b32c r06b0211b 208 208 sysarg_t retval; 209 209 task_exit_t texit; 210 bool remove = false;211 210 212 211 ht_link_t *link = hash_table_find(&task_hash_table, &id); … … 236 235 } 237 236 238 remove = true;237 hash_table_remove_item(&task_hash_table, link); 239 238 retval = EOK; 240 239 … … 244 243 ipc_answer_2(callid, retval, texit, ht->retval); 245 244 } 246 if (remove)247 hash_table_remove_item(&task_hash_table, link);248 245 } 249 246
Note:
See TracChangeset
for help on using the changeset viewer.