Subversion Repositories HelenOS

Rev

Rev 3386 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3386 Rev 4153
Line 79... Line 79...
79
 
79
 
80
static int active_console = 0;
80
static int active_console = 0;
81
 
81
 
82
static void vp_switch(int vp)
82
static void vp_switch(int vp)
83
{
83
{
84
    async_msg_1(fbphone,FB_VIEWPORT_SWITCH, vp);
84
    async_msg_1(fbphone, FB_VIEWPORT_SWITCH, vp);
85
}
85
}
86
 
86
 
87
/** Create view port */
87
/** Create view port */
88
static int vp_create(unsigned int x, unsigned int y, unsigned int width,
88
static int vp_create(unsigned int x, unsigned int y, unsigned int width,
89
    unsigned int height)
89
    unsigned int height)
Line 95... Line 95...
95
static void clear(void)
95
static void clear(void)
96
{
96
{
97
    async_msg_0(fbphone, FB_CLEAR);
97
    async_msg_0(fbphone, FB_CLEAR);
98
}
98
}
99
 
99
 
100
static void set_style(int fgcolor, int bgcolor)
100
static void set_rgb_color(int fgcolor, int bgcolor)
101
{
101
{
102
    async_msg_2(fbphone, FB_SET_STYLE, fgcolor, bgcolor);
102
    async_msg_2(fbphone, FB_SET_RGB_COLOR, fgcolor, bgcolor);
103
}
103
}
104
 
104
 
105
/** Transparent putchar */
105
/** Transparent putchar */
106
static void tran_putch(char c, int row, int col)
106
static void tran_putch(char c, int row, int col)
107
{
107
{
108
    async_msg_3(fbphone, FB_TRANS_PUTCHAR, c, row, col);
108
    async_msg_3(fbphone, FB_PUTCHAR, c, row, col);
109
}
109
}
110
 
110
 
111
/** Redraw the button showing state of a given console */
111
/** Redraw the button showing state of a given console */
112
static void redraw_state(int consnum)
112
static void redraw_state(int consnum)
113
{
113
{
Line 187... Line 187...
187
        return;
187
        return;
188
    if (active_console == consnum)
188
    if (active_console == consnum)
189
        console_state[consnum] = CONS_DISCONNECTED_SEL;
189
        console_state[consnum] = CONS_DISCONNECTED_SEL;
190
    else
190
    else
191
        console_state[consnum] = CONS_DISCONNECTED;
191
        console_state[consnum] = CONS_DISCONNECTED;
192
 
192
   
193
    if (active_console == KERNEL_CONSOLE)
193
    if (active_console == KERNEL_CONSOLE)
194
        return;
194
        return;
195
 
195
   
196
    redraw_state(consnum);
196
    redraw_state(consnum);
197
    vp_switch(console_vp);
197
    vp_switch(console_vp);
198
}
198
}
199
 
199
 
200
/** Notification function called on console connect */
200
/** Notification function called on console connect */
Line 215... Line 215...
215
}
215
}
216
 
216
 
217
/** Change to kernel console */
217
/** Change to kernel console */
218
void gcons_in_kernel(void)
218
void gcons_in_kernel(void)
219
{
219
{
220
    if (console_state[active_console] == CONS_DISCONNECTED_SEL)
-
 
221
        console_state[active_console] = CONS_DISCONNECTED;
-
 
222
    else
-
 
223
        console_state[active_console] = CONS_IDLE;
-
 
224
    redraw_state(active_console);
-
 
225
 
-
 
226
    if (animation != -1)
220
    if (animation != -1)
227
        async_msg_1(fbphone, FB_ANIM_STOP, animation);
221
        async_msg_1(fbphone, FB_ANIM_STOP, animation);
228
 
222
   
229
    active_console = KERNEL_CONSOLE; /* Set to kernel console */
223
    active_console = KERNEL_CONSOLE;
230
    vp_switch(0);
224
    vp_switch(0);
231
}
225
}
232
 
226
 
233
/** Return x, where left <= x <= right && |a-x|==min(|a-x|) is smallest */
227
/** Return x, where left <= x <= right && |a-x|==min(|a-x|) is smallest */
234
static inline int limit(int a,int left, int right)
228
static inline int limit(int a,int left, int right)
Line 248... Line 242...
248
 * @param dx Delta X of mouse move
242
 * @param dx Delta X of mouse move
249
 * @param dy Delta Y of mouse move
243
 * @param dy Delta Y of mouse move
250
 */
244
 */
251
void gcons_mouse_move(int dx, int dy)
245
void gcons_mouse_move(int dx, int dy)
252
{
246
{
253
    mouse_x = limit(mouse_x+dx, 0, xres);
247
    mouse_x = limit(mouse_x + dx, 0, xres);
254
    mouse_y = limit(mouse_y+dy, 0, yres);
248
    mouse_y = limit(mouse_y + dy, 0, yres);
255
 
249
 
256
    async_msg_2(fbphone, FB_POINTER_MOVE, mouse_x, mouse_y);
250
    async_msg_2(fbphone, FB_POINTER_MOVE, mouse_x, mouse_y);
257
}
251
}
258
 
252
 
259
static int gcons_find_conbut(int x, int y)
253
static int gcons_find_conbut(int x, int y)
260
{
254
{
261
    int status_start = STATUS_START + (xres - 800) / 2;;
255
    int status_start = STATUS_START + (xres - 800) / 2;
262
 
256
 
263
    if (y < STATUS_TOP || y >= STATUS_TOP + STATUS_HEIGHT)
257
    if (y < STATUS_TOP || y >= STATUS_TOP + STATUS_HEIGHT)
264
        return -1;
258
        return -1;
265
   
259
   
266
    if (x < status_start)
260
    if (x < status_start)
267
        return -1;
261
        return -1;
268
   
262
   
269
    if (x >= status_start + (STATUS_WIDTH + STATUS_SPACE) * CONSOLE_COUNT)
263
    if (x >= status_start + (STATUS_WIDTH + STATUS_SPACE) * CONSOLE_COUNT)
270
        return -1;
264
        return -1;
271
    if (((x - status_start) % (STATUS_WIDTH+STATUS_SPACE)) < STATUS_SPACE)
265
    if (((x - status_start) % (STATUS_WIDTH + STATUS_SPACE)) < STATUS_SPACE)
272
        return -1;
266
        return -1;
273
   
267
   
274
    return (x - status_start) / (STATUS_WIDTH+STATUS_SPACE);
268
    return (x - status_start) / (STATUS_WIDTH + STATUS_SPACE);
275
}
269
}
276
 
270
 
277
/** Handle mouse click
271
/** Handle mouse click
278
 *
272
 *
279
 * @param state New state (1-pressed, 0-depressed)
273
 * @param state New state (1-pressed, 0-depressed)
Line 340... Line 334...
340
 
334
 
341
extern char _binary_helenos_ppm_start[0];
335
extern char _binary_helenos_ppm_start[0];
342
extern int _binary_helenos_ppm_size;
336
extern int _binary_helenos_ppm_size;
343
extern char _binary_nameic_ppm_start[0];
337
extern char _binary_nameic_ppm_start[0];
344
extern int _binary_nameic_ppm_size;
338
extern int _binary_nameic_ppm_size;
-
 
339
 
345
/** Redraws console graphics  */
340
/** Redraws console graphics */
346
static void gcons_redraw_console(void)
341
void gcons_redraw_console(void)
347
{
342
{
348
    int i;
343
    int i;
349
 
344
   
350
    if (!use_gcons)
345
    if (!use_gcons)
351
        return;
346
        return;
352
   
347
   
353
    vp_switch(0);
348
    vp_switch(0);
354
    set_style(MAIN_COLOR, MAIN_COLOR);
349
    set_rgb_color(MAIN_COLOR, MAIN_COLOR);
355
    clear();
350
    clear();
356
    draw_pixmap(_binary_helenos_ppm_start,
351
    draw_pixmap(_binary_helenos_ppm_start,
357
        (size_t) &_binary_helenos_ppm_size, xres - 66, 2);
352
        (size_t) &_binary_helenos_ppm_size, xres - 66, 2);
358
    draw_pixmap(_binary_nameic_ppm_start,
353
    draw_pixmap(_binary_nameic_ppm_start,
359
        (size_t) &_binary_nameic_ppm_size, 5, 17);
354
        (size_t) &_binary_nameic_ppm_size, 5, 17);
360
 
355
   
361
    for (i = 0; i < CONSOLE_COUNT; i++)
356
    for (i = 0; i < CONSOLE_COUNT; i++)
362
        redraw_state(i);
357
        redraw_state(i);
363
    vp_switch(console_vp);
358
    vp_switch(console_vp);
364
}
359
}
365
 
360
 
Line 457... Line 452...
457
void gcons_init(int phone)
452
void gcons_init(int phone)
458
{
453
{
459
    int rc;
454
    int rc;
460
    int i;
455
    int i;
461
    int status_start = STATUS_START;
456
    int status_start = STATUS_START;
462
 
457
   
463
    fbphone = phone;
458
    fbphone = phone;
464
 
459
   
465
    rc = async_req_0_2(phone, FB_GET_RESOLUTION, &xres, &yres);
460
    rc = async_req_0_2(phone, FB_GET_RESOLUTION, &xres, &yres);
466
    if (rc)
461
    if (rc)
467
        return;
462
        return;
468
   
463
   
469
    if (xres < 800 || yres < 600)
464
    if ((xres < 800) || (yres < 600))
470
        return;
465
        return;
471
 
466
   
472
    /* create console viewport */
467
    /* create console viewport */
473
    /* Align width & height to character size */
468
    /* Align width & height to character size */
474
    console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP,
469
    console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP,
475
        ALIGN_DOWN(xres - 2 * CONSOLE_MARGIN, 8),
470
        ALIGN_DOWN(xres - 2 * CONSOLE_MARGIN, 8),
476
        ALIGN_DOWN(yres - (CONSOLE_TOP + CONSOLE_MARGIN), 16));
471
        ALIGN_DOWN(yres - (CONSOLE_TOP + CONSOLE_MARGIN), 16));
Line 484... Line 479...
484
            i * (STATUS_WIDTH + STATUS_SPACE), STATUS_TOP,
479
            i * (STATUS_WIDTH + STATUS_SPACE), STATUS_TOP,
485
            STATUS_WIDTH, STATUS_HEIGHT);
480
            STATUS_WIDTH, STATUS_HEIGHT);
486
        if (cstatus_vp[i] < 0)
481
        if (cstatus_vp[i] < 0)
487
            return;
482
            return;
488
        vp_switch(cstatus_vp[i]);
483
        vp_switch(cstatus_vp[i]);
489
        set_style(0x202020, 0xffffff);
484
        set_rgb_color(0x202020, 0xffffff);
490
    }
485
    }
491
   
486
   
492
    /* Initialize icons */
487
    /* Initialize icons */
493
    ic_pixmaps[CONS_SELECTED] =
488
    ic_pixmaps[CONS_SELECTED] =
494
        make_pixmap(_binary_cons_selected_ppm_start,
489
        make_pixmap(_binary_cons_selected_ppm_start,
Line 504... Line 499...
504
    ic_pixmaps[CONS_KERNEL] = make_pixmap(_binary_cons_kernel_ppm_start,
499
    ic_pixmaps[CONS_KERNEL] = make_pixmap(_binary_cons_kernel_ppm_start,
505
        (int) &_binary_cons_kernel_ppm_size);
500
        (int) &_binary_cons_kernel_ppm_size);
506
    ic_pixmaps[CONS_DISCONNECTED_SEL] = ic_pixmaps[CONS_SELECTED];
501
    ic_pixmaps[CONS_DISCONNECTED_SEL] = ic_pixmaps[CONS_SELECTED];
507
   
502
   
508
    make_anim();
503
    make_anim();
509
 
504
   
510
    use_gcons = 1;
505
    use_gcons = 1;
511
    console_state[0] = CONS_DISCONNECTED_SEL;
506
    console_state[0] = CONS_DISCONNECTED_SEL;
512
    console_state[KERNEL_CONSOLE] = CONS_KERNEL;
507
    console_state[KERNEL_CONSOLE] = CONS_KERNEL;
513
    gcons_redraw_console();
508
    gcons_redraw_console();
514
}
509
}
515
 
510
 
516
/** @}
511
/** @}
517
 */
512
 */
518
 
-