Finally nailed a graphics bug I was looking for for quite some time. The only one I'm still seeing is with text. Sometimes the last line of text is not drawn.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12680 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -493,22 +493,23 @@ DisplayDriverPainter::FillRect(const BRect& r, const RGBColor& color)
|
|||||||
max_c(r.left, r.right),
|
max_c(r.left, r.right),
|
||||||
max_c(r.top, r.bottom));
|
max_c(r.top, r.bottom));
|
||||||
vr = fPainter->ClipRect(vr);
|
vr = fPainter->ClipRect(vr);
|
||||||
|
if (vr.IsValid()) {
|
||||||
fGraphicsCard->HideSoftwareCursor(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());
|
|
||||||
|
|
||||||
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();
|
Unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -523,37 +524,38 @@ DisplayDriverPainter::FillRect(const BRect &r, const DrawData *d)
|
|||||||
max_c(r.left, r.right),
|
max_c(r.left, r.right),
|
||||||
max_c(r.top, r.bottom));
|
max_c(r.top, r.bottom));
|
||||||
vr = fPainter->ClipRect(vr);
|
vr = fPainter->ClipRect(vr);
|
||||||
|
if (vr.IsValid()) {
|
||||||
fGraphicsCard->HideSoftwareCursor(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);
|
|
||||||
|
|
||||||
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();
|
Unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ roundf(float v)
|
|||||||
return (int)floorf(v - 0.5);
|
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
|
// constructor
|
||||||
Painter::Painter()
|
Painter::Painter()
|
||||||
@@ -634,8 +634,6 @@ void
|
|||||||
Painter::FillRect(const BRect& r, const rgb_color& c) const
|
Painter::FillRect(const BRect& r, const rgb_color& c) const
|
||||||
{
|
{
|
||||||
if (fBuffer && fValidClipping) {
|
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);
|
uint8* dst = fBuffer->row(0);
|
||||||
uint32 bpr = fBuffer->stride();
|
uint32 bpr = fBuffer->stride();
|
||||||
int32 left = (int32)r.left;
|
int32 left = (int32)r.left;
|
||||||
|
|||||||
Reference in New Issue
Block a user