//***************************************************************************** bool CCreditsScreen::OnQuit() //Called when SDL_QUIT event is received. //Returns whether Quit action was confirmed. { //Pause action while the "Really quit?" dialog is activated. const bool bWasPaused = this->bPaused; if (!bWasPaused) { this->bPaused = true; SetRate(0); } const bool bQuit = CScreen::OnQuit(); //no sell screen if (!bWasPaused) { this->bPaused = false; SetRate(this->fScrollRateMultiplier); } else { //redraw screen parts PaintChildren(); UpdateRect(); } return bQuit; }
//***************************************************************************** void CHTMLWidget::Paint( //Paint text inside of the widget area. // //Params: bool bUpdateRect) //(in) If true (default) and destination // surface is the screen, the screen // will be immediately updated in // the widget's rect. { if (this->pHTMLSurface) { //Prepare for blitting the surface during idle animation. //Wait until entire page is painted before repainting it. if (this->wHeightDrawn >= (UINT)this->pHTMLSurface->h) { bNeedRepaint = false; this->wHeightDrawn = 0; GetScrollOffset(this->nOffsetX, this->nOffsetY); } else bNeedRepaint = true; } else { PaintChildren(); //No surface; slow render mode. if (bUpdateRect) UpdateRect(); } }
void nsHTMLContainerFrame::PaintDecorationsAndChildren( nsPresContext* aPresContext, nsIRenderingContext& aRenderingContext, const nsRect& aDirtyRect, nsFramePaintLayer aWhichLayer, PRBool aIsBlock, PRUint32 aFlags) { // Do standards mode painting of 'text-decoration's: under+overline // behind children, line-through in front. For Quirks mode, see // nsTextFrame::PaintTextDecorations. (See bug 1777.) nscolor underColor, overColor, strikeColor; PRUint8 decorations = NS_STYLE_TEXT_DECORATION_NONE; nsCOMPtr<nsIFontMetrics> fm; PRBool isVisible; if (eCompatibility_NavQuirks != aPresContext->CompatibilityMode() && NS_FRAME_PAINT_LAYER_FOREGROUND == aWhichLayer && NS_SUCCEEDED(IsVisibleForPainting(aPresContext, aRenderingContext, PR_TRUE, &isVisible)) && isVisible) { GetTextDecorations(aPresContext, aIsBlock, decorations, underColor, overColor, strikeColor); if (decorations & (NS_STYLE_TEXT_DECORATION_UNDERLINE | NS_STYLE_TEXT_DECORATION_OVERLINE | NS_STYLE_TEXT_DECORATION_LINE_THROUGH)) { const nsStyleFont* font = GetStyleFont(); NS_ASSERTION(font->mFont.decorations == NS_FONT_DECORATION_NONE, "fonts on style structs shouldn't have decorations"); // XXX This is relatively slow and shouldn't need to be used here. nsCOMPtr<nsIDeviceContext> deviceContext; aRenderingContext.GetDeviceContext(*getter_AddRefs(deviceContext)); nsCOMPtr<nsIFontMetrics> normalFont; const nsStyleVisibility* visibility = GetStyleVisibility(); deviceContext->GetMetricsFor(font->mFont, visibility->mLangGroup, *getter_AddRefs(fm)); } if (decorations & NS_STYLE_TEXT_DECORATION_UNDERLINE) { PaintTextDecorations(aRenderingContext, fm, NS_STYLE_TEXT_DECORATION_UNDERLINE, underColor); } if (decorations & NS_STYLE_TEXT_DECORATION_OVERLINE) { PaintTextDecorations(aRenderingContext, fm, NS_STYLE_TEXT_DECORATION_OVERLINE, overColor); } } PaintChildren(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer, aFlags); if (decorations & NS_STYLE_TEXT_DECORATION_LINE_THROUGH) { PaintTextDecorations(aRenderingContext, fm, NS_STYLE_TEXT_DECORATION_LINE_THROUGH, strikeColor); } }
void gxScroller::Paint( gxPainter &aPainter ) { // Push current painter state so it can be restored after setting the // scroll values aPainter.PushState(); aPainter.SetScroll( mScrollPosition ); PaintChildren( aPainter ); // Pop (will also restore) the painter state to before SetTranslate(). aPainter.PopState(); }
//***************************************************************************** void CCreditsScreen::Paint( //Overridable method to paint the screen. // //Params: bool bUpdateRect) //(in) If true (default) and destination // surface is the screen, the screen // will be immediately updated in // the widget's rect. { //Blit the background graphic. SDL_BlitSurface(this->images[0], NULL, GetDestSurface(), NULL); PaintChildren(); if (bUpdateRect) UpdateRect(); }
NS_IMETHODIMP nsHTMLContainerFrame::Paint(nsPresContext* aPresContext, nsIRenderingContext& aRenderingContext, const nsRect& aDirtyRect, nsFramePaintLayer aWhichLayer, PRUint32 aFlags) { if (NS_FRAME_IS_UNFLOWABLE & mState) { return NS_OK; } // Paint inline element backgrounds in the foreground layer, but // others in the background (bug 36710). (nsInlineFrame::Paint does // this differently.) if (NS_FRAME_PAINT_LAYER_BACKGROUND == aWhichLayer) { PaintSelf(aPresContext, aRenderingContext, aDirtyRect); } PaintChildren(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer, aFlags); return NS_OK; }
//***************************************************************************** void CHTMLWidget::UpdateHTMLSurface() //Updates the HTML surface. { if (this->pHTMLSurface) SDL_FreeSurface(this->pHTMLSurface); //Create surface to fit the parsed HTML page. this->pHTMLSurface = CBitmapManager::ConvertSurface(SDL_CreateRGBSurface( SDL_SWSURFACE, this->w, this->wY, g_pTheBM->BITS_PER_PIXEL, 0, 0, 0, 0)); if (this->pHTMLSurface) { //Set surface BG color to designated page color. const Uint32 wBGColor = TranslateColor(this->pHTMLSurface, this->wstrBGColor); SDL_FillRect(this->pHTMLSurface, NULL, wBGColor); //Draw children on the correct spot on the HTML surface. SDL_Surface *pDestSurface = GetDestSurface(); SetDestSurface(this->pHTMLSurface); Scroll(-this->x, -this->y); PaintChildren(); Scroll(this->x, this->y); SetDestSurface(pDestSurface); //Prepare for paint this->wHeightDrawn = (UINT)this->pHTMLSurface->h; this->bNeedRepaint = false; } else { //Couldn't create surface; report error and use slow rendering mode char errorStr[256]; _snprintf(errorStr, 256, "Error creating HTML surface: %s", SDL_GetError()); CFiles Files; Files.AppendErrorLog((char *)errorStr); } }
NS_IMETHODIMP nsTableCellFrame::Paint(nsPresContext* aPresContext, nsIRenderingContext& aRenderingContext, const nsRect& aDirtyRect, nsFramePaintLayer aWhichLayer, PRUint32 aFlags) { NS_ENSURE_TRUE(aPresContext, NS_ERROR_NULL_POINTER); PRBool isVisible; if (NS_SUCCEEDED(IsVisibleForPainting(aPresContext, aRenderingContext, PR_FALSE, &isVisible)) && !isVisible) { return NS_OK; } PRBool paintChildren = PR_TRUE; if (NS_FRAME_PAINT_LAYER_BACKGROUND == aWhichLayer) { const nsStyleBorder* myBorder = nsnull; const nsStylePadding* myPadding = nsnull; const nsStyleTableBorder* cellTableStyle = nsnull; const nsStyleVisibility* vis = GetStyleVisibility(); if (vis->IsVisible()) { myBorder = GetStyleBorder(); myPadding = GetStylePadding(); cellTableStyle = GetStyleTableBorder(); // draw the border & background only when there is content or showing empty cells if (NS_STYLE_TABLE_EMPTY_CELLS_HIDE != cellTableStyle->mEmptyCells || !GetContentEmpty()) { PaintUnderlay(*aPresContext, aRenderingContext, aDirtyRect, aFlags, *myBorder, *myPadding, *cellTableStyle); } // Paint outline nsRect rect(0, 0, mRect.width, mRect.height); const nsStyleOutline* myOutline = GetStyleOutline(); nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this, aDirtyRect, rect, *myBorder, *myOutline, mStyleContext, 0); const nsStyleBackground* myColor = GetStyleBackground(); DecorateForSelection(aPresContext, aRenderingContext,myColor); //ignore return value } paintChildren = !(aFlags & NS_PAINT_FLAG_TABLE_CELL_BG_PASS); //flags were for us; remove them for our children aFlags &= ~ (NS_PAINT_FLAG_TABLE_CELL_BG_PASS | NS_PAINT_FLAG_TABLE_BG_PAINT); } #ifdef DEBUG // for debug... if ((NS_FRAME_PAINT_LAYER_DEBUG == aWhichLayer) && GetShowFrameBorders()) { aRenderingContext.SetColor(NS_RGB(0, 0, 128)); aRenderingContext.DrawRect(0, 0, mRect.width, mRect.height); } #endif // paint the children unless we've been told not to if (paintChildren) { const nsStyleDisplay* disp = GetStyleDisplay(); // if the cell originates in a row and/or col that is collapsed, the // bottom and/or right portion of the cell is painted by translating // the rendering context. nsPoint offset; GetCollapseOffset(offset); PRBool pushed = PR_FALSE; if ((0 != offset.x) || (0 != offset.y)) { aRenderingContext.PushState(); pushed = PR_TRUE; aRenderingContext.Translate(offset.x, offset.y); aRenderingContext.SetClipRect(nsRect(-offset.x, -offset.y, mRect.width, mRect.height), nsClipCombine_kIntersect); } else { // XXXldb HIDDEN should really create a scrollframe, // but use |IsTableClip| here since it doesn't. if (disp->IsTableClip() || (HasPctOverHeight() && eCompatibility_NavQuirks == aPresContext->CompatibilityMode())) { aRenderingContext.PushState(); pushed = PR_TRUE; SetOverflowClipRect(aRenderingContext); } } PaintChildren(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer, aFlags); if (pushed) { aRenderingContext.PopState(); } } DO_GLOBAL_REFLOW_COUNT_DSP_J("nsTableCellFrame", &aRenderingContext, 0); return NS_OK; /*nsFrame::Paint(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer);*/ }
// this is identical to nsHTMLContainerFrame::Paint except for the background and border. NS_IMETHODIMP nsFieldSetFrame::Paint(nsPresContext* aPresContext, nsIRenderingContext& aRenderingContext, const nsRect& aDirtyRect, nsFramePaintLayer aWhichLayer, PRUint32 aFlags) { if (NS_FRAME_PAINT_LAYER_BACKGROUND == aWhichLayer) { // Paint our background and border PRBool isVisible; if (NS_SUCCEEDED(IsVisibleForPainting(aPresContext, aRenderingContext, PR_TRUE, &isVisible)) && isVisible && mRect.width && mRect.height) { PRIntn skipSides = GetSkipSides(); const nsStyleBorder* borderStyle = GetStyleBorder(); const nsStylePadding* paddingStyle = GetStylePadding(); nscoord topBorder = borderStyle->GetBorderWidth(NS_SIDE_TOP); nscoord yoff = 0; // if the border is smaller than the legend. Move the border down // to be centered on the legend. if (topBorder < mLegendRect.height) yoff = (mLegendRect.height - topBorder)/2; nsRect rect(0, yoff, mRect.width, mRect.height - yoff); nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this, aDirtyRect, rect, *borderStyle, *paddingStyle, PR_TRUE); if (mLegendFrame) { // Use the rect of the legend frame, not mLegendRect, so we draw our // border under the legend's left and right margins. const nsRect & legendRect = mLegendFrame->GetRect(); // we should probably use PaintBorderEdges to do this but for now just use clipping // to achieve the same effect. // draw left side nsRect clipRect(rect); clipRect.width = legendRect.x - rect.x; clipRect.height = topBorder; aRenderingContext.PushState(); aRenderingContext.SetClipRect(clipRect, nsClipCombine_kIntersect); nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this, aDirtyRect, rect, *borderStyle, mStyleContext, skipSides); aRenderingContext.PopState(); // draw right side clipRect = rect; clipRect.x = legendRect.x + legendRect.width; clipRect.width -= (legendRect.x + legendRect.width); clipRect.height = topBorder; aRenderingContext.PushState(); aRenderingContext.SetClipRect(clipRect, nsClipCombine_kIntersect); nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this, aDirtyRect, rect, *borderStyle, mStyleContext, skipSides); aRenderingContext.PopState(); // draw bottom clipRect = rect; clipRect.y += topBorder; clipRect.height = mRect.height - (yoff + topBorder); aRenderingContext.PushState(); aRenderingContext.SetClipRect(clipRect, nsClipCombine_kIntersect); nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this, aDirtyRect, rect, *borderStyle, mStyleContext, skipSides); aRenderingContext.PopState(); } else { nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this, aDirtyRect, nsRect(0,0,mRect.width, mRect.height), *borderStyle, mStyleContext, skipSides); } } } PaintChildren(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer); #ifdef DEBUG if ((NS_FRAME_PAINT_LAYER_DEBUG == aWhichLayer) && GetShowFrameBorders()) { if (HasView()) { aRenderingContext.SetColor(NS_RGB(0,0,255)); } else { aRenderingContext.SetColor(NS_RGB(255,0,0)); } aRenderingContext.DrawRect(0, 0, mRect.width, mRect.height); } #endif DO_GLOBAL_REFLOW_COUNT_DSP("nsFieldSetFrame", &aRenderingContext); return NS_OK; }