зеркало из https://github.com/mozilla/pjs.git
Added code to render button using GFX for printing.
This commit is contained in:
Родитель
000f201d6a
Коммит
8d4bcccb4a
|
@ -206,11 +206,15 @@ nsButtonControlFrame::AttributeChanged(nsIPresContext* aPresContext,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NS_METHOD
|
NS_METHOD
|
||||||
nsButtonControlFrame::Paint(nsIPresContext& aPresContext,
|
nsButtonControlFrame::Paint(nsIPresContext& aPresContext,
|
||||||
nsIRenderingContext& aRenderingContext,
|
nsIRenderingContext& aRenderingContext,
|
||||||
const nsRect& aDirtyRect)
|
const nsRect& aDirtyRect)
|
||||||
{
|
{
|
||||||
|
#ifdef XP_PC
|
||||||
|
PaintButton(aPresContext, aRenderingContext, aDirtyRect);
|
||||||
|
#else
|
||||||
PRInt32 type;
|
PRInt32 type;
|
||||||
GetType(&type);
|
GetType(&type);
|
||||||
|
|
||||||
|
@ -220,10 +224,12 @@ nsButtonControlFrame::Paint(nsIPresContext& aPresContext,
|
||||||
if (disp->mVisible) {
|
if (disp->mVisible) {
|
||||||
return nsFormControlFrame::Paint(aPresContext, aRenderingContext, aDirtyRect);
|
return nsFormControlFrame::Paint(aPresContext, aRenderingContext, aDirtyRect);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
nsButtonControlFrame::MouseClicked(nsIPresContext* aPresContext)
|
nsButtonControlFrame::MouseClicked(nsIPresContext* aPresContext)
|
||||||
{
|
{
|
||||||
|
@ -381,3 +387,97 @@ nsButtonControlFrame::GetFrameName(nsString& aResult) const
|
||||||
{
|
{
|
||||||
return MakeFrameName("ButtonControl", aResult);
|
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
|
||||||
|
|
Загрузка…
Ссылка в новой задаче