mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 04:20:27 +01:00
Fixed bugs in raster.c code. Fixes bad icon image with some images.
This commit is contained in:
@@ -289,17 +289,19 @@ RCombineArea(RImage *image, RImage *src, int sx, int sy, unsigned width,
|
|||||||
assert(sy + height <= src->height);
|
assert(sy + height <= src->height);
|
||||||
assert(sx + width <= src->width);
|
assert(sx + width <= src->width);
|
||||||
|
|
||||||
|
if (width > image->width - dx)
|
||||||
|
width = image->width - dx;
|
||||||
|
|
||||||
if (height > image->height - dy)
|
if (height > image->height - dy)
|
||||||
height = image->height - dy;
|
height = image->height - dy;
|
||||||
|
|
||||||
if (!HAS_ALPHA(src)) {
|
if (!HAS_ALPHA(src)) {
|
||||||
if (!HAS_ALPHA(image)) {
|
if (!HAS_ALPHA(image)) {
|
||||||
swi = (src->width - width) * 3;
|
swi = src->width * 3;
|
||||||
dwi = (image->width - width) * 3;
|
dwi = image->width * 3;
|
||||||
|
|
||||||
d = image->data + dy*(int)image->width*3 + dx;
|
s = src->data + (sy*(int)src->width + sx) * 3;
|
||||||
s = src->data + sy*(int)src->width*3 + sx;
|
d = image->data + (dy*(int)image->width + dx) * 3;
|
||||||
|
|
||||||
for (y=0; y < height; y++) {
|
for (y=0; y < height; y++) {
|
||||||
memcpy(d, s, width*3);
|
memcpy(d, s, width*3);
|
||||||
@@ -310,8 +312,8 @@ RCombineArea(RImage *image, RImage *src, int sx, int sy, unsigned width,
|
|||||||
swi = (src->width - width) * 3;
|
swi = (src->width - width) * 3;
|
||||||
dwi = (image->width - width) * 4;
|
dwi = (image->width - width) * 4;
|
||||||
|
|
||||||
d = image->data + dy*(int)image->width*4 + dx;
|
s = src->data + (sy*(int)src->width + sx) * 3;
|
||||||
s = src->data + sy*(int)src->width*3 + sx;
|
d = image->data + (dy*(int)image->width + dx) * 4;
|
||||||
|
|
||||||
for (y=0; y < height; y++) {
|
for (y=0; y < height; y++) {
|
||||||
for (x=0; x < width; x++) {
|
for (x=0; x < width; x++) {
|
||||||
@@ -328,13 +330,13 @@ RCombineArea(RImage *image, RImage *src, int sx, int sy, unsigned width,
|
|||||||
int dalpha = HAS_ALPHA(image);
|
int dalpha = HAS_ALPHA(image);
|
||||||
|
|
||||||
swi = (src->width - width) * 4;
|
swi = (src->width - width) * 4;
|
||||||
s = src->data + sy*(int)src->width*4 + sx;
|
s = src->data + (sy*(int)src->width + sx) * 4;
|
||||||
if (!HAS_ALPHA(image)) {
|
if (!HAS_ALPHA(image)) {
|
||||||
dwi = (image->width - width) * 3;
|
dwi = (image->width - width) * 3;
|
||||||
d = image->data + (dy*(int)image->width+dx)*3;
|
d = image->data + (dy*(int)image->width + dx) * 3;
|
||||||
} else {
|
} else {
|
||||||
dwi = (image->width - width) * 4;
|
dwi = (image->width - width) * 4;
|
||||||
d = image->data + (dy*(int)image->width+dx)*4;
|
d = image->data + (dy*(int)image->width + dx) * 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (y=0; y < height; y++) {
|
for (y=0; y < height; y++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user