X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FImage.cc;h=4b27d49522bbc3c3c4eaeac1b8932fd9120b8b59;hb=01a6d810b6b35288410ed43819a940749d92362f;hp=7aaeefaf160b20b38e228f3559f702db4382cba2;hpb=6e07a64d3306ac26c0cb6bd029356fe1fcee4756;p=chaz%2Fopenbox diff --git a/src/Image.cc b/src/Image.cc index 7aaeefaf..4b27d495 100644 --- a/src/Image.cc +++ b/src/Image.cc @@ -107,54 +107,57 @@ Pixmap BImage::render_solid(const BTexture &texture) { XDrawLine(display, pixmap, peninterlace.gc(), 0, i, width, i); } - if (texture.texture() & BTexture::FlatBorder) { - BPen penborder(texture.colorTo()); - XDrawRectangle(display, pixmap, penborder.gc(), 0, 0, width-1, height-1); + int left = 0, top = 0, right = width - 1, bottom = height - 1; + + if (texture.texture() & BTexture::Border) { + BPen penborder(texture.borderColor()); + XDrawRectangle(display, pixmap, penborder.gc(), + left, top, right, bottom); } if (texture.texture() & BTexture::Bevel1) { if (texture.texture() & BTexture::Raised) { XDrawLine(display, pixmap, penshadow.gc(), - 0, height - 1, width - 1, height - 1); + left, bottom, right, bottom); XDrawLine(display, pixmap, penshadow.gc(), - width - 1, height - 1, width - 1, 0); + right, bottom, right, top); XDrawLine(display, pixmap, penlight.gc(), - 0, 0, width - 1, 0); + left, top, right, top); XDrawLine(display, pixmap, penlight.gc(), - 0, height - 1, 0, 0); + left, bottom, left, top); } else if (texture.texture() & BTexture::Sunken) { XDrawLine(display, pixmap, penlight.gc(), - 0, height - 1, width - 1, height - 1); + left, bottom, right, bottom); XDrawLine(display, pixmap, penlight.gc(), - width - 1, height - 1, width - 1, 0); + right, bottom, right, top); XDrawLine(display, pixmap, penshadow.gc(), - 0, 0, width - 1, 0); + left, top, right, top); XDrawLine(display, pixmap, penshadow.gc(), - 0, height - 1, 0, 0); + left, bottom, left, top); } } else if (texture.texture() & BTexture::Bevel2) { if (texture.texture() & BTexture::Raised) { XDrawLine(display, pixmap, penshadow.gc(), - 1, height - 3, width - 3, height - 3); + left + 1, bottom - 2, right - 2, bottom - 2); XDrawLine(display, pixmap, penshadow.gc(), - width - 3, height - 3, width - 3, 1); + right - 2, bottom - 2, right - 2, top + 1); XDrawLine(display, pixmap, penlight.gc(), - 1, 1, width - 3, 1); + left + 1, top + 1, right - 2, top + 1); XDrawLine(display, pixmap, penlight.gc(), - 1, height - 3, 1, 1); + left + 1, bottom - 2, left + 1, top + 1); } else if (texture.texture() & BTexture::Sunken) { XDrawLine(display, pixmap, penlight.gc(), - 1, height - 3, width - 3, height - 3); + left + 1, bottom - 2, right - 2, bottom - 2); XDrawLine(display, pixmap, penlight.gc(), - width - 3, height - 3, width - 3, 1); + right - 2, bottom - 2, right - 2, top + 1); XDrawLine(display, pixmap, penshadow.gc(), - 1, 1, width - 3, 1); + left + 1, top + 1, right - 2, top + 1); XDrawLine(display, pixmap, penshadow.gc(), - 1, height - 3, 1, 1); + left + 1, bottom - 2, left + 1, top + 1); } } @@ -193,6 +196,8 @@ Pixmap BImage::render_gradient(const BTexture &texture) { if (texture.texture() & BTexture::Bevel1) bevel1(); else if (texture.texture() & BTexture::Bevel2) bevel2(); + if (texture.texture() & BTexture::Border) border(texture); + if (inverted) invert(); return renderPixmap(); @@ -816,6 +821,46 @@ void BImage::bevel2(void) { } +void BImage::border(const BTexture &texture) { + register unsigned int i; + int r = texture.borderColor().red(), + g = texture.borderColor().green(), + b = texture.borderColor().blue(); + + unsigned char *pr, *pg, *pb; + + // top line + pr = red; + pg = green; + pb = blue; + for (i = 0; i < width; ++i) { + *pr++ = r; + *pg++ = g; + *pb++ = b; + } + + // left and right lines (pr,pg,pb are already lined up) + for (i = 1; i < height - 1; ++i) { + *pr = r; + *pg = g; + *pb = b; + pr += width - 1; + pg += width - 1; + pb += width - 1; + *pr++ = r; + *pg++ = g; + *pb++ = b; + } + + // bottom line (pr,pg,pb are already lined up) + for (i = 0; i < width; ++i) { + *pr++ = r; + *pg++ = g; + *pb++ = b; + } +} + + void BImage::invert(void) { register unsigned int i, j, wh = (width * height) - 1; unsigned char tmp;