Bug 124713. Fix transparency flag when clipping a view that grew bigger than its frame. r=kmcclusk,sr=attinasi

This commit is contained in:
roc+%cs.cmu.edu 2002-02-15 13:15:45 +00:00
Родитель 1606810d0a
Коммит f198069311
2 изменённых файлов: 24 добавлений и 10 удалений

Просмотреть файл

@ -501,12 +501,14 @@ nsContainerFrame::SyncFrameViewAfterReflow(nsIPresContext* aPresContext,
PositionFrameView(aPresContext, aFrame); PositionFrameView(aPresContext, aFrame);
} }
nsRect newSize(0, 0, frameSize.width, frameSize.height);
if (0 == (aFlags & NS_FRAME_NO_SIZE_VIEW)) { if (0 == (aFlags & NS_FRAME_NO_SIZE_VIEW)) {
// If the frame has child frames that stick outside the content // If the frame has child frames that stick outside the content
// area, then size the view large enough to include those child // area, then size the view large enough to include those child
// frames // frames
if ((kidState & NS_FRAME_OUTSIDE_CHILDREN) && aCombinedArea) { if ((kidState & NS_FRAME_OUTSIDE_CHILDREN) && aCombinedArea) {
vm->ResizeView(aView, *aCombinedArea); vm->ResizeView(aView, *aCombinedArea);
newSize = *aCombinedArea;
} else { } else {
nsRect bounds; nsRect bounds;
aView->GetBounds(bounds); aView->GetBounds(bounds);
@ -518,10 +520,15 @@ nsContainerFrame::SyncFrameViewAfterReflow(nsIPresContext* aPresContext,
// This is because some frames do not invalidate themselves properly. see bug 73825. // This is because some frames do not invalidate themselves properly. see bug 73825.
// Once bug 73825 is fixed, we should always pass PR_TRUE instead of // Once bug 73825 is fixed, we should always pass PR_TRUE instead of
// frameSize.width == width && frameSize.height >= height. // frameSize.width == width && frameSize.height >= height.
nsRect newSize(0, 0, frameSize.width, frameSize.height);
vm->ResizeView(aView, newSize, vm->ResizeView(aView, newSize,
(frameSize.width == bounds.width && frameSize.height >= bounds.height)); (frameSize.width == bounds.width && frameSize.height >= bounds.height));
} }
} else {
aView->GetBounds(newSize);
nscoord x, y;
aView->GetPosition(&x, &y);
newSize.x -= x;
newSize.y -= y;
} }
const nsStyleBackground* bg; const nsStyleBackground* bg;
@ -639,25 +646,25 @@ nsContainerFrame::SyncFrameViewAfterReflow(nsIPresContext* aPresContext,
if (display->mClipFlags & NS_STYLE_CLIP_RECT) { if (display->mClipFlags & NS_STYLE_CLIP_RECT) {
if (0 == (NS_STYLE_CLIP_TOP_AUTO & display->mClipFlags)) { if (0 == (NS_STYLE_CLIP_TOP_AUTO & display->mClipFlags)) {
clipRect.y = display->mClip.y; clipRect.y = display->mClip.y;
if (clipRect.y > 0) { if (clipRect.y > newSize.y) {
viewHasTransparentContent = PR_TRUE; viewHasTransparentContent = PR_TRUE;
} }
} }
if (0 == (NS_STYLE_CLIP_LEFT_AUTO & display->mClipFlags)) { if (0 == (NS_STYLE_CLIP_LEFT_AUTO & display->mClipFlags)) {
clipRect.x = display->mClip.x; clipRect.x = display->mClip.x;
if (clipRect.x > 0) { if (clipRect.x > newSize.x) {
viewHasTransparentContent = PR_TRUE; viewHasTransparentContent = PR_TRUE;
} }
} }
if (0 == (NS_STYLE_CLIP_RIGHT_AUTO & display->mClipFlags)) { if (0 == (NS_STYLE_CLIP_RIGHT_AUTO & display->mClipFlags)) {
clipRect.width = display->mClip.width; clipRect.width = display->mClip.width;
if (clipRect.width < frameSize.width) { if (clipRect.width < newSize.width) {
viewHasTransparentContent = PR_TRUE; viewHasTransparentContent = PR_TRUE;
} }
} }
if (0 == (NS_STYLE_CLIP_BOTTOM_AUTO & display->mClipFlags)) { if (0 == (NS_STYLE_CLIP_BOTTOM_AUTO & display->mClipFlags)) {
clipRect.height = display->mClip.height; clipRect.height = display->mClip.height;
if (clipRect.height < frameSize.height) { if (clipRect.height < newSize.height) {
viewHasTransparentContent = PR_TRUE; viewHasTransparentContent = PR_TRUE;
} }
} }

Просмотреть файл

@ -501,12 +501,14 @@ nsContainerFrame::SyncFrameViewAfterReflow(nsIPresContext* aPresContext,
PositionFrameView(aPresContext, aFrame); PositionFrameView(aPresContext, aFrame);
} }
nsRect newSize(0, 0, frameSize.width, frameSize.height);
if (0 == (aFlags & NS_FRAME_NO_SIZE_VIEW)) { if (0 == (aFlags & NS_FRAME_NO_SIZE_VIEW)) {
// If the frame has child frames that stick outside the content // If the frame has child frames that stick outside the content
// area, then size the view large enough to include those child // area, then size the view large enough to include those child
// frames // frames
if ((kidState & NS_FRAME_OUTSIDE_CHILDREN) && aCombinedArea) { if ((kidState & NS_FRAME_OUTSIDE_CHILDREN) && aCombinedArea) {
vm->ResizeView(aView, *aCombinedArea); vm->ResizeView(aView, *aCombinedArea);
newSize = *aCombinedArea;
} else { } else {
nsRect bounds; nsRect bounds;
aView->GetBounds(bounds); aView->GetBounds(bounds);
@ -518,10 +520,15 @@ nsContainerFrame::SyncFrameViewAfterReflow(nsIPresContext* aPresContext,
// This is because some frames do not invalidate themselves properly. see bug 73825. // This is because some frames do not invalidate themselves properly. see bug 73825.
// Once bug 73825 is fixed, we should always pass PR_TRUE instead of // Once bug 73825 is fixed, we should always pass PR_TRUE instead of
// frameSize.width == width && frameSize.height >= height. // frameSize.width == width && frameSize.height >= height.
nsRect newSize(0, 0, frameSize.width, frameSize.height);
vm->ResizeView(aView, newSize, vm->ResizeView(aView, newSize,
(frameSize.width == bounds.width && frameSize.height >= bounds.height)); (frameSize.width == bounds.width && frameSize.height >= bounds.height));
} }
} else {
aView->GetBounds(newSize);
nscoord x, y;
aView->GetPosition(&x, &y);
newSize.x -= x;
newSize.y -= y;
} }
const nsStyleBackground* bg; const nsStyleBackground* bg;
@ -639,25 +646,25 @@ nsContainerFrame::SyncFrameViewAfterReflow(nsIPresContext* aPresContext,
if (display->mClipFlags & NS_STYLE_CLIP_RECT) { if (display->mClipFlags & NS_STYLE_CLIP_RECT) {
if (0 == (NS_STYLE_CLIP_TOP_AUTO & display->mClipFlags)) { if (0 == (NS_STYLE_CLIP_TOP_AUTO & display->mClipFlags)) {
clipRect.y = display->mClip.y; clipRect.y = display->mClip.y;
if (clipRect.y > 0) { if (clipRect.y > newSize.y) {
viewHasTransparentContent = PR_TRUE; viewHasTransparentContent = PR_TRUE;
} }
} }
if (0 == (NS_STYLE_CLIP_LEFT_AUTO & display->mClipFlags)) { if (0 == (NS_STYLE_CLIP_LEFT_AUTO & display->mClipFlags)) {
clipRect.x = display->mClip.x; clipRect.x = display->mClip.x;
if (clipRect.x > 0) { if (clipRect.x > newSize.x) {
viewHasTransparentContent = PR_TRUE; viewHasTransparentContent = PR_TRUE;
} }
} }
if (0 == (NS_STYLE_CLIP_RIGHT_AUTO & display->mClipFlags)) { if (0 == (NS_STYLE_CLIP_RIGHT_AUTO & display->mClipFlags)) {
clipRect.width = display->mClip.width; clipRect.width = display->mClip.width;
if (clipRect.width < frameSize.width) { if (clipRect.width < newSize.width) {
viewHasTransparentContent = PR_TRUE; viewHasTransparentContent = PR_TRUE;
} }
} }
if (0 == (NS_STYLE_CLIP_BOTTOM_AUTO & display->mClipFlags)) { if (0 == (NS_STYLE_CLIP_BOTTOM_AUTO & display->mClipFlags)) {
clipRect.height = display->mClip.height; clipRect.height = display->mClip.height;
if (clipRect.height < frameSize.height) { if (clipRect.height < newSize.height) {
viewHasTransparentContent = PR_TRUE; viewHasTransparentContent = PR_TRUE;
} }
} }