Changeset 6b5111a in mainline


Ignore:
Timestamp:
2006-06-02T14:12:09Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5b6de81
Parents:
37458472
Message:

Reworked styles in framebuffer.

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • console/screenbuffer.h

    r37458472 r6b5111a  
    6060}
    6161
     62static inline int style_same(style_t s1, style_t s2)
     63{
     64        return s1.fg_color == s2.fg_color && s1.bg_color == s2.bg_color;
     65}
     66
    6267
    6368int screenbuffer_putchar(screenbuffer_t *scr, char c);
  • fb/fb.c

    r37458472 r6b5111a  
    7777        unsigned int rows, cols;
    7878        /* Style for text printing */
    79         int bgcolor, fgcolor;
     79        style_t style;
    8080        /* Auto-cursor position */
    8181        int cursor_active, cur_col, cur_row;
     
    192192        unsigned int x;
    193193        for (x = 0; x < viewports[vp].width; x++)
    194                 putpixel(vp, x, y, viewports[vp].bgcolor);
     194                putpixel(vp, x, y, viewports[vp].style.bg_color);
    195195}
    196196
     
    240240                                screen.pixelbytes * viewports[vp].width);
    241241                /* Clear first row */
    242                 clear_line(0, viewports[vp].bgcolor);
     242                clear_line(0, viewports[vp].style.bg_color);
    243243                for (y=1;y < rows*FONT_SCANLINES; y++)
    244244                        memcpy(&screen.fbaddress[POINTPOS(viewports[vp].x,viewports[vp].y+y)],
     
    254254
    255255
    256 /** Draw one line of glyph at a given position */
    257 static void draw_glyph_line(int vp,unsigned int glline, unsigned int x, unsigned int y)
    258 {
    259         unsigned int i;
    260 
    261         for (i = 0; i < 8; i++)
    262                 if (glline & (1 << (7 - i))) {
    263                         putpixel(vp, x + i, y, viewports[vp].fgcolor);
    264                 } else
    265                         putpixel(vp, x + i, y, viewports[vp].bgcolor);
    266 }
    267 
    268256/***************************************************************/
    269257/* Character-console functions */
    270258
    271259/** Draw character at given position */
    272 static void draw_glyph(int vp,__u8 glyph, unsigned int sx, unsigned int sy)
    273 {
     260static void draw_glyph(int vp,__u8 glyph, unsigned int sx, unsigned int sy, style_t style)
     261{
     262        int i;
    274263        unsigned int y;
    275 
    276         for (y = 0; y < FONT_SCANLINES; y++)
    277                 draw_glyph_line(vp ,fb_font[glyph * FONT_SCANLINES + y], sx, sy + y);
     264        unsigned int glline;
     265
     266        for (y = 0; y < FONT_SCANLINES; y++) {
     267                glline = fb_font[glyph * FONT_SCANLINES + y];
     268                for (i = 0; i < 8; i++) {
     269                        if (glline & (1 << (7 - i)))
     270                                putpixel(vp, sx + i, sy + y, style.fg_color);
     271                        else
     272                                putpixel(vp, sx + i, sy + y, style.bg_color);
     273                }
     274        }
    278275}
    279276
     
    303300                        byte >>= x % 8;
    304301                        if (byte & 1)
    305                                 putpixel(vp ,startx + x, starty + y, viewports[vp].fgcolor);
     302                                putpixel(vp ,startx + x, starty + y, viewports[vp].style.fg_color);
    306303                }
    307304}
     
    341338        viewports[i].cols = width / COL_WIDTH;
    342339
    343         viewports[i].bgcolor = DEFAULT_BGCOLOR;
    344         viewports[i].fgcolor = DEFAULT_FGCOLOR;
     340        viewports[i].style.bg_color = DEFAULT_BGCOLOR;
     341        viewports[i].style.fg_color = DEFAULT_FGCOLOR;
    345342       
    346343        viewports[i].cur_col = 0;
     
    438435 * @param col Screen position relative to viewport
    439436 */
    440 static void draw_char(int vp, char c, unsigned int row, unsigned int col)
     437static void draw_char(int vp, char c, unsigned int row, unsigned int col, style_t style)
    441438{
    442439        viewport_t *vport = &viewports[vp];
     
    447444                invert_char(vp, vport->cur_row, vport->cur_col);
    448445       
    449         draw_glyph(vp, c, col * COL_WIDTH, row * FONT_SCANLINES);
     446        draw_glyph(vp, c, col * COL_WIDTH, row * FONT_SCANLINES, style);
    450447
    451448        vport->cur_col = col;
     
    470467        clear_port(vp);
    471468        for (i=0; i < vport->cols * vport->rows; i++) {
    472                 if (data[i].character == ' ') /* TODO: && data[i].style==vport->style */
     469                if (data[i].character == ' ' && style_same(data[i].style,vport->style))
    473470                        continue;
    474                 draw_char(vp, data[i].character, i/vport->rows, i % vport->cols);
     471                draw_char(vp, data[i].character, i/vport->rows, i % vport->cols,
     472                          data[i].style);
    475473        }
    476474        cursor_print(vp);
     
    545543                        ipc_answer_fast(callid,0,0,0);
    546544
    547                         draw_char(vp, c, row, col);
     545                        draw_char(vp, c, row, col, vport->style);
    548546                        continue; /* msg already answered */
    549547                case FB_CLEAR:
     
    621619                        break;
    622620                case FB_SET_STYLE:
    623                         vport->fgcolor = IPC_GET_ARG1(call);
    624                         vport->bgcolor = IPC_GET_ARG2(call);
     621                        vport->style.fg_color = IPC_GET_ARG1(call);
     622                        vport->style.bg_color = IPC_GET_ARG2(call);
    625623                        retval = 0;
    626624                        break;
  • libc/generic/as.c

    r37458472 r6b5111a  
    120120}
    121121
    122 /* TODO: make this type defined somewhere else */
    123 typedef sysarg_t __address;
    124 
    125122/** Return pointer to some unmapped area, where fits new as_area
    126123 *
Note: See TracChangeset for help on using the changeset viewer.