Example #1
0
	void RenderBackend::popClipArea() {
		assert(!m_clipstack.empty());
		m_clipstack.pop();
		if (m_clipstack.empty()) {
			setClipArea(getArea(), false);
		} else {
			ClipInfo ci = m_clipstack.top();
			setClipArea(ci.r, ci.clearing);
		}
	}
Example #2
0
	void RenderBackend::popClipArea() {
		assert(!m_clipstack.empty());
		m_clipstack.pop();
		if (m_clipstack.empty()) {
			setClipArea(getArea(), false);
		} else {
			ClipInfo ci = m_clipstack.top();
			// instead of using ci.clearing, we set it to false
			// to avoid double clearing
			setClipArea(ci.r, false);
		}
	}
Example #3
0
	void Image::pushClipArea(const Rect& cliparea, bool clear) {
		ClipInfo ci;
		ci.r = cliparea;
		ci.clearing = clear;
		m_clipstack.push(ci);
		setClipArea(cliparea, clear);
	}
Example #4
0
	void Image::popClipArea() {
		assert(!m_clipstack.empty());
		m_clipstack.pop();
		if (m_clipstack.empty()) {
			clearClipArea();
		} else {
			ClipInfo ci = m_clipstack.top();
			setClipArea(ci.r, ci.clearing);
		}
	}
Example #5
0
void renderTopSceneView(gameLevel *gl,BMPimage *view,viewGame *vg)
{ scene *sc;
  float xfc,yfc;
  boxArea v2d;
  int color;


  int numCelViewX=vg->celx;  // maximo igual = sc->sizex
  int numCelViewY=vg->cely;  // maximo igual = sc->sizey

  int tamViewX;
  int tamViewY;

  int xof=vg->x;
  int yof=vg->y;
  int xc,yc;
  int dx,dy;
  int x,y;
  int x1,y1,x2,y2;
  int xcel,ycel,xcel2,ycel2;

  float rx,ry,rsx,rsy;

  unsigned short *bp;

   Actor *ac;

   int xmax,ymax;

  	
//tamanho da janela em pixels
    tamViewX=vg->tamx;
    tamViewY=vg->tamy;
	v2d.x1=0;v2d.y1=0;v2d.x2=tamViewX-1;v2d.y2=tamViewY-1;

	//Define uma clip area do tamanho da area da janela posicionada na tela
	setClipArea(v2d.x1+xof,v2d.y1+yof,v2d.x2+xof+1,v2d.y2+yof+1,view);

	//Calcula o fator de escala de acordo com as dimensoes da janela 
	sc = gl->sceneLevel;

	rx=(float)(sc->realSizeTiledx/KDD_FIX);
	rx*=numCelViewX;
	rx=rx/tamViewX;

	ry=(float)(sc->realSizeTiledy/KDD_FIX);
	ry*=numCelViewY;
	ry=ry/tamViewY;


	rsy=(float)(sc->realSizeTiledy/KDD_FIX);
	rsy/=ry;	
	rsx=(float)(sc->realSizeTiledx/KDD_FIX);
	rsx/=rx;

	//calcula o valor das dimensoes maxima do cenario
 	xc=(sc->sizex-numCelViewX)*sc->realSizeTiledx;
	yc=(sc->sizey-numCelViewY)*sc->realSizeTiledy;
	xmax=xc>>(PDD_FIX+1);
	ymax=yc>>(PDD_FIX+1);

	//calcula posição do mouse no view
	if(vg->flgTouch)
	{

		xc=gl->mouse->x;
		yc=gl->mouse->y;

		xfc=(float)(xc-xof-tamViewX/2);
		yfc=(float)(yc-yof-tamViewY/2);
		xfc*=rx;
		yfc*=ry;
		xc=(int)(xfc+vg->xTopView);
		yc=(int)(yfc+vg->yTopView);
	
		vg->mouse.status=gl->mouse->status;
		vg->mouse.x=xc;
		vg->mouse.y=yc;

		gl->mouseView.status=vg->mouse.status;
		gl->mouseView.x=vg->mouse.x;
		gl->mouseView.y=vg->mouse.y;
		gl->mouseView.z=0;

	}


	//calcula foco da camera
    if(vg->flgTopView==0)
    {
		vg->flgTopView=1;
		vg->xTopView=vg->cam.x;
		vg->yTopView=vg->cam.y;
    }

	xfc=(float)(vg->cam.x-vg->xTopView);
	yfc=(float)(vg->cam.y-vg->yTopView);
	xfc/=rx;
	yfc/=ry;

	xc=(int)(xfc);
	yc=(int)(yfc);


	//reposiciona scroll da tela em funcao da area da camera 1/3 da tela centralizada
	if((xc>(tamViewX/3)) )
	{
		if(vg->xTopView<=xmax)
		{
			xfc=(float)(xc-(tamViewX/3));
			xfc*=rx;
			xc=(int)xfc;
			vg->xTopView+=xc;
		}
	}

	if( (xc<-(tamViewX/3)) )
	{
		if(vg->xTopView>=-xmax)
		{
			xfc=(float)(xc+(tamViewX/3));
			xfc*=rx;
			xc=(int)xfc;
			vg->xTopView+=xc;
		}
	}


	if((yc>(tamViewY/3)) )
	{
		if(vg->yTopView<=ymax)
		{
			yfc=(float)(yc-(tamViewY/3));
			yfc*=ry;
			yc=(int)yfc;
			vg->yTopView+=yc;
		}
	}

	if( (yc<-(tamViewY/3)) )
	{
		if(vg->yTopView>=-ymax)
		{
			yfc=(float)(yc+(tamViewY/3));
			yfc*=ry;
			yc=(int)yfc;
			vg->yTopView+=yc;
		}
	}


	//Desenha box com as dimensoes do cenario todo
	xc=(0-sc->sizex)*sc->realSizeTiledx;
	yc=(0-sc->sizey)*sc->realSizeTiledy;
	xc=xc>>(PDD_FIX+1);
	yc=yc>>(PDD_FIX+1);

	xfc=(float)(xc-vg->xTopView);
	yfc=(float)(yc-vg->yTopView);
	xfc/=rx;
	yfc/=ry;

	xc=(int)(xof+xfc+tamViewX/2);
	yc=(int)(yof+yfc+tamViewY/2);

	dx=(int)(rsx*sc->sizex);
	dy=(int)(rsy*sc->sizey);

	x1=xc;y1=yc;x2=xc+dx;y2=yc+dy;
//	drawRetangle (x1,y1,x2,y2,COLOR_BLUE,view); 

	drawBOX (x1,y1,x2,y2,PIXEL(0x7f,0x7f,0x7f),vg->flagAlpha,view); 

 // desenha os box com tamanho maior que zero
	xcel=((((vg->xTopView)<<(PDD_FIX))/sc->realSizeTiledx))+sc->sizex/2;
	ycel=((((vg->yTopView)<<(PDD_FIX))/sc->realSizeTiledy))+sc->sizey/2;

	xcel=xcel-numCelViewX/2-1;
	ycel=ycel-numCelViewY/2-1;

	if(xcel<0) xcel=0;
	if(ycel<0) ycel=0;
	
	xcel2=xcel+numCelViewX+3;
	ycel2=ycel+numCelViewY+3;

	if(xcel2>sc->sizex) xcel2=sc->sizex;
	if(ycel2>sc->sizey) ycel2=sc->sizey;

	for(y=ycel;y<ycel2;y++)
	{
		bp=sc->map+y*sc->sizex+xcel;
		for(x=xcel;x<xcel2;x++)
		{
			if(sc->listTiled[*bp]->sizez>0) 
			{

			xc=(x-sc->sizex/2)*sc->realSizeTiledx;
			yc=(y-sc->sizey/2)*sc->realSizeTiledy;
			xc=xc>>(PDD_FIX);
			yc=yc>>(PDD_FIX);

			xfc=(float)(xc-vg->xTopView);
			yfc=(float)(yc-vg->yTopView);
			xfc/=rx;
			yfc/=ry;

			xc=(int)(xof+xfc+tamViewX/2);
			yc=(int)(yof+yfc+tamViewY/2);

			dx=(int)((rsx/2.0)+0.5);//dx++;
			dy=(int)((rsy/2.0)+0.5);//dy++;

			x1=xc-dx;y1=yc-dy;x2=xc+dx;y2=yc+dy;

			if(!((x1>v2d.x2+xof) | (x2<v2d.x1+xof) | (y1>v2d.y2+yof) | (y2<v2d.y1+yof)))
			{
				//drawRetangle (x1,y1,x2,y2,COLOR_BLUE,view); 
				drawBOX (x1,y1,x2,y2,COLOR_BLACK,vg->flagAlpha,view);
			}
			}
			bp++;

		}
	}
Example #6
0
	void Image::clearClipArea() {
		setClipArea(m_area, true);
	}
Example #7
0
	void RenderBackend::clearClipArea() {
		setClipArea(getArea(), true);
	}