#0 0xb75cb7bc in pixman_image_set_has_client_clip (image=0x0, client_clip=1) at pixman-image.c:530 525 526 PIXMAN_EXPORT void 527 pixman_image_set_has_client_clip (pixman_image_t *image, 528 pixman_bool_t client_clip) 529 { 530 image->common.client_clip = client_clip; 531 } 532 #1 0xb7145f4b in create_bits_picture (pict=0x966e3c0, has_clip=1, xoff=0xbfb27320, yoff=0xbfb2731c) at fbpict.c:317 275 276 static pixman_image_t * 277 create_bits_picture (PicturePtr pict, 278 Bool has_clip, 279 int *xoff, 280 int *yoff) 281 { 282 PixmapPtr pixmap; 283 FbBits *bits; 284 FbStride stride; 285 int bpp; 286 pixman_image_t *image; 287 288 fbGetDrawablePixmap (pict->pDrawable, pixmap, *xoff, *yoff); 289 fbGetPixmapBitsData(pixmap, bits, stride, bpp); 290 291 image = pixman_image_create_bits ( 292 pict->format, 293 pixmap->drawable.width, pixmap->drawable.height, 294 (uint32_t *)bits, stride * sizeof (FbStride)); 295 296 297 #ifdef FB_ACCESS_WRAPPER 298 #if FB_SHIFT==5 299 300 pixman_image_set_accessors (image, 301 (pixman_read_memory_func_t)wfbReadMemory, 302 (pixman_write_memory_func_t)wfbWriteMemory); 303 304 #else 305 306 #error The pixman library only works when FbBits is 32 bits wide 307 308 #endif 309 #endif 310 311 /* pCompositeClip is undefined for source pictures, so 312 * only set the clip region for pictures with drawables 313 */ 314 if (has_clip) 315 { 316 if (pict->clientClipType != CT_NONE) 317 pixman_image_set_has_client_clip (image, TRUE); 318 319 if (*xoff || *yoff) 320 pixman_region_translate (pict->pCompositeClip, *xoff, *yoff); 321 322 pixman_image_set_clip_region (image, pict->pCompositeClip); 323 324 if (*xoff || *yoff) 325 pixman_region_translate (pict->pCompositeClip, -*xoff, -*yoff); 326 } 327 328 /* Indexed table */ 329 if (pict->pFormat->index.devPrivate) 330 pixman_image_set_indexed (image, pict->pFormat->index.devPrivate); 331 332 /* Add in drawable origin to position within the image */ 333 *xoff += pict->pDrawable->x; 334 *yoff += pict->pDrawable->y; 335 336 return image; 337 } 338 #2 0xb7146289 in image_from_pict (pict=0x966e3c0, has_clip=1, xoff=0xbfb27320, yoff=0xbfb2731c) at fbpict.c:434 423 424 pixman_image_t * 425 image_from_pict (PicturePtr pict, Bool has_clip, int *xoff, int *yoff) 426 { 427 pixman_image_t *image = NULL; 428 429 if (!pict) 430 return NULL; 431 432 if (pict->pDrawable) 433 { 434 image = create_bits_picture (pict, has_clip, xoff, yoff); 435 } 436 else if (pict->pSourcePict) 437 { 438 SourcePict *sp = pict->pSourcePict; 439 440 if (sp->type == SourcePictTypeSolidFill) 441 { 442 image = create_solid_fill_image (pict); 443 } 444 else 445 { 446 PictGradient *gradient = &pict->pSourcePict->gradient; 447 448 if (sp->type == SourcePictTypeLinear) 449 image = create_linear_gradient_image (gradient); 450 else if (sp->type == SourcePictTypeRadial) 451 image = create_radial_gradient_image (gradient); 452 else if (sp->type == SourcePictTypeConical) 453 image = create_conical_gradient_image (gradient); 454 } 455 *xoff = *yoff = 0; 456 } 457 458 if (image) 459 set_image_properties (image, pict, has_clip, xoff, yoff); 460 461 return image; 462 } 463 #3 0xb7145a46 in fbComposite (op=1 '\001', pSrc=0x966e520, pMask=0x0, pDst=0x966e3c0, xSrc=0, ySrc=0, xMask=0, yMask=0, xDst=2, yDst=25, width=658, height=438) at fbpict.c:171 145 146 void 147 fbComposite (CARD8 op, 148 PicturePtr pSrc, 149 PicturePtr pMask, 150 PicturePtr pDst, 151 INT16 xSrc, 152 INT16 ySrc, 153 INT16 xMask, 154 INT16 yMask, 155 INT16 xDst, 156 INT16 yDst, 157 CARD16 width, 158 CARD16 height) 159 { 160 pixman_image_t *src, *mask, *dest; 161 int src_xoff, src_yoff; 162 int msk_xoff, msk_yoff; 163 int dst_xoff, dst_yoff; 164 165 miCompositeSourceValidate (pSrc, xSrc - xDst, ySrc - yDst, width, height); 166 if (pMask) 167 miCompositeSourceValidate (pMask, xMask - xDst, yMask - yDst, width, height); 168 169 src = image_from_pict (pSrc, FALSE, &src_xoff, &src_yoff); 170 mask = image_from_pict (pMask, FALSE, &msk_xoff, &msk_yoff); 171 dest = image_from_pict (pDst, TRUE, &dst_xoff, &dst_yoff); 172 173 if (src && dest && !(pMask && !mask)) 174 { 175 pixman_image_composite (op, src, mask, dest, 176 xSrc + src_xoff, ySrc + src_yoff, 177 xMask + msk_xoff, yMask + msk_yoff, 178 xDst + dst_xoff, yDst + dst_yoff, 179 width, height); 180 } 181 182 free_pixman_pict (pSrc, src); 183 free_pixman_pict (pMask, mask); 184 free_pixman_pict (pDst, dest); 185 } 186 #4 0x0812bc77 in damageComposite (op=1 '\001', pSrc=0x966e520, pMask=0x0, pDst=0x966e3c0, xSrc=0, ySrc=0, xMask=0, yMask=0, xDst=2, yDst=25, width=658, height=438) at damage.c:643 611 612 static void 613 damageComposite (CARD8 op, 614 PicturePtr pSrc, 615 PicturePtr pMask, 616 PicturePtr pDst, 617 INT16 xSrc, 618 INT16 ySrc, 619 INT16 xMask, 620 INT16 yMask, 621 INT16 xDst, 622 INT16 yDst, 623 CARD16 width, 624 CARD16 height) 625 { 626 ScreenPtr pScreen = pDst->pDrawable->pScreen; 627 PictureScreenPtr ps = GetPictureScreen(pScreen); 628 damageScrPriv(pScreen); 629 630 if (checkPictureDamage (pDst)) 631 { 632 BoxRec box; 633 634 box.x1 = xDst + pDst->pDrawable->x; 635 box.y1 = yDst + pDst->pDrawable->y; 636 box.x2 = box.x1 + width; 637 box.y2 = box.y1 + height; 638 TRIM_PICTURE_BOX(box, pDst); 639 if (BOX_NOT_EMPTY(box)) 640 damageDamageBox (pDst->pDrawable, &box, pDst->subWindowMode); 641 } 642 unwrap (pScrPriv, ps, Composite); 643 (*ps->Composite) (op, 644 pSrc, 645 pMask, 646 pDst, 647 xSrc, 648 ySrc, 649 xMask, 650 yMask, 651 xDst, 652 yDst, 653 width, 654 height); 655 damageRegionProcessPending (pDst->pDrawable); 656 wrap (pScrPriv, ps, Composite, damageComposite); 657 } 658 #5 0x08127f9a in CompositePicture (op=1 '\001', pSrc=0x966e520, pMask=0x0, pDst=0x966e3c0, xSrc=0, ySrc=0, xMask=0, yMask=0, xDst=2, yDst=25, width=658, height=438) at picture.c:1714 1688 1689 void 1690 CompositePicture (CARD8 op, 1691 PicturePtr pSrc, 1692 PicturePtr pMask, 1693 PicturePtr pDst, 1694 INT16 xSrc, 1695 INT16 ySrc, 1696 INT16 xMask, 1697 INT16 yMask, 1698 INT16 xDst, 1699 INT16 yDst, 1700 CARD16 width, 1701 CARD16 height) 1702 { 1703 PictureScreenPtr ps = GetPictureScreen(pDst->pDrawable->pScreen); 1704 1705 ValidatePicture (pSrc); 1706 if (pMask) 1707 ValidatePicture (pMask); 1708 ValidatePicture (pDst); 1709 1710 op = ReduceCompositeOp (op, pSrc, pMask, pDst, xSrc, ySrc, width, height); 1711 if (op == PictOpDst) 1712 return; 1713 1714 (*ps->Composite) (op, 1715 pSrc, 1716 pMask, 1717 pDst, 1718 xSrc, 1719 ySrc, 1720 xMask, 1721 yMask, 1722 xDst, 1723 yDst, 1724 width, 1725 height); 1726 } 1727 #6 0x080ee826 in compWindowUpdateAutomatic (pWin=0x9685ff0) at compwindow.c:757 707 708 static void 709 compWindowUpdateAutomatic (WindowPtr pWin) 710 { 711 CompWindowPtr cw = GetCompWindow (pWin); 712 ScreenPtr pScreen = pWin->drawable.pScreen; 713 WindowPtr pParent = pWin->parent; 714 PixmapPtr pSrcPixmap = (*pScreen->GetWindowPixmap) (pWin); 715 PictFormatPtr pSrcFormat = compWindowFormat (pWin); 716 PictFormatPtr pDstFormat = compWindowFormat (pWin->parent); 717 int error; 718 RegionPtr pRegion = DamageRegion (cw->damage); 719 PicturePtr pSrcPicture = CreatePicture (0, &pSrcPixmap->drawable, 720 pSrcFormat, 721 0, 0, 722 serverClient, 723 &error); 724 XID subwindowMode = IncludeInferiors; 725 PicturePtr pDstPicture = CreatePicture (0, &pParent->drawable, 726 pDstFormat, 727 CPSubwindowMode, 728 &subwindowMode, 729 serverClient, 730 &error); 731 732 /* 733 * First move the region from window to screen coordinates 734 */ 735 REGION_TRANSLATE (pScreen, pRegion, 736 pWin->drawable.x, pWin->drawable.y); 737 738 /* 739 * Clip against the "real" border clip 740 */ 741 REGION_INTERSECT (pScreen, pRegion, pRegion, &cw->borderClip); 742 743 /* 744 * Now translate from screen to dest coordinates 745 */ 746 REGION_TRANSLATE (pScreen, pRegion, 747 -pParent->drawable.x, -pParent->drawable.y); 748 749 /* 750 * Clip the picture 751 */ 752 SetPictureClipRegion (pDstPicture, 0, 0, pRegion); 753 754 /* 755 * And paint 756 */ 757 CompositePicture (PictOpSrc, 758 pSrcPicture, 759 0, 760 pDstPicture, 761 0, 0, /* src_x, src_y */ 762 0, 0, /* msk_x, msk_y */ 763 pSrcPixmap->screen_x - pParent->drawable.x, 764 pSrcPixmap->screen_y - pParent->drawable.y, 765 pSrcPixmap->drawable.width, 766 pSrcPixmap->drawable.height); 767 FreePicture (pSrcPicture, 0); 768 FreePicture (pDstPicture, 0); 769 /* 770 * Empty the damage region. This has the nice effect of 771 * rendering the translations above harmless 772 */ 773 DamageEmpty (cw->damage); 774 } 775 #7 0x080ee8dc in compWindowUpdate (pWin=0x9685ff0) at compwindow.c:789 #8 0x080ee88a in compWindowUpdate (pWin=0x9687578) at compwindow.c:782 #9 0x080ee88a in compWindowUpdate (pWin=0x93a8a18) at compwindow.c:782 775 776 void 777 compWindowUpdate (WindowPtr pWin) 778 { 779 WindowPtr pChild; 780 781 for (pChild = pWin->lastChild; pChild; pChild = pChild->prevSib) 782 compWindowUpdate (pChild); 783 if (pWin->redirectDraw != RedirectDrawNone) 784 { 785 CompWindowPtr cw = GetCompWindow(pWin); 786 787 if (cw->damaged) 788 { 789 compWindowUpdateAutomatic (pWin); 790 cw->damaged = FALSE; 791 } 792 } 793 } 794 #10 0x080eed0a in compScreenUpdate (pScreen=0x9385ad0) at compinit.c:144 135 136 static void 137 compScreenUpdate (ScreenPtr pScreen) 138 { 139 CompScreenPtr cs = GetCompScreen (pScreen); 140 141 compCheckTree (pScreen); 142 if (cs->damaged) 143 { 144 compWindowUpdate (WindowTable[pScreen->myNum]); 145 cs->damaged = FALSE; 146 } 147 } 148 #11 0x080eed77 in compBlockHandler (i=0, blockData=0x0, pTimeout=0xbfb278b8, pReadmask=0x8250560) at compinit.c:159 148 149 static void 150 compBlockHandler (int i, 151 pointer blockData, 152 pointer pTimeout, 153 pointer pReadmask) 154 { 155 ScreenPtr pScreen = screenInfo.screens[i]; 156 CompScreenPtr cs = GetCompScreen (pScreen); 157 158 pScreen->BlockHandler = cs->BlockHandler; 159 compScreenUpdate (pScreen); 160 (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask); 161 cs->BlockHandler = pScreen->BlockHandler; 162 pScreen->BlockHandler = compBlockHandler; 163 } 164 #12 0x08078436 in BlockHandler (pTimeout=0xbfb278b8, pReadmask=0x8250560) at dixutils.c:369 356 357 /** 358 * 359 * \param pTimeout DIX doesn't want to know how OS represents time 360 * \param pReadMask nor how it represents the det of descriptors 361 */ 362 void 363 BlockHandler(pointer pTimeout, pointer pReadmask) 364 { 365 int i, j; 366 367 ++inHandler; 368 for (i = 0; i < screenInfo.numScreens; i++) 369 (* screenInfo.screens[i]->BlockHandler)(i, 370 screenInfo.screens[i]->blockData, 371 pTimeout, pReadmask); 372 for (i = 0; i < numHandlers; i++) 373 (*handlers[i].BlockHandler) (handlers[i].blockData, 374 pTimeout, pReadmask); 375 if (handlerDeleted) 376 { 377 for (i = 0; i < numHandlers;) 378 if (handlers[i].deleted) 379 { 380 for (j = i; j < numHandlers - 1; j++) 381 handlers[j] = handlers[j+1]; 382 numHandlers--; 383 } 384 else 385 i++; 386 handlerDeleted = FALSE; 387 } 388 --inHandler; 389 } 390 #13 0x080b4cd1 in WaitForSomething (pClientsReady=0x95c4888) at WaitFor.c:216 #14 0x08068160 in Dispatch () at dispatch.c:375 #15 0x0806268d in main (argc=3, argv=0xbfb27a94, envp=0xbfb27aa4) at main.c:286