X-Git-Url: https://repo.or.cz/w/wmaker-crm.git/blobdiff_plain/59fc927dc9f183802621138534fa6eaafe5593ba..688a56e8ab67b56550e2874d9d7423f0d435bfd9:/WINGs/wpixmap.c diff --git a/WINGs/wpixmap.c b/WINGs/wpixmap.c dissimilarity index 96% index d4b90c19..3902fc05 100644 --- a/WINGs/wpixmap.c +++ b/WINGs/wpixmap.c @@ -1,267 +1,232 @@ - -#include "WINGsP.h" - -#include - - -WMPixmap* -WMRetainPixmap(WMPixmap *pixmap) -{ - if (pixmap) - pixmap->refCount++; - - return pixmap; -} - - -void -WMReleasePixmap(WMPixmap *pixmap) -{ - wassertr(pixmap!=NULL); - - pixmap->refCount--; - - if (pixmap->refCount<1) { - if (pixmap->pixmap) - XFreePixmap(pixmap->screen->display, pixmap->pixmap); - if (pixmap->mask) - XFreePixmap(pixmap->screen->display, pixmap->mask); - wfree(pixmap); - } -} - - -WMPixmap* -WMCreatePixmap(WMScreen *scrPtr, int width, int height, int depth, Bool masked) -{ - WMPixmap *pixPtr; - - pixPtr = wmalloc(sizeof(WMPixmap)); - pixPtr->screen = scrPtr; - pixPtr->width = width; - pixPtr->height = height; - pixPtr->depth = depth; - pixPtr->refCount = 1; - - pixPtr->pixmap = XCreatePixmap(scrPtr->display, W_DRAWABLE(scrPtr), - width, height, depth); - if (masked) { - pixPtr->mask = XCreatePixmap(scrPtr->display, W_DRAWABLE(scrPtr), - width, height, 1); - } else { - pixPtr->mask = None; - } - - return pixPtr; -} - - -WMPixmap* -WMCreatePixmapFromXPixmaps(WMScreen *scrPtr, Pixmap pixmap, Pixmap mask, - int width, int height, int depth) -{ - WMPixmap *pixPtr; - - pixPtr = wmalloc(sizeof(WMPixmap)); - pixPtr->screen = scrPtr; - pixPtr->pixmap = pixmap; - pixPtr->mask = mask; - pixPtr->width = width; - pixPtr->height = height; - pixPtr->depth = depth; - pixPtr->refCount = 1; - - return pixPtr; -} - - -WMPixmap* -WMCreatePixmapFromFile(WMScreen *scrPtr, char *fileName) -{ - WMPixmap *pixPtr; - RImage *image; - - image = RLoadImage(scrPtr->rcontext, fileName, 0); - if (!image) - return NULL; - - pixPtr = WMCreatePixmapFromRImage(scrPtr, image, 127); - - RReleaseImage(image); - - return pixPtr; -} - - -WMPixmap* -WMCreatePixmapFromRImage(WMScreen *scrPtr, RImage *image, int threshold) -{ - WMPixmap *pixPtr; - Pixmap pixmap, mask; - - if (!RConvertImageMask(scrPtr->rcontext, image, &pixmap, &mask, - threshold)) { - return NULL; - } - - pixPtr = wmalloc(sizeof(WMPixmap)); - pixPtr->screen = scrPtr; - pixPtr->pixmap = pixmap; - pixPtr->mask = mask; - pixPtr->width = image->width; - pixPtr->height = image->height; - pixPtr->depth = scrPtr->depth; - pixPtr->refCount = 1; - - return pixPtr; -} - - -WMPixmap* -WMCreateBlendedPixmapFromRImage(WMScreen *scrPtr, RImage *image, RColor *color) -{ - WMPixmap *pixPtr; - RImage *copy; - - copy = RCloneImage(image); - if (!copy) - return NULL; - - RCombineImageWithColor(copy, color); - pixPtr = WMCreatePixmapFromRImage(scrPtr, copy, 0); - RReleaseImage(copy); - - return pixPtr; -} - - -WMPixmap* -WMCreateBlendedPixmapFromFile(WMScreen *scrPtr, char *fileName, RColor *color) -{ - WMPixmap *pixPtr; - RImage *image; - - - image = RLoadImage(scrPtr->rcontext, fileName, 0); - if (!image) - return NULL; - - RCombineImageWithColor(image, color); - - pixPtr = WMCreatePixmapFromRImage(scrPtr, image, 0); - - RReleaseImage(image); - - return pixPtr; -} - - -WMPixmap* -WMCreatePixmapFromXPMData(WMScreen *scrPtr, char **data) -{ - WMPixmap *pixPtr; - RImage *image; - - image = RGetImageFromXPMData(scrPtr->rcontext, data); - if (!image) - return NULL; - - pixPtr = WMCreatePixmapFromRImage(scrPtr, image, 127); - - RReleaseImage(image); - - return pixPtr; -} - - -Pixmap -WMGetPixmapXID(WMPixmap *pixmap) -{ - wassertrv(pixmap != NULL, None); - - return pixmap->pixmap; -} - - -Pixmap -WMGetPixmapMaskXID(WMPixmap *pixmap) -{ - wassertrv(pixmap != NULL, None); - - return pixmap->mask; -} - - -WMSize -WMGetPixmapSize(WMPixmap *pixmap) -{ - WMSize size = {0,0}; - - wassertrv(pixmap != NULL, size); - - size.width = pixmap->width; - size.height = pixmap->height; - - return size; -} - - -WMPixmap* -WMGetSystemPixmap(WMScreen *scr, int image) -{ - switch (image) { - case WSIReturnArrow: - return WMRetainPixmap(scr->buttonArrow); - - case WSIHighlightedReturnArrow: - return WMRetainPixmap(scr->pushedButtonArrow); - - case WSIScrollerDimple: - return WMRetainPixmap(scr->scrollerDimple); - - case WSIArrowLeft: - return WMRetainPixmap(scr->leftArrow); - - case WSIHighlightedArrowLeft: - return WMRetainPixmap(scr->hiLeftArrow); - - case WSIArrowRight: - return WMRetainPixmap(scr->rightArrow); - - case WSIHighlightedArrowRight: - return WMRetainPixmap(scr->hiRightArrow); - - case WSIArrowUp: - return WMRetainPixmap(scr->upArrow); - - case WSIHighlightedArrowUp: - return WMRetainPixmap(scr->hiUpArrow); - - case WSIArrowDown: - return WMRetainPixmap(scr->downArrow); - - case WSIHighlightedArrowDown: - return WMRetainPixmap(scr->hiDownArrow); - - case WSICheckMark: - return WMRetainPixmap(scr->checkMark); - - default: - return NULL; - } -} - - - -void -WMDrawPixmap(WMPixmap *pixmap, Drawable d, int x, int y) -{ - WMScreen *scr = pixmap->screen; - - XSetClipMask(scr->display, scr->clipGC, pixmap->mask); - XSetClipOrigin(scr->display, scr->clipGC, x, y); - - XCopyArea(scr->display, pixmap->pixmap, d, scr->clipGC, 0, 0, - pixmap->width, pixmap->height, x, y); -} - + +#include "WINGsP.h" + +#include + +WMPixmap *WMRetainPixmap(WMPixmap * pixmap) +{ + if (pixmap) + pixmap->refCount++; + + return pixmap; +} + +void WMReleasePixmap(WMPixmap * pixmap) +{ + wassertr(pixmap != NULL); + + pixmap->refCount--; + + if (pixmap->refCount < 1) { + if (pixmap->pixmap) + XFreePixmap(pixmap->screen->display, pixmap->pixmap); + if (pixmap->mask) + XFreePixmap(pixmap->screen->display, pixmap->mask); + wfree(pixmap); + } +} + +WMPixmap *WMCreatePixmap(WMScreen * scrPtr, int width, int height, int depth, Bool masked) +{ + WMPixmap *pixPtr; + + pixPtr = wmalloc(sizeof(WMPixmap)); + pixPtr->screen = scrPtr; + pixPtr->width = width; + pixPtr->height = height; + pixPtr->depth = depth; + pixPtr->refCount = 1; + + pixPtr->pixmap = XCreatePixmap(scrPtr->display, W_DRAWABLE(scrPtr), width, height, depth); + if (masked) { + pixPtr->mask = XCreatePixmap(scrPtr->display, W_DRAWABLE(scrPtr), width, height, 1); + } else { + pixPtr->mask = None; + } + + return pixPtr; +} + +WMPixmap *WMCreatePixmapFromXPixmaps(WMScreen * scrPtr, Pixmap pixmap, Pixmap mask, + int width, int height, int depth) +{ + WMPixmap *pixPtr; + + pixPtr = wmalloc(sizeof(WMPixmap)); + pixPtr->screen = scrPtr; + pixPtr->pixmap = pixmap; + pixPtr->mask = mask; + pixPtr->width = width; + pixPtr->height = height; + pixPtr->depth = depth; + pixPtr->refCount = 1; + + return pixPtr; +} + +WMPixmap *WMCreatePixmapFromFile(WMScreen * scrPtr, char *fileName) +{ + WMPixmap *pixPtr; + RImage *image; + + image = RLoadImage(scrPtr->rcontext, fileName, 0); + if (!image) + return NULL; + + pixPtr = WMCreatePixmapFromRImage(scrPtr, image, 127); + + RReleaseImage(image); + + return pixPtr; +} + +WMPixmap *WMCreatePixmapFromRImage(WMScreen * scrPtr, RImage * image, int threshold) +{ + WMPixmap *pixPtr; + Pixmap pixmap, mask; + + if (!RConvertImageMask(scrPtr->rcontext, image, &pixmap, &mask, threshold)) { + return NULL; + } + + pixPtr = wmalloc(sizeof(WMPixmap)); + pixPtr->screen = scrPtr; + pixPtr->pixmap = pixmap; + pixPtr->mask = mask; + pixPtr->width = image->width; + pixPtr->height = image->height; + pixPtr->depth = scrPtr->depth; + pixPtr->refCount = 1; + + return pixPtr; +} + +WMPixmap *WMCreateBlendedPixmapFromRImage(WMScreen * scrPtr, RImage * image, RColor * color) +{ + WMPixmap *pixPtr; + RImage *copy; + + copy = RCloneImage(image); + if (!copy) + return NULL; + + RCombineImageWithColor(copy, color); + pixPtr = WMCreatePixmapFromRImage(scrPtr, copy, 0); + RReleaseImage(copy); + + return pixPtr; +} + +WMPixmap *WMCreateBlendedPixmapFromFile(WMScreen * scrPtr, char *fileName, RColor * color) +{ + WMPixmap *pixPtr; + RImage *image; + + image = RLoadImage(scrPtr->rcontext, fileName, 0); + if (!image) + return NULL; + + RCombineImageWithColor(image, color); + + pixPtr = WMCreatePixmapFromRImage(scrPtr, image, 0); + + RReleaseImage(image); + + return pixPtr; +} + +WMPixmap *WMCreatePixmapFromXPMData(WMScreen * scrPtr, char **data) +{ + WMPixmap *pixPtr; + RImage *image; + + image = RGetImageFromXPMData(scrPtr->rcontext, data); + if (!image) + return NULL; + + pixPtr = WMCreatePixmapFromRImage(scrPtr, image, 127); + + RReleaseImage(image); + + return pixPtr; +} + +Pixmap WMGetPixmapXID(WMPixmap * pixmap) +{ + wassertrv(pixmap != NULL, None); + + return pixmap->pixmap; +} + +Pixmap WMGetPixmapMaskXID(WMPixmap * pixmap) +{ + wassertrv(pixmap != NULL, None); + + return pixmap->mask; +} + +WMSize WMGetPixmapSize(WMPixmap * pixmap) +{ + WMSize size = { 0, 0 }; + + wassertrv(pixmap != NULL, size); + + size.width = pixmap->width; + size.height = pixmap->height; + + return size; +} + +WMPixmap *WMGetSystemPixmap(WMScreen * scr, int image) +{ + switch (image) { + case WSIReturnArrow: + return WMRetainPixmap(scr->buttonArrow); + + case WSIHighlightedReturnArrow: + return WMRetainPixmap(scr->pushedButtonArrow); + + case WSIScrollerDimple: + return WMRetainPixmap(scr->scrollerDimple); + + case WSIArrowLeft: + return WMRetainPixmap(scr->leftArrow); + + case WSIHighlightedArrowLeft: + return WMRetainPixmap(scr->hiLeftArrow); + + case WSIArrowRight: + return WMRetainPixmap(scr->rightArrow); + + case WSIHighlightedArrowRight: + return WMRetainPixmap(scr->hiRightArrow); + + case WSIArrowUp: + return WMRetainPixmap(scr->upArrow); + + case WSIHighlightedArrowUp: + return WMRetainPixmap(scr->hiUpArrow); + + case WSIArrowDown: + return WMRetainPixmap(scr->downArrow); + + case WSIHighlightedArrowDown: + return WMRetainPixmap(scr->hiDownArrow); + + case WSICheckMark: + return WMRetainPixmap(scr->checkMark); + + default: + return NULL; + } +} + +void WMDrawPixmap(WMPixmap * pixmap, Drawable d, int x, int y) +{ + WMScreen *scr = pixmap->screen; + + XSetClipMask(scr->display, scr->clipGC, pixmap->mask); + XSetClipOrigin(scr->display, scr->clipGC, x, y); + + XCopyArea(scr->display, pixmap->pixmap, d, scr->clipGC, 0, 0, pixmap->width, pixmap->height, x, y); +}