diff --git a/mozilla/layout/forms/nsFormControlFrame.cpp b/mozilla/layout/forms/nsFormControlFrame.cpp index 27ab774c04a..a61df00a8d3 100644 --- a/mozilla/layout/forms/nsFormControlFrame.cpp +++ b/mozilla/layout/forms/nsFormControlFrame.cpp @@ -72,7 +72,6 @@ nsFormControlFrame::nsFormControlFrame() nsFormControlFrame::~nsFormControlFrame() { - //printf("nsFormControlFrame::~nsFormControlFrame \n"); mFormFrame = nsnull; NS_IF_RELEASE(mWidget); } @@ -334,102 +333,6 @@ nsFormControlFrame::Reflow(nsIPresContext& aPresContext, return NS_OK; } -#if 0 -NS_METHOD -nsFormControlFrame::Reflow(nsIPresContext& aPresContext, - nsHTMLReflowMetrics& aDesiredSize, - const nsHTMLReflowState& aReflowState, - nsReflowStatus& aStatus) -{ - nsIView* view = nsnull; - GetView(view); - if (nsnull == view) { - nsresult result = - nsRepository::CreateInstance(kViewCID, nsnull, kIViewIID, (void **)&view); - if (NS_OK != result) { - NS_ASSERTION(0, "Could not create view for form control"); - aStatus = NS_FRAME_NOT_COMPLETE; - return result; - } - nsIPresShell *presShell = aPresContext.GetShell(); // need to release - nsIViewManager *viewMan = presShell->GetViewManager(); // need to release - NS_RELEASE(presShell); - - GetDesiredSize(&aPresContext, aReflowState, aDesiredSize, mWidgetSize); - - //nsRect boundBox(0, 0, mWidgetSize.width, mWidgetSize.height); - nsRect boundBox(0, 0, aDesiredSize.width, aDesiredSize.height); - - nsIFrame* parWithView; - nsIView *parView; - - GetParentWithView(parWithView); - parWithView->GetView(parView); - - // initialize the view as hidden since we don't know the (x,y) until Paint - result = view->Init(viewMan, boundBox, parView, - nsnull, nsViewVisibility_kHide); - if (NS_OK != result) { - NS_ASSERTION(0, "view initialization failed"); - aStatus = NS_FRAME_NOT_COMPLETE; - return NS_OK; - } - - viewMan->InsertChild(parView, view, 0); - - const nsIID& id = GetCID(); - nsWidgetInitData* initData = GetWidgetInitData(aPresContext); // needs to be deleted - view->CreateWidget(id, initData); - - if (nsnull != initData) { - delete(initData); - } - - // set our widget - result = GetWidget(view, &mWidget); - if ((NS_OK == result) && mWidget) { // keep the ref on mWidget - nsIFormControl* formControl = nsnull; - result = mContent->QueryInterface(kIFormControlIID, (void**)&formControl); - if ((NS_OK == result) && formControl) { - // set the content's widget, so it can get content modified by the widget - formControl->SetWidget(mWidget); - NS_RELEASE(formControl); - } - PostCreateWidget(&aPresContext, aDesiredSize.width, aDesiredSize.height); - mDidInit = PR_TRUE; - } else { - NS_ASSERTION(0, "could not get widget"); - } - - SetView(view); - - if ((aDesiredSize.width != boundBox.width) || (aDesiredSize.height != boundBox.height)) { - viewMan->ResizeView(view, aDesiredSize.width, aDesiredSize.height); - } - - NS_IF_RELEASE(viewMan); - } - else { - GetDesiredSize(&aPresContext, aReflowState, aDesiredSize, mWidgetSize); - - // If we are being reflowed and have a view, hide the view until - // we are told to paint (which is when our location will have - // stabilized). - } - - aDesiredSize.ascent = aDesiredSize.height; - aDesiredSize.descent = 0; - - if (nsnull != aDesiredSize.maxElementSize) { - aDesiredSize.maxElementSize->width = aDesiredSize.width; - aDesiredSize.maxElementSize->height = aDesiredSize.height; - } - - aStatus = NS_FRAME_COMPLETE; - return NS_OK; -} - -#endif NS_IMETHODIMP nsFormControlFrame::AttributeChanged(nsIPresContext* aPresContext, @@ -739,8 +642,6 @@ nsFormControlFrame::GetFont(nsIPresContext* aPresContext, return NS_OK; } - - nsresult nsFormControlFrame::GetDefaultCheckState(PRBool *aState) { nsresult res = NS_OK; @@ -763,7 +664,6 @@ nsresult nsFormControlFrame::SetDefaultCheckState(PRBool aState) return res; } - nsresult nsFormControlFrame::GetCurrentCheckState(PRBool *aState) { nsresult res = NS_OK; @@ -803,506 +703,3 @@ nsresult nsFormControlFrame::RequiresWidget(PRBool & aRequiresWidget) } -#if 0 - ->>>>>>> 1.41 -// -//------------------------------------------------------------------------------------- -// Utility methods for rendering Form Elements using GFX -//------------------------------------------------------------------------------------- -// -// XXX: The following location for the paint code is TEMPORARY. -// It is being used to get printing working -// under windows. Later it will be used to GFX-render the controls to the display. -// Expect this code to repackaged and moved to a new location in the future. - - -void -nsFormControlFrame::PaintLine(nsIRenderingContext& aRenderingContext, - nscoord aSX, nscoord aSY, nscoord aEX, nscoord aEY, - PRBool aHorz, nscoord aWidth, nscoord aOnePixel) -{ - - nsPoint p[5]; - if (aHorz) { - aEX++; - p[0].x = nscoord(float(aSX)*aOnePixel); - p[0].y = nscoord(float(aSY)*aOnePixel); - p[1].x = nscoord(float(aEX)*aOnePixel); - p[1].y = nscoord(float(aEY)*aOnePixel); - p[2].x = nscoord(float(aEX)*aOnePixel); - p[2].y = nscoord(float(aEY+1)*aOnePixel); - p[3].x = nscoord(float(aSX)*aOnePixel); - p[3].y = nscoord(float(aSY+1)*aOnePixel); - p[4].x = nscoord(float(aSX)*aOnePixel); - p[4].y = nscoord(float(aSY)*aOnePixel); - } else { - aEY++; - p[0].x = nscoord(float(aSX)*aOnePixel); - p[0].y = nscoord(float(aSY)*aOnePixel); - p[1].x = nscoord(float(aEX)*aOnePixel); - p[1].y = nscoord(float(aEY)*aOnePixel); - p[2].x = nscoord(float(aEX+1)*aOnePixel); - p[2].y = nscoord(float(aEY)*aOnePixel); - p[3].x = nscoord(float(aSX+1)*aOnePixel); - p[3].y = nscoord(float(aSY)*aOnePixel); - p[4].x = nscoord(float(aSX)*aOnePixel); - p[4].y = nscoord(float(aSY)*aOnePixel); - } - aRenderingContext.FillPolygon(p, 5); - -} - -//--------------------------------------------------------------------------- -//--------------------------------------------------------------------------- -//--------------------------------------------------------------------------- -// Offset for arrow centerpoint -const nscoord nsArrowOffsetX = 3; -const nscoord nsArrowOffsetY = 3; -nscoord nsArrowRightPoints[] = {0, 0, 0, 6, 6, 3 }; -nscoord nsArrowLeftPoints[] = {0, 3, 6, 0, 6, 6 }; -nscoord nsArrowUpPoints[] = {3, 0, 6, 6, 0, 6 }; -nscoord nsArrowDownPoints[] = {0, 0, 3, 6, 6, 0 }; - -//--------------------------------------------------------------------------- -void -nsFormControlFrame::SetupPoints(PRUint32 aNumberOfPoints, nscoord* aPoints, nsPoint* aPolygon, nscoord aScaleFactor, nscoord aX, nscoord aY, - nscoord aCenterX, nscoord aCenterY) -{ - const nscoord offsetX = aCenterX * aScaleFactor; - const nscoord offsetY = aCenterY * aScaleFactor; - - PRUint32 i = 0; - PRUint32 count = 0; - for (i = 0; i < aNumberOfPoints; i++) { - aPolygon[i].x = (aPoints[count] * aScaleFactor) + aX - offsetX; - count++; - aPolygon[i].y = (aPoints[count] * aScaleFactor) + aY - offsetY; - count++; - } -} - - -//--------------------------------------------------------------------------- -void -nsFormControlFrame::PaintArrowGlyph(nsIRenderingContext& aRenderingContext, - nscoord aSX, nscoord aSY, nsArrowDirection aArrowDirection, - nscoord aOnePixel) -{ - nsPoint polygon[3]; - - switch(aArrowDirection) - { - case eArrowDirection_Left: - SetupPoints(3, nsArrowLeftPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - - case eArrowDirection_Right: - SetupPoints(3, nsArrowRightPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - - case eArrowDirection_Up: - SetupPoints(3, nsArrowUpPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - - case eArrowDirection_Down: - SetupPoints(3, nsArrowDownPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - } - - aRenderingContext.FillPolygon(polygon, 3); -} - -//--------------------------------------------------------------------------- -void -nsFormControlFrame::PaintArrow(nsArrowDirection aArrowDirection, - nsIRenderingContext& aRenderingContext, - nsIPresContext& aPresContext, - const nsRect& aDirtyRect, - nsRect& aRect, - nscoord aOnePixel, - nsIStyleContext* aArrowStyle, - const nsStyleSpacing& aSpacing, - nsIFrame* aForFrame, - nsRect& aFrameRect) -{ - // Draw border using CSS - const nsStyleColor* color = (const nsStyleColor*) - aArrowStyle->GetStyleData(eStyleStruct_Color); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, aRect, *color, aSpacing, 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, aRect, aSpacing, aArrowStyle, 0); - - // Draw the glyph in black - aRenderingContext.SetColor(NS_RGB(0, 0, 0)); - // Draw arrow centered in the rectangle - PaintArrowGlyph(aRenderingContext, aRect.x + (aRect.width / 2), aRect.y + (aRect.height / 2), aArrowDirection, aOnePixel); - -} - -//--------------------------------------------------------------------------- -void -nsFormControlFrame::PaintScrollbar(nsIRenderingContext& aRenderingContext, - nsIPresContext& aPresContext, - const nsRect& aDirtyRect, - nsRect& aRect, - PRBool aHorizontal, - nscoord aOnePixel, - nsIStyleContext* aScrollbarStyleContext, - nsIStyleContext* aScrollbarArrowStyleContext, - nsIFrame* aForFrame, - nsRect& aFrameRect) -{ - // Get the Scrollbar's Style structs - const nsStyleSpacing* scrollbarSpacing = - (const nsStyleSpacing*)aScrollbarStyleContext->GetStyleData(eStyleStruct_Spacing); - const nsStyleColor* scrollbarColor = - (const nsStyleColor*)aScrollbarStyleContext->GetStyleData(eStyleStruct_Color); - - // Get the Scrollbar's Arrow's Style structs - const nsStyleSpacing* arrowSpacing = - (const nsStyleSpacing*)aScrollbarArrowStyleContext->GetStyleData(eStyleStruct_Spacing); - const nsStyleColor* arrowColor = - (const nsStyleColor*)aScrollbarArrowStyleContext->GetStyleData(eStyleStruct_Color); - - // Paint background for scrollbar - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, aRect, *scrollbarColor, *arrowSpacing, - 0, 0); - - if (PR_TRUE == aHorizontal) { - // Draw horizontal Arrow - nscoord arrowWidth = aRect.height; - nsRect arrowLeftRect(aRect.x, aRect.y, arrowWidth, arrowWidth); - PaintArrow(eArrowDirection_Left,aRenderingContext,aPresContext, - aDirtyRect, arrowLeftRect,aOnePixel, aScrollbarArrowStyleContext, *arrowSpacing, aForFrame, aFrameRect); - - nsRect thumbRect(aRect.x+arrowWidth, aRect.y, arrowWidth, arrowWidth); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowColor, *arrowSpacing, - 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowSpacing, aScrollbarArrowStyleContext, 0); - - nsRect arrowRightRect(aRect.x + (aRect.width - arrowWidth), aRect.y, arrowWidth, arrowWidth); - PaintArrow(eArrowDirection_Right,aRenderingContext,aPresContext, - aDirtyRect, arrowRightRect,aOnePixel, aScrollbarArrowStyleContext, *arrowSpacing, aForFrame, aFrameRect); - - } - else { - // Paint vertical arrow - nscoord arrowHeight = aRect.width; - nsRect arrowUpRect(aRect.x, aRect.y, arrowHeight, arrowHeight); - PaintArrow(eArrowDirection_Up,aRenderingContext,aPresContext, - aDirtyRect, arrowUpRect,aOnePixel, aScrollbarArrowStyleContext, *arrowSpacing, aForFrame, aFrameRect); - - nsRect thumbRect(aRect.x, aRect.y+arrowHeight, arrowHeight, arrowHeight); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowColor, *arrowSpacing, - 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowSpacing, aScrollbarArrowStyleContext, 0); - - nsRect arrowDownRect(aRect.x, aRect.y + (aRect.height - arrowHeight), arrowHeight, arrowHeight); - PaintArrow(eArrowDirection_Down,aRenderingContext,aPresContext, - aDirtyRect, arrowDownRect,aOnePixel, aScrollbarArrowStyleContext, *arrowSpacing, aForFrame, aFrameRect); - } - -} - - -void -nsFormControlFrame::PaintFixedSizeCheckMark(nsIRenderingContext& aRenderingContext, - float aPixelsToTwips) -{ - //XXX: Check mark is always draw in black. If the this code is used to Render the widget - //to the screen the color should be set using the CSS style color instead. - aRenderingContext.SetColor(NS_RGB(0, 0, 0)); - // Offsets to x,y location, These offsets are used to place the checkmark in the middle - // of it's 12X12 pixel box. - const PRUint32 ox = 3; - const PRUint32 oy = 3; - - nscoord onePixel = NSIntPixelsToTwips(1, aPixelsToTwips); - - // Draw checkmark using a series of rectangles. This builds an replica of the - // way the checkmark looks under Windows. Using a polygon does not correctly - // represent a checkmark under Windows. This is due to round-off error in the - // Twips to Pixel conversions. - PaintLine(aRenderingContext, 0 + ox, 2 + oy, 0 + ox, 4 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 1 + ox, 3 + oy, 1 + ox, 5 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 2 + ox, 4 + oy, 2 + ox, 6 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 3 + ox, 3 + oy, 3 + ox, 5 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 4 + ox, 2 + oy, 4 + ox, 4 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 5 + ox, 1 + oy, 5 + ox, 3 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 6 + ox, 0 + oy, 6 + ox, 2 + oy, PR_FALSE, 1, onePixel); -} - -void -nsFormControlFrame::PaintFixedSizeCheckMarkBorder(nsIRenderingContext& aRenderingContext, - float aPixelsToTwips, const nsStyleColor& aBackgroundColor) -{ -//XXX: This method should use the CSS Border rendering code. - - // Offsets to x,y location - PRUint32 ox = 0; - PRUint32 oy = 0; - - nscoord onePixel = NSIntPixelsToTwips(1, aPixelsToTwips); - nscoord twoPixels = NSIntPixelsToTwips(2, aPixelsToTwips); - nscoord ninePixels = NSIntPixelsToTwips(9, aPixelsToTwips); - nscoord twelvePixels = NSIntPixelsToTwips(12, aPixelsToTwips); - - // Draw Background - - aRenderingContext.SetColor(aBackgroundColor.mBackgroundColor); - nsRect rect(0, 0, twelvePixels, twelvePixels); - aRenderingContext.FillRect(rect); - - // Draw Border - aRenderingContext.SetColor(NS_RGB(128, 128, 128)); - PaintLine(aRenderingContext, 0 + ox, 0 + oy, 11 + ox, 0 + oy, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 0 + ox, 0 + oy, 0 + ox, 11 + oy, PR_FALSE, 1, onePixel); - - aRenderingContext.SetColor(NS_RGB(192, 192, 192)); - PaintLine(aRenderingContext, 1 + ox, 11 + oy, 11 + ox, 11 + oy, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 11 + ox, 1 + oy, 11 + ox, 11 + oy, PR_FALSE, 1, onePixel); - - aRenderingContext.SetColor(NS_RGB(0, 0, 0)); - PaintLine(aRenderingContext, 1 + ox, 1 + oy, 10 + ox, 1 + oy, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 1 + ox, 1 + oy, 1 + ox, 10 + oy, PR_FALSE, 1, onePixel); - -} - -#if 0 -//XXX: Future, use the following code to draw a checkmark in any size. -void -nsFormControlFrame::PaintScaledCheckMark(nsIRenderingContext& aRenderingContext, - float aPixelsToTwips, PRUint32 aWidth, PRUint32 aHeight) -{ -#define NS_CHECKED_POINTS 7 - - // Points come from the coordinates on a 11X11 pixels rectangle with 0,0 at the lower - // left. - nscoord checkedPolygonDef[] = {0,2, 2,4, 6,0 , 6,2, 2,6, 0,4, 0,2 }; - nsPoint checkedPolygon[NS_CHECKED_POINTS]; - PRUint32 defIndex = 0; - PRUint32 polyIndex = 0; - PRBool scalable = PR_FALSE; - aRenderingContext.SetColor(color->mColor); - PRUint32 height = aHeight; - - for (defIndex = 0; defIndex < (NS_CHECKED_POINTS * 2); defIndex++) { - checkedPolygon[polyIndex].x = nscoord(((checkedPolygonDef[defIndex])) * (height / 11.0) + (height / 11.0)); - defIndex++; - checkedPolygon[polyIndex].y = nscoord((((checkedPolygonDef[defIndex]))) * (height / 11.0) + (height / 11.0)); - polyIndex++; - } - - aRenderingContext.FillPolygon(checkedPolygon, NS_CHECKED_POINTS); - -} -#endif - -void -nsFormControlFrame::PaintFocus(nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect, nsRect& aInside, nsRect& aOutside) - -{ - // draw dashed line to indicate selection, XXX don't calc rect every time - PRUint8 borderStyles[4]; - nscolor borderColors[4]; - nscolor black = NS_RGB(0,0,0); - for (PRInt32 i = 0; i < 4; i++) { - borderStyles[i] = NS_STYLE_BORDER_STYLE_DOTTED; - borderColors[i] = black; - } - nsCSSRendering::DrawDashedSides(0, aRenderingContext, borderStyles, borderColors, aOutside, - aInside, PR_FALSE, nsnull); -} - - -void -nsFormControlFrame::PaintRectangularButton(nsIPresContext& aPresContext, - nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect, PRUint32 aWidth, - PRUint32 aHeight, PRBool aShift, PRBool aShowFocus, - nsIStyleContext* aStyleContext, nsString& aLabel, nsFormControlFrame* aForFrame) - -{ - aRenderingContext.PushState(); - // Draw border using CSS - // Get the Scrollbar's Arrow's Style structs - const nsStyleSpacing* spacing = - (const nsStyleSpacing*)aStyleContext->GetStyleData(eStyleStruct_Spacing); - const nsStyleColor* color = - (const nsStyleColor*)aStyleContext->GetStyleData(eStyleStruct_Color); - nsRect rect(0, 0, aWidth, aHeight); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, rect, *color, *spacing, 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, rect, *spacing, aStyleContext, 0); - - nsMargin border; - spacing->CalcBorderFor(aForFrame, border); - - float p2t; - aPresContext.GetScaledPixelsToTwips(p2t); - nscoord onePixel = NSIntPixelsToTwips(1, p2t); - - nsRect outside(0, 0, aWidth, aHeight); - outside.Deflate(border); - outside.Deflate(onePixel, onePixel); - - nsRect inside(outside); - inside.Deflate(onePixel, onePixel); - - - if (aShowFocus) { - PaintFocus(aRenderingContext, - aDirtyRect, inside, outside); - } - - float appUnits; - float devUnits; - float scale; - nsIDeviceContext * context; - aRenderingContext.GetDeviceContext(context); - - context->GetCanonicalPixelScale(scale); - context->GetAppUnitsToDevUnits(devUnits); - context->GetDevUnitsToAppUnits(appUnits); - - aRenderingContext.SetColor(NS_RGB(0,0,0)); - - nsFont font(aPresContext.GetDefaultFixedFont()); - aForFrame->GetFont(&aPresContext, font); - - aRenderingContext.SetFont(font); - - nscoord textWidth; - nscoord textHeight; - aRenderingContext.GetWidth(aLabel, textWidth); - - nsIFontMetrics* metrics; - context->GetMetricsFor(font, metrics); - metrics->GetMaxAscent(textHeight); - - nscoord x = ((inside.width - textWidth) / 2) + inside.x; - nscoord y = ((inside.height - textHeight) / 2) + inside.y; - if (PR_TRUE == aShift) { - x += onePixel; - y += onePixel; - } - - aRenderingContext.DrawString(aLabel, x, y); - NS_RELEASE(context); - PRBool clipEmpty; - aRenderingContext.PopState(clipEmpty); -} - - -void -nsFormControlFrame::PaintCircularBorder(nsIPresContext& aPresContext, - nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect, nsIStyleContext* aStyleContext, PRBool aInset, - nsIFrame* aForFrame, PRUint32 aWidth, PRUint32 aHeight) -{ - aRenderingContext.PushState(); - - float p2t; - aPresContext.GetScaledPixelsToTwips(p2t); - - const nsStyleSpacing* spacing = (const nsStyleSpacing*)aStyleContext->GetStyleData(eStyleStruct_Spacing); - nsMargin border; - spacing->CalcBorderFor(aForFrame, border); - - nscoord onePixel = NSIntPixelsToTwips(1, p2t); - nscoord twelvePixels = NSIntPixelsToTwips(12, p2t); - - nsRect outside(0, 0, aWidth, aHeight); - - aRenderingContext.SetColor(NS_RGB(192,192,192)); - aRenderingContext.FillRect(outside); - - PRBool standardSize = PR_FALSE; - if (standardSize) { - outside.SetRect(0, 0, twelvePixels, twelvePixels); - aRenderingContext.SetColor(NS_RGB(255,255,255)); - aRenderingContext.FillArc(outside, 0, 180); - aRenderingContext.FillArc(outside, 180, 360); - - if (PR_TRUE == aInset) { - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - aRenderingContext.SetColor(NS_RGB(192,192,192)); - aRenderingContext.FillArc(outside, 0, 180); - aRenderingContext.FillArc(outside, 180, 360); - outside.SetRect(0, 0, twelvePixels, twelvePixels); - } - - // DrakGray - aRenderingContext.SetColor(NS_RGB(128,128,128)); - PaintLine(aRenderingContext, 4, 0, 7, 0, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 2, 1, 3, 1, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 8, 1, 9, 1, PR_TRUE, 1, onePixel); - - PaintLine(aRenderingContext, 1, 2, 1, 3, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 0, 4, 0, 7, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 1, 8, 1, 9, PR_FALSE, 1, onePixel); - - // Black - aRenderingContext.SetColor(NS_RGB(0,0,0)); - PaintLine(aRenderingContext, 4, 1, 7, 1, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 2, 2, 3, 2, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 8, 2, 9, 2, PR_TRUE, 1, onePixel); - - PaintLine(aRenderingContext, 2, 2, 2, 3, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 1, 4, 1, 7, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 2, 8, 2, 8, PR_FALSE, 1, onePixel); - - // Gray - aRenderingContext.SetColor(NS_RGB(192, 192, 192)); - PaintLine(aRenderingContext, 2, 9, 3, 9, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 8, 9, 9, 9, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 4, 10, 7, 10, PR_TRUE, 1, onePixel); - - PaintLine(aRenderingContext, 9, 3, 9, 3, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 10, 4, 10, 7, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 9, 8, 9, 9, PR_FALSE, 1, onePixel); - - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - } else { - outside.SetRect(0, 0, twelvePixels, twelvePixels); - - aRenderingContext.SetColor(NS_RGB(128,128,128)); - aRenderingContext.FillArc(outside, 46, 225); - aRenderingContext.SetColor(NS_RGB(255,255,255)); - aRenderingContext.FillArc(outside, 225, 360); - aRenderingContext.FillArc(outside, 0, 44); - - outside.Deflate(onePixel, onePixel); - aRenderingContext.SetColor(NS_RGB(0,0,0)); - aRenderingContext.FillArc(outside, 46, 225); - aRenderingContext.SetColor(NS_RGB(192,192,192)); - aRenderingContext.FillArc(outside, 225, 360); - aRenderingContext.FillArc(outside, 0, 44); - - outside.Deflate(onePixel, onePixel); - aRenderingContext.SetColor(NS_RGB(255,255,255)); - aRenderingContext.FillArc(outside, 0, 180); - aRenderingContext.FillArc(outside, 180, 360); - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - } - - PRBool clip; - aRenderingContext.PopState(clip); -} - - -#endif diff --git a/mozilla/layout/forms/nsFormControlFrame.h b/mozilla/layout/forms/nsFormControlFrame.h index bfa4771cf3c..ce0428966d6 100644 --- a/mozilla/layout/forms/nsFormControlFrame.h +++ b/mozilla/layout/forms/nsFormControlFrame.h @@ -40,7 +40,7 @@ class nsFormFrame; // using GFX calls, rather than creating a widget. Undefining it // causes widgets to be used for form elements. @see RequiresWidget method // to see which widgets will obey this directive. -#undef NS_GFX_RENDER_FORM_ELEMENTS +#define NS_GFX_RENDER_FORM_ELEMENTS /** * nsFormControlFrame is the base class for frames of form controls. It diff --git a/mozilla/layout/forms/nsFormControlHelper.cpp b/mozilla/layout/forms/nsFormControlHelper.cpp index d4d1d5dd6ff..3b88e591706 100644 --- a/mozilla/layout/forms/nsFormControlHelper.cpp +++ b/mozilla/layout/forms/nsFormControlHelper.cpp @@ -52,18 +52,6 @@ #include "nsINameSpaceManager.h" #include "nsIDOMHTMLInputElement.h" - -/*static NS_DEFINE_IID(kIWidgetIID, NS_IWIDGET_IID); -static NS_DEFINE_IID(kIFormControlIID, NS_IFORMCONTROL_IID); -static NS_DEFINE_IID(kIFormControlFrameIID, NS_IFORMCONTROLFRAME_IID); -static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); -static NS_DEFINE_IID(kViewCID, NS_VIEW_CID); -static NS_DEFINE_IID(kIViewIID, NS_IVIEW_IID); -static NS_DEFINE_IID(kIDOMHTMLInputElementIID, NS_IDOMHTMLINPUTELEMENT_IID); -*/ - - - static NS_DEFINE_IID(kIWidgetIID, NS_IWIDGET_IID); static NS_DEFINE_IID(kIFormControlIID, NS_IFORMCONTROL_IID); static NS_DEFINE_IID(kIFormControlFrameIID, NS_IFORMCONTROLFRAME_IID); @@ -105,44 +93,6 @@ void nsFormControlHelper::ForceDrawFrame(nsIFrame * aFrame) } -/*nscoord -nsFormControlHelper::GetScrollbarWidth(float aPixToTwip) -{ - return NSIntPixelsToTwips(19, aPixToTwip); // XXX this is windows -} - -nscoord -nsFormControlHelper::GetVerticalBorderWidth(float aPixToTwip) const -{ - return NSIntPixelsToTwips(3, aPixToTwip); -} - -nscoord -nsFormControlHelper::GetHorizontalBorderWidth(float aPixToTwip) const -{ - return GetVerticalBorderWidth(aPixToTwip); -} - -nscoord -nsFormControlHelper::GetVerticalInsidePadding(float aPixToTwip, - nscoord aInnerHeight) const -{ - return NSIntPixelsToTwips(3, aPixToTwip); -} - -nscoord -nsFormControlHelper::GetHorizontalInsidePadding(nsIPresContext& aPresContext, - float aPixToTwip, - nscoord aInnerWidth, - nscoord aCharWidth) const -{ - return GetVerticalInsidePadding(aPixToTwip, aInnerWidth); -} -*/ - - - - nsCompatibility nsFormControlHelper::GetRepChars(nsIPresContext& aPresContext, char& char1, char& char2) { @@ -400,20 +350,11 @@ nsFormControlHelper::GetFont(nsIFormControlFrame * aFormFrame, } - - - - // //------------------------------------------------------------------------------------- // Utility methods for rendering Form Elements using GFX //------------------------------------------------------------------------------------- // -// XXX: The following location for the paint code is TEMPORARY. -// It is being used to get printing working -// under windows. Later it will be used to GFX-render the controls to the display. -// Expect this code to repackaged and moved to a new location in the future. - void nsFormControlHelper::PaintLine(nsIRenderingContext& aRenderingContext, @@ -642,8 +583,6 @@ void nsFormControlHelper::PaintFixedSizeCheckMarkBorder(nsIRenderingContext& aRenderingContext, float aPixelsToTwips, const nsStyleColor& aBackgroundColor) { -//XXX: This method should use the CSS Border rendering code. - // Offsets to x,y location PRUint32 ox = 0; PRUint32 oy = 0; @@ -654,8 +593,7 @@ nsFormControlHelper::PaintFixedSizeCheckMarkBorder(nsIRenderingContext& aRenderi nscoord twelvePixels = NSIntPixelsToTwips(12, aPixelsToTwips); // Draw Background - - aRenderingContext.SetColor(aBackgroundColor.mBackgroundColor); + aRenderingContext.SetColor(aBackgroundColor.mColor); nsRect rect(0, 0, twelvePixels, twelvePixels); aRenderingContext.FillRect(rect); @@ -674,35 +612,37 @@ nsFormControlHelper::PaintFixedSizeCheckMarkBorder(nsIRenderingContext& aRenderi } -#if 0 -//XXX: Future, use the following code to draw a checkmark in any size. +//Draw a checkmark in any size. void nsFormControlHelper::PaintScaledCheckMark(nsIRenderingContext& aRenderingContext, float aPixelsToTwips, PRUint32 aWidth, PRUint32 aHeight) { -#define NS_CHECKED_POINTS 7 + const int checkpoints = 7; + const float checksize = 8.0f; - // Points come from the coordinates on a 11X11 pixels rectangle with 0,0 at the lower - // left. + // Points come from the coordinates on a 7X7 pixels + // box with 0,0 at the lower left. nscoord checkedPolygonDef[] = {0,2, 2,4, 6,0 , 6,2, 2,6, 0,4, 0,2 }; - nsPoint checkedPolygon[NS_CHECKED_POINTS]; + + nsPoint checkedPolygon[checkpoints]; PRUint32 defIndex = 0; PRUint32 polyIndex = 0; - PRBool scalable = PR_FALSE; - aRenderingContext.SetColor(color->mColor); - PRUint32 height = aHeight; - for (defIndex = 0; defIndex < (NS_CHECKED_POINTS * 2); defIndex++) { - checkedPolygon[polyIndex].x = nscoord(((checkedPolygonDef[defIndex])) * (height / 11.0) + (height / 11.0)); + // Scale the checkmark based on the smallest dimension + float size = aWidth / checksize; + if (aHeight < aWidth) { + size = aHeight / checksize; + } + + for (defIndex = 0; defIndex < (checkpoints * 2); defIndex++) { + checkedPolygon[polyIndex].x = nscoord(((float(checkedPolygonDef[defIndex]) - 3.0) * (size)) + (aWidth / 2.0)); defIndex++; - checkedPolygon[polyIndex].y = nscoord((((checkedPolygonDef[defIndex]))) * (height / 11.0) + (height / 11.0)); + checkedPolygon[polyIndex].y = nscoord(((float(checkedPolygonDef[defIndex]) - 3.0) * (size)) + (aHeight / 2.0)); polyIndex++; } - aRenderingContext.FillPolygon(checkedPolygon, NS_CHECKED_POINTS); - + aRenderingContext.FillPolygon(checkedPolygon, checkpoints); } -#endif void nsFormControlHelper::PaintFocus(nsIRenderingContext& aRenderingContext, @@ -912,527 +852,3 @@ nsFormControlHelper::PaintCircularBorder(nsIPresContext& aPresContext, aRenderingContext.PopState(clip); } -#if 0 -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -// -//------------------------------------------------------------------------------------- -// Utility methods for rendering Form Elements using GFX -//------------------------------------------------------------------------------------- -// -// XXX: The following location for the paint code is TEMPORARY. -// It is being used to get printing working -// under windows. Later it will be used to GFX-render the controls to the display. -// Expect this code to repackaged and moved to a new location in the future. - - -void -nsFormControlHelper::PaintLine(nsIRenderingContext& aRenderingContext, - nscoord aSX, nscoord aSY, nscoord aEX, nscoord aEY, - PRBool aHorz, nscoord aWidth, nscoord aOnePixel) -{ - - nsPoint p[5]; - if (aHorz) { - aEX++; - p[0].x = nscoord(float(aSX)*aOnePixel); - p[0].y = nscoord(float(aSY)*aOnePixel); - p[1].x = nscoord(float(aEX)*aOnePixel); - p[1].y = nscoord(float(aEY)*aOnePixel); - p[2].x = nscoord(float(aEX)*aOnePixel); - p[2].y = nscoord(float(aEY+1)*aOnePixel); - p[3].x = nscoord(float(aSX)*aOnePixel); - p[3].y = nscoord(float(aSY+1)*aOnePixel); - p[4].x = nscoord(float(aSX)*aOnePixel); - p[4].y = nscoord(float(aSY)*aOnePixel); - } else { - aEY++; - p[0].x = nscoord(float(aSX)*aOnePixel); - p[0].y = nscoord(float(aSY)*aOnePixel); - p[1].x = nscoord(float(aEX)*aOnePixel); - p[1].y = nscoord(float(aEY)*aOnePixel); - p[2].x = nscoord(float(aEX+1)*aOnePixel); - p[2].y = nscoord(float(aEY)*aOnePixel); - p[3].x = nscoord(float(aSX+1)*aOnePixel); - p[3].y = nscoord(float(aSY)*aOnePixel); - p[4].x = nscoord(float(aSX)*aOnePixel); - p[4].y = nscoord(float(aSY)*aOnePixel); - } - aRenderingContext.FillPolygon(p, 5); - -} - -//--------------------------------------------------------------------------- -//--------------------------------------------------------------------------- -//--------------------------------------------------------------------------- -// Offset for arrow centerpoint -const nscoord nsArrowOffsetX = 3; -const nscoord nsArrowOffsetY = 3; -static nscoord nsArrowRightPoints[] = {0, 0, 0, 6, 6, 3 }; -static nscoord nsArrowLeftPoints[] = {0, 3, 6, 0, 6, 6 }; -static nscoord nsArrowUpPoints[] = {3, 0, 6, 6, 0, 6 }; -static nscoord nsArrowDownPoints[] = {0, 0, 3, 6, 6, 0 }; - -//--------------------------------------------------------------------------- -void -nsFormControlHelper::SetupPoints(PRUint32 aNumberOfPoints, nscoord* aPoints, nsPoint* aPolygon, nscoord aScaleFactor, nscoord aX, nscoord aY, - nscoord aCenterX, nscoord aCenterY) -{ - const nscoord offsetX = aCenterX * aScaleFactor; - const nscoord offsetY = aCenterY * aScaleFactor; - - PRUint32 i = 0; - PRUint32 count = 0; - for (i = 0; i < aNumberOfPoints; i++) { - aPolygon[i].x = (aPoints[count] * aScaleFactor) + aX - offsetX; - count++; - aPolygon[i].y = (aPoints[count] * aScaleFactor) + aY - offsetY; - count++; - } -} - - -//--------------------------------------------------------------------------- -void -nsFormControlHelper::PaintArrowGlyph(nsIRenderingContext& aRenderingContext, - nscoord aSX, nscoord aSY, nsArrowDirection aArrowDirection, - nscoord aOnePixel) -{ - nsPoint polygon[3]; - - switch(aArrowDirection) - { - case eArrowDirection_Left: - SetupPoints(3, nsArrowLeftPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - - case eArrowDirection_Right: - SetupPoints(3, nsArrowRightPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - - case eArrowDirection_Up: - SetupPoints(3, nsArrowUpPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - - case eArrowDirection_Down: - SetupPoints(3, nsArrowDownPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - } - - aRenderingContext.FillPolygon(polygon, 3); -} - -//--------------------------------------------------------------------------- -void -nsFormControlHelper::PaintArrow(nsArrowDirection aArrowDirection, - nsIRenderingContext& aRenderingContext, - nsIPresContext& aPresContext, - const nsRect& aDirtyRect, - nsRect& aRect, - nscoord aOnePixel, - nsIStyleContext* aArrowStyle, - const nsStyleSpacing& aSpacing, - nsIFrame* aForFrame, - nsRect& aFrameRect) -{ - // Draw border using CSS - const nsStyleColor* color = (const nsStyleColor*) - aArrowStyle->GetStyleData(eStyleStruct_Color); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, aRect, *color, aSpacing, 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, aRect, aSpacing, aArrowStyle, 0); - - // Draw the glyph in black - aRenderingContext.SetColor(NS_RGB(0, 0, 0)); - // Draw arrow centered in the rectangle - PaintArrowGlyph(aRenderingContext, aRect.x + (aRect.width / 2), aRect.y + (aRect.height / 2), aArrowDirection, aOnePixel); - -} - -//--------------------------------------------------------------------------- -void -nsFormControlHelper::PaintScrollbar(nsIRenderingContext& aRenderingContext, - nsIPresContext& aPresContext, - const nsRect& aDirtyRect, - nsRect& aRect, - PRBool aHorizontal, - nscoord aOnePixel, - nsIStyleContext* aScrollbarStyleContext, - nsIStyleContext* aScrollbarArrowStyleContext, - nsIFrame* aForFrame, - nsRect& aFrameRect) -{ - // Get the Scrollbar's Style structs - const nsStyleSpacing* scrollbarSpacing = - (const nsStyleSpacing*)aScrollbarStyleContext->GetStyleData(eStyleStruct_Spacing); - const nsStyleColor* scrollbarColor = - (const nsStyleColor*)aScrollbarStyleContext->GetStyleData(eStyleStruct_Color); - - // Get the Scrollbar's Arrow's Style structs - const nsStyleSpacing* arrowSpacing = - (const nsStyleSpacing*)aScrollbarArrowStyleContext->GetStyleData(eStyleStruct_Spacing); - const nsStyleColor* arrowColor = - (const nsStyleColor*)aScrollbarArrowStyleContext->GetStyleData(eStyleStruct_Color); - - // Paint background for scrollbar - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, aRect, *scrollbarColor, 0, 0); - - if (PR_TRUE == aHorizontal) { - // Draw horizontal Arrow - nscoord arrowWidth = aRect.height; - nsRect arrowLeftRect(aRect.x, aRect.y, arrowWidth, arrowWidth); - PaintArrow(eArrowDirection_Left,aRenderingContext,aPresContext, - aDirtyRect, arrowLeftRect,aOnePixel, aScrollbarArrowStyleContext, - *arrowSpacing, aForFrame, aFrameRect); - - nsRect thumbRect(aRect.x+arrowWidth, aRect.y, arrowWidth, arrowWidth); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowColor, 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowSpacing,aScrollbarArrowStyleContext, 0); - - nsRect arrowRightRect(aRect.x + (aRect.width - arrowWidth), aRect.y, arrowWidth, arrowWidth); - PaintArrow(eArrowDirection_Right,aRenderingContext,aPresContext, - aDirtyRect, arrowRightRect,aOnePixel, aScrollbarArrowStyleContext, - *arrowSpacing, aForFrame, aFrameRect); - - } - else { - // Paint vertical arrow - nscoord arrowHeight = aRect.width; - nsRect arrowUpRect(aRect.x, aRect.y, arrowHeight, arrowHeight); - PaintArrow(eArrowDirection_Up,aRenderingContext,aPresContext, - aDirtyRect, arrowUpRect,aOnePixel, aScrollbarArrowStyleContext, - *arrowSpacing, aForFrame, aFrameRect); - - nsRect thumbRect(aRect.x, aRect.y+arrowHeight, arrowHeight, arrowHeight); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowColor, 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowSpacing,aScrollbarArrowStyleContext, 0); - - nsRect arrowDownRect(aRect.x, aRect.y + (aRect.height - arrowHeight), arrowHeight, arrowHeight); - PaintArrow(eArrowDirection_Down,aRenderingContext,aPresContext, - aDirtyRect, arrowDownRect,aOnePixel, aScrollbarArrowStyleContext, - *arrowSpacing, aForFrame, aFrameRect); - } - -} - - -void -nsFormControlHelper::PaintFixedSizeCheckMark(nsIRenderingContext& aRenderingContext, - float aPixelsToTwips) -{ - //XXX: Check mark is always draw in black. If the this code is used to Render the widget - //to the screen the color should be set using the CSS style color instead. - aRenderingContext.SetColor(NS_RGB(0, 0, 0)); - // Offsets to x,y location, These offsets are used to place the checkmark in the middle - // of it's 12X12 pixel box. - const PRUint32 ox = 3; - const PRUint32 oy = 3; - - nscoord onePixel = NSIntPixelsToTwips(1, aPixelsToTwips); - - // Draw checkmark using a series of rectangles. This builds an replica of the - // way the checkmark looks under Windows. Using a polygon does not correctly - // represent a checkmark under Windows. This is due to round-off error in the - // Twips to Pixel conversions. - PaintLine(aRenderingContext, 0 + ox, 2 + oy, 0 + ox, 4 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 1 + ox, 3 + oy, 1 + ox, 5 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 2 + ox, 4 + oy, 2 + ox, 6 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 3 + ox, 3 + oy, 3 + ox, 5 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 4 + ox, 2 + oy, 4 + ox, 4 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 5 + ox, 1 + oy, 5 + ox, 3 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 6 + ox, 0 + oy, 6 + ox, 2 + oy, PR_FALSE, 1, onePixel); -} - -void -nsFormControlHelper::PaintFixedSizeCheckMarkBorder(nsIRenderingContext& aRenderingContext, - float aPixelsToTwips) -{ - //XXX: Future, use CSS to paint border instead of painting it ourselves here. -// nsLeafFrame::Paint(aPresContext, aRenderingContext, aDirtyRect); - - // Offsets to x,y location - PRUint32 ox = 0; - PRUint32 oy = 0; - - nscoord onePixel = NSIntPixelsToTwips(1, aPixelsToTwips); - nscoord twoPixels = NSIntPixelsToTwips(2, aPixelsToTwips); - nscoord ninePixels = NSIntPixelsToTwips(9, aPixelsToTwips); - nscoord twelvePixels = NSIntPixelsToTwips(12, aPixelsToTwips); - - // Draw Background - nsRect rect(0, 0, twelvePixels, twelvePixels); - aRenderingContext.SetColor(NS_RGB(255, 255, 255)); - aRenderingContext.FillRect(rect); - - // Draw Border - aRenderingContext.SetColor(NS_RGB(128, 128, 128)); - PaintLine(aRenderingContext, 0 + ox, 0 + oy, 11 + ox, 0 + oy, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 0 + ox, 0 + oy, 0 + ox, 11 + oy, PR_FALSE, 1, onePixel); - - aRenderingContext.SetColor(NS_RGB(192, 192, 192)); - PaintLine(aRenderingContext, 1 + ox, 11 + oy, 11 + ox, 11 + oy, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 11 + ox, 1 + oy, 11 + ox, 11 + oy, PR_FALSE, 1, onePixel); - - aRenderingContext.SetColor(NS_RGB(0, 0, 0)); - PaintLine(aRenderingContext, 1 + ox, 1 + oy, 10 + ox, 1 + oy, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 1 + ox, 1 + oy, 1 + ox, 10 + oy, PR_FALSE, 1, onePixel); - -} - -#if 0 -//XXX: Future, use the following code to draw a checkmark in any size. -void -nsFormControlHelper::PaintScaledCheckMark(nsIRenderingContext& aRenderingContext, - float aPixelsToTwips, PRUint32 aWidth, PRUint32 aHeight) -{ -#define NS_CHECKED_POINTS 7 - - // Points come from the coordinates on a 11X11 pixels rectangle with 0,0 at the lower - // left. - nscoord checkedPolygonDef[] = {0,2, 2,4, 6,0 , 6,2, 2,6, 0,4, 0,2 }; - nsPoint checkedPolygon[NS_CHECKED_POINTS]; - PRUint32 defIndex = 0; - PRUint32 polyIndex = 0; - PRBool scalable = PR_FALSE; - aRenderingContext.SetColor(color->mColor); - PRUint32 height = aHeight; - - for (defIndex = 0; defIndex < (NS_CHECKED_POINTS * 2); defIndex++) { - checkedPolygon[polyIndex].x = nscoord(((checkedPolygonDef[defIndex])) * (height / 11.0) + (height / 11.0)); - defIndex++; - checkedPolygon[polyIndex].y = nscoord((((checkedPolygonDef[defIndex]))) * (height / 11.0) + (height / 11.0)); - polyIndex++; - } - - aRenderingContext.FillPolygon(checkedPolygon, NS_CHECKED_POINTS); - -} -#endif - - -void -nsFormControlHelper::PaintFocus(nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect, nsRect& aInside, nsRect& aOutside) - -{ - // draw dashed line to indicate selection, XXX don't calc rect every time - PRUint8 borderStyles[4]; - nscolor borderColors[4]; - nscolor black = NS_RGB(0,0,0); - for (PRInt32 i = 0; i < 4; i++) { - borderStyles[i] = NS_STYLE_BORDER_STYLE_DOTTED; - borderColors[i] = black; - } - nsCSSRendering::DrawDashedSides(0, aRenderingContext, borderStyles, borderColors, aOutside, - aInside, PR_FALSE, nsnull); -} - - -void -nsFormControlHelper::PaintRectangularButton(nsIPresContext& aPresContext, - nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect, PRUint32 aWidth, - PRUint32 aHeight, PRBool aShift, PRBool aShowFocus, - nsIStyleContext* aStyleContext, nsString& aLabel, - nsIFrame* aForFrame) - -{ - nsIFormControlFrame * formFrame; - nsresult result = aForFrame->QueryInterface(kIFormControlFrameIID, (void**)&formFrame); - if (NS_OK != result) { - NS_RELEASE(formFrame); - } - - aRenderingContext.PushState(); - // Draw border using CSS - // Get the Scrollbar's Arrow's Style structs - const nsStyleSpacing* spacing = - (const nsStyleSpacing*)aStyleContext->GetStyleData(eStyleStruct_Spacing); - const nsStyleColor* color = - (const nsStyleColor*)aStyleContext->GetStyleData(eStyleStruct_Color); - nsRect rect(0, 0, aWidth, aHeight); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, rect, *color, 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, rect, *spacing,aStyleContext, 0); - - nsMargin border; - spacing->CalcBorderFor(aForFrame, border); - - float p2t; - aPresContext.GetScaledPixelsToTwips(p2t); - nscoord onePixel = NSIntPixelsToTwips(1, p2t); - - nsRect outside(0, 0, aWidth, aHeight); - outside.Deflate(border); - outside.Deflate(onePixel, onePixel); - - nsRect inside(outside); - inside.Deflate(onePixel, onePixel); - - - if (aShowFocus) { - PaintFocus(aRenderingContext, - aDirtyRect, inside, outside); - } - - float appUnits; - float devUnits; - float scale; - nsIDeviceContext * context; - aRenderingContext.GetDeviceContext(context); - - context->GetCanonicalPixelScale(scale); - context->GetAppUnitsToDevUnits(devUnits); - context->GetDevUnitsToAppUnits(appUnits); - - aRenderingContext.SetColor(NS_RGB(0,0,0)); - - nsFont font(aPresContext.GetDefaultFixedFont()); - formFrame->GetFont(&aPresContext, font); - - aRenderingContext.SetFont(font); - - nscoord textWidth; - nscoord textHeight; - aRenderingContext.GetWidth(aLabel, textWidth); - - nsIFontMetrics* metrics; - context->GetMetricsFor(font, metrics); - metrics->GetMaxAscent(textHeight); - - nscoord x = ((inside.width - textWidth) / 2) + inside.x; - nscoord y = ((inside.height - textHeight) / 2) + inside.y; - if (PR_TRUE == aShift) { - x += onePixel; - y += onePixel; - } - - aRenderingContext.DrawString(aLabel, x, y); - NS_RELEASE(context); - PRBool clipEmpty; - aRenderingContext.PopState(clipEmpty); - - NS_RELEASE(formFrame); -} - - -void -nsFormControlHelper::PaintCircularBorder(nsIPresContext& aPresContext, - nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect, nsIStyleContext* aStyleContext, PRBool aInset, - nsIFrame* aForFrame, PRUint32 aWidth, PRUint32 aHeight) -{ - aRenderingContext.PushState(); - - float p2t; - aPresContext.GetScaledPixelsToTwips(p2t); - - const nsStyleSpacing* spacing = (const nsStyleSpacing*)aStyleContext->GetStyleData(eStyleStruct_Spacing); - nsMargin border; - spacing->CalcBorderFor(aForFrame, border); - - nscoord onePixel = NSIntPixelsToTwips(1, p2t); - nscoord twelvePixels = NSIntPixelsToTwips(12, p2t); - - nsRect outside(0, 0, aWidth, aHeight); - - aRenderingContext.SetColor(NS_RGB(192,192,192)); - aRenderingContext.FillRect(outside); - - PRBool standardSize = PR_FALSE; - if (standardSize) { - outside.SetRect(0, 0, twelvePixels, twelvePixels); - aRenderingContext.SetColor(NS_RGB(255,255,255)); - aRenderingContext.FillArc(outside, 0, 180); - aRenderingContext.FillArc(outside, 180, 360); - - if (PR_TRUE == aInset) { - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - aRenderingContext.SetColor(NS_RGB(192,192,192)); - aRenderingContext.FillArc(outside, 0, 180); - aRenderingContext.FillArc(outside, 180, 360); - outside.SetRect(0, 0, twelvePixels, twelvePixels); - } - - // DrakGray - aRenderingContext.SetColor(NS_RGB(128,128,128)); - PaintLine(aRenderingContext, 4, 0, 7, 0, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 2, 1, 3, 1, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 8, 1, 9, 1, PR_TRUE, 1, onePixel); - - PaintLine(aRenderingContext, 1, 2, 1, 3, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 0, 4, 0, 7, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 1, 8, 1, 9, PR_FALSE, 1, onePixel); - - // Black - aRenderingContext.SetColor(NS_RGB(0,0,0)); - PaintLine(aRenderingContext, 4, 1, 7, 1, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 2, 2, 3, 2, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 8, 2, 9, 2, PR_TRUE, 1, onePixel); - - PaintLine(aRenderingContext, 2, 2, 2, 3, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 1, 4, 1, 7, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 2, 8, 2, 8, PR_FALSE, 1, onePixel); - - // Gray - aRenderingContext.SetColor(NS_RGB(192, 192, 192)); - PaintLine(aRenderingContext, 2, 9, 3, 9, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 8, 9, 9, 9, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 4, 10, 7, 10, PR_TRUE, 1, onePixel); - - PaintLine(aRenderingContext, 9, 3, 9, 3, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 10, 4, 10, 7, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 9, 8, 9, 9, PR_FALSE, 1, onePixel); - - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - } else { - outside.SetRect(0, 0, twelvePixels, twelvePixels); - - aRenderingContext.SetColor(NS_RGB(128,128,128)); - aRenderingContext.FillArc(outside, 46, 225); - aRenderingContext.SetColor(NS_RGB(255,255,255)); - aRenderingContext.FillArc(outside, 225, 360); - aRenderingContext.FillArc(outside, 0, 44); - - outside.Deflate(onePixel, onePixel); - aRenderingContext.SetColor(NS_RGB(0,0,0)); - aRenderingContext.FillArc(outside, 46, 225); - aRenderingContext.SetColor(NS_RGB(192,192,192)); - aRenderingContext.FillArc(outside, 225, 360); - aRenderingContext.FillArc(outside, 0, 44); - - outside.Deflate(onePixel, onePixel); - aRenderingContext.SetColor(NS_RGB(255,255,255)); - aRenderingContext.FillArc(outside, 0, 180); - aRenderingContext.FillArc(outside, 180, 360); - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - } - - PRBool clip; - aRenderingContext.PopState(clip); -} - - - -#endif \ No newline at end of file diff --git a/mozilla/layout/forms/nsFormControlHelper.h b/mozilla/layout/forms/nsFormControlHelper.h index b6378a08441..9b2af8b8322 100644 --- a/mozilla/layout/forms/nsFormControlHelper.h +++ b/mozilla/layout/forms/nsFormControlHelper.h @@ -270,6 +270,18 @@ public: static void PaintFixedSizeCheckMark(nsIRenderingContext& aRenderingContext, float aPixelsToTwips); + + /** + * Paint a scaled checkmark + * + * @param aRenderingContext the rendering context + * @param aPixelsToTwips scale factor for convering pixels to twips. + * @param aWidth width in twips + * @param aHeight height in twips + */ + + static void PaintScaledCheckMark(nsIRenderingContext& aRenderingContext, + float aPixelsToTwips, PRUint32 aWidth, PRUint32 aHeight); /** * Paint a fixed size checkmark border diff --git a/mozilla/layout/html/forms/src/nsButtonControlFrame.cpp b/mozilla/layout/html/forms/src/nsButtonControlFrame.cpp index 2f53b316327..9ae8c68797a 100644 --- a/mozilla/layout/html/forms/src/nsButtonControlFrame.cpp +++ b/mozilla/layout/html/forms/src/nsButtonControlFrame.cpp @@ -408,3 +408,9 @@ NS_IMETHODIMP nsButtonControlFrame::GetProperty(nsIAtom* aName, nsString& aValue return NS_OK; } +nsresult nsButtonControlFrame::RequiresWidget(PRBool& aRequiresWidget) +{ + aRequiresWidget = PR_FALSE; + return NS_OK; +} + diff --git a/mozilla/layout/html/forms/src/nsButtonControlFrame.h b/mozilla/layout/html/forms/src/nsButtonControlFrame.h index 24139746a75..09a1b506ee8 100644 --- a/mozilla/layout/html/forms/src/nsButtonControlFrame.h +++ b/mozilla/layout/html/forms/src/nsButtonControlFrame.h @@ -23,7 +23,10 @@ class nsButtonControlFrame : public nsFormControlFrame { public: - // nsIFormControLFrame + // nsFormControlFrame overrides + nsresult RequiresWidget(PRBool &aHasWidget); + + // nsIFormControlFrame NS_IMETHOD SetProperty(nsIAtom* aName, const nsString& aValue); NS_IMETHOD GetProperty(nsIAtom* aName, nsString& aValue); diff --git a/mozilla/layout/html/forms/src/nsCheckboxControlFrame.cpp b/mozilla/layout/html/forms/src/nsCheckboxControlFrame.cpp index 3dbe318bee2..cfbf0fb6523 100644 --- a/mozilla/layout/html/forms/src/nsCheckboxControlFrame.cpp +++ b/mozilla/layout/html/forms/src/nsCheckboxControlFrame.cpp @@ -34,6 +34,7 @@ #include "nsStyleUtil.h" #include "nsIFormControl.h" #include "nsIDOMHTMLInputElement.h" +#include "nsCSSRendering.h" #define NS_DESIRED_CHECKBOX_SIZE 12 @@ -89,7 +90,8 @@ public: virtual void PaintCheckBox(nsIPresContext& aPresContext, nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect); + const nsRect& aDirtyRect, + nsFramePaintLayer aWhichLayer); NS_IMETHOD Paint(nsIPresContext& aPresContext, nsIRenderingContext& aRenderingContext, @@ -153,14 +155,23 @@ nsCheckboxControlFrame::GetDesiredSize(nsIPresContext* aPresContext, { float p2t; aPresContext->GetScaledPixelsToTwips(p2t); -#ifdef XP_PC +#ifndef NS_GFX_RENDER_FORM_ELEMENTS +#ifdef XP_PC aDesiredWidgetSize.width = NSIntPixelsToTwips(NS_DESIRED_CHECKBOX_SIZE, p2t); aDesiredWidgetSize.height = NSIntPixelsToTwips(NS_DESIRED_CHECKBOX_SIZE, p2t); #endif - aDesiredLayoutSize.width = aDesiredWidgetSize.width; - aDesiredLayoutSize.height = aDesiredWidgetSize.height; - aDesiredLayoutSize.ascent = aDesiredLayoutSize.height; - aDesiredLayoutSize.descent = 0; +#endif + + +#ifdef NS_GFX_RENDER_FORM_ELEMENTS + nsFormControlFrame::GetDesiredSize(aPresContext, aReflowState, + aDesiredLayoutSize, aDesiredWidgetSize); +#else + aDesiredLayoutSize.width = aDesiredWidgetSize.width; + aDesiredLayoutSize.height = aDesiredWidgetSize.height; + aDesiredLayoutSize.ascent = aDesiredLayoutSize.height; + aDesiredLayoutSize.descent = 0; +#endif } @@ -279,54 +290,35 @@ nsCheckboxControlFrame::Reset() void nsCheckboxControlFrame::PaintCheckBox(nsIPresContext& aPresContext, nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect) + const nsRect& aDirtyRect, + nsFramePaintLayer aWhichLayer) { - //XXX: Resolution of styles should be cached. This is very - // inefficient to do this each time the checkbox is cliced on. - /** - * Resolve style for a pseudo frame within the given aParentContent & aParentContext. - * The tag should be uppercase and inclue the colon. - * ie: NS_NewAtom(":FIRST-LINE"); - */ - nsIStyleContext* style = nsnull; - if (PR_TRUE == mMouseDownOnCheckbox) { - nsIAtom * sbAtom = NS_NewAtom(":CHECKBOX-LOOK"); - style = aPresContext.ResolvePseudoStyleContextFor(mContent, sbAtom, mStyleContext); - NS_RELEASE(sbAtom); - } - else { - nsIAtom * sbAtom = NS_NewAtom(":CHECKBOX-SELECT-LOOK"); - style = aPresContext.ResolvePseudoStyleContextFor(mContent, sbAtom, mStyleContext); - NS_RELEASE(sbAtom); - } - - const nsStyleColor* color = (const nsStyleColor*)style->GetStyleData(eStyleStruct_Color); - aRenderingContext.PushState(); - + + float p2t; aPresContext.GetScaledPixelsToTwips(p2t); - - //Offset fixed size checkbox in to the middle of the area reserved for the checkbox - const int printOffsetX = (NS_DESIRED_CHECKBOX_SIZE - NS_ABSOLUTE_CHECKBOX_SIZE); - const int printOffsetY = (NS_DESIRED_CHECKBOX_SIZE - NS_ABSOLUTE_CHECKBOX_SIZE); - aRenderingContext.Translate(NSIntPixelsToTwips(printOffsetX, p2t), - NSIntPixelsToTwips(printOffsetY, p2t)); - // Draw's background + border - nsFormControlHelper::PaintFixedSizeCheckMarkBorder(aRenderingContext, p2t, *color); - - PRBool checked = PR_TRUE; + PRBool checked = PR_FALSE; - // Get current checked state from content model + // Get current checked state through content model. + // XXX: This is very inefficient, but it is necessary in the case of printing. + // During printing the Paint is called but the actual state of the checkbox + // is in a frame in presentation shell 0. nsresult result = GetCurrentCheckState(&checked); if (PR_TRUE == checked) { - nsFormControlHelper::PaintFixedSizeCheckMark(aRenderingContext, p2t); + // Draw check mark + //XXX: TODO Use fixed size checkmark when size matches default + //This will make the checkmark look better -->PaintFixedSizeCheckMark(aRenderingContext, p2t); + const nsStyleColor* color = (const nsStyleColor*) + mStyleContext->GetStyleData(eStyleStruct_Color); + aRenderingContext.SetColor(color->mColor); + nsFormControlHelper::PaintScaledCheckMark(aRenderingContext, + p2t, mRect.width, mRect.height); } PRBool clip; aRenderingContext.PopState(clip); - NS_IF_RELEASE(style); } @@ -336,8 +328,11 @@ nsCheckboxControlFrame::Paint(nsIPresContext& aPresContext, const nsRect& aDirtyRect, nsFramePaintLayer aWhichLayer) { + // Paint the background + nsFormControlFrame::Paint(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer); if (eFramePaintLayer_Content == aWhichLayer) { - PaintCheckBox(aPresContext, aRenderingContext, aDirtyRect); + // Paint the checkmark + PaintCheckBox(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer); } return NS_OK; } @@ -358,7 +353,6 @@ NS_METHOD nsCheckboxControlFrame::HandleEvent(nsIPresContext& aPresContext, case NS_MOUSE_LEFT_BUTTON_DOWN: mMouseDownOnCheckbox = PR_TRUE; //XXX: TODO render gray rectangle on mouse down - break; case NS_MOUSE_EXIT: diff --git a/mozilla/layout/html/forms/src/nsFormControlFrame.cpp b/mozilla/layout/html/forms/src/nsFormControlFrame.cpp index 27ab774c04a..a61df00a8d3 100644 --- a/mozilla/layout/html/forms/src/nsFormControlFrame.cpp +++ b/mozilla/layout/html/forms/src/nsFormControlFrame.cpp @@ -72,7 +72,6 @@ nsFormControlFrame::nsFormControlFrame() nsFormControlFrame::~nsFormControlFrame() { - //printf("nsFormControlFrame::~nsFormControlFrame \n"); mFormFrame = nsnull; NS_IF_RELEASE(mWidget); } @@ -334,102 +333,6 @@ nsFormControlFrame::Reflow(nsIPresContext& aPresContext, return NS_OK; } -#if 0 -NS_METHOD -nsFormControlFrame::Reflow(nsIPresContext& aPresContext, - nsHTMLReflowMetrics& aDesiredSize, - const nsHTMLReflowState& aReflowState, - nsReflowStatus& aStatus) -{ - nsIView* view = nsnull; - GetView(view); - if (nsnull == view) { - nsresult result = - nsRepository::CreateInstance(kViewCID, nsnull, kIViewIID, (void **)&view); - if (NS_OK != result) { - NS_ASSERTION(0, "Could not create view for form control"); - aStatus = NS_FRAME_NOT_COMPLETE; - return result; - } - nsIPresShell *presShell = aPresContext.GetShell(); // need to release - nsIViewManager *viewMan = presShell->GetViewManager(); // need to release - NS_RELEASE(presShell); - - GetDesiredSize(&aPresContext, aReflowState, aDesiredSize, mWidgetSize); - - //nsRect boundBox(0, 0, mWidgetSize.width, mWidgetSize.height); - nsRect boundBox(0, 0, aDesiredSize.width, aDesiredSize.height); - - nsIFrame* parWithView; - nsIView *parView; - - GetParentWithView(parWithView); - parWithView->GetView(parView); - - // initialize the view as hidden since we don't know the (x,y) until Paint - result = view->Init(viewMan, boundBox, parView, - nsnull, nsViewVisibility_kHide); - if (NS_OK != result) { - NS_ASSERTION(0, "view initialization failed"); - aStatus = NS_FRAME_NOT_COMPLETE; - return NS_OK; - } - - viewMan->InsertChild(parView, view, 0); - - const nsIID& id = GetCID(); - nsWidgetInitData* initData = GetWidgetInitData(aPresContext); // needs to be deleted - view->CreateWidget(id, initData); - - if (nsnull != initData) { - delete(initData); - } - - // set our widget - result = GetWidget(view, &mWidget); - if ((NS_OK == result) && mWidget) { // keep the ref on mWidget - nsIFormControl* formControl = nsnull; - result = mContent->QueryInterface(kIFormControlIID, (void**)&formControl); - if ((NS_OK == result) && formControl) { - // set the content's widget, so it can get content modified by the widget - formControl->SetWidget(mWidget); - NS_RELEASE(formControl); - } - PostCreateWidget(&aPresContext, aDesiredSize.width, aDesiredSize.height); - mDidInit = PR_TRUE; - } else { - NS_ASSERTION(0, "could not get widget"); - } - - SetView(view); - - if ((aDesiredSize.width != boundBox.width) || (aDesiredSize.height != boundBox.height)) { - viewMan->ResizeView(view, aDesiredSize.width, aDesiredSize.height); - } - - NS_IF_RELEASE(viewMan); - } - else { - GetDesiredSize(&aPresContext, aReflowState, aDesiredSize, mWidgetSize); - - // If we are being reflowed and have a view, hide the view until - // we are told to paint (which is when our location will have - // stabilized). - } - - aDesiredSize.ascent = aDesiredSize.height; - aDesiredSize.descent = 0; - - if (nsnull != aDesiredSize.maxElementSize) { - aDesiredSize.maxElementSize->width = aDesiredSize.width; - aDesiredSize.maxElementSize->height = aDesiredSize.height; - } - - aStatus = NS_FRAME_COMPLETE; - return NS_OK; -} - -#endif NS_IMETHODIMP nsFormControlFrame::AttributeChanged(nsIPresContext* aPresContext, @@ -739,8 +642,6 @@ nsFormControlFrame::GetFont(nsIPresContext* aPresContext, return NS_OK; } - - nsresult nsFormControlFrame::GetDefaultCheckState(PRBool *aState) { nsresult res = NS_OK; @@ -763,7 +664,6 @@ nsresult nsFormControlFrame::SetDefaultCheckState(PRBool aState) return res; } - nsresult nsFormControlFrame::GetCurrentCheckState(PRBool *aState) { nsresult res = NS_OK; @@ -803,506 +703,3 @@ nsresult nsFormControlFrame::RequiresWidget(PRBool & aRequiresWidget) } -#if 0 - ->>>>>>> 1.41 -// -//------------------------------------------------------------------------------------- -// Utility methods for rendering Form Elements using GFX -//------------------------------------------------------------------------------------- -// -// XXX: The following location for the paint code is TEMPORARY. -// It is being used to get printing working -// under windows. Later it will be used to GFX-render the controls to the display. -// Expect this code to repackaged and moved to a new location in the future. - - -void -nsFormControlFrame::PaintLine(nsIRenderingContext& aRenderingContext, - nscoord aSX, nscoord aSY, nscoord aEX, nscoord aEY, - PRBool aHorz, nscoord aWidth, nscoord aOnePixel) -{ - - nsPoint p[5]; - if (aHorz) { - aEX++; - p[0].x = nscoord(float(aSX)*aOnePixel); - p[0].y = nscoord(float(aSY)*aOnePixel); - p[1].x = nscoord(float(aEX)*aOnePixel); - p[1].y = nscoord(float(aEY)*aOnePixel); - p[2].x = nscoord(float(aEX)*aOnePixel); - p[2].y = nscoord(float(aEY+1)*aOnePixel); - p[3].x = nscoord(float(aSX)*aOnePixel); - p[3].y = nscoord(float(aSY+1)*aOnePixel); - p[4].x = nscoord(float(aSX)*aOnePixel); - p[4].y = nscoord(float(aSY)*aOnePixel); - } else { - aEY++; - p[0].x = nscoord(float(aSX)*aOnePixel); - p[0].y = nscoord(float(aSY)*aOnePixel); - p[1].x = nscoord(float(aEX)*aOnePixel); - p[1].y = nscoord(float(aEY)*aOnePixel); - p[2].x = nscoord(float(aEX+1)*aOnePixel); - p[2].y = nscoord(float(aEY)*aOnePixel); - p[3].x = nscoord(float(aSX+1)*aOnePixel); - p[3].y = nscoord(float(aSY)*aOnePixel); - p[4].x = nscoord(float(aSX)*aOnePixel); - p[4].y = nscoord(float(aSY)*aOnePixel); - } - aRenderingContext.FillPolygon(p, 5); - -} - -//--------------------------------------------------------------------------- -//--------------------------------------------------------------------------- -//--------------------------------------------------------------------------- -// Offset for arrow centerpoint -const nscoord nsArrowOffsetX = 3; -const nscoord nsArrowOffsetY = 3; -nscoord nsArrowRightPoints[] = {0, 0, 0, 6, 6, 3 }; -nscoord nsArrowLeftPoints[] = {0, 3, 6, 0, 6, 6 }; -nscoord nsArrowUpPoints[] = {3, 0, 6, 6, 0, 6 }; -nscoord nsArrowDownPoints[] = {0, 0, 3, 6, 6, 0 }; - -//--------------------------------------------------------------------------- -void -nsFormControlFrame::SetupPoints(PRUint32 aNumberOfPoints, nscoord* aPoints, nsPoint* aPolygon, nscoord aScaleFactor, nscoord aX, nscoord aY, - nscoord aCenterX, nscoord aCenterY) -{ - const nscoord offsetX = aCenterX * aScaleFactor; - const nscoord offsetY = aCenterY * aScaleFactor; - - PRUint32 i = 0; - PRUint32 count = 0; - for (i = 0; i < aNumberOfPoints; i++) { - aPolygon[i].x = (aPoints[count] * aScaleFactor) + aX - offsetX; - count++; - aPolygon[i].y = (aPoints[count] * aScaleFactor) + aY - offsetY; - count++; - } -} - - -//--------------------------------------------------------------------------- -void -nsFormControlFrame::PaintArrowGlyph(nsIRenderingContext& aRenderingContext, - nscoord aSX, nscoord aSY, nsArrowDirection aArrowDirection, - nscoord aOnePixel) -{ - nsPoint polygon[3]; - - switch(aArrowDirection) - { - case eArrowDirection_Left: - SetupPoints(3, nsArrowLeftPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - - case eArrowDirection_Right: - SetupPoints(3, nsArrowRightPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - - case eArrowDirection_Up: - SetupPoints(3, nsArrowUpPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - - case eArrowDirection_Down: - SetupPoints(3, nsArrowDownPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - } - - aRenderingContext.FillPolygon(polygon, 3); -} - -//--------------------------------------------------------------------------- -void -nsFormControlFrame::PaintArrow(nsArrowDirection aArrowDirection, - nsIRenderingContext& aRenderingContext, - nsIPresContext& aPresContext, - const nsRect& aDirtyRect, - nsRect& aRect, - nscoord aOnePixel, - nsIStyleContext* aArrowStyle, - const nsStyleSpacing& aSpacing, - nsIFrame* aForFrame, - nsRect& aFrameRect) -{ - // Draw border using CSS - const nsStyleColor* color = (const nsStyleColor*) - aArrowStyle->GetStyleData(eStyleStruct_Color); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, aRect, *color, aSpacing, 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, aRect, aSpacing, aArrowStyle, 0); - - // Draw the glyph in black - aRenderingContext.SetColor(NS_RGB(0, 0, 0)); - // Draw arrow centered in the rectangle - PaintArrowGlyph(aRenderingContext, aRect.x + (aRect.width / 2), aRect.y + (aRect.height / 2), aArrowDirection, aOnePixel); - -} - -//--------------------------------------------------------------------------- -void -nsFormControlFrame::PaintScrollbar(nsIRenderingContext& aRenderingContext, - nsIPresContext& aPresContext, - const nsRect& aDirtyRect, - nsRect& aRect, - PRBool aHorizontal, - nscoord aOnePixel, - nsIStyleContext* aScrollbarStyleContext, - nsIStyleContext* aScrollbarArrowStyleContext, - nsIFrame* aForFrame, - nsRect& aFrameRect) -{ - // Get the Scrollbar's Style structs - const nsStyleSpacing* scrollbarSpacing = - (const nsStyleSpacing*)aScrollbarStyleContext->GetStyleData(eStyleStruct_Spacing); - const nsStyleColor* scrollbarColor = - (const nsStyleColor*)aScrollbarStyleContext->GetStyleData(eStyleStruct_Color); - - // Get the Scrollbar's Arrow's Style structs - const nsStyleSpacing* arrowSpacing = - (const nsStyleSpacing*)aScrollbarArrowStyleContext->GetStyleData(eStyleStruct_Spacing); - const nsStyleColor* arrowColor = - (const nsStyleColor*)aScrollbarArrowStyleContext->GetStyleData(eStyleStruct_Color); - - // Paint background for scrollbar - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, aRect, *scrollbarColor, *arrowSpacing, - 0, 0); - - if (PR_TRUE == aHorizontal) { - // Draw horizontal Arrow - nscoord arrowWidth = aRect.height; - nsRect arrowLeftRect(aRect.x, aRect.y, arrowWidth, arrowWidth); - PaintArrow(eArrowDirection_Left,aRenderingContext,aPresContext, - aDirtyRect, arrowLeftRect,aOnePixel, aScrollbarArrowStyleContext, *arrowSpacing, aForFrame, aFrameRect); - - nsRect thumbRect(aRect.x+arrowWidth, aRect.y, arrowWidth, arrowWidth); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowColor, *arrowSpacing, - 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowSpacing, aScrollbarArrowStyleContext, 0); - - nsRect arrowRightRect(aRect.x + (aRect.width - arrowWidth), aRect.y, arrowWidth, arrowWidth); - PaintArrow(eArrowDirection_Right,aRenderingContext,aPresContext, - aDirtyRect, arrowRightRect,aOnePixel, aScrollbarArrowStyleContext, *arrowSpacing, aForFrame, aFrameRect); - - } - else { - // Paint vertical arrow - nscoord arrowHeight = aRect.width; - nsRect arrowUpRect(aRect.x, aRect.y, arrowHeight, arrowHeight); - PaintArrow(eArrowDirection_Up,aRenderingContext,aPresContext, - aDirtyRect, arrowUpRect,aOnePixel, aScrollbarArrowStyleContext, *arrowSpacing, aForFrame, aFrameRect); - - nsRect thumbRect(aRect.x, aRect.y+arrowHeight, arrowHeight, arrowHeight); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowColor, *arrowSpacing, - 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowSpacing, aScrollbarArrowStyleContext, 0); - - nsRect arrowDownRect(aRect.x, aRect.y + (aRect.height - arrowHeight), arrowHeight, arrowHeight); - PaintArrow(eArrowDirection_Down,aRenderingContext,aPresContext, - aDirtyRect, arrowDownRect,aOnePixel, aScrollbarArrowStyleContext, *arrowSpacing, aForFrame, aFrameRect); - } - -} - - -void -nsFormControlFrame::PaintFixedSizeCheckMark(nsIRenderingContext& aRenderingContext, - float aPixelsToTwips) -{ - //XXX: Check mark is always draw in black. If the this code is used to Render the widget - //to the screen the color should be set using the CSS style color instead. - aRenderingContext.SetColor(NS_RGB(0, 0, 0)); - // Offsets to x,y location, These offsets are used to place the checkmark in the middle - // of it's 12X12 pixel box. - const PRUint32 ox = 3; - const PRUint32 oy = 3; - - nscoord onePixel = NSIntPixelsToTwips(1, aPixelsToTwips); - - // Draw checkmark using a series of rectangles. This builds an replica of the - // way the checkmark looks under Windows. Using a polygon does not correctly - // represent a checkmark under Windows. This is due to round-off error in the - // Twips to Pixel conversions. - PaintLine(aRenderingContext, 0 + ox, 2 + oy, 0 + ox, 4 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 1 + ox, 3 + oy, 1 + ox, 5 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 2 + ox, 4 + oy, 2 + ox, 6 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 3 + ox, 3 + oy, 3 + ox, 5 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 4 + ox, 2 + oy, 4 + ox, 4 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 5 + ox, 1 + oy, 5 + ox, 3 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 6 + ox, 0 + oy, 6 + ox, 2 + oy, PR_FALSE, 1, onePixel); -} - -void -nsFormControlFrame::PaintFixedSizeCheckMarkBorder(nsIRenderingContext& aRenderingContext, - float aPixelsToTwips, const nsStyleColor& aBackgroundColor) -{ -//XXX: This method should use the CSS Border rendering code. - - // Offsets to x,y location - PRUint32 ox = 0; - PRUint32 oy = 0; - - nscoord onePixel = NSIntPixelsToTwips(1, aPixelsToTwips); - nscoord twoPixels = NSIntPixelsToTwips(2, aPixelsToTwips); - nscoord ninePixels = NSIntPixelsToTwips(9, aPixelsToTwips); - nscoord twelvePixels = NSIntPixelsToTwips(12, aPixelsToTwips); - - // Draw Background - - aRenderingContext.SetColor(aBackgroundColor.mBackgroundColor); - nsRect rect(0, 0, twelvePixels, twelvePixels); - aRenderingContext.FillRect(rect); - - // Draw Border - aRenderingContext.SetColor(NS_RGB(128, 128, 128)); - PaintLine(aRenderingContext, 0 + ox, 0 + oy, 11 + ox, 0 + oy, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 0 + ox, 0 + oy, 0 + ox, 11 + oy, PR_FALSE, 1, onePixel); - - aRenderingContext.SetColor(NS_RGB(192, 192, 192)); - PaintLine(aRenderingContext, 1 + ox, 11 + oy, 11 + ox, 11 + oy, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 11 + ox, 1 + oy, 11 + ox, 11 + oy, PR_FALSE, 1, onePixel); - - aRenderingContext.SetColor(NS_RGB(0, 0, 0)); - PaintLine(aRenderingContext, 1 + ox, 1 + oy, 10 + ox, 1 + oy, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 1 + ox, 1 + oy, 1 + ox, 10 + oy, PR_FALSE, 1, onePixel); - -} - -#if 0 -//XXX: Future, use the following code to draw a checkmark in any size. -void -nsFormControlFrame::PaintScaledCheckMark(nsIRenderingContext& aRenderingContext, - float aPixelsToTwips, PRUint32 aWidth, PRUint32 aHeight) -{ -#define NS_CHECKED_POINTS 7 - - // Points come from the coordinates on a 11X11 pixels rectangle with 0,0 at the lower - // left. - nscoord checkedPolygonDef[] = {0,2, 2,4, 6,0 , 6,2, 2,6, 0,4, 0,2 }; - nsPoint checkedPolygon[NS_CHECKED_POINTS]; - PRUint32 defIndex = 0; - PRUint32 polyIndex = 0; - PRBool scalable = PR_FALSE; - aRenderingContext.SetColor(color->mColor); - PRUint32 height = aHeight; - - for (defIndex = 0; defIndex < (NS_CHECKED_POINTS * 2); defIndex++) { - checkedPolygon[polyIndex].x = nscoord(((checkedPolygonDef[defIndex])) * (height / 11.0) + (height / 11.0)); - defIndex++; - checkedPolygon[polyIndex].y = nscoord((((checkedPolygonDef[defIndex]))) * (height / 11.0) + (height / 11.0)); - polyIndex++; - } - - aRenderingContext.FillPolygon(checkedPolygon, NS_CHECKED_POINTS); - -} -#endif - -void -nsFormControlFrame::PaintFocus(nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect, nsRect& aInside, nsRect& aOutside) - -{ - // draw dashed line to indicate selection, XXX don't calc rect every time - PRUint8 borderStyles[4]; - nscolor borderColors[4]; - nscolor black = NS_RGB(0,0,0); - for (PRInt32 i = 0; i < 4; i++) { - borderStyles[i] = NS_STYLE_BORDER_STYLE_DOTTED; - borderColors[i] = black; - } - nsCSSRendering::DrawDashedSides(0, aRenderingContext, borderStyles, borderColors, aOutside, - aInside, PR_FALSE, nsnull); -} - - -void -nsFormControlFrame::PaintRectangularButton(nsIPresContext& aPresContext, - nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect, PRUint32 aWidth, - PRUint32 aHeight, PRBool aShift, PRBool aShowFocus, - nsIStyleContext* aStyleContext, nsString& aLabel, nsFormControlFrame* aForFrame) - -{ - aRenderingContext.PushState(); - // Draw border using CSS - // Get the Scrollbar's Arrow's Style structs - const nsStyleSpacing* spacing = - (const nsStyleSpacing*)aStyleContext->GetStyleData(eStyleStruct_Spacing); - const nsStyleColor* color = - (const nsStyleColor*)aStyleContext->GetStyleData(eStyleStruct_Color); - nsRect rect(0, 0, aWidth, aHeight); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, rect, *color, *spacing, 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, rect, *spacing, aStyleContext, 0); - - nsMargin border; - spacing->CalcBorderFor(aForFrame, border); - - float p2t; - aPresContext.GetScaledPixelsToTwips(p2t); - nscoord onePixel = NSIntPixelsToTwips(1, p2t); - - nsRect outside(0, 0, aWidth, aHeight); - outside.Deflate(border); - outside.Deflate(onePixel, onePixel); - - nsRect inside(outside); - inside.Deflate(onePixel, onePixel); - - - if (aShowFocus) { - PaintFocus(aRenderingContext, - aDirtyRect, inside, outside); - } - - float appUnits; - float devUnits; - float scale; - nsIDeviceContext * context; - aRenderingContext.GetDeviceContext(context); - - context->GetCanonicalPixelScale(scale); - context->GetAppUnitsToDevUnits(devUnits); - context->GetDevUnitsToAppUnits(appUnits); - - aRenderingContext.SetColor(NS_RGB(0,0,0)); - - nsFont font(aPresContext.GetDefaultFixedFont()); - aForFrame->GetFont(&aPresContext, font); - - aRenderingContext.SetFont(font); - - nscoord textWidth; - nscoord textHeight; - aRenderingContext.GetWidth(aLabel, textWidth); - - nsIFontMetrics* metrics; - context->GetMetricsFor(font, metrics); - metrics->GetMaxAscent(textHeight); - - nscoord x = ((inside.width - textWidth) / 2) + inside.x; - nscoord y = ((inside.height - textHeight) / 2) + inside.y; - if (PR_TRUE == aShift) { - x += onePixel; - y += onePixel; - } - - aRenderingContext.DrawString(aLabel, x, y); - NS_RELEASE(context); - PRBool clipEmpty; - aRenderingContext.PopState(clipEmpty); -} - - -void -nsFormControlFrame::PaintCircularBorder(nsIPresContext& aPresContext, - nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect, nsIStyleContext* aStyleContext, PRBool aInset, - nsIFrame* aForFrame, PRUint32 aWidth, PRUint32 aHeight) -{ - aRenderingContext.PushState(); - - float p2t; - aPresContext.GetScaledPixelsToTwips(p2t); - - const nsStyleSpacing* spacing = (const nsStyleSpacing*)aStyleContext->GetStyleData(eStyleStruct_Spacing); - nsMargin border; - spacing->CalcBorderFor(aForFrame, border); - - nscoord onePixel = NSIntPixelsToTwips(1, p2t); - nscoord twelvePixels = NSIntPixelsToTwips(12, p2t); - - nsRect outside(0, 0, aWidth, aHeight); - - aRenderingContext.SetColor(NS_RGB(192,192,192)); - aRenderingContext.FillRect(outside); - - PRBool standardSize = PR_FALSE; - if (standardSize) { - outside.SetRect(0, 0, twelvePixels, twelvePixels); - aRenderingContext.SetColor(NS_RGB(255,255,255)); - aRenderingContext.FillArc(outside, 0, 180); - aRenderingContext.FillArc(outside, 180, 360); - - if (PR_TRUE == aInset) { - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - aRenderingContext.SetColor(NS_RGB(192,192,192)); - aRenderingContext.FillArc(outside, 0, 180); - aRenderingContext.FillArc(outside, 180, 360); - outside.SetRect(0, 0, twelvePixels, twelvePixels); - } - - // DrakGray - aRenderingContext.SetColor(NS_RGB(128,128,128)); - PaintLine(aRenderingContext, 4, 0, 7, 0, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 2, 1, 3, 1, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 8, 1, 9, 1, PR_TRUE, 1, onePixel); - - PaintLine(aRenderingContext, 1, 2, 1, 3, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 0, 4, 0, 7, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 1, 8, 1, 9, PR_FALSE, 1, onePixel); - - // Black - aRenderingContext.SetColor(NS_RGB(0,0,0)); - PaintLine(aRenderingContext, 4, 1, 7, 1, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 2, 2, 3, 2, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 8, 2, 9, 2, PR_TRUE, 1, onePixel); - - PaintLine(aRenderingContext, 2, 2, 2, 3, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 1, 4, 1, 7, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 2, 8, 2, 8, PR_FALSE, 1, onePixel); - - // Gray - aRenderingContext.SetColor(NS_RGB(192, 192, 192)); - PaintLine(aRenderingContext, 2, 9, 3, 9, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 8, 9, 9, 9, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 4, 10, 7, 10, PR_TRUE, 1, onePixel); - - PaintLine(aRenderingContext, 9, 3, 9, 3, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 10, 4, 10, 7, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 9, 8, 9, 9, PR_FALSE, 1, onePixel); - - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - } else { - outside.SetRect(0, 0, twelvePixels, twelvePixels); - - aRenderingContext.SetColor(NS_RGB(128,128,128)); - aRenderingContext.FillArc(outside, 46, 225); - aRenderingContext.SetColor(NS_RGB(255,255,255)); - aRenderingContext.FillArc(outside, 225, 360); - aRenderingContext.FillArc(outside, 0, 44); - - outside.Deflate(onePixel, onePixel); - aRenderingContext.SetColor(NS_RGB(0,0,0)); - aRenderingContext.FillArc(outside, 46, 225); - aRenderingContext.SetColor(NS_RGB(192,192,192)); - aRenderingContext.FillArc(outside, 225, 360); - aRenderingContext.FillArc(outside, 0, 44); - - outside.Deflate(onePixel, onePixel); - aRenderingContext.SetColor(NS_RGB(255,255,255)); - aRenderingContext.FillArc(outside, 0, 180); - aRenderingContext.FillArc(outside, 180, 360); - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - } - - PRBool clip; - aRenderingContext.PopState(clip); -} - - -#endif diff --git a/mozilla/layout/html/forms/src/nsFormControlFrame.h b/mozilla/layout/html/forms/src/nsFormControlFrame.h index bfa4771cf3c..ce0428966d6 100644 --- a/mozilla/layout/html/forms/src/nsFormControlFrame.h +++ b/mozilla/layout/html/forms/src/nsFormControlFrame.h @@ -40,7 +40,7 @@ class nsFormFrame; // using GFX calls, rather than creating a widget. Undefining it // causes widgets to be used for form elements. @see RequiresWidget method // to see which widgets will obey this directive. -#undef NS_GFX_RENDER_FORM_ELEMENTS +#define NS_GFX_RENDER_FORM_ELEMENTS /** * nsFormControlFrame is the base class for frames of form controls. It diff --git a/mozilla/layout/html/forms/src/nsFormControlHelper.cpp b/mozilla/layout/html/forms/src/nsFormControlHelper.cpp index d4d1d5dd6ff..3b88e591706 100644 --- a/mozilla/layout/html/forms/src/nsFormControlHelper.cpp +++ b/mozilla/layout/html/forms/src/nsFormControlHelper.cpp @@ -52,18 +52,6 @@ #include "nsINameSpaceManager.h" #include "nsIDOMHTMLInputElement.h" - -/*static NS_DEFINE_IID(kIWidgetIID, NS_IWIDGET_IID); -static NS_DEFINE_IID(kIFormControlIID, NS_IFORMCONTROL_IID); -static NS_DEFINE_IID(kIFormControlFrameIID, NS_IFORMCONTROLFRAME_IID); -static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); -static NS_DEFINE_IID(kViewCID, NS_VIEW_CID); -static NS_DEFINE_IID(kIViewIID, NS_IVIEW_IID); -static NS_DEFINE_IID(kIDOMHTMLInputElementIID, NS_IDOMHTMLINPUTELEMENT_IID); -*/ - - - static NS_DEFINE_IID(kIWidgetIID, NS_IWIDGET_IID); static NS_DEFINE_IID(kIFormControlIID, NS_IFORMCONTROL_IID); static NS_DEFINE_IID(kIFormControlFrameIID, NS_IFORMCONTROLFRAME_IID); @@ -105,44 +93,6 @@ void nsFormControlHelper::ForceDrawFrame(nsIFrame * aFrame) } -/*nscoord -nsFormControlHelper::GetScrollbarWidth(float aPixToTwip) -{ - return NSIntPixelsToTwips(19, aPixToTwip); // XXX this is windows -} - -nscoord -nsFormControlHelper::GetVerticalBorderWidth(float aPixToTwip) const -{ - return NSIntPixelsToTwips(3, aPixToTwip); -} - -nscoord -nsFormControlHelper::GetHorizontalBorderWidth(float aPixToTwip) const -{ - return GetVerticalBorderWidth(aPixToTwip); -} - -nscoord -nsFormControlHelper::GetVerticalInsidePadding(float aPixToTwip, - nscoord aInnerHeight) const -{ - return NSIntPixelsToTwips(3, aPixToTwip); -} - -nscoord -nsFormControlHelper::GetHorizontalInsidePadding(nsIPresContext& aPresContext, - float aPixToTwip, - nscoord aInnerWidth, - nscoord aCharWidth) const -{ - return GetVerticalInsidePadding(aPixToTwip, aInnerWidth); -} -*/ - - - - nsCompatibility nsFormControlHelper::GetRepChars(nsIPresContext& aPresContext, char& char1, char& char2) { @@ -400,20 +350,11 @@ nsFormControlHelper::GetFont(nsIFormControlFrame * aFormFrame, } - - - - // //------------------------------------------------------------------------------------- // Utility methods for rendering Form Elements using GFX //------------------------------------------------------------------------------------- // -// XXX: The following location for the paint code is TEMPORARY. -// It is being used to get printing working -// under windows. Later it will be used to GFX-render the controls to the display. -// Expect this code to repackaged and moved to a new location in the future. - void nsFormControlHelper::PaintLine(nsIRenderingContext& aRenderingContext, @@ -642,8 +583,6 @@ void nsFormControlHelper::PaintFixedSizeCheckMarkBorder(nsIRenderingContext& aRenderingContext, float aPixelsToTwips, const nsStyleColor& aBackgroundColor) { -//XXX: This method should use the CSS Border rendering code. - // Offsets to x,y location PRUint32 ox = 0; PRUint32 oy = 0; @@ -654,8 +593,7 @@ nsFormControlHelper::PaintFixedSizeCheckMarkBorder(nsIRenderingContext& aRenderi nscoord twelvePixels = NSIntPixelsToTwips(12, aPixelsToTwips); // Draw Background - - aRenderingContext.SetColor(aBackgroundColor.mBackgroundColor); + aRenderingContext.SetColor(aBackgroundColor.mColor); nsRect rect(0, 0, twelvePixels, twelvePixels); aRenderingContext.FillRect(rect); @@ -674,35 +612,37 @@ nsFormControlHelper::PaintFixedSizeCheckMarkBorder(nsIRenderingContext& aRenderi } -#if 0 -//XXX: Future, use the following code to draw a checkmark in any size. +//Draw a checkmark in any size. void nsFormControlHelper::PaintScaledCheckMark(nsIRenderingContext& aRenderingContext, float aPixelsToTwips, PRUint32 aWidth, PRUint32 aHeight) { -#define NS_CHECKED_POINTS 7 + const int checkpoints = 7; + const float checksize = 8.0f; - // Points come from the coordinates on a 11X11 pixels rectangle with 0,0 at the lower - // left. + // Points come from the coordinates on a 7X7 pixels + // box with 0,0 at the lower left. nscoord checkedPolygonDef[] = {0,2, 2,4, 6,0 , 6,2, 2,6, 0,4, 0,2 }; - nsPoint checkedPolygon[NS_CHECKED_POINTS]; + + nsPoint checkedPolygon[checkpoints]; PRUint32 defIndex = 0; PRUint32 polyIndex = 0; - PRBool scalable = PR_FALSE; - aRenderingContext.SetColor(color->mColor); - PRUint32 height = aHeight; - for (defIndex = 0; defIndex < (NS_CHECKED_POINTS * 2); defIndex++) { - checkedPolygon[polyIndex].x = nscoord(((checkedPolygonDef[defIndex])) * (height / 11.0) + (height / 11.0)); + // Scale the checkmark based on the smallest dimension + float size = aWidth / checksize; + if (aHeight < aWidth) { + size = aHeight / checksize; + } + + for (defIndex = 0; defIndex < (checkpoints * 2); defIndex++) { + checkedPolygon[polyIndex].x = nscoord(((float(checkedPolygonDef[defIndex]) - 3.0) * (size)) + (aWidth / 2.0)); defIndex++; - checkedPolygon[polyIndex].y = nscoord((((checkedPolygonDef[defIndex]))) * (height / 11.0) + (height / 11.0)); + checkedPolygon[polyIndex].y = nscoord(((float(checkedPolygonDef[defIndex]) - 3.0) * (size)) + (aHeight / 2.0)); polyIndex++; } - aRenderingContext.FillPolygon(checkedPolygon, NS_CHECKED_POINTS); - + aRenderingContext.FillPolygon(checkedPolygon, checkpoints); } -#endif void nsFormControlHelper::PaintFocus(nsIRenderingContext& aRenderingContext, @@ -912,527 +852,3 @@ nsFormControlHelper::PaintCircularBorder(nsIPresContext& aPresContext, aRenderingContext.PopState(clip); } -#if 0 -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -//****************************************************************** -// -//------------------------------------------------------------------------------------- -// Utility methods for rendering Form Elements using GFX -//------------------------------------------------------------------------------------- -// -// XXX: The following location for the paint code is TEMPORARY. -// It is being used to get printing working -// under windows. Later it will be used to GFX-render the controls to the display. -// Expect this code to repackaged and moved to a new location in the future. - - -void -nsFormControlHelper::PaintLine(nsIRenderingContext& aRenderingContext, - nscoord aSX, nscoord aSY, nscoord aEX, nscoord aEY, - PRBool aHorz, nscoord aWidth, nscoord aOnePixel) -{ - - nsPoint p[5]; - if (aHorz) { - aEX++; - p[0].x = nscoord(float(aSX)*aOnePixel); - p[0].y = nscoord(float(aSY)*aOnePixel); - p[1].x = nscoord(float(aEX)*aOnePixel); - p[1].y = nscoord(float(aEY)*aOnePixel); - p[2].x = nscoord(float(aEX)*aOnePixel); - p[2].y = nscoord(float(aEY+1)*aOnePixel); - p[3].x = nscoord(float(aSX)*aOnePixel); - p[3].y = nscoord(float(aSY+1)*aOnePixel); - p[4].x = nscoord(float(aSX)*aOnePixel); - p[4].y = nscoord(float(aSY)*aOnePixel); - } else { - aEY++; - p[0].x = nscoord(float(aSX)*aOnePixel); - p[0].y = nscoord(float(aSY)*aOnePixel); - p[1].x = nscoord(float(aEX)*aOnePixel); - p[1].y = nscoord(float(aEY)*aOnePixel); - p[2].x = nscoord(float(aEX+1)*aOnePixel); - p[2].y = nscoord(float(aEY)*aOnePixel); - p[3].x = nscoord(float(aSX+1)*aOnePixel); - p[3].y = nscoord(float(aSY)*aOnePixel); - p[4].x = nscoord(float(aSX)*aOnePixel); - p[4].y = nscoord(float(aSY)*aOnePixel); - } - aRenderingContext.FillPolygon(p, 5); - -} - -//--------------------------------------------------------------------------- -//--------------------------------------------------------------------------- -//--------------------------------------------------------------------------- -// Offset for arrow centerpoint -const nscoord nsArrowOffsetX = 3; -const nscoord nsArrowOffsetY = 3; -static nscoord nsArrowRightPoints[] = {0, 0, 0, 6, 6, 3 }; -static nscoord nsArrowLeftPoints[] = {0, 3, 6, 0, 6, 6 }; -static nscoord nsArrowUpPoints[] = {3, 0, 6, 6, 0, 6 }; -static nscoord nsArrowDownPoints[] = {0, 0, 3, 6, 6, 0 }; - -//--------------------------------------------------------------------------- -void -nsFormControlHelper::SetupPoints(PRUint32 aNumberOfPoints, nscoord* aPoints, nsPoint* aPolygon, nscoord aScaleFactor, nscoord aX, nscoord aY, - nscoord aCenterX, nscoord aCenterY) -{ - const nscoord offsetX = aCenterX * aScaleFactor; - const nscoord offsetY = aCenterY * aScaleFactor; - - PRUint32 i = 0; - PRUint32 count = 0; - for (i = 0; i < aNumberOfPoints; i++) { - aPolygon[i].x = (aPoints[count] * aScaleFactor) + aX - offsetX; - count++; - aPolygon[i].y = (aPoints[count] * aScaleFactor) + aY - offsetY; - count++; - } -} - - -//--------------------------------------------------------------------------- -void -nsFormControlHelper::PaintArrowGlyph(nsIRenderingContext& aRenderingContext, - nscoord aSX, nscoord aSY, nsArrowDirection aArrowDirection, - nscoord aOnePixel) -{ - nsPoint polygon[3]; - - switch(aArrowDirection) - { - case eArrowDirection_Left: - SetupPoints(3, nsArrowLeftPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - - case eArrowDirection_Right: - SetupPoints(3, nsArrowRightPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - - case eArrowDirection_Up: - SetupPoints(3, nsArrowUpPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - - case eArrowDirection_Down: - SetupPoints(3, nsArrowDownPoints, polygon, aOnePixel, aSX, aSY, nsArrowOffsetX, nsArrowOffsetY); - break; - } - - aRenderingContext.FillPolygon(polygon, 3); -} - -//--------------------------------------------------------------------------- -void -nsFormControlHelper::PaintArrow(nsArrowDirection aArrowDirection, - nsIRenderingContext& aRenderingContext, - nsIPresContext& aPresContext, - const nsRect& aDirtyRect, - nsRect& aRect, - nscoord aOnePixel, - nsIStyleContext* aArrowStyle, - const nsStyleSpacing& aSpacing, - nsIFrame* aForFrame, - nsRect& aFrameRect) -{ - // Draw border using CSS - const nsStyleColor* color = (const nsStyleColor*) - aArrowStyle->GetStyleData(eStyleStruct_Color); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, aRect, *color, aSpacing, 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, aRect, aSpacing, aArrowStyle, 0); - - // Draw the glyph in black - aRenderingContext.SetColor(NS_RGB(0, 0, 0)); - // Draw arrow centered in the rectangle - PaintArrowGlyph(aRenderingContext, aRect.x + (aRect.width / 2), aRect.y + (aRect.height / 2), aArrowDirection, aOnePixel); - -} - -//--------------------------------------------------------------------------- -void -nsFormControlHelper::PaintScrollbar(nsIRenderingContext& aRenderingContext, - nsIPresContext& aPresContext, - const nsRect& aDirtyRect, - nsRect& aRect, - PRBool aHorizontal, - nscoord aOnePixel, - nsIStyleContext* aScrollbarStyleContext, - nsIStyleContext* aScrollbarArrowStyleContext, - nsIFrame* aForFrame, - nsRect& aFrameRect) -{ - // Get the Scrollbar's Style structs - const nsStyleSpacing* scrollbarSpacing = - (const nsStyleSpacing*)aScrollbarStyleContext->GetStyleData(eStyleStruct_Spacing); - const nsStyleColor* scrollbarColor = - (const nsStyleColor*)aScrollbarStyleContext->GetStyleData(eStyleStruct_Color); - - // Get the Scrollbar's Arrow's Style structs - const nsStyleSpacing* arrowSpacing = - (const nsStyleSpacing*)aScrollbarArrowStyleContext->GetStyleData(eStyleStruct_Spacing); - const nsStyleColor* arrowColor = - (const nsStyleColor*)aScrollbarArrowStyleContext->GetStyleData(eStyleStruct_Color); - - // Paint background for scrollbar - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, aRect, *scrollbarColor, 0, 0); - - if (PR_TRUE == aHorizontal) { - // Draw horizontal Arrow - nscoord arrowWidth = aRect.height; - nsRect arrowLeftRect(aRect.x, aRect.y, arrowWidth, arrowWidth); - PaintArrow(eArrowDirection_Left,aRenderingContext,aPresContext, - aDirtyRect, arrowLeftRect,aOnePixel, aScrollbarArrowStyleContext, - *arrowSpacing, aForFrame, aFrameRect); - - nsRect thumbRect(aRect.x+arrowWidth, aRect.y, arrowWidth, arrowWidth); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowColor, 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowSpacing,aScrollbarArrowStyleContext, 0); - - nsRect arrowRightRect(aRect.x + (aRect.width - arrowWidth), aRect.y, arrowWidth, arrowWidth); - PaintArrow(eArrowDirection_Right,aRenderingContext,aPresContext, - aDirtyRect, arrowRightRect,aOnePixel, aScrollbarArrowStyleContext, - *arrowSpacing, aForFrame, aFrameRect); - - } - else { - // Paint vertical arrow - nscoord arrowHeight = aRect.width; - nsRect arrowUpRect(aRect.x, aRect.y, arrowHeight, arrowHeight); - PaintArrow(eArrowDirection_Up,aRenderingContext,aPresContext, - aDirtyRect, arrowUpRect,aOnePixel, aScrollbarArrowStyleContext, - *arrowSpacing, aForFrame, aFrameRect); - - nsRect thumbRect(aRect.x, aRect.y+arrowHeight, arrowHeight, arrowHeight); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowColor, 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, thumbRect, *arrowSpacing,aScrollbarArrowStyleContext, 0); - - nsRect arrowDownRect(aRect.x, aRect.y + (aRect.height - arrowHeight), arrowHeight, arrowHeight); - PaintArrow(eArrowDirection_Down,aRenderingContext,aPresContext, - aDirtyRect, arrowDownRect,aOnePixel, aScrollbarArrowStyleContext, - *arrowSpacing, aForFrame, aFrameRect); - } - -} - - -void -nsFormControlHelper::PaintFixedSizeCheckMark(nsIRenderingContext& aRenderingContext, - float aPixelsToTwips) -{ - //XXX: Check mark is always draw in black. If the this code is used to Render the widget - //to the screen the color should be set using the CSS style color instead. - aRenderingContext.SetColor(NS_RGB(0, 0, 0)); - // Offsets to x,y location, These offsets are used to place the checkmark in the middle - // of it's 12X12 pixel box. - const PRUint32 ox = 3; - const PRUint32 oy = 3; - - nscoord onePixel = NSIntPixelsToTwips(1, aPixelsToTwips); - - // Draw checkmark using a series of rectangles. This builds an replica of the - // way the checkmark looks under Windows. Using a polygon does not correctly - // represent a checkmark under Windows. This is due to round-off error in the - // Twips to Pixel conversions. - PaintLine(aRenderingContext, 0 + ox, 2 + oy, 0 + ox, 4 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 1 + ox, 3 + oy, 1 + ox, 5 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 2 + ox, 4 + oy, 2 + ox, 6 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 3 + ox, 3 + oy, 3 + ox, 5 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 4 + ox, 2 + oy, 4 + ox, 4 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 5 + ox, 1 + oy, 5 + ox, 3 + oy, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 6 + ox, 0 + oy, 6 + ox, 2 + oy, PR_FALSE, 1, onePixel); -} - -void -nsFormControlHelper::PaintFixedSizeCheckMarkBorder(nsIRenderingContext& aRenderingContext, - float aPixelsToTwips) -{ - //XXX: Future, use CSS to paint border instead of painting it ourselves here. -// nsLeafFrame::Paint(aPresContext, aRenderingContext, aDirtyRect); - - // Offsets to x,y location - PRUint32 ox = 0; - PRUint32 oy = 0; - - nscoord onePixel = NSIntPixelsToTwips(1, aPixelsToTwips); - nscoord twoPixels = NSIntPixelsToTwips(2, aPixelsToTwips); - nscoord ninePixels = NSIntPixelsToTwips(9, aPixelsToTwips); - nscoord twelvePixels = NSIntPixelsToTwips(12, aPixelsToTwips); - - // Draw Background - nsRect rect(0, 0, twelvePixels, twelvePixels); - aRenderingContext.SetColor(NS_RGB(255, 255, 255)); - aRenderingContext.FillRect(rect); - - // Draw Border - aRenderingContext.SetColor(NS_RGB(128, 128, 128)); - PaintLine(aRenderingContext, 0 + ox, 0 + oy, 11 + ox, 0 + oy, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 0 + ox, 0 + oy, 0 + ox, 11 + oy, PR_FALSE, 1, onePixel); - - aRenderingContext.SetColor(NS_RGB(192, 192, 192)); - PaintLine(aRenderingContext, 1 + ox, 11 + oy, 11 + ox, 11 + oy, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 11 + ox, 1 + oy, 11 + ox, 11 + oy, PR_FALSE, 1, onePixel); - - aRenderingContext.SetColor(NS_RGB(0, 0, 0)); - PaintLine(aRenderingContext, 1 + ox, 1 + oy, 10 + ox, 1 + oy, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 1 + ox, 1 + oy, 1 + ox, 10 + oy, PR_FALSE, 1, onePixel); - -} - -#if 0 -//XXX: Future, use the following code to draw a checkmark in any size. -void -nsFormControlHelper::PaintScaledCheckMark(nsIRenderingContext& aRenderingContext, - float aPixelsToTwips, PRUint32 aWidth, PRUint32 aHeight) -{ -#define NS_CHECKED_POINTS 7 - - // Points come from the coordinates on a 11X11 pixels rectangle with 0,0 at the lower - // left. - nscoord checkedPolygonDef[] = {0,2, 2,4, 6,0 , 6,2, 2,6, 0,4, 0,2 }; - nsPoint checkedPolygon[NS_CHECKED_POINTS]; - PRUint32 defIndex = 0; - PRUint32 polyIndex = 0; - PRBool scalable = PR_FALSE; - aRenderingContext.SetColor(color->mColor); - PRUint32 height = aHeight; - - for (defIndex = 0; defIndex < (NS_CHECKED_POINTS * 2); defIndex++) { - checkedPolygon[polyIndex].x = nscoord(((checkedPolygonDef[defIndex])) * (height / 11.0) + (height / 11.0)); - defIndex++; - checkedPolygon[polyIndex].y = nscoord((((checkedPolygonDef[defIndex]))) * (height / 11.0) + (height / 11.0)); - polyIndex++; - } - - aRenderingContext.FillPolygon(checkedPolygon, NS_CHECKED_POINTS); - -} -#endif - - -void -nsFormControlHelper::PaintFocus(nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect, nsRect& aInside, nsRect& aOutside) - -{ - // draw dashed line to indicate selection, XXX don't calc rect every time - PRUint8 borderStyles[4]; - nscolor borderColors[4]; - nscolor black = NS_RGB(0,0,0); - for (PRInt32 i = 0; i < 4; i++) { - borderStyles[i] = NS_STYLE_BORDER_STYLE_DOTTED; - borderColors[i] = black; - } - nsCSSRendering::DrawDashedSides(0, aRenderingContext, borderStyles, borderColors, aOutside, - aInside, PR_FALSE, nsnull); -} - - -void -nsFormControlHelper::PaintRectangularButton(nsIPresContext& aPresContext, - nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect, PRUint32 aWidth, - PRUint32 aHeight, PRBool aShift, PRBool aShowFocus, - nsIStyleContext* aStyleContext, nsString& aLabel, - nsIFrame* aForFrame) - -{ - nsIFormControlFrame * formFrame; - nsresult result = aForFrame->QueryInterface(kIFormControlFrameIID, (void**)&formFrame); - if (NS_OK != result) { - NS_RELEASE(formFrame); - } - - aRenderingContext.PushState(); - // Draw border using CSS - // Get the Scrollbar's Arrow's Style structs - const nsStyleSpacing* spacing = - (const nsStyleSpacing*)aStyleContext->GetStyleData(eStyleStruct_Spacing); - const nsStyleColor* color = - (const nsStyleColor*)aStyleContext->GetStyleData(eStyleStruct_Color); - nsRect rect(0, 0, aWidth, aHeight); - nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, rect, *color, 0, 0); - nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame, - aDirtyRect, rect, *spacing,aStyleContext, 0); - - nsMargin border; - spacing->CalcBorderFor(aForFrame, border); - - float p2t; - aPresContext.GetScaledPixelsToTwips(p2t); - nscoord onePixel = NSIntPixelsToTwips(1, p2t); - - nsRect outside(0, 0, aWidth, aHeight); - outside.Deflate(border); - outside.Deflate(onePixel, onePixel); - - nsRect inside(outside); - inside.Deflate(onePixel, onePixel); - - - if (aShowFocus) { - PaintFocus(aRenderingContext, - aDirtyRect, inside, outside); - } - - float appUnits; - float devUnits; - float scale; - nsIDeviceContext * context; - aRenderingContext.GetDeviceContext(context); - - context->GetCanonicalPixelScale(scale); - context->GetAppUnitsToDevUnits(devUnits); - context->GetDevUnitsToAppUnits(appUnits); - - aRenderingContext.SetColor(NS_RGB(0,0,0)); - - nsFont font(aPresContext.GetDefaultFixedFont()); - formFrame->GetFont(&aPresContext, font); - - aRenderingContext.SetFont(font); - - nscoord textWidth; - nscoord textHeight; - aRenderingContext.GetWidth(aLabel, textWidth); - - nsIFontMetrics* metrics; - context->GetMetricsFor(font, metrics); - metrics->GetMaxAscent(textHeight); - - nscoord x = ((inside.width - textWidth) / 2) + inside.x; - nscoord y = ((inside.height - textHeight) / 2) + inside.y; - if (PR_TRUE == aShift) { - x += onePixel; - y += onePixel; - } - - aRenderingContext.DrawString(aLabel, x, y); - NS_RELEASE(context); - PRBool clipEmpty; - aRenderingContext.PopState(clipEmpty); - - NS_RELEASE(formFrame); -} - - -void -nsFormControlHelper::PaintCircularBorder(nsIPresContext& aPresContext, - nsIRenderingContext& aRenderingContext, - const nsRect& aDirtyRect, nsIStyleContext* aStyleContext, PRBool aInset, - nsIFrame* aForFrame, PRUint32 aWidth, PRUint32 aHeight) -{ - aRenderingContext.PushState(); - - float p2t; - aPresContext.GetScaledPixelsToTwips(p2t); - - const nsStyleSpacing* spacing = (const nsStyleSpacing*)aStyleContext->GetStyleData(eStyleStruct_Spacing); - nsMargin border; - spacing->CalcBorderFor(aForFrame, border); - - nscoord onePixel = NSIntPixelsToTwips(1, p2t); - nscoord twelvePixels = NSIntPixelsToTwips(12, p2t); - - nsRect outside(0, 0, aWidth, aHeight); - - aRenderingContext.SetColor(NS_RGB(192,192,192)); - aRenderingContext.FillRect(outside); - - PRBool standardSize = PR_FALSE; - if (standardSize) { - outside.SetRect(0, 0, twelvePixels, twelvePixels); - aRenderingContext.SetColor(NS_RGB(255,255,255)); - aRenderingContext.FillArc(outside, 0, 180); - aRenderingContext.FillArc(outside, 180, 360); - - if (PR_TRUE == aInset) { - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - aRenderingContext.SetColor(NS_RGB(192,192,192)); - aRenderingContext.FillArc(outside, 0, 180); - aRenderingContext.FillArc(outside, 180, 360); - outside.SetRect(0, 0, twelvePixels, twelvePixels); - } - - // DrakGray - aRenderingContext.SetColor(NS_RGB(128,128,128)); - PaintLine(aRenderingContext, 4, 0, 7, 0, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 2, 1, 3, 1, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 8, 1, 9, 1, PR_TRUE, 1, onePixel); - - PaintLine(aRenderingContext, 1, 2, 1, 3, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 0, 4, 0, 7, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 1, 8, 1, 9, PR_FALSE, 1, onePixel); - - // Black - aRenderingContext.SetColor(NS_RGB(0,0,0)); - PaintLine(aRenderingContext, 4, 1, 7, 1, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 2, 2, 3, 2, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 8, 2, 9, 2, PR_TRUE, 1, onePixel); - - PaintLine(aRenderingContext, 2, 2, 2, 3, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 1, 4, 1, 7, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 2, 8, 2, 8, PR_FALSE, 1, onePixel); - - // Gray - aRenderingContext.SetColor(NS_RGB(192, 192, 192)); - PaintLine(aRenderingContext, 2, 9, 3, 9, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 8, 9, 9, 9, PR_TRUE, 1, onePixel); - PaintLine(aRenderingContext, 4, 10, 7, 10, PR_TRUE, 1, onePixel); - - PaintLine(aRenderingContext, 9, 3, 9, 3, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 10, 4, 10, 7, PR_FALSE, 1, onePixel); - PaintLine(aRenderingContext, 9, 8, 9, 9, PR_FALSE, 1, onePixel); - - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - } else { - outside.SetRect(0, 0, twelvePixels, twelvePixels); - - aRenderingContext.SetColor(NS_RGB(128,128,128)); - aRenderingContext.FillArc(outside, 46, 225); - aRenderingContext.SetColor(NS_RGB(255,255,255)); - aRenderingContext.FillArc(outside, 225, 360); - aRenderingContext.FillArc(outside, 0, 44); - - outside.Deflate(onePixel, onePixel); - aRenderingContext.SetColor(NS_RGB(0,0,0)); - aRenderingContext.FillArc(outside, 46, 225); - aRenderingContext.SetColor(NS_RGB(192,192,192)); - aRenderingContext.FillArc(outside, 225, 360); - aRenderingContext.FillArc(outside, 0, 44); - - outside.Deflate(onePixel, onePixel); - aRenderingContext.SetColor(NS_RGB(255,255,255)); - aRenderingContext.FillArc(outside, 0, 180); - aRenderingContext.FillArc(outside, 180, 360); - outside.Deflate(onePixel, onePixel); - outside.Deflate(onePixel, onePixel); - } - - PRBool clip; - aRenderingContext.PopState(clip); -} - - - -#endif \ No newline at end of file diff --git a/mozilla/layout/html/forms/src/nsFormControlHelper.h b/mozilla/layout/html/forms/src/nsFormControlHelper.h index b6378a08441..9b2af8b8322 100644 --- a/mozilla/layout/html/forms/src/nsFormControlHelper.h +++ b/mozilla/layout/html/forms/src/nsFormControlHelper.h @@ -270,6 +270,18 @@ public: static void PaintFixedSizeCheckMark(nsIRenderingContext& aRenderingContext, float aPixelsToTwips); + + /** + * Paint a scaled checkmark + * + * @param aRenderingContext the rendering context + * @param aPixelsToTwips scale factor for convering pixels to twips. + * @param aWidth width in twips + * @param aHeight height in twips + */ + + static void PaintScaledCheckMark(nsIRenderingContext& aRenderingContext, + float aPixelsToTwips, PRUint32 aWidth, PRUint32 aHeight); /** * Paint a fixed size checkmark border