Umm, decorator was fully redrawn if another window went over it. This should happen in resizing only. Fixed that now.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8356 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Adi Oanca 2004-07-08 19:15:57 +00:00
parent 758822b29d
commit 826375885f
2 changed files with 17 additions and 7 deletions

View File

@ -65,6 +65,7 @@ Layer::Layer(BRect frame, const char *name, int32 token, uint32 resize,
fFlags = flags; fFlags = flags;
fAdFlags = 0; fAdFlags = 0;
fClassID = AS_LAYER_CLASS; fClassID = AS_LAYER_CLASS;
fFrameAction = B_LAYER_NONE;
fResizeMode = resize; fResizeMode = resize;
fHidden = false; fHidden = false;
@ -456,7 +457,7 @@ void Layer::RequestDraw(const BRegion &reg, Layer *startFrom)
// calculate the minimum region/rectangle to be updated with // calculate the minimum region/rectangle to be updated with
// a single message to the client. // a single message to the client.
fUpdateReg = fFullVisible; fUpdateReg = fFullVisible;
if (fFlags & B_FULL_UPDATE_ON_RESIZE){ } if (fFlags & B_FULL_UPDATE_ON_RESIZE && fFrameAction == B_LAYER_RESIZE){ }
else { fUpdateReg.IntersectWith(&reg); } else { fUpdateReg.IntersectWith(&reg); }
if (fUpdateReg.CountRects() > 0) if (fUpdateReg.CountRects() > 0)
@ -486,7 +487,7 @@ void Layer::RequestDraw(const BRegion &reg, Layer *startFrom)
else else
{ {
fUpdateReg = fVisible; fUpdateReg = fVisible;
if (fFlags & B_FULL_UPDATE_ON_RESIZE){ } if (fFlags & B_FULL_UPDATE_ON_RESIZE && fFrameAction == B_LAYER_RESIZE){ }
else { fUpdateReg.IntersectWith(&reg); } else { fUpdateReg.IntersectWith(&reg); }
if (fUpdateReg.CountRects() > 0) if (fUpdateReg.CountRects() > 0)
@ -1015,6 +1016,8 @@ void Layer::MoveBy(float x, float y)
return; return;
} }
fFrameAction = B_LAYER_MOVE;
BPoint pt(x,y); BPoint pt(x,y);
BRect rect(fFull.Frame().OffsetByCopy(pt)); BRect rect(fFull.Frame().OffsetByCopy(pt));
@ -1024,6 +1027,8 @@ void Layer::MoveBy(float x, float y)
EmptyGlobals(); EmptyGlobals();
fFrameAction = B_LAYER_NONE;
STRACE(("Layer(%s)::MoveBy() END\n", GetName())); STRACE(("Layer(%s)::MoveBy() END\n", GetName()));
} }
@ -1116,6 +1121,8 @@ void Layer::ResizeBy(float x, float y)
return; return;
} }
fFrameAction = B_LAYER_RESIZE;
BPoint pt(x,y); BPoint pt(x,y);
BRect rect(fFull.Frame()); BRect rect(fFull.Frame());
rect.right += x; rect.right += x;
@ -1128,6 +1135,8 @@ void Layer::ResizeBy(float x, float y)
EmptyGlobals(); EmptyGlobals();
fFrameAction = B_LAYER_NONE;
STRACE(("Layer(%s)::ResizeBy() END\n", GetName())); STRACE(("Layer(%s)::ResizeBy() END\n", GetName()));
} }

View File

@ -12,11 +12,11 @@
enum enum
{ {
B_LAYER_NONE = 0x00001000UL, B_LAYER_NONE = 0x1U,
B_LAYER_MOVE = 0x00002000UL, B_LAYER_MOVE = 0x2U,
B_LAYER_SIMPLE_MOVE = 0x00004000UL, B_LAYER_SIMPLE_MOVE = 0x3U,
B_LAYER_RESIZE = 0x00008000UL, B_LAYER_RESIZE = 0x4U,
B_LAYER_MASK_RESIZE = 0x00010000UL, B_LAYER_MASK_RESIZE = 0x5U,
}; };
enum enum
@ -157,6 +157,7 @@ protected:
bool fIsTopLayer; bool fIsTopLayer;
uint16 fAdFlags; uint16 fAdFlags;
int8 fClassID; int8 fClassID;
bool fFrameAction;
DisplayDriver *fDriver; DisplayDriver *fDriver;
LayerData *fLayerData; LayerData *fLayerData;