Example #1
0
void CMouse::Draw(C4FacetEx &cgo, bool fDrawToolTip)
	{
	// only if owned
	if (!fActive) return;
	// dbg: some cursor...
	//lpDDraw->DrawFrame(lpDDraw->lpBack, x-5,y-5,x+5,y+5,2);

	int32_t iOffsetX, iOffsetY;
	if (GfxR->fOldStyleCursor)
		{
		iOffsetX = iOffsetY = 0;
		}
	else
		{
		iOffsetX = -GfxR->fctMouseCursor.Wdt/2;
		iOffsetY = -GfxR->fctMouseCursor.Hgt/2;
		}
	GfxR->fctMouseCursor.Draw(cgo.Surface,x+iOffsetX,y+iOffsetY,0);
	if (Game.MouseControl.IsHelp())
		GfxR->fctMouseCursor.Draw(cgo.Surface,x+iOffsetX+5,y+iOffsetY-5,29);
	// ToolTip
	if (fDrawToolTip && pMouseOverElement)
		{
		const char *szTip = pMouseOverElement->GetToolTip();
		if (szTip && *szTip)
			{
			C4FacetEx cgoTip; cgoTip.Set(cgo.Surface, cgo.X, cgo.Y, cgo.Wdt, cgo.Hgt);
			Screen::DrawToolTip(szTip, cgoTip, x, y);
			}
		}
	// drag line
	//if (LDown) lpDDraw->DrawLine(cgo.Surface, LDownX, LDownY, x,y, 4);
	}
Example #2
0
void Screen::Render(bool fDoBG)
	{
	// get output cgo
	C4FacetEx cgo;
	cgo.Set(lpDDraw->lpBack, 0,0, Config.Graphics.ResX, Config.Graphics.ResY);
	// draw to it
	Draw(cgo, fDoBG);
	}
Example #3
0
void C4Video::Draw()
	{
	// Not active
	if (!Active) return;
	// Get viewport
	C4Viewport *pViewport;
	if (pViewport = Game.GraphicsSystem.GetFirstViewport())
		{
		C4FacetEx cgo; 
		cgo.Set(Surface,pViewport->DrawX,pViewport->DrawY,pViewport->ViewWdt,pViewport->ViewHgt,pViewport->ViewX,pViewport->ViewY);
		Draw(cgo);
		}
	}
BOOL C4GraphicsSystem::DoSaveScreenshot(bool fSaveAll, const char *szFilename)
	{
	// Fullscreen only
	if (!Application.isFullScreen) return FALSE;
	// back surface must be present
	if (!Application.DDraw->lpBack) return FALSE;

	// save landscape
	if (fSaveAll)
		{
		// get viewport to draw in
		C4Viewport *pVP=GetFirstViewport(); if (!pVP) return FALSE;
		// create image large enough to hold the landcape
		CPNGFile png; int32_t lWdt=GBackWdt,lHgt=GBackHgt;
		if (!png.Create(lWdt, lHgt, false)) return FALSE;
		// get backbuffer size
		int32_t bkWdt=Config.Graphics.ResX,bkHgt=Config.Graphics.ResY;
		if (!bkWdt || !bkHgt) return FALSE;
		// facet for blitting
		C4FacetEx bkFct;
		// mark background to be redrawn
		InvalidateBg();
		// backup and clear sky parallaxity
		int32_t iParX=Game.Landscape.Sky.ParX; Game.Landscape.Sky.ParX=10;
		int32_t iParY=Game.Landscape.Sky.ParY; Game.Landscape.Sky.ParY=10;
		// temporarily change viewport player
		int32_t iVpPlr=pVP->Player; pVP->Player=NO_OWNER;
		// blit all tiles needed
		for (int32_t iY=0; iY<lHgt; iY+=bkHgt) for (int32_t iX=0; iX<lWdt; iX+=bkWdt)
			{
			// get max width/height
			int32_t bkWdt2=bkWdt,bkHgt2=bkHgt;
			if (iX+bkWdt2>lWdt) bkWdt2-=iX+bkWdt2-lWdt;
			if (iY+bkHgt2>lHgt) bkHgt2-=iY+bkHgt2-lHgt;
			// update facet
			bkFct.Set(Application.DDraw->lpBack, 0, 0, bkWdt2, bkHgt2, iX, iY);
			// draw there
			pVP->Draw(bkFct, false);
			// render
			Application.DDraw->PageFlip(); Application.DDraw->PageFlip();
			// get output (locking primary!)
			if (Application.DDraw->lpBack->Lock())
				{
				// transfer each pixel - slooow...
				for (int32_t iY2=0; iY2<bkHgt2; ++iY2)
					for (int32_t iX2=0; iX2<bkWdt2; ++iX2)
						png.SetPix(iX+iX2, iY+iY2, Application.DDraw->ApplyGammaTo(Application.DDraw->lpBack->GetPixDw(iX2, iY2, false)));
				// done; unlock
				Application.DDraw->lpBack->Unlock();
				}
			}
		// restore viewport player
		pVP->Player=iVpPlr;
		// restore parallaxity
		Game.Landscape.Sky.ParX=iParX;
		Game.Landscape.Sky.ParY=iParY;
		// save!
		return png.Save(szFilename);
		}
	// Save primary surface
	return Application.DDraw->lpBack->SavePNG(szFilename, false, true, false);
	}
Example #5
0
C4FacetEx C4FacetEx::GetPhase(int iPhaseX, int iPhaseY) {
  C4FacetEx fctResult;
  fctResult.Set(Surface, X + Wdt * iPhaseX, Y + Hgt * iPhaseY, Wdt, Hgt, 0, 0);
  return fctResult;
}
Example #6
0
C4FacetEx C4FacetEx::GetSection(int iSection) {
  C4FacetEx fctResult;
  fctResult.Set(Surface, X + Hgt * iSection, Y, Hgt, Hgt, 0, 0);
  return fctResult;
}