Esempio n. 1
0
// Process messages
bool CUIObject::DefaultSendMessage(int message,ssize_t p1, ssize_t p2, SDL_Surface *si)
{
	switch (message)
	{
	case UIEV_DRAW:
		{
			topregion.SaveRegion(si,x-1,y-1,w+2,1);
			bottomregion.SaveRegion(si,x-1,y+h,w+2,1);
			leftregion.SaveRegion(si,x-1,y,1,h);
			rightregion.SaveRegion(si,x+w,y,1,h);
			return true;
		}
	case UIEV_GETFOCUS:
		{
			SGU_RectShade(si,x-1,y-1,w+2,h+2,theme->FHiCol,theme->FMidCol,theme->FLowCol);
			//SGU_Rect(si,x-1,y-1,w+2,h+2,SGU_RGB(128,128,128,0));
			hasfocus=true;
			return true;
		}
	case UIEV_LOSEFOCUS:
		{
			topregion.RestaurRegion(si);
			bottomregion.RestaurRegion(si);
			leftregion.RestaurRegion(si);
			rightregion.RestaurRegion(si);
			hasfocus=false;
			return true;
		}
	default:
		return false;
	}	

}
Esempio n. 2
0
bool CUIVertScrollBar::SendChildMessage(int message,int p1,int p2,SDL_Surface *si)
{
	switch (message)
	{
	case UIEV_LBUTTONDOWN:
		{
			int mx,my;
			GETMOUSEPOS(p1,&mx,&my);
			if (my<y+arrowlng+slidepos)
			{
				baseval=MAX(min,baseval-nve);
				SendChildMessage(INTERNEV_REDRAW,0,0,si);
			}
			else if (my>y+arrowlng+slidepos+lslidebar)
			{
				baseval=MIN(baseval+nve,max-nve+1);
				SendChildMessage(INTERNEV_REDRAW,0,0,si);
			}
			else
			{
				barclickpos=my-slidepos-arrowlng-y;
				SendChildMessage(INTERNEV_REDRAW,0,0,si);
			}
			return true;
		}
	case UIEV_LBUTTONUP:
		{
			if (barclickpos>=0)
			{
				barclickpos=-1;
				return true;
			}
			return false;
		}
	case UIEV_MOUSEMOVE:
		{
			if (barclickpos>=0)
			{
				int mx,my;
				GETMOUSEPOS(p1,&mx,&my);
				if (my<=y+arrowlng)
				{
					my=y+arrowlng+1;
				}
				if (my>=y+h-arrowlng)
				{
					my=y+h-arrowlng-1;
				}				
				int newstartpos=my-barclickpos-y-arrowlng; // new starting position
				int nbaseval=min+(newstartpos*(valdomain-nve+1))/(lslidezone-lslidebar);
				SetBaseVal(nbaseval);
				SendChildMessage(INTERNEV_REDRAW,0,0,si);
				return true;
			}
			return false;
		}
	case UIEV_DRAW:
		{
			lslidezone=h-(2*arrowlng);
			valdomain=max-min;
			slideregion.SaveRegion(si,x,y+arrowlng,w,lslidezone);
			if (valdomain>nve)
			{
				lslidebar=(lslidezone*nve)/(valdomain+1);	
			}
			else
			{
				lslidebar=-1;
			}
			SendChildMessage(INTERNEV_REDRAW,0,0,si);
			return true;
		}
	case INTERNEV_REDRAW:
		{
			if (lslidebar>-1)
			{
				// redraw background
				slideregion.RestaurRegion(si);
				// compute slidepos
				slidepos=((baseval-min)*(lslidezone-lslidebar))/(valdomain-nve+1);
				// draw slide
				SGU_FillRectAlpha(si,x,y+arrowlng+slidepos,w,lslidebar,theme->WgtBack);				
				if (ismouseover)
				{
					SGU_RectShade(si,x,y+arrowlng+slidepos,w,lslidebar,theme->FHiCol,theme->FMidCol,theme->FLowCol);
				}
				else
				{
					SGU_RectShade(si,x,y+arrowlng+slidepos,w,lslidebar,theme->BHiCol,theme->BMidCol,theme->BLowCol);
				}
				return true;
			}
			return false;
		}
	case UIEV_GETMOUSEOVER:
		{
			ismouseover=true;
			SendChildMessage(INTERNEV_REDRAW,0,0,si);
			return true;
		}
	case UIEV_LOSEMOUSEOVER:
		{
			ismouseover=false;
			SendChildMessage(INTERNEV_REDRAW,0,0,si);
			return true;
		}
	case UIEV_LOSEFOCUS:
		{
			barclickpos=-1;
			return true;
		}
	default:
		{
			return false;
		}
	}
}
Esempio n. 3
0
bool CUIBoolChooser::SendMessage(int message,ssize_t p1, ssize_t p2, SDL_Surface *si)
{
	switch (message)
	{
	case UIEV_DRAW:
		{
			// Save for focus
			DefaultSendMessage(UIEV_DRAW,0,0,si);
			this->SendMessage(INTERNEV_REDRAW,0,0,si);
			this->SendMessage(UIEV_LOSEMOUSEOVER,0,0,si);
			SGU_DisplayText(si,font,x+20,y+2,caption);
			return true;
		}
	case INTERNEV_REDRAW:
		{
			if (state)
			{
				SGU_FillRect(si,x+1,y+1,18,18,SGU_RGB(0,255,0,0));
			}
			else
			{
				SGU_FillRect(si,x+1,y+1,18,18,SGU_RGB(255,0,0,0));
			}
			return true;
		}
	case UIEV_LBUTTONDOWN:
		{
			state=!state;
			this->SendMessage(INTERNEV_REDRAW,0,0,si);
			this->SendMessage(UIEV_GETMOUSEOVER,0,0,si);
			return true;
		}
	case UIEV_KEYDOWN:
		{
			if (p1==SDLK_RETURN)
			{
				state=!state;
				this->SendMessage(INTERNEV_REDRAW,0,0,si);
				return true;
			}
			else
				return false;
		}
	case UIEV_GETMOUSEOVER:
		{
			if (state)
			{
				SGU_RectShade(si,x,y,20,20,theme->FLowCol,theme->FMidCol,theme->FHiCol);
			}
			else
			{
				SGU_RectShade(si,x,y,20,20,theme->FHiCol,theme->FMidCol,theme->FLowCol);
			}
			return true;
		}
	case UIEV_LOSEMOUSEOVER:
		{
			if (state)
			{
				SGU_RectShade(si,x,y,20,20,theme->BLowCol,theme->BMidCol,theme->BHiCol);
			}
			else
			{
				SGU_RectShade(si,x,y,20,20,theme->BHiCol,theme->BMidCol,theme->BLowCol);
			}
			return true;
		}
	default:
		return DefaultSendMessage(message,p1,p2,si);
	}
}
Esempio n. 4
0
bool CUIHorzValueBar::SendChildMessage(int message,int p1,int p2,SDL_Surface *si)
{
	switch (message)
	{
	case UIEV_LBUTTONDOWN:
		{
			int mx,my;
			GETMOUSEPOS(p1,&mx,&my);
			if (abs(mx-(barlng+x+arrowlng))<CLICKTHRESHOLD)
			{
				dragged=true;
			}
			return true;
		}
	case UIEV_LBUTTONUP:
		{
			dragged=false;
			return false;
		}
	case UIEV_MOUSEMOVE:
		{
			if (dragged)
			{
				int mx,my;
				GETMOUSEPOS(p1,&mx,&my);
				if (mx<=x+arrowlng)
				{
					mx=x+arrowlng+1;
				}
				if (mx>=x+w-arrowlng)
				{
					mx=x+h-arrowlng-1;
				}				
				int newstartpos=mx-x-arrowlng; // new starting position
				int nbaseval=min+(newstartpos*(max-min))/(lbarzone);
				SetVal(nbaseval);
				SendChildMessage(INTERNEV_REDRAW,0,0,si);
				return true;
			}
			return false;
		}
	case UIEV_DRAW:
		{
			lbarzone=w-(2*arrowlng);
			barregion.SaveRegion(si,x+arrowlng,y,lbarzone,h);
			SendChildMessage(INTERNEV_REDRAW,0,0,si);
			return true;
		}
	case INTERNEV_REDRAW:
		{
			// redraw background
			barregion.RestaurRegion(si);
			// compute slidepos
			barlng=((val-min)*(lbarzone))/(max-min);
			// draw slide
			SGU_FillRectAlpha(si,x+arrowlng,y,barlng,h,theme->WgtBack);				
			if (ismouseover)
			{
				SGU_RectShade(si,x+arrowlng,y,barlng,h,theme->FHiCol,theme->FMidCol,theme->FLowCol);
			}
			else
			{
				SGU_RectShade(si,x+arrowlng,y,barlng,h,theme->BHiCol,theme->BMidCol,theme->BLowCol);
			}
			return true;
		}
	case UIEV_GETMOUSEOVER:
		{
			ismouseover=true;
			SendChildMessage(INTERNEV_REDRAW,0,0,si);
			return true;
		}
	case UIEV_LOSEMOUSEOVER:
		{
			ismouseover=false;
			SendChildMessage(INTERNEV_REDRAW,0,0,si);
			return true;
		}
	case UIEV_LOSEFOCUS:
		{
			dragged=false;
			return true;
		}
	default:
		{
			return false;
		}
	}
}