We are now updating our drawings properly on resize.
ModifyFlags() now sets B_FRAME_EVENTS if B_FULL_UPDATE_ON_RESIZE was not set. Fixed a small bug in SetBorder(). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6665 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
26a96b1674
commit
ecae314976
@ -226,10 +226,11 @@ BScrollView::SetBorder(border_style border)
|
|||||||
if (fVerticalScrollBar != NULL)
|
if (fVerticalScrollBar != NULL)
|
||||||
horizontalGap = border != B_NO_BORDER ? 1 : -1;
|
horizontalGap = border != B_NO_BORDER ? 1 : -1;
|
||||||
|
|
||||||
change = border != B_NO_BORDER ? -2 : 1;
|
change = border != B_NO_BORDER ? -1 : 1;
|
||||||
|
if (fHorizontalScrollBar == NULL || fVerticalScrollBar == NULL)
|
||||||
|
change *= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fBorder = border;
|
fBorder = border;
|
||||||
|
|
||||||
int32 savedResizingMode = 0;
|
int32 savedResizingMode = 0;
|
||||||
@ -376,9 +377,44 @@ BScrollView::FrameResized(float width, float height)
|
|||||||
{
|
{
|
||||||
BView::FrameResized(width, height);
|
BView::FrameResized(width, height);
|
||||||
|
|
||||||
// ToDo: what are fPreviousWidth/fPreviousHeight used for?
|
if (fBorder == B_NO_BORDER)
|
||||||
// I would guess there could be some problems with resizing,
|
return;
|
||||||
// but I haven't investigated it yet.
|
|
||||||
|
// changes in width
|
||||||
|
|
||||||
|
BRect bounds = Bounds();
|
||||||
|
float border = BorderSize(fBorder) - 1;
|
||||||
|
|
||||||
|
if (bounds.Width() > fPreviousWidth) {
|
||||||
|
// invalidate the region between the old and the new right border
|
||||||
|
BRect rect = bounds;
|
||||||
|
rect.left += fPreviousWidth - border;
|
||||||
|
rect.right--;
|
||||||
|
Invalidate(rect);
|
||||||
|
} else if (bounds.Width() < fPreviousWidth) {
|
||||||
|
// invalidate the region of the new right border
|
||||||
|
BRect rect = bounds;
|
||||||
|
rect.left = rect.right - border;
|
||||||
|
Invalidate(rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
// changes in height
|
||||||
|
|
||||||
|
if (bounds.Height() > fPreviousHeight) {
|
||||||
|
// invalidate the region between the old and the new bottom border
|
||||||
|
BRect rect = bounds;
|
||||||
|
rect.top += fPreviousHeight - border;
|
||||||
|
rect.bottom--;
|
||||||
|
Invalidate(rect);
|
||||||
|
} else if (bounds.Height() < fPreviousHeight) {
|
||||||
|
// invalidate the region of the new bottom border
|
||||||
|
BRect rect = bounds;
|
||||||
|
rect.top = rect.bottom - border;
|
||||||
|
Invalidate(rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
fPreviousWidth = uint16(bounds.Width());
|
||||||
|
fPreviousHeight = uint16(bounds.Height());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -463,10 +499,12 @@ BScrollView::BorderSize(border_style border)
|
|||||||
int32
|
int32
|
||||||
BScrollView::ModifyFlags(int32 flags, border_style border)
|
BScrollView::ModifyFlags(int32 flags, border_style border)
|
||||||
{
|
{
|
||||||
|
// We either need B_FULL_UPDATE_ON_RESIZE or
|
||||||
|
// B_FRAME_EVENTS if we have to draw a border
|
||||||
if (border != B_NO_BORDER)
|
if (border != B_NO_BORDER)
|
||||||
return flags | B_WILL_DRAW;
|
return flags | B_WILL_DRAW | (flags & B_FULL_UPDATE_ON_RESIZE ? 0 : B_FRAME_EVENTS);
|
||||||
|
|
||||||
return flags & ~B_WILL_DRAW;
|
return flags & ~(B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user