bug #7032 Changed nsIWidget::Resize(...), nsIWidget::Move(...) to

use PRInt32 instead of PRUInt32. Modified Mac, and Linux to match.
bug #2010 Applied David Barrons patch for MakeSide ins CSSRendering.
nsIWidget - removed GetAbsoluteBounds - Not needed. Can use WidgetToScreen instead.
This commit is contained in:
kmcclusk%netscape.com 1999-07-27 23:26:36 +00:00
Родитель 3aae186860
Коммит 18b946cc00
22 изменённых файлов: 367 добавлений и 482 удалений

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

@ -203,165 +203,148 @@ PRIntn nsCSSRendering::MakeSide(nsPoint aPoints[],
nsIRenderingContext& aContext, nsIRenderingContext& aContext,
PRIntn whichSide, PRIntn whichSide,
const nsRect& outside, const nsRect& inside, const nsRect& outside, const nsRect& inside,
PRIntn aSkipSides,
PRIntn borderPart, float borderFrac, PRIntn borderPart, float borderFrac,
nscoord twipsPerPixel) nscoord twipsPerPixel)
{ {
float borderRest = 1.0f - borderFrac; float borderRest = 1.0f - borderFrac;
// XXX QQQ We really should decide to do a bevel based on whether there
// is a side adjacent or not. This could let you join borders across
// block elements (paragraphs).
PRIntn np = 0; PRIntn np = 0;
nscoord thickness; nscoord thickness, outsideEdge, insideEdge, outsideTL, insideTL, outsideBR,
insideBR;
// Initialize the following six nscoord's:
// outsideEdge, insideEdge, outsideTL, insideTL, outsideBR, insideBR
// so that outsideEdge is the x or y of the outside edge, etc., and
// outsideTR is the y or x at the top or right end, etc., e.g.:
//
// outsideEdge --- ----------------------------------------
// \ /
// \ /
// \ /
// insideEdge ------- ----------------------------------
// | | | |
// outsideTL insideTL insideBR outsideBR
//
// if we don't want the bevel, we'll get rid of it later by setting
// outsideXX to insideXX
switch (whichSide) {
case NS_SIDE_TOP:
// the TL points are the left end; the BR points are the right end
outsideEdge = outside.y;
insideEdge = inside.y;
outsideTL = outside.x;
insideTL = inside.x;
insideBR = inside.XMost();
outsideBR = outside.XMost();
break;
case NS_SIDE_BOTTOM:
// the TL points are the left end; the BR points are the right end
outsideEdge = outside.YMost();
insideEdge = inside.YMost();
outsideTL = outside.x;
insideTL = inside.x;
insideBR = inside.XMost();
outsideBR = outside.XMost();
break;
case NS_SIDE_LEFT:
// the TL points are the top end; the BR points are the bottom end
outsideEdge = outside.x;
insideEdge = inside.x;
outsideTL = outside.y;
insideTL = inside.y;
insideBR = inside.YMost();
outsideBR = outside.YMost();
break;
case NS_SIDE_RIGHT:
// the TL points are the top end; the BR points are the bottom end
outsideEdge = outside.XMost();
insideEdge = inside.XMost();
outsideTL = outside.y;
insideTL = inside.y;
insideBR = inside.YMost();
outsideBR = outside.YMost();
break;
}
// Don't draw the bevels if an adjacent side is skipped
if ( (whichSide == NS_SIDE_TOP) || (whichSide == NS_SIDE_BOTTOM) ) {
// a top or bottom side
if ((1<<NS_SIDE_LEFT) & aSkipSides) {
insideTL = outsideTL;
}
if ((1<<NS_SIDE_RIGHT) & aSkipSides) {
insideBR = outsideBR;
}
} else {
// a right or left side
if ((1<<NS_SIDE_TOP) & aSkipSides) {
insideTL = outsideTL;
}
if ((1<<NS_SIDE_BOTTOM) & aSkipSides) {
insideBR = outsideBR;
}
}
// move things around when only drawing part of the border
if (borderPart == BORDER_INSIDE) {
outsideEdge = nscoord(outsideEdge * borderFrac + insideEdge * borderRest);
outsideTL = nscoord(outsideTL * borderFrac + insideTL * borderRest);
outsideBR = nscoord(outsideBR * borderFrac + insideBR * borderRest);
} else if (borderPart == BORDER_OUTSIDE ) {
insideEdge = nscoord(insideEdge * borderFrac + outsideEdge * borderRest);
insideTL = nscoord(insideTL * borderFrac + outsideTL * borderRest);
insideBR = nscoord(insideBR * borderFrac + outsideBR * borderRest);
}
// Base our thickness check on the segment being less than a pixel and 1/2 // Base our thickness check on the segment being less than a pixel and 1/2
twipsPerPixel += twipsPerPixel >> 2; twipsPerPixel += twipsPerPixel >> 2;
switch (whichSide) { // find the thickness of the piece being drawn
case NS_SIDE_TOP: if ((whichSide == NS_SIDE_TOP) || (whichSide == NS_SIDE_LEFT)) {
if (borderPart == BORDER_FULL) { thickness = insideEdge - outsideEdge;
thickness = inside.y - outside.y; } else {
thickness = outsideEdge - insideEdge;
}
aPoints[np++].MoveTo(outside.x, outside.y); // if returning a line, do it along inside edge for bottom or right borders
aPoints[np++].MoveTo(outside.XMost(), outside.y); // so that it's in the same place as it would be with polygons (why?)
if (thickness >= twipsPerPixel) { // XXX The previous version of the code shortened the right border too.
aPoints[np++].MoveTo(inside.XMost(), inside.y); if ( !((thickness >= twipsPerPixel) || (borderPart != BORDER_FULL)) &&
aPoints[np++].MoveTo(inside.x, inside.y); ((whichSide == NS_SIDE_BOTTOM) || (whichSide == NS_SIDE_RIGHT))) {
} outsideEdge = insideEdge;
} else if (borderPart == BORDER_INSIDE) {
aPoints[np++].MoveTo(nscoord(outside.x * borderFrac +
inside.x * borderRest),
nscoord(outside.y * borderFrac +
inside.y * borderRest));
aPoints[np++].MoveTo(nscoord(outside.XMost() * borderFrac +
inside.XMost() * borderRest),
nscoord(outside.y * borderFrac +
inside.y * borderRest));
aPoints[np++].MoveTo(inside.XMost(), inside.y);
aPoints[np++].MoveTo(inside.x, inside.y);
} else {
aPoints[np++].MoveTo(outside.x, outside.y);
aPoints[np++].MoveTo(outside.XMost(), outside.y);
aPoints[np++].MoveTo(nscoord(inside.XMost() * borderFrac +
outside.XMost() * borderRest),
nscoord(inside.y * borderFrac +
outside.y * borderRest));
aPoints[np++].MoveTo(nscoord(inside.x * borderFrac +
outside.x * borderRest),
nscoord(inside.y * borderFrac +
outside.y * borderRest));
} }
break;
case NS_SIDE_LEFT: // return the appropriate line or trapezoid
if (borderPart == BORDER_FULL) { if ((whichSide == NS_SIDE_TOP) || (whichSide == NS_SIDE_BOTTOM)) {
thickness = inside.x - outside.x; // top and bottom borders
aPoints[np++].MoveTo(outsideTL,outsideEdge);
aPoints[np++].MoveTo(outside.x, outside.y); aPoints[np++].MoveTo(outsideBR,outsideEdge);
if (thickness >= twipsPerPixel) { // XXX Making this condition only (thickness >= twipsPerPixel) will
aPoints[np++].MoveTo(inside.x, inside.y); // improve double borders and some cases of groove/ridge,
aPoints[np++].MoveTo(inside.x, inside.YMost()); // but will cause problems with table borders. See last and third
} // from last tests in test4.htm
aPoints[np++].MoveTo(outside.x, outside.YMost()); // Doing it this way emulates the old behavior. It might be worth
} else if (borderPart == BORDER_INSIDE) { // fixing.
aPoints[np++].MoveTo(nscoord(outside.x * borderFrac + if ((thickness >= twipsPerPixel) || (borderPart != BORDER_FULL) ) {
inside.x * borderRest), aPoints[np++].MoveTo(insideBR,insideEdge);
nscoord(outside.y * borderFrac + aPoints[np++].MoveTo(insideTL,insideEdge);
inside.y * borderRest));
aPoints[np++].MoveTo(inside.x, inside.y);
aPoints[np++].MoveTo(inside.x, inside.YMost());
aPoints[np++].MoveTo(nscoord(outside.x * borderFrac +
inside.x * borderRest),
nscoord(outside.YMost() * borderFrac +
inside.YMost() * borderRest));
} else {
aPoints[np++].MoveTo(outside.x, outside.y);
aPoints[np++].MoveTo(nscoord(inside.x * borderFrac +
outside.x * borderRest),
nscoord(inside.y * borderFrac +
outside.y * borderRest));
aPoints[np++].MoveTo(nscoord(inside.x * borderFrac +
outside.x * borderRest),
nscoord(inside.YMost() * borderFrac +
outside.YMost() * borderRest));
aPoints[np++].MoveTo(outside.x, outside.YMost());
} }
break; } else {
// right and left borders
case NS_SIDE_BOTTOM: // XXX Ditto above
if (borderPart == BORDER_FULL) { if ((thickness >= twipsPerPixel) || (borderPart != BORDER_FULL) ) {
thickness = outside.YMost() - inside.YMost(); aPoints[np++].MoveTo(insideEdge,insideBR);
aPoints[np++].MoveTo(insideEdge,insideTL);
if (thickness >= twipsPerPixel) {
aPoints[np++].MoveTo(outside.x, outside.YMost());
aPoints[np++].MoveTo(inside.x, inside.YMost());
aPoints[np++].MoveTo(inside.XMost(), inside.YMost());
aPoints[np++].MoveTo(outside.XMost(), outside.YMost());
} else {
aPoints[np++].MoveTo(outside.x, inside.YMost());
aPoints[np++].MoveTo(outside.XMost(), inside.YMost());
}
} else if (borderPart == BORDER_INSIDE) {
aPoints[np++].MoveTo(nscoord(outside.x * borderFrac +
inside.x * borderRest),
nscoord(outside.YMost() * borderFrac +
inside.YMost() * borderRest));
aPoints[np++].MoveTo(inside.x, inside.YMost());
aPoints[np++].MoveTo(inside.XMost(), inside.YMost());
aPoints[np++].MoveTo(nscoord(outside.XMost() * borderFrac +
inside.XMost() * borderRest),
nscoord(outside.YMost() * borderFrac +
inside.YMost() * borderRest));
} else {
aPoints[np++].MoveTo(outside.x, outside.YMost());
aPoints[np++].MoveTo(nscoord(inside.x * borderFrac +
outside.x * borderRest),
nscoord(inside.YMost() * borderFrac +
outside.YMost() * borderRest));
aPoints[np++].MoveTo(nscoord(inside.XMost() * borderFrac +
outside.XMost() * borderRest),
nscoord(inside.YMost() * borderFrac +
outside.YMost() * borderRest));
aPoints[np++].MoveTo(outside.XMost(), outside.YMost());
} }
break; aPoints[np++].MoveTo(outsideEdge,outsideTL);
aPoints[np++].MoveTo(outsideEdge,outsideBR);
case NS_SIDE_RIGHT:
if (borderPart == BORDER_FULL) {
thickness = outside.XMost() - inside.XMost();
if (thickness >= twipsPerPixel) {
aPoints[np++].MoveTo(outside.XMost(), outside.YMost());
aPoints[np++].MoveTo(outside.XMost(), outside.y);
}
aPoints[np++].MoveTo(inside.XMost(), inside.y);
aPoints[np++].MoveTo(inside.XMost(), inside.YMost());
} else if (borderPart == BORDER_INSIDE) {
aPoints[np++].MoveTo(inside.XMost(), inside.y);
aPoints[np++].MoveTo(nscoord(outside.XMost() * borderFrac +
inside.XMost() * borderRest),
nscoord(outside.y * borderFrac +
inside.y * borderRest));
aPoints[np++].MoveTo(nscoord(outside.XMost() * borderFrac +
inside.XMost() * borderRest),
nscoord(outside.YMost() * borderFrac +
inside.YMost() * borderRest));
aPoints[np++].MoveTo(inside.XMost(), inside.YMost());
} else {
aPoints[np++].MoveTo(nscoord(inside.XMost() * borderFrac +
outside.XMost() * borderRest),
nscoord(inside.y * borderFrac +
outside.y * borderRest));
aPoints[np++].MoveTo(outside.XMost(), outside.y);
aPoints[np++].MoveTo(outside.XMost(), outside.YMost());
aPoints[np++].MoveTo(nscoord(inside.XMost() * borderFrac +
outside.XMost() * borderRest),
nscoord(inside.YMost() * borderFrac +
outside.YMost() * borderRest));
}
break;
} }
return np; return np;
} }
@ -373,6 +356,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
const nscolor aBackgroundColor, const nscolor aBackgroundColor,
const nsRect& borderOutside, const nsRect& borderOutside,
const nsRect& borderInside, const nsRect& borderInside,
PRIntn aSkipSides,
nscoord twipsPerPixel, nscoord twipsPerPixel,
nsRect* aGap) nsRect* aGap)
{ {
@ -391,7 +375,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
case NS_STYLE_BORDER_STYLE_GROOVE: case NS_STYLE_BORDER_STYLE_GROOVE:
case NS_STYLE_BORDER_STYLE_RIDGE: case NS_STYLE_BORDER_STYLE_RIDGE:
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, aSkipSides,
BORDER_INSIDE, 0.5f, twipsPerPixel); BORDER_INSIDE, 0.5f, twipsPerPixel);
aContext.SetColor ( MakeBevelColor (whichSide, aContext.SetColor ( MakeBevelColor (whichSide,
((theStyle == NS_STYLE_BORDER_STYLE_RIDGE) ? ((theStyle == NS_STYLE_BORDER_STYLE_RIDGE) ?
@ -406,7 +390,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
//aContext.FillPolygon (theSide, np); //aContext.FillPolygon (theSide, np);
FillPolygon (aContext, theSide, np, aGap); FillPolygon (aContext, theSide, np, aGap);
} }
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside,aSkipSides,
BORDER_OUTSIDE, 0.5f, twipsPerPixel); BORDER_OUTSIDE, 0.5f, twipsPerPixel);
aContext.SetColor ( MakeBevelColor (whichSide, theStyle, aBackgroundColor, aContext.SetColor ( MakeBevelColor (whichSide, theStyle, aBackgroundColor,
theColor, PR_TRUE)); theColor, PR_TRUE));
@ -420,7 +404,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
break; break;
case NS_STYLE_BORDER_STYLE_SOLID: case NS_STYLE_BORDER_STYLE_SOLID:
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside,aSkipSides,
BORDER_FULL, 1.0f, twipsPerPixel); BORDER_FULL, 1.0f, twipsPerPixel);
aContext.SetColor (borderColor); aContext.SetColor (borderColor);
if (2 == np) { if (2 == np) {
@ -433,7 +417,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
break; break;
case NS_STYLE_BORDER_STYLE_DOUBLE: case NS_STYLE_BORDER_STYLE_DOUBLE:
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside,aSkipSides,
BORDER_INSIDE, 0.333333f, twipsPerPixel); BORDER_INSIDE, 0.333333f, twipsPerPixel);
aContext.SetColor (borderColor); aContext.SetColor (borderColor);
if (2 == np) { if (2 == np) {
@ -443,7 +427,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
//aContext.FillPolygon (theSide, np); //aContext.FillPolygon (theSide, np);
FillPolygon (aContext, theSide, np, aGap); FillPolygon (aContext, theSide, np, aGap);
} }
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside,aSkipSides,
BORDER_OUTSIDE, 0.333333f, twipsPerPixel); BORDER_OUTSIDE, 0.333333f, twipsPerPixel);
if (2 == np) { if (2 == np) {
//aContext.DrawLine (theSide[0].x, theSide[0].y, theSide[1].x, theSide[1].y); //aContext.DrawLine (theSide[0].x, theSide[0].y, theSide[1].x, theSide[1].y);
@ -456,7 +440,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
case NS_STYLE_BORDER_STYLE_BG_OUTSET: case NS_STYLE_BORDER_STYLE_BG_OUTSET:
case NS_STYLE_BORDER_STYLE_BG_INSET: case NS_STYLE_BORDER_STYLE_BG_INSET:
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside,aSkipSides,
BORDER_FULL, 1.0f, twipsPerPixel); BORDER_FULL, 1.0f, twipsPerPixel);
aContext.SetColor ( MakeBevelColor (whichSide, theStyle, aBackgroundColor, aContext.SetColor ( MakeBevelColor (whichSide, theStyle, aBackgroundColor,
theColor, PR_FALSE)); theColor, PR_FALSE));
@ -470,7 +454,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
break; break;
case NS_STYLE_BORDER_STYLE_OUTSET: case NS_STYLE_BORDER_STYLE_OUTSET:
case NS_STYLE_BORDER_STYLE_INSET: case NS_STYLE_BORDER_STYLE_INSET:
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside,aSkipSides,
BORDER_FULL, 1.0f, twipsPerPixel); BORDER_FULL, 1.0f, twipsPerPixel);
aContext.SetColor ( MakeBevelColor (whichSide, theStyle, aBackgroundColor, aContext.SetColor ( MakeBevelColor (whichSide, theStyle, aBackgroundColor,
theColor, PR_TRUE)); theColor, PR_TRUE));
@ -1444,7 +1428,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext& aPresContext,
DrawSide(aRenderingContext, NS_SIDE_TOP, DrawSide(aRenderingContext, NS_SIDE_TOP,
aBorderStyle.GetBorderStyle(NS_SIDE_TOP), aBorderStyle.GetBorderStyle(NS_SIDE_TOP),
sideColor, sideColor,
bgColor->mBackgroundColor, inside,outside, bgColor->mBackgroundColor, inside,outside, aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1453,7 +1437,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext& aPresContext,
DrawSide(aRenderingContext, NS_SIDE_LEFT, DrawSide(aRenderingContext, NS_SIDE_LEFT,
aBorderStyle.GetBorderStyle(NS_SIDE_LEFT), aBorderStyle.GetBorderStyle(NS_SIDE_LEFT),
sideColor, sideColor,
bgColor->mBackgroundColor,inside, outside, bgColor->mBackgroundColor,inside, outside,aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1462,7 +1446,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext& aPresContext,
DrawSide(aRenderingContext, NS_SIDE_BOTTOM, DrawSide(aRenderingContext, NS_SIDE_BOTTOM,
aBorderStyle.GetBorderStyle(NS_SIDE_BOTTOM), aBorderStyle.GetBorderStyle(NS_SIDE_BOTTOM),
sideColor, sideColor,
bgColor->mBackgroundColor,inside, outside, bgColor->mBackgroundColor,inside, outside,aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1471,7 +1455,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext& aPresContext,
DrawSide(aRenderingContext, NS_SIDE_RIGHT, DrawSide(aRenderingContext, NS_SIDE_RIGHT,
aBorderStyle.GetBorderStyle(NS_SIDE_RIGHT), aBorderStyle.GetBorderStyle(NS_SIDE_RIGHT),
sideColor, sideColor,
bgColor->mBackgroundColor,inside, outside, bgColor->mBackgroundColor,inside, outside,aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1542,7 +1526,7 @@ void nsCSSRendering::PaintBorderEdges(nsIPresContext& aPresContext,
borderEdge->mStyle, borderEdge->mStyle,
borderEdge->mColor, borderEdge->mColor,
bgColor->mBackgroundColor, bgColor->mBackgroundColor,
inside, outside, inside, outside,aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1564,7 +1548,7 @@ void nsCSSRendering::PaintBorderEdges(nsIPresContext& aPresContext,
borderEdge->mStyle, borderEdge->mStyle,
borderEdge->mColor, borderEdge->mColor,
bgColor->mBackgroundColor, bgColor->mBackgroundColor,
inside, outside, inside, outside, aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1589,7 +1573,7 @@ void nsCSSRendering::PaintBorderEdges(nsIPresContext& aPresContext,
borderEdge->mStyle, borderEdge->mStyle,
borderEdge->mColor, borderEdge->mColor,
bgColor->mBackgroundColor, bgColor->mBackgroundColor,
inside, outside, inside, outside,aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1621,7 +1605,7 @@ void nsCSSRendering::PaintBorderEdges(nsIPresContext& aPresContext,
borderEdge->mStyle, borderEdge->mStyle,
borderEdge->mColor, borderEdge->mColor,
bgColor->mBackgroundColor, bgColor->mBackgroundColor,
inside, outside, inside, outside,aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }

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

@ -151,6 +151,7 @@ protected:
nsIRenderingContext& aContext, nsIRenderingContext& aContext,
PRIntn whichSide, PRIntn whichSide,
const nsRect& outside, const nsRect& inside, const nsRect& outside, const nsRect& inside,
PRIntn aSkipSides,
PRIntn borderPart, float borderFrac, PRIntn borderPart, float borderFrac,
nscoord twipsPerPixel); nscoord twipsPerPixel);
@ -161,6 +162,7 @@ protected:
const nscolor aBackgroundColor, const nscolor aBackgroundColor,
const nsRect& borderOutside, const nsRect& borderOutside,
const nsRect& borderInside, const nsRect& borderInside,
PRIntn aSkipSides,
nscoord twipsPerPixel, nscoord twipsPerPixel,
nsRect* aGap = 0); nsRect* aGap = 0);

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

@ -545,7 +545,7 @@ nsComboboxControlFrame::GetAbsoluteFramePosition(nsIPresContext& aPresContext,
// Add in the absolute offset of the widget. // Add in the absolute offset of the widget.
nsRect absBounds; nsRect absBounds;
widget->GetAbsoluteBounds(absBounds); //XXX: Remove this widget->GetAbsoluteBounds(absBounds);
// Convert widget coordinates to twips // Convert widget coordinates to twips
aAbsoluteTwipsRect.x += NSIntPixelsToTwips(absBounds.x, p2t); aAbsoluteTwipsRect.x += NSIntPixelsToTwips(absBounds.x, p2t);

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

@ -545,7 +545,7 @@ nsComboboxControlFrame::GetAbsoluteFramePosition(nsIPresContext& aPresContext,
// Add in the absolute offset of the widget. // Add in the absolute offset of the widget.
nsRect absBounds; nsRect absBounds;
widget->GetAbsoluteBounds(absBounds); //XXX: Remove this widget->GetAbsoluteBounds(absBounds);
// Convert widget coordinates to twips // Convert widget coordinates to twips
aAbsoluteTwipsRect.x += NSIntPixelsToTwips(absBounds.x, p2t); aAbsoluteTwipsRect.x += NSIntPixelsToTwips(absBounds.x, p2t);

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

@ -203,165 +203,148 @@ PRIntn nsCSSRendering::MakeSide(nsPoint aPoints[],
nsIRenderingContext& aContext, nsIRenderingContext& aContext,
PRIntn whichSide, PRIntn whichSide,
const nsRect& outside, const nsRect& inside, const nsRect& outside, const nsRect& inside,
PRIntn aSkipSides,
PRIntn borderPart, float borderFrac, PRIntn borderPart, float borderFrac,
nscoord twipsPerPixel) nscoord twipsPerPixel)
{ {
float borderRest = 1.0f - borderFrac; float borderRest = 1.0f - borderFrac;
// XXX QQQ We really should decide to do a bevel based on whether there
// is a side adjacent or not. This could let you join borders across
// block elements (paragraphs).
PRIntn np = 0; PRIntn np = 0;
nscoord thickness; nscoord thickness, outsideEdge, insideEdge, outsideTL, insideTL, outsideBR,
insideBR;
// Initialize the following six nscoord's:
// outsideEdge, insideEdge, outsideTL, insideTL, outsideBR, insideBR
// so that outsideEdge is the x or y of the outside edge, etc., and
// outsideTR is the y or x at the top or right end, etc., e.g.:
//
// outsideEdge --- ----------------------------------------
// \ /
// \ /
// \ /
// insideEdge ------- ----------------------------------
// | | | |
// outsideTL insideTL insideBR outsideBR
//
// if we don't want the bevel, we'll get rid of it later by setting
// outsideXX to insideXX
switch (whichSide) {
case NS_SIDE_TOP:
// the TL points are the left end; the BR points are the right end
outsideEdge = outside.y;
insideEdge = inside.y;
outsideTL = outside.x;
insideTL = inside.x;
insideBR = inside.XMost();
outsideBR = outside.XMost();
break;
case NS_SIDE_BOTTOM:
// the TL points are the left end; the BR points are the right end
outsideEdge = outside.YMost();
insideEdge = inside.YMost();
outsideTL = outside.x;
insideTL = inside.x;
insideBR = inside.XMost();
outsideBR = outside.XMost();
break;
case NS_SIDE_LEFT:
// the TL points are the top end; the BR points are the bottom end
outsideEdge = outside.x;
insideEdge = inside.x;
outsideTL = outside.y;
insideTL = inside.y;
insideBR = inside.YMost();
outsideBR = outside.YMost();
break;
case NS_SIDE_RIGHT:
// the TL points are the top end; the BR points are the bottom end
outsideEdge = outside.XMost();
insideEdge = inside.XMost();
outsideTL = outside.y;
insideTL = inside.y;
insideBR = inside.YMost();
outsideBR = outside.YMost();
break;
}
// Don't draw the bevels if an adjacent side is skipped
if ( (whichSide == NS_SIDE_TOP) || (whichSide == NS_SIDE_BOTTOM) ) {
// a top or bottom side
if ((1<<NS_SIDE_LEFT) & aSkipSides) {
insideTL = outsideTL;
}
if ((1<<NS_SIDE_RIGHT) & aSkipSides) {
insideBR = outsideBR;
}
} else {
// a right or left side
if ((1<<NS_SIDE_TOP) & aSkipSides) {
insideTL = outsideTL;
}
if ((1<<NS_SIDE_BOTTOM) & aSkipSides) {
insideBR = outsideBR;
}
}
// move things around when only drawing part of the border
if (borderPart == BORDER_INSIDE) {
outsideEdge = nscoord(outsideEdge * borderFrac + insideEdge * borderRest);
outsideTL = nscoord(outsideTL * borderFrac + insideTL * borderRest);
outsideBR = nscoord(outsideBR * borderFrac + insideBR * borderRest);
} else if (borderPart == BORDER_OUTSIDE ) {
insideEdge = nscoord(insideEdge * borderFrac + outsideEdge * borderRest);
insideTL = nscoord(insideTL * borderFrac + outsideTL * borderRest);
insideBR = nscoord(insideBR * borderFrac + outsideBR * borderRest);
}
// Base our thickness check on the segment being less than a pixel and 1/2 // Base our thickness check on the segment being less than a pixel and 1/2
twipsPerPixel += twipsPerPixel >> 2; twipsPerPixel += twipsPerPixel >> 2;
switch (whichSide) { // find the thickness of the piece being drawn
case NS_SIDE_TOP: if ((whichSide == NS_SIDE_TOP) || (whichSide == NS_SIDE_LEFT)) {
if (borderPart == BORDER_FULL) { thickness = insideEdge - outsideEdge;
thickness = inside.y - outside.y; } else {
thickness = outsideEdge - insideEdge;
}
aPoints[np++].MoveTo(outside.x, outside.y); // if returning a line, do it along inside edge for bottom or right borders
aPoints[np++].MoveTo(outside.XMost(), outside.y); // so that it's in the same place as it would be with polygons (why?)
if (thickness >= twipsPerPixel) { // XXX The previous version of the code shortened the right border too.
aPoints[np++].MoveTo(inside.XMost(), inside.y); if ( !((thickness >= twipsPerPixel) || (borderPart != BORDER_FULL)) &&
aPoints[np++].MoveTo(inside.x, inside.y); ((whichSide == NS_SIDE_BOTTOM) || (whichSide == NS_SIDE_RIGHT))) {
} outsideEdge = insideEdge;
} else if (borderPart == BORDER_INSIDE) {
aPoints[np++].MoveTo(nscoord(outside.x * borderFrac +
inside.x * borderRest),
nscoord(outside.y * borderFrac +
inside.y * borderRest));
aPoints[np++].MoveTo(nscoord(outside.XMost() * borderFrac +
inside.XMost() * borderRest),
nscoord(outside.y * borderFrac +
inside.y * borderRest));
aPoints[np++].MoveTo(inside.XMost(), inside.y);
aPoints[np++].MoveTo(inside.x, inside.y);
} else {
aPoints[np++].MoveTo(outside.x, outside.y);
aPoints[np++].MoveTo(outside.XMost(), outside.y);
aPoints[np++].MoveTo(nscoord(inside.XMost() * borderFrac +
outside.XMost() * borderRest),
nscoord(inside.y * borderFrac +
outside.y * borderRest));
aPoints[np++].MoveTo(nscoord(inside.x * borderFrac +
outside.x * borderRest),
nscoord(inside.y * borderFrac +
outside.y * borderRest));
} }
break;
case NS_SIDE_LEFT: // return the appropriate line or trapezoid
if (borderPart == BORDER_FULL) { if ((whichSide == NS_SIDE_TOP) || (whichSide == NS_SIDE_BOTTOM)) {
thickness = inside.x - outside.x; // top and bottom borders
aPoints[np++].MoveTo(outsideTL,outsideEdge);
aPoints[np++].MoveTo(outside.x, outside.y); aPoints[np++].MoveTo(outsideBR,outsideEdge);
if (thickness >= twipsPerPixel) { // XXX Making this condition only (thickness >= twipsPerPixel) will
aPoints[np++].MoveTo(inside.x, inside.y); // improve double borders and some cases of groove/ridge,
aPoints[np++].MoveTo(inside.x, inside.YMost()); // but will cause problems with table borders. See last and third
} // from last tests in test4.htm
aPoints[np++].MoveTo(outside.x, outside.YMost()); // Doing it this way emulates the old behavior. It might be worth
} else if (borderPart == BORDER_INSIDE) { // fixing.
aPoints[np++].MoveTo(nscoord(outside.x * borderFrac + if ((thickness >= twipsPerPixel) || (borderPart != BORDER_FULL) ) {
inside.x * borderRest), aPoints[np++].MoveTo(insideBR,insideEdge);
nscoord(outside.y * borderFrac + aPoints[np++].MoveTo(insideTL,insideEdge);
inside.y * borderRest));
aPoints[np++].MoveTo(inside.x, inside.y);
aPoints[np++].MoveTo(inside.x, inside.YMost());
aPoints[np++].MoveTo(nscoord(outside.x * borderFrac +
inside.x * borderRest),
nscoord(outside.YMost() * borderFrac +
inside.YMost() * borderRest));
} else {
aPoints[np++].MoveTo(outside.x, outside.y);
aPoints[np++].MoveTo(nscoord(inside.x * borderFrac +
outside.x * borderRest),
nscoord(inside.y * borderFrac +
outside.y * borderRest));
aPoints[np++].MoveTo(nscoord(inside.x * borderFrac +
outside.x * borderRest),
nscoord(inside.YMost() * borderFrac +
outside.YMost() * borderRest));
aPoints[np++].MoveTo(outside.x, outside.YMost());
} }
break; } else {
// right and left borders
case NS_SIDE_BOTTOM: // XXX Ditto above
if (borderPart == BORDER_FULL) { if ((thickness >= twipsPerPixel) || (borderPart != BORDER_FULL) ) {
thickness = outside.YMost() - inside.YMost(); aPoints[np++].MoveTo(insideEdge,insideBR);
aPoints[np++].MoveTo(insideEdge,insideTL);
if (thickness >= twipsPerPixel) {
aPoints[np++].MoveTo(outside.x, outside.YMost());
aPoints[np++].MoveTo(inside.x, inside.YMost());
aPoints[np++].MoveTo(inside.XMost(), inside.YMost());
aPoints[np++].MoveTo(outside.XMost(), outside.YMost());
} else {
aPoints[np++].MoveTo(outside.x, inside.YMost());
aPoints[np++].MoveTo(outside.XMost(), inside.YMost());
}
} else if (borderPart == BORDER_INSIDE) {
aPoints[np++].MoveTo(nscoord(outside.x * borderFrac +
inside.x * borderRest),
nscoord(outside.YMost() * borderFrac +
inside.YMost() * borderRest));
aPoints[np++].MoveTo(inside.x, inside.YMost());
aPoints[np++].MoveTo(inside.XMost(), inside.YMost());
aPoints[np++].MoveTo(nscoord(outside.XMost() * borderFrac +
inside.XMost() * borderRest),
nscoord(outside.YMost() * borderFrac +
inside.YMost() * borderRest));
} else {
aPoints[np++].MoveTo(outside.x, outside.YMost());
aPoints[np++].MoveTo(nscoord(inside.x * borderFrac +
outside.x * borderRest),
nscoord(inside.YMost() * borderFrac +
outside.YMost() * borderRest));
aPoints[np++].MoveTo(nscoord(inside.XMost() * borderFrac +
outside.XMost() * borderRest),
nscoord(inside.YMost() * borderFrac +
outside.YMost() * borderRest));
aPoints[np++].MoveTo(outside.XMost(), outside.YMost());
} }
break; aPoints[np++].MoveTo(outsideEdge,outsideTL);
aPoints[np++].MoveTo(outsideEdge,outsideBR);
case NS_SIDE_RIGHT:
if (borderPart == BORDER_FULL) {
thickness = outside.XMost() - inside.XMost();
if (thickness >= twipsPerPixel) {
aPoints[np++].MoveTo(outside.XMost(), outside.YMost());
aPoints[np++].MoveTo(outside.XMost(), outside.y);
}
aPoints[np++].MoveTo(inside.XMost(), inside.y);
aPoints[np++].MoveTo(inside.XMost(), inside.YMost());
} else if (borderPart == BORDER_INSIDE) {
aPoints[np++].MoveTo(inside.XMost(), inside.y);
aPoints[np++].MoveTo(nscoord(outside.XMost() * borderFrac +
inside.XMost() * borderRest),
nscoord(outside.y * borderFrac +
inside.y * borderRest));
aPoints[np++].MoveTo(nscoord(outside.XMost() * borderFrac +
inside.XMost() * borderRest),
nscoord(outside.YMost() * borderFrac +
inside.YMost() * borderRest));
aPoints[np++].MoveTo(inside.XMost(), inside.YMost());
} else {
aPoints[np++].MoveTo(nscoord(inside.XMost() * borderFrac +
outside.XMost() * borderRest),
nscoord(inside.y * borderFrac +
outside.y * borderRest));
aPoints[np++].MoveTo(outside.XMost(), outside.y);
aPoints[np++].MoveTo(outside.XMost(), outside.YMost());
aPoints[np++].MoveTo(nscoord(inside.XMost() * borderFrac +
outside.XMost() * borderRest),
nscoord(inside.YMost() * borderFrac +
outside.YMost() * borderRest));
}
break;
} }
return np; return np;
} }
@ -373,6 +356,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
const nscolor aBackgroundColor, const nscolor aBackgroundColor,
const nsRect& borderOutside, const nsRect& borderOutside,
const nsRect& borderInside, const nsRect& borderInside,
PRIntn aSkipSides,
nscoord twipsPerPixel, nscoord twipsPerPixel,
nsRect* aGap) nsRect* aGap)
{ {
@ -391,7 +375,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
case NS_STYLE_BORDER_STYLE_GROOVE: case NS_STYLE_BORDER_STYLE_GROOVE:
case NS_STYLE_BORDER_STYLE_RIDGE: case NS_STYLE_BORDER_STYLE_RIDGE:
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, aSkipSides,
BORDER_INSIDE, 0.5f, twipsPerPixel); BORDER_INSIDE, 0.5f, twipsPerPixel);
aContext.SetColor ( MakeBevelColor (whichSide, aContext.SetColor ( MakeBevelColor (whichSide,
((theStyle == NS_STYLE_BORDER_STYLE_RIDGE) ? ((theStyle == NS_STYLE_BORDER_STYLE_RIDGE) ?
@ -406,7 +390,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
//aContext.FillPolygon (theSide, np); //aContext.FillPolygon (theSide, np);
FillPolygon (aContext, theSide, np, aGap); FillPolygon (aContext, theSide, np, aGap);
} }
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside,aSkipSides,
BORDER_OUTSIDE, 0.5f, twipsPerPixel); BORDER_OUTSIDE, 0.5f, twipsPerPixel);
aContext.SetColor ( MakeBevelColor (whichSide, theStyle, aBackgroundColor, aContext.SetColor ( MakeBevelColor (whichSide, theStyle, aBackgroundColor,
theColor, PR_TRUE)); theColor, PR_TRUE));
@ -420,7 +404,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
break; break;
case NS_STYLE_BORDER_STYLE_SOLID: case NS_STYLE_BORDER_STYLE_SOLID:
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside,aSkipSides,
BORDER_FULL, 1.0f, twipsPerPixel); BORDER_FULL, 1.0f, twipsPerPixel);
aContext.SetColor (borderColor); aContext.SetColor (borderColor);
if (2 == np) { if (2 == np) {
@ -433,7 +417,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
break; break;
case NS_STYLE_BORDER_STYLE_DOUBLE: case NS_STYLE_BORDER_STYLE_DOUBLE:
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside,aSkipSides,
BORDER_INSIDE, 0.333333f, twipsPerPixel); BORDER_INSIDE, 0.333333f, twipsPerPixel);
aContext.SetColor (borderColor); aContext.SetColor (borderColor);
if (2 == np) { if (2 == np) {
@ -443,7 +427,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
//aContext.FillPolygon (theSide, np); //aContext.FillPolygon (theSide, np);
FillPolygon (aContext, theSide, np, aGap); FillPolygon (aContext, theSide, np, aGap);
} }
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside,aSkipSides,
BORDER_OUTSIDE, 0.333333f, twipsPerPixel); BORDER_OUTSIDE, 0.333333f, twipsPerPixel);
if (2 == np) { if (2 == np) {
//aContext.DrawLine (theSide[0].x, theSide[0].y, theSide[1].x, theSide[1].y); //aContext.DrawLine (theSide[0].x, theSide[0].y, theSide[1].x, theSide[1].y);
@ -456,7 +440,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
case NS_STYLE_BORDER_STYLE_BG_OUTSET: case NS_STYLE_BORDER_STYLE_BG_OUTSET:
case NS_STYLE_BORDER_STYLE_BG_INSET: case NS_STYLE_BORDER_STYLE_BG_INSET:
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside,aSkipSides,
BORDER_FULL, 1.0f, twipsPerPixel); BORDER_FULL, 1.0f, twipsPerPixel);
aContext.SetColor ( MakeBevelColor (whichSide, theStyle, aBackgroundColor, aContext.SetColor ( MakeBevelColor (whichSide, theStyle, aBackgroundColor,
theColor, PR_FALSE)); theColor, PR_FALSE));
@ -470,7 +454,7 @@ void nsCSSRendering::DrawSide(nsIRenderingContext& aContext,
break; break;
case NS_STYLE_BORDER_STYLE_OUTSET: case NS_STYLE_BORDER_STYLE_OUTSET:
case NS_STYLE_BORDER_STYLE_INSET: case NS_STYLE_BORDER_STYLE_INSET:
np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside, np = MakeSide (theSide, aContext, whichSide, borderOutside, borderInside,aSkipSides,
BORDER_FULL, 1.0f, twipsPerPixel); BORDER_FULL, 1.0f, twipsPerPixel);
aContext.SetColor ( MakeBevelColor (whichSide, theStyle, aBackgroundColor, aContext.SetColor ( MakeBevelColor (whichSide, theStyle, aBackgroundColor,
theColor, PR_TRUE)); theColor, PR_TRUE));
@ -1444,7 +1428,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext& aPresContext,
DrawSide(aRenderingContext, NS_SIDE_TOP, DrawSide(aRenderingContext, NS_SIDE_TOP,
aBorderStyle.GetBorderStyle(NS_SIDE_TOP), aBorderStyle.GetBorderStyle(NS_SIDE_TOP),
sideColor, sideColor,
bgColor->mBackgroundColor, inside,outside, bgColor->mBackgroundColor, inside,outside, aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1453,7 +1437,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext& aPresContext,
DrawSide(aRenderingContext, NS_SIDE_LEFT, DrawSide(aRenderingContext, NS_SIDE_LEFT,
aBorderStyle.GetBorderStyle(NS_SIDE_LEFT), aBorderStyle.GetBorderStyle(NS_SIDE_LEFT),
sideColor, sideColor,
bgColor->mBackgroundColor,inside, outside, bgColor->mBackgroundColor,inside, outside,aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1462,7 +1446,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext& aPresContext,
DrawSide(aRenderingContext, NS_SIDE_BOTTOM, DrawSide(aRenderingContext, NS_SIDE_BOTTOM,
aBorderStyle.GetBorderStyle(NS_SIDE_BOTTOM), aBorderStyle.GetBorderStyle(NS_SIDE_BOTTOM),
sideColor, sideColor,
bgColor->mBackgroundColor,inside, outside, bgColor->mBackgroundColor,inside, outside,aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1471,7 +1455,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext& aPresContext,
DrawSide(aRenderingContext, NS_SIDE_RIGHT, DrawSide(aRenderingContext, NS_SIDE_RIGHT,
aBorderStyle.GetBorderStyle(NS_SIDE_RIGHT), aBorderStyle.GetBorderStyle(NS_SIDE_RIGHT),
sideColor, sideColor,
bgColor->mBackgroundColor,inside, outside, bgColor->mBackgroundColor,inside, outside,aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1542,7 +1526,7 @@ void nsCSSRendering::PaintBorderEdges(nsIPresContext& aPresContext,
borderEdge->mStyle, borderEdge->mStyle,
borderEdge->mColor, borderEdge->mColor,
bgColor->mBackgroundColor, bgColor->mBackgroundColor,
inside, outside, inside, outside,aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1564,7 +1548,7 @@ void nsCSSRendering::PaintBorderEdges(nsIPresContext& aPresContext,
borderEdge->mStyle, borderEdge->mStyle,
borderEdge->mColor, borderEdge->mColor,
bgColor->mBackgroundColor, bgColor->mBackgroundColor,
inside, outside, inside, outside, aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1589,7 +1573,7 @@ void nsCSSRendering::PaintBorderEdges(nsIPresContext& aPresContext,
borderEdge->mStyle, borderEdge->mStyle,
borderEdge->mColor, borderEdge->mColor,
bgColor->mBackgroundColor, bgColor->mBackgroundColor,
inside, outside, inside, outside,aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }
@ -1621,7 +1605,7 @@ void nsCSSRendering::PaintBorderEdges(nsIPresContext& aPresContext,
borderEdge->mStyle, borderEdge->mStyle,
borderEdge->mColor, borderEdge->mColor,
bgColor->mBackgroundColor, bgColor->mBackgroundColor,
inside, outside, inside, outside,aSkipSides,
twipsPerPixel, aGap); twipsPerPixel, aGap);
} }
} }

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

@ -151,6 +151,7 @@ protected:
nsIRenderingContext& aContext, nsIRenderingContext& aContext,
PRIntn whichSide, PRIntn whichSide,
const nsRect& outside, const nsRect& inside, const nsRect& outside, const nsRect& inside,
PRIntn aSkipSides,
PRIntn borderPart, float borderFrac, PRIntn borderPart, float borderFrac,
nscoord twipsPerPixel); nscoord twipsPerPixel);
@ -161,6 +162,7 @@ protected:
const nscolor aBackgroundColor, const nscolor aBackgroundColor,
const nsRect& borderOutside, const nsRect& borderOutside,
const nsRect& borderInside, const nsRect& borderInside,
PRIntn aSkipSides,
nscoord twipsPerPixel, nscoord twipsPerPixel,
nsRect* aGap = 0); nsRect* aGap = 0);

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

@ -1,70 +0,0 @@
<html>
<body>
<form>
<BR>
<P> empty listbox size = 3
<BR>
<select size = 3>
</select>
<P> Side by Side listboxes <P> (left - single select, right - multiselect)
<BR>
<select name=select1 size=2>
<option>option 1</option>
<option>option 2</option>
<option selected>option 3</option>
<option>option 4</option>
<option>option 5</option>
<option>option 6</option>
<option>option 7</option>
<option>option 8</option>
</select>
<select name=select2 size=4 multiple>
<option>option 1</option>
<option>option 2</option>
<option>option 3</option>
<option>option 4</option>
<option>option 5</option>
</select>
<br>
<P> This listbox should be on a new line with now scrollbars
<BR>
<select name=select3 size=4 multiple>
<option>option 1</option>
<option>option 2</option>
</select>
<BR>
<P> This listbox has a specified width of 500px
<BR>
<select name=select4 style="width:500px;" size=2 multiple>
<option>option 1</option>
<option>option 2</option>
<option>option 3</option>
</select>
<BR>
<P> This listbox has a specified height of 100px
<BR>
<select name=select4 style="height:100px;" size=2 multiple>
<option>option 1</option>
<option>option 2</option>
<option>option 3</option>
</select>
<BR>
<P> This listbox should have 5pixel red inset borders
<P> the first option has orange text.
<P> the second option has yellow text.
<BR>
<select name=select5 style="border: 5px inset red;" size=3 multiple>
<option style="color:orange;">option 2</option>
<option style="color:yellow;">option 1</option>
<option>option 3</option>
<option>option 4</option>
</select>
<BR>
</body>
</body>
</html>

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

@ -313,7 +313,7 @@ class nsIWidget : public nsISupports {
* @param aY the new y position expressed in the parent's coordinate system * @param aY the new y position expressed in the parent's coordinate system
* *
**/ **/
NS_IMETHOD Move(PRUint32 aX, PRUint32 aY) = 0; NS_IMETHOD Move(PRInt32 aX, PRInt32 aY) = 0;
/** /**
* Resize this widget. * Resize this widget.
@ -323,9 +323,9 @@ class nsIWidget : public nsISupports {
* @param aRepaint whether the widget should be repainted * @param aRepaint whether the widget should be repainted
* *
*/ */
NS_IMETHOD Resize(PRUint32 aWidth, NS_IMETHOD Resize(PRInt32 aWidth,
PRUint32 aHeight, PRInt32 aHeight,
PRBool aRepaint) = 0; PRBool aRepaint) = 0;
/** /**
* Move or resize this widget. * Move or resize this widget.
@ -337,11 +337,11 @@ class nsIWidget : public nsISupports {
* @param aRepaint whether the widget should be repainted if the size changes * @param aRepaint whether the widget should be repainted if the size changes
* *
*/ */
NS_IMETHOD Resize(PRUint32 aX, NS_IMETHOD Resize(PRInt32 aX,
PRUint32 aY, PRInt32 aY,
PRUint32 aWidth, PRInt32 aWidth,
PRUint32 aHeight, PRInt32 aHeight,
PRBool aRepaint) = 0; PRBool aRepaint) = 0;
/** /**
* Enable or disable this Widget * Enable or disable this Widget
@ -364,13 +364,6 @@ class nsIWidget : public nsISupports {
*/ */
NS_IMETHOD GetBounds(nsRect &aRect) = 0; NS_IMETHOD GetBounds(nsRect &aRect) = 0;
/**
* Get this widget's absolute outside dimensions,
*
* @param aRect on return it holds the x. y, width and height of this widget
*
*/
NS_IMETHOD GetAbsoluteBounds(nsRect &aRect) = 0;
/** /**
* Get this widget's client area dimensions, if the window has a 3D border appearance * Get this widget's client area dimensions, if the window has a 3D border appearance

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

@ -308,7 +308,7 @@ NS_METHOD nsWidget::IsVisible(PRBool &aState)
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
NS_METHOD nsWidget::Move(PRUint32 aX, PRUint32 aY) NS_METHOD nsWidget::Move(PRInt32 aX, PRInt32 aY)
{ {
if (mWidget) { if (mWidget) {
::gtk_layout_move(GTK_LAYOUT(mWidget->parent), mWidget, aX, aY); ::gtk_layout_move(GTK_LAYOUT(mWidget->parent), mWidget, aX, aY);
@ -316,7 +316,7 @@ NS_METHOD nsWidget::Move(PRUint32 aX, PRUint32 aY)
return NS_OK; return NS_OK;
} }
NS_METHOD nsWidget::Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint) NS_METHOD nsWidget::Resize(PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint)
{ {
#if 0 #if 0
printf("nsWidget::Resize %s (%p) to %d %d\n", printf("nsWidget::Resize %s (%p) to %d %d\n",
@ -337,8 +337,8 @@ NS_METHOD nsWidget::Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint)
return NS_OK; return NS_OK;
} }
NS_METHOD nsWidget::Resize(PRUint32 aX, PRUint32 aY, PRUint32 aWidth, NS_METHOD nsWidget::Resize(PRInt32 aX, PRInt32 aY, PRInt32 aWidth,
PRUint32 aHeight, PRBool aRepaint) PRInt32 aHeight, PRBool aRepaint)
{ {
Resize(aWidth,aHeight,aRepaint); Resize(aWidth,aHeight,aRepaint);
Move(aX,aY); Move(aX,aY);

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

@ -87,10 +87,10 @@ class nsWidget : public nsBaseWidget
NS_IMETHOD Show(PRBool state); NS_IMETHOD Show(PRBool state);
NS_IMETHOD IsVisible(PRBool &aState); NS_IMETHOD IsVisible(PRBool &aState);
NS_IMETHOD Move(PRUint32 aX, PRUint32 aY); NS_IMETHOD Move(PRInt32 aX, PRInt32 aY);
NS_IMETHOD Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint); NS_IMETHOD Resize(PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint);
NS_IMETHOD Resize(PRUint32 aX, PRUint32 aY, PRUint32 aWidth, NS_IMETHOD Resize(PRInt32 aX, PRInt32 aY, PRInt32 aWidth,
PRUint32 aHeight, PRBool aRepaint); PRInt32 aHeight, PRBool aRepaint);
NS_IMETHOD Enable(PRBool aState); NS_IMETHOD Enable(PRBool aState);
NS_IMETHOD SetFocus(void); NS_IMETHOD SetFocus(void);

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

@ -693,7 +693,17 @@ NS_METHOD nsWindow::ShowMenuBar(PRBool aShow)
return NS_OK; return NS_OK;
} }
NS_METHOD nsWindow::IsMenuBarVisible(PRBool *aVisible)
{
*aVisible = PR_TRUE;
return NS_ERROR_FAILURE; // todo: (maybe. method isn't actually used yet.)
}
<<<<<<< nsWindow.cpp
NS_METHOD nsWindow::Move(PRInt32 aX, PRInt32 aY)
=======
NS_METHOD nsWindow::Move(PRUint32 aX, PRUint32 aY) NS_METHOD nsWindow::Move(PRUint32 aX, PRUint32 aY)
>>>>>>> 1.135
{ {
// not implimented for toplevel windows // not implimented for toplevel windows
if (mIsToplevel && mShell) if (mIsToplevel && mShell)
@ -719,7 +729,7 @@ NS_METHOD nsWindow::Move(PRUint32 aX, PRUint32 aY)
} }
NS_METHOD nsWindow::Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint) NS_METHOD nsWindow::Resize(PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint)
{ {
#if 0 #if 0
printf("nsWidget::Resize %s (%p) to %d %d\n", printf("nsWidget::Resize %s (%p) to %d %d\n",
@ -759,8 +769,8 @@ NS_METHOD nsWindow::Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint)
} }
NS_METHOD nsWindow::Resize(PRUint32 aX, PRUint32 aY, PRUint32 aWidth, NS_METHOD nsWindow::Resize(PRInt32 aX, PRInt32 aY, PRInt32 aWidth,
PRUint32 aHeight, PRBool aRepaint) PRInt32 aHeight, PRBool aRepaint)
{ {
Resize(aWidth,aHeight,aRepaint); Resize(aWidth,aHeight,aRepaint);
Move(aX,aY); Move(aX,aY);

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

@ -62,11 +62,16 @@ public:
NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar); NS_IMETHOD SetMenuBar(nsIMenuBar * aMenuBar);
NS_IMETHOD Show(PRBool aShow); NS_IMETHOD Show(PRBool aShow);
NS_IMETHOD ShowMenuBar(PRBool aShow); NS_IMETHOD ShowMenuBar(PRBool aShow);
<<<<<<< nsWindow.h
NS_IMETHOD Move(PRInt32 aX, PRInt32 aY);
NS_IMETHOD IsMenuBarVisible(PRBool *aVisible);
=======
NS_IMETHOD Move(PRUint32 aX, PRUint32 aY); NS_IMETHOD Move(PRUint32 aX, PRUint32 aY);
>>>>>>> 1.45
NS_IMETHOD Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint); NS_IMETHOD Resize(PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint);
NS_IMETHOD Resize(PRUint32 aX, PRUint32 aY, PRUint32 aWidth, NS_IMETHOD Resize(PRInt32 aX, PRInt32 aY, PRInt32 aWidth,
PRUint32 aHeight, PRBool aRepaint); PRInt32 aHeight, PRBool aRepaint);
NS_IMETHOD Invalidate(PRBool aIsSynchronous); NS_IMETHOD Invalidate(PRBool aIsSynchronous);
NS_IMETHOD Invalidate(const nsRect &aRect, PRBool aIsSynchronous); NS_IMETHOD Invalidate(const nsRect &aRect, PRBool aIsSynchronous);

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

@ -487,7 +487,7 @@ NS_IMETHODIMP nsMacWindow::Show(PRBool bState)
// Move this window // Move this window
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
NS_IMETHODIMP nsMacWindow::Move(PRUint32 aX, PRUint32 aY) NS_IMETHODIMP nsMacWindow::Move(PRInt32 aX, PRInt32 aY)
{ {
if (mWindowMadeHere) if (mWindowMadeHere)
{ {
@ -567,7 +567,7 @@ NS_IMETHODIMP nsMacWindow::Move(PRUint32 aX, PRUint32 aY)
// Resize this window // Resize this window
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
NS_IMETHODIMP nsMacWindow::Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint) NS_IMETHODIMP nsMacWindow::Resize(PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint)
{ {
if (mWindowMadeHere) if (mWindowMadeHere)
{ {

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

@ -72,8 +72,8 @@ public:
nsNativeWidget aNativeParent = nsnull); nsNativeWidget aNativeParent = nsnull);
NS_IMETHOD Show(PRBool aState); NS_IMETHOD Show(PRBool aState);
NS_IMETHOD Move(PRUint32 aX, PRUint32 aY); NS_IMETHOD Move(PRInt32 aX, PRInt32 aY);
NS_IMETHOD Resize(PRUint32 aWidth,PRUint32 aHeight, PRBool aRepaint); NS_IMETHOD Resize(PRInt32 aWidth,PRInt32 aHeight, PRBool aRepaint);
virtual PRBool OnPaint(nsPaintEvent &event); virtual PRBool OnPaint(nsPaintEvent &event);
NS_IMETHOD SetTitle(const nsString& aTitle); NS_IMETHOD SetTitle(const nsString& aTitle);

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

@ -563,7 +563,7 @@ NS_METHOD nsTextAreaWidget::GetText(nsString& aTextBuffer, PRUint32 aBufferSize
* @param aRepaint -- indicates if a repaint is needed. * @param aRepaint -- indicates if a repaint is needed.
* @return PR_TRUE if the pt is contained in the widget * @return PR_TRUE if the pt is contained in the widget
*/ */
NS_IMETHODIMP nsTextAreaWidget::Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint) NS_IMETHODIMP nsTextAreaWidget::Resize(PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint)
{ {
return Resize(0, 0, aWidth, aHeight, aRepaint); return Resize(0, 0, aWidth, aHeight, aRepaint);
} }
@ -578,7 +578,7 @@ NS_IMETHODIMP nsTextAreaWidget::Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool
* @param aW * @param aW
* @return PR_TRUE * @return PR_TRUE
*/ */
NS_IMETHODIMP nsTextAreaWidget::Resize(PRUint32 aX, PRUint32 aY, PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint) NS_IMETHODIMP nsTextAreaWidget::Resize(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint)
{ {
Inherited::Resize(aX, aY, aWidth, aHeight, aRepaint); Inherited::Resize(aX, aY, aWidth, aHeight, aRepaint);

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

@ -67,8 +67,8 @@ public:
NS_IMETHOD GetSelection(PRUint32 *aStartSel, PRUint32 *aEndSel); NS_IMETHOD GetSelection(PRUint32 *aStartSel, PRUint32 *aEndSel);
NS_IMETHOD SetCaretPosition(PRUint32 aPosition); NS_IMETHOD SetCaretPosition(PRUint32 aPosition);
NS_IMETHOD GetCaretPosition(PRUint32& aPosition); NS_IMETHOD GetCaretPosition(PRUint32& aPosition);
NS_IMETHOD Resize(PRUint32 aWidth,PRUint32 aHeight, PRBool aRepaint); NS_IMETHOD Resize(PRInt32 aWidth,PRInt32 aHeight, PRBool aRepaint);
NS_IMETHOD Resize(PRUint32 aX, PRUint32 aY,PRUint32 aWidth,PRUint32 aHeight, PRBool aRepaint); NS_IMETHOD Resize(PRInt32 aX, PRInt32 aY,PRInt32 aWidth,PRInt32 aHeight, PRBool aRepaint);
virtual PRBool OnPaint(nsPaintEvent & aEvent); virtual PRBool OnPaint(nsPaintEvent & aEvent);

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

@ -525,7 +525,7 @@ NS_IMETHODIMP nsWindow::GetBounds(nsRect &aRect)
// Move this component // Move this component
// aX and aY are in the parent widget coordinate system // aX and aY are in the parent widget coordinate system
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
NS_IMETHODIMP nsWindow::Move(PRUint32 aX, PRUint32 aY) NS_IMETHODIMP nsWindow::Move(PRInt32 aX, PRInt32 aY)
{ {
if ((mBounds.x != aX) || (mBounds.y != aY)) if ((mBounds.x != aX) || (mBounds.y != aY))
{ {
@ -551,7 +551,7 @@ NS_IMETHODIMP nsWindow::Move(PRUint32 aX, PRUint32 aY)
// Resize this component // Resize this component
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
NS_IMETHODIMP nsWindow::Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint) NS_IMETHODIMP nsWindow::Resize(PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint)
{ {
if ((mBounds.width != aWidth) || (mBounds.height != aHeight)) if ((mBounds.width != aWidth) || (mBounds.height != aHeight))
{ {
@ -577,7 +577,7 @@ NS_IMETHODIMP nsWindow::Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool aRepain
// Resize this component // Resize this component
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
NS_IMETHODIMP nsWindow::Resize(PRUint32 aX, PRUint32 aY, PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint) NS_IMETHODIMP nsWindow::Resize(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint)
{ {
nsWindow::Move(aX, aY); nsWindow::Move(aX, aY);
nsWindow::Resize(aWidth, aHeight, aRepaint); nsWindow::Resize(aWidth, aHeight, aRepaint);

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

@ -84,9 +84,9 @@ public:
NS_IMETHOD Show(PRBool aState); NS_IMETHOD Show(PRBool aState);
NS_IMETHOD IsVisible(PRBool & aState); NS_IMETHOD IsVisible(PRBool & aState);
NS_IMETHOD Move(PRUint32 aX, PRUint32 aY); NS_IMETHOD Move(PRInt32 aX, PRInt32 aY);
NS_IMETHOD Resize(PRUint32 aWidth,PRUint32 aHeight, PRBool aRepaint); NS_IMETHOD Resize(PRInt32 aWidth,PRInt32 aHeight, PRBool aRepaint);
NS_IMETHOD Resize(PRUint32 aX, PRUint32 aY,PRUint32 aWidth,PRUint32 aHeight, PRBool aRepaint); NS_IMETHOD Resize(PRInt32 aX, PRInt32 aY,PRInt32 aWidth,PRInt32 aHeight, PRBool aRepaint);
NS_IMETHOD Enable(PRBool bState); NS_IMETHOD Enable(PRBool bState);
NS_IMETHOD SetFocus(void); NS_IMETHOD SetFocus(void);

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

@ -659,6 +659,10 @@ nsresult nsWindow::StandardWindowCreate(nsIWidget *aParent,
extendedStyle = WS_EX_TOPMOST; extendedStyle = WS_EX_TOPMOST;
style = WS_POPUP; style = WS_POPUP;
mBorderlessParent = parent; mBorderlessParent = parent;
// Get the top most level window to use as the parent
while (::GetParent(parent)) {
parent = ::GetParent(parent);
}
} }
if (aInitData->mBorderStyle != eBorderStyle_all) { if (aInitData->mBorderStyle != eBorderStyle_all) {
@ -882,7 +886,7 @@ NS_METHOD nsWindow::IsVisible(PRBool & bState)
// Move this component // Move this component
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
NS_METHOD nsWindow::Move(PRUint32 aX, PRUint32 aY) NS_METHOD nsWindow::Move(PRInt32 aX, PRInt32 aY)
{ {
// When moving a borderless top-level window the window // When moving a borderless top-level window the window
// must be placed relative to its parent. WIN32 wants to // must be placed relative to its parent. WIN32 wants to
@ -931,8 +935,10 @@ NS_METHOD nsWindow::Move(PRUint32 aX, PRUint32 aY)
// Resize this component // Resize this component
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
NS_METHOD nsWindow::Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint) NS_METHOD nsWindow::Resize(PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint)
{ {
NS_ASSERTION((aWidth >=0 ) , "Negative width passed to nsWindow::Resize");
NS_ASSERTION((aHeight >=0 ), "Negative height passed to nsWindow::Resize");
// Set cached value for lightweight and printing // Set cached value for lightweight and printing
mBounds.width = aWidth; mBounds.width = aWidth;
mBounds.height = aHeight; mBounds.height = aHeight;
@ -970,12 +976,15 @@ NS_METHOD nsWindow::Resize(PRUint32 aWidth, PRUint32 aHeight, PRBool aRepaint)
// Resize this component // Resize this component
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
NS_METHOD nsWindow::Resize(PRUint32 aX, NS_METHOD nsWindow::Resize(PRInt32 aX,
PRUint32 aY, PRInt32 aY,
PRUint32 aWidth, PRInt32 aWidth,
PRUint32 aHeight, PRInt32 aHeight,
PRBool aRepaint) PRBool aRepaint)
{ {
NS_ASSERTION((aWidth >=0 ), "Negative width passed to nsWindow::Resize");
NS_ASSERTION((aHeight >=0 ), "Negative height passed to nsWindow::Resize");
// Set cached value for lightweight and printing // Set cached value for lightweight and printing
mBounds.x = aX; mBounds.x = aX;
mBounds.y = aY; mBounds.y = aY;
@ -1082,28 +1091,6 @@ NS_METHOD nsWindow::GetBounds(nsRect &aRect)
return NS_OK; return NS_OK;
} }
//-------------------------------------------------------------------------
//
// Get the bounding rectangle in screen coordinates
//
//-------------------------------------------------------------------------
NS_METHOD nsWindow::GetAbsoluteBounds(nsRect &aRect)
{
if (mWnd) {
RECT r;
VERIFY(::GetWindowRect(mWnd, &r));
// assign size
aRect.width = r.right - r.left;
aRect.height = r.bottom - r.top;
aRect.x = r.left;
aRect.y = r.top;
}
return NS_OK;
}
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// //
// Get this component dimension // Get this component dimension

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

@ -87,18 +87,17 @@ public:
HWND mBorderlessParent; HWND mBorderlessParent;
NS_IMETHOD CaptureMouse(PRBool aCapture); NS_IMETHOD CaptureMouse(PRBool aCapture);
NS_IMETHOD Move(PRUint32 aX, PRUint32 aY); NS_IMETHOD Move(PRInt32 aX, PRInt32 aY);
NS_IMETHOD Resize(PRUint32 aWidth, NS_IMETHOD Resize(PRInt32 aWidth,
PRUint32 aHeight, PRInt32 aHeight,
PRBool aRepaint); PRBool aRepaint);
NS_IMETHOD Resize(PRUint32 aX, NS_IMETHOD Resize(PRInt32 aX,
PRUint32 aY, PRInt32 aY,
PRUint32 aWidth, PRInt32 aWidth,
PRUint32 aHeight, PRInt32 aHeight,
PRBool aRepaint); PRBool aRepaint);
NS_IMETHOD Enable(PRBool bState); NS_IMETHOD Enable(PRBool bState);
NS_IMETHOD SetFocus(void); NS_IMETHOD SetFocus(void);
NS_IMETHOD GetAbsoluteBounds(nsRect &aRect);
NS_IMETHOD GetBounds(nsRect &aRect); NS_IMETHOD GetBounds(nsRect &aRect);
NS_IMETHOD GetClientBounds(nsRect &aRect); NS_IMETHOD GetClientBounds(nsRect &aRect);
NS_IMETHOD SetBackgroundColor(const nscolor &aColor); NS_IMETHOD SetBackgroundColor(const nscolor &aColor);

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

@ -650,16 +650,6 @@ NS_METHOD nsBaseWidget::GetBounds(nsRect &aRect)
return NS_OK; return NS_OK;
} }
/**
* This implementation of nsWindow MUST be overridden.
*
**/
NS_METHOD nsBaseWidget::GetAbsoluteBounds(nsRect &aRect)
{
return NS_ERROR_FAILURE;
}
/** /**
* If the implementation of nsWindow supports borders this method MUST be overridden * If the implementation of nsWindow supports borders this method MUST be overridden

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

@ -55,7 +55,6 @@ public:
NS_IMETHOD PreCreateWidget(nsWidgetInitData *aWidgetInitData) { return NS_OK;} NS_IMETHOD PreCreateWidget(nsWidgetInitData *aWidgetInitData) { return NS_OK;}
// nsIWidget interface // nsIWidget interface
NS_IMETHOD GetAbsoluteBounds(nsRect &aRect);
NS_IMETHOD CaptureMouse(PRBool aCapture); NS_IMETHOD CaptureMouse(PRBool aCapture);
NS_IMETHOD GetClientData(void*& aClientData); NS_IMETHOD GetClientData(void*& aClientData);
NS_IMETHOD SetClientData(void* aClientData); NS_IMETHOD SetClientData(void* aClientData);