GRAPHICS: Fix border loading

This commit is contained in:
Borja Lorente 2016-07-29 12:13:31 +02:00
parent d49d573edc
commit 26238ee6f9
2 changed files with 38 additions and 23 deletions

View File

@ -145,19 +145,10 @@ bool MacWindow::draw(ManagedSurface *g, bool forceRedraw) {
_contentIsDirty = false;
// Compose
_composeSurface.blitFrom(_surface, Common::Rect(0, 0, _surface.w - 2, _surface.h - 2), Common::Point(2, 2));
_composeSurface.transBlitFrom(_borderSurface, kColorGreen);
if (_borders) {
TransparentSurface tr(*_borders);
//tr.create(_composeSurface.w, _composeSurface.h, tr.getSupportedPixelFormat());
//_bmp->blit(tr, 0, 0, tr.w, tr.h)
_composeSurface.transBlitFrom(tr);
}
g->transBlitFrom(_composeSurface, _composeSurface.getBounds(), Common::Point(_dims.left - 2, _dims.top - 2), kColorGreen2);
return true;
@ -192,19 +183,43 @@ void MacWindow::updateInnerDims() {
void MacWindow::drawBorder() {
_borderIsDirty = false;
ManagedSurface *g = &_borderSurface;
prepareBorderSurface(g);
if (_borders)
drawBorderFromSurface(g);
else
drawSimpleBorder(g);
}
void MacWindow::prepareBorderSurface(ManagedSurface *g) {
// We draw rect with outer kColorGreen2 and inner kColorGreen, so on 2 passes we cut out
// scene by external shape of the border
int sz = kBorderWidth / 2;
int width = g->w;
int height = g->h;
g->clear(kColorGreen2);
g->fillRect(Common::Rect(sz, sz, width - sz, height - sz), kColorGreen);
}
void MacWindow::drawBorderFromSurface(ManagedSurface *g) {
TransparentSurface srf;
srf.create(_composeSurface.w, _composeSurface.h, _borders->format);
_bmp = new NinePatchBitmap(_borders, false);
_bmp->blit(srf, 0, 0, srf.w, srf.h);
_borderSurface.transBlitFrom(srf, _borderSurface.format.ARGBToColor(0, 255, 255, 255));
}
void MacWindow::drawSimpleBorder(ManagedSurface *g) {
bool active = _active, scrollable = _scrollable, closeable = _active, drawTitle = !_title.empty();
const int size = kBorderWidth;
int x = 0;
int y = 0;
int width = _borderSurface.w;
int height = _borderSurface.h;
ManagedSurface *g = &_borderSurface;
// We draw rect with outer kColorGreen2 and inner kColorGreen, so on 2 passes we cut out
// scene by external shape of the border
int sz = kBorderWidth / 2;
g->clear(kColorGreen2);
g->fillRect(Common::Rect(sz, sz, width - sz, height - sz), kColorGreen);
drawBox(g, x, y, size, size);
drawBox(g, x + width - size - 1, y, size, size);
@ -215,8 +230,6 @@ void MacWindow::drawBorder() {
drawBox(g, x + 2, y + size, size - 4, height - 2 * size - 1);
drawBox(g, x + width - size + 1, y + size, size - 4, height - 2 * size - 1);
if (active) {
fillRect(g, x + size, y + 5, width - 2 * size - 1, 8, kColorBlack);
fillRect(g, x + size, y + height - 13, width - 2 * size - 1, 8, kColorBlack);
@ -247,7 +260,7 @@ void MacWindow::drawBorder() {
int ry2 = ry1 + _dims.height() * _scrollSize;
Common::Rect rr(rx1, ry1, rx2, ry2);
drawFilledRect(rr, kColorBlack, drawPixelInverted, g);
Graphics::drawFilledRect(rr, kColorBlack, drawPixelInverted, g);
}
}
if (closeable) {
@ -260,7 +273,7 @@ void MacWindow::drawBorder() {
}
if (drawTitle) {
const Font *font = getTitleFont();
const Graphics::Font *font = getTitleFont();
int yOff = _wm->hasBuiltInFonts() ? 3 : 1;
int w = font->getStringWidth(_title) + 10;
@ -269,7 +282,7 @@ void MacWindow::drawBorder() {
w = maxWidth;
drawBox(g, x + (width - w) / 2, y, w, size);
font->drawString(g, _title, x + (width - w) / 2 + 5, y + yOff, w, kColorBlack);
}
}
}
void MacWindow::setHighlight(WindowClick highlightedPart) {
@ -290,7 +303,6 @@ void MacWindow::setHighlight(WindowClick highlightedPart) {
}
void MacWindow::setBorders(TransparentSurface *source) {
_bmp = new NinePatchBitmap(source, true);
_borders = new TransparentSurface(*source);
}

View File

@ -139,6 +139,9 @@ public:
private:
void drawBorder();
void prepareBorderSurface(ManagedSurface *g);
void drawSimpleBorder(ManagedSurface *g);
void drawBorderFromSurface(ManagedSurface *g);
void drawBox(ManagedSurface *g, int x, int y, int w, int h);
void fillRect(ManagedSurface *g, int x, int y, int w, int h, int color);
const Font *getTitleFont();
@ -150,7 +153,7 @@ private:
ManagedSurface _composeSurface;
NinePatchBitmap *_bmp;
TransparentSurface *_borders = nullptr;
TransparentSurface *_borders;
bool _scrollable;
bool _resizable;