Ignore:
Timestamp:
2012-11-22T09:03:39Z (12 years ago)
Author:
Petr Koupy <petr.koupy@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ba733e83
Parents:
8e6ec6e
Message:

Resolved Ticket #485 (Desktop is slow). GUI is usable in Qemu/non-KVM as long as windows are not transparent, rotated or scaled (i.e. if user limits himself only to translation and resizing).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/compositor/compositor.c

    r8e6ec6e r7dba813  
    314314                        /* Paint background color. */
    315315                        for (sysarg_t y = y_dmg_vp - vp->pos.y; y <  y_dmg_vp - vp->pos.y + h_dmg_vp; ++y) {
    316                                 for (sysarg_t x = x_dmg_vp - vp->pos.x; x < x_dmg_vp - vp->pos.x + w_dmg_vp; ++x) {
    317                                         surface_put_pixel(vp->surface, x, y, bg_color);
     316                                pixel_t *dst = pixelmap_pixel_at(
     317                                    surface_pixmap_access(vp->surface), x_dmg_vp - vp->pos.x, y);
     318                                sysarg_t count = w_dmg_vp;
     319                                while (count-- != 0) {
     320                                        *dst++ = bg_color;
    318321                                }
    319322                        }
     323                        surface_add_damaged_region(vp->surface,
     324                            x_dmg_vp - vp->pos.x, y_dmg_vp - vp->pos.y, w_dmg_vp, h_dmg_vp);
    320325
    321326                        transform_t transform;
     
    381386                                if (isec_ptr) {
    382387                                        /* Pointer is currently painted directly by copying pixels.
    383                                          * However, it is possible to draw the painter similarly
     388                                         * However, it is possible to draw the pointer similarly
    384389                                         * as window by using drawctx_transfer. It would allow
    385390                                         * more sophisticated control over drawing, but would also
    386391                                         * cost more regarding the performance. */
    387392
    388                                         pixel_t pix = 0;
    389393                                        sysarg_t x_vp = x_dmg_ptr - vp->pos.x;
    390394                                        sysarg_t y_vp = y_dmg_ptr - vp->pos.y;
     
    393397
    394398                                        for (sysarg_t y = 0; y < h_dmg_ptr; ++y) {
    395                                                 for (sysarg_t x = 0; x < w_dmg_ptr; ++x) {
    396                                                         pix = surface_get_pixel(sf_ptr, x_ptr + x, y_ptr + y);
    397                                                         if (ALPHA(pix) == 255) {
    398                                                                 surface_put_pixel(vp->surface, x_vp + x, y_vp + y, pix);
    399                                                         }
     399                                                pixel_t *src = pixelmap_pixel_at(
     400                                                    surface_pixmap_access(sf_ptr), x_ptr, y_ptr + y);
     401                                                pixel_t *dst = pixelmap_pixel_at(
     402                                                    surface_pixmap_access(vp->surface), x_vp, y_vp + y);
     403                                                sysarg_t count = w_dmg_ptr;
     404                                                while (count-- != 0) {
     405                                                        *dst = (*src & 0xff000000) ? *src : *dst;
     406                                                        ++dst; ++src;
    400407                                                }
    401408                                        }
     409                                        surface_add_damaged_region(vp->surface, x_vp, y_vp, w_dmg_ptr, h_dmg_ptr);
    402410                                }
    403411                        }
Note: See TracChangeset for help on using the changeset viewer.