diff --git a/src/servers/app/drawing/DisplayDriverPainter.cpp b/src/servers/app/drawing/DisplayDriverPainter.cpp index 2365d040fe..ba923672f4 100644 --- a/src/servers/app/drawing/DisplayDriverPainter.cpp +++ b/src/servers/app/drawing/DisplayDriverPainter.cpp @@ -493,22 +493,23 @@ DisplayDriverPainter::FillRect(const BRect& r, const RGBColor& color) max_c(r.left, r.right), max_c(r.top, r.bottom)); vr = fPainter->ClipRect(vr); - - fGraphicsCard->HideSoftwareCursor(vr); - - // try hardware optimized version first - if (fAvailableHWAccleration & HW_ACC_FILL_REGION) { - BRegion region(vr); - region.IntersectWith(fPainter->ClippingRegion()); - fGraphicsCard->FillRegion(region, color); - } else { - fPainter->FillRect(vr, color.GetColor32()); + if (vr.IsValid()) { + fGraphicsCard->HideSoftwareCursor(vr); - fGraphicsCard->Invalidate(vr); + // try hardware optimized version first + if (fAvailableHWAccleration & HW_ACC_FILL_REGION) { + BRegion region(vr); + region.IntersectWith(fPainter->ClippingRegion()); + fGraphicsCard->FillRegion(region, color); + } else { + fPainter->FillRect(vr, color.GetColor32()); + + fGraphicsCard->Invalidate(vr); + } + + fGraphicsCard->ShowSoftwareCursor(); } - fGraphicsCard->ShowSoftwareCursor(); - Unlock(); } } @@ -523,37 +524,38 @@ DisplayDriverPainter::FillRect(const BRect &r, const DrawData *d) max_c(r.left, r.right), max_c(r.top, r.bottom)); vr = fPainter->ClipRect(vr); - - fGraphicsCard->HideSoftwareCursor(vr); - - bool doInSoftware = true; - // try hardware optimized version first - if ((fAvailableHWAccleration & HW_ACC_FILL_REGION) && - (d->GetDrawingMode() == B_OP_COPY || - d->GetDrawingMode() == B_OP_OVER)) { - - if (d->GetPattern() == B_SOLID_HIGH) { - BRegion region(vr); - region.IntersectWith(fPainter->ClippingRegion()); - fGraphicsCard->FillRegion(region, d->HighColor()); - doInSoftware = false; - } else if (d->GetPattern() == B_SOLID_LOW) { - BRegion region(vr); - region.IntersectWith(fPainter->ClippingRegion()); - fGraphicsCard->FillRegion(region, d->LowColor()); - doInSoftware = false; - } - } - if (doInSoftware) { - - fPainter->SetDrawData(d); - BRect touched = fPainter->FillRect(vr); + if (vr.IsValid()) { + fGraphicsCard->HideSoftwareCursor(vr); - fGraphicsCard->Invalidate(touched); + bool doInSoftware = true; + // try hardware optimized version first + if ((fAvailableHWAccleration & HW_ACC_FILL_REGION) && + (d->GetDrawingMode() == B_OP_COPY || + d->GetDrawingMode() == B_OP_OVER)) { + + if (d->GetPattern() == B_SOLID_HIGH) { + BRegion region(vr); + region.IntersectWith(fPainter->ClippingRegion()); + fGraphicsCard->FillRegion(region, d->HighColor()); + doInSoftware = false; + } else if (d->GetPattern() == B_SOLID_LOW) { + BRegion region(vr); + region.IntersectWith(fPainter->ClippingRegion()); + fGraphicsCard->FillRegion(region, d->LowColor()); + doInSoftware = false; + } + } + if (doInSoftware) { + + fPainter->SetDrawData(d); + BRect touched = fPainter->FillRect(vr); + + fGraphicsCard->Invalidate(touched); + } + + fGraphicsCard->ShowSoftwareCursor(); } - fGraphicsCard->ShowSoftwareCursor(); - Unlock(); } } diff --git a/src/servers/app/drawing/Painter/Painter.cpp b/src/servers/app/drawing/Painter/Painter.cpp index 46fb32d1fd..9bbfd65799 100644 --- a/src/servers/app/drawing/Painter/Painter.cpp +++ b/src/servers/app/drawing/Painter/Painter.cpp @@ -40,7 +40,7 @@ roundf(float v) return (int)floorf(v - 0.5); } -#define CHECK_CLIPPING if (!fValidClipping) return BRect(0,0, -1, -1); +#define CHECK_CLIPPING if (!fValidClipping) return BRect(0, 0, -1, -1); // constructor Painter::Painter() @@ -634,8 +634,6 @@ void Painter::FillRect(const BRect& r, const rgb_color& c) const { if (fBuffer && fValidClipping) { -//printf("Painter::FillRect(BRect(%.1f, %.1f, %.1f, %.1f))\n", r.left, r.top, r.right, r.bottom); -//printf(" rgb_color(%d, %d, %d, %d)\n", c.red, c.green, c.blue, c.alpha); uint8* dst = fBuffer->row(0); uint32 bpr = fBuffer->stride(); int32 left = (int32)r.left;