Subversion Repositories HelenOS

Rev

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

Rev 1558 Rev 1559
Line 202... Line 202...
202
    unsigned int x;
202
    unsigned int x;
203
    for (x = 0; x < viewports[vp].width; x++)
203
    for (x = 0; x < viewports[vp].width; x++)
204
        putpixel(vp, x, y, viewports[vp].style.bg_color);
204
        putpixel(vp, x, y, viewports[vp].style.bg_color);
205
}
205
}
206
 
206
 
-
 
207
static void draw_rectangle(int vp, unsigned int sx, unsigned int sy,
-
 
208
               unsigned int width, unsigned int height,
-
 
209
               int color)
-
 
210
{
-
 
211
    unsigned int x, y;
-
 
212
 
-
 
213
    /* Clear first line */
-
 
214
    for (x = 0; x < width; x++)
-
 
215
        putpixel(vp, sx + x, sy, color);
-
 
216
 
-
 
217
    /* Recompute to screen coords */
-
 
218
    sx += viewports[vp].x;
-
 
219
    sy += viewports[vp].y;
-
 
220
    /* Copy the rest */
-
 
221
    for (y = sy+1;y < sy+height; y++)
-
 
222
        memcpy(&screen.fbaddress[POINTPOS(sx,y)],
-
 
223
               &screen.fbaddress[POINTPOS(sx,sy)],
-
 
224
               screen.pixelbytes * width);
-
 
225
 
-
 
226
}
-
 
227
 
207
/** Fill viewport with background color */
228
/** Fill viewport with background color */
208
static void clear_port(int vp)
229
static void clear_port(int vp)
209
{
230
{
210
    unsigned int y;
231
    viewport_t *vport = &viewports[vp];
211
 
232
 
212
    clear_line(vp, 0);
-
 
213
    for (y = viewports[vp].y+1; y < viewports[vp].y+viewports[vp].height; y++) {
233
    draw_rectangle(vp, 0, 0, vport->width, vport->height, vport->style.bg_color);
214
        memcpy(&screen.fbaddress[POINTPOS(viewports[vp].x,y)],
-
 
215
               &screen.fbaddress[POINTPOS(viewports[vp].x,viewports[vp].y)],
-
 
216
               screen.pixelbytes * viewports[vp].width);
-
 
217
    }  
-
 
218
}
234
}
219
 
235
 
220
/** Scroll port up/down
236
/** Scroll port up/down
221
 *
237
 *
222
 * @param vp Viewport to scroll
238
 * @param vp Viewport to scroll
Line 225... Line 241...
225
static void scroll_port(int vp, int rows)
241
static void scroll_port(int vp, int rows)
226
{
242
{
227
    int y;
243
    int y;
228
    int startline;
244
    int startline;
229
    int endline;
245
    int endline;
-
 
246
    viewport_t *vport = &viewports[vp];
230
   
247
   
231
    if (rows > 0) {
248
    if (rows > 0) {
232
        for (y=viewports[vp].y; y < viewports[vp].y+viewports[vp].height - rows*FONT_SCANLINES; y++)
249
        for (y=vport->y; y < vport->y+vport->height - rows*FONT_SCANLINES; y++)
233
            memcpy(&screen.fbaddress[POINTPOS(viewports[vp].x,y)],
250
            memcpy(&screen.fbaddress[POINTPOS(vport->x,y)],
234
                   &screen.fbaddress[POINTPOS(viewports[vp].x,y + rows*FONT_SCANLINES)],
251
                   &screen.fbaddress[POINTPOS(vport->x,y + rows*FONT_SCANLINES)],
235
                   screen.pixelbytes * viewports[vp].width);
252
                   screen.pixelbytes * vport->width);
236
        /* Clear last row */
-
 
237
        startline = viewports[vp].y+FONT_SCANLINES*(viewports[vp].rows-1);
253
        draw_rectangle(vp, 0, FONT_SCANLINES*(vport->rows - 1),
238
        endline = viewports[vp].y + viewports[vp].height;
-
 
239
        clear_line(vp, startline);
-
 
240
        for (y=startline+1;y < endline; y++)
-
 
241
            memcpy(&screen.fbaddress[POINTPOS(viewports[vp].x,y)],
-
 
242
                   &screen.fbaddress[POINTPOS(viewports[vp].x,startline)],
254
                   vport->width, FONT_SCANLINES, vport->style.bg_color);
243
                   screen.pixelbytes * viewports[vp].width);
-
 
244
                 
-
 
245
    } else if (rows < 0) {
255
    } else if (rows < 0) {
246
        rows = -rows;
256
        rows = -rows;
247
        for (y=viewports[vp].y + viewports[vp].height-1; y >= viewports[vp].y + rows*FONT_SCANLINES; y--)
257
        for (y=vport->y + vport->height-1; y >= vport->y + rows*FONT_SCANLINES; y--)
248
            memcpy(&screen.fbaddress[POINTPOS(viewports[vp].x,y)],
258
            memcpy(&screen.fbaddress[POINTPOS(vport->x,y)],
249
                &screen.fbaddress[POINTPOS(viewports[vp].x,y - rows*FONT_SCANLINES)],
259
                &screen.fbaddress[POINTPOS(vport->x,y - rows*FONT_SCANLINES)],
250
                screen.pixelbytes * viewports[vp].width);
260
                screen.pixelbytes * vport->width);
251
        /* Clear first row */
-
 
252
        clear_line(0, viewports[vp].style.bg_color);
261
        draw_rectangle(vp, 0, 0, vport->width, FONT_SCANLINES, vport->style.bg_color);
253
        for (y=1;y < rows*FONT_SCANLINES; y++)
-
 
254
            memcpy(&screen.fbaddress[POINTPOS(viewports[vp].x,viewports[vp].y+y)],
-
 
255
                   &screen.fbaddress[POINTPOS(viewports[vp].x,viewports[vp].y)],
-
 
256
                   screen.pixelbytes * viewports[vp].width);
-
 
257
    }
262
    }
258
}
263
}
259
 
264
 
260
static void invert_pixel(int vp,unsigned int x, unsigned int y)
265
static void invert_pixel(int vp,unsigned int x, unsigned int y)
261
{
266
{