Added code to render button using GFX for printing.

This commit is contained in:
kmcclusk%netscape.com 1998-12-15 18:50:21 +00:00
Родитель 000f201d6a
Коммит 8d4bcccb4a
1 изменённых файлов: 101 добавлений и 1 удалений

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

@ -206,11 +206,15 @@ nsButtonControlFrame::AttributeChanged(nsIPresContext* aPresContext,
return result;
}
NS_METHOD
nsButtonControlFrame::Paint(nsIPresContext& aPresContext,
nsIRenderingContext& aRenderingContext,
const nsRect& aDirtyRect)
{
#ifdef XP_PC
PaintButton(aPresContext, aRenderingContext, aDirtyRect);
#else
PRInt32 type;
GetType(&type);
@ -220,10 +224,12 @@ nsButtonControlFrame::Paint(nsIPresContext& aPresContext,
if (disp->mVisible) {
return nsFormControlFrame::Paint(aPresContext, aRenderingContext, aDirtyRect);
}
#endif
return NS_OK;
}
void
nsButtonControlFrame::MouseClicked(nsIPresContext* aPresContext)
{
@ -381,3 +387,97 @@ nsButtonControlFrame::GetFrameName(nsString& aResult) const
{
return MakeFrameName("ButtonControl", aResult);
}
//
// XXX: The following paint code is TEMPORARY. It is being used to get printing working
// under windows. Later it may 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
nsButtonControlFrame::PaintButton(nsIPresContext& aPresContext,
nsIRenderingContext& aRenderingContext,
const nsRect& aDirtyRect)
{
#ifdef XP_PC
aRenderingContext.PushState();
nsFormControlFrame::Paint(aPresContext, aRenderingContext, aDirtyRect);
nsString label;
nsresult result = GetValue(&label);
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
nsMargin border;
spacing->CalcBorderFor(this, border);
float p2t;
aPresContext.GetScaledPixelsToTwips(p2t);
nscoord onePixel = NSIntPixelsToTwips(1, p2t);
nsRect outside(0, 0, mRect.width, mRect.height);
outside.Deflate(border);
outside.Deflate(onePixel, onePixel);
nsRect inside(outside);
inside.Deflate(onePixel, onePixel);
//XXX: This will be used later, when rendering to the screen. For printing we don't bother
//printing the focus dashed line for now.
#if 0
if (mGotFocus) { // 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, outside,
inside, PR_FALSE, nsnull);
}
#endif
float appUnits;
float devUnits;
float scale;
nsIDeviceContext * context;
aRenderingContext.GetDeviceContext(context);
context->GetCanonicalPixelScale(scale);
context->GetAppUnitsToDevUnits(devUnits);
context->GetDevUnitsToAppUnits(appUnits);
//aRenderingContext.SetColor(NS_RGB(192,192,192));
//aRenderingContext.FillRect(inside);
aRenderingContext.SetColor(NS_RGB(0,0,0));
nsFont font(aPresContext.GetDefaultFixedFont());
GetFont(&aPresContext, font);
aRenderingContext.SetFont(font);
nscoord textWidth;
nscoord textHeight;
aRenderingContext.GetWidth(label, 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 (mLastMouseState == eMouseDown) {
x += onePixel;
y += onePixel;
}
aRenderingContext.DrawString(label, x, y, 0);
NS_RELEASE(context);
PRBool clipEmpty;
aRenderingContext.PopState(clipEmpty);
}
#endif