⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mes_ui.cpp

📁 windows ce 下的3D桌面
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		glDisable( GL_BLEND );

		for( i=0; i<m_ImageButtonList.size(); i++ )
		{
			if( m_ImageButtonList[i].m_IconTexture )
			{
				bool isselected = ((m_Selected-BUTTONIDBASE_IMAGE) == (int)i) &&
								   m_ImageButtonList[i].IsTouched(Mx,My);
				int is_selected = ( isselected ) ? 1 : 0;
				MESLauncher_DrawImage1( m_ImageButtonList[i].m_IconTexture, 
										m_ImageButtonList[i].m_IconX, m_ImageButtonList[i].m_IconY, 
										m_ImageButtonList[i].m_IconW, m_ImageButtonList[i].m_IconH, 
										0, m_ImageButtonList[i].m_IconH*is_selected,
										Bright,Bright,Bright,1 );
			}
		}

		glEnable( GL_BLEND );
		glBlendFunc( GL_ZERO, GL_ONE_MINUS_SRC_COLOR );
		for( i=0; i<m_ImageButtonList.size(); i++ )
		{
			if( m_ImageButtonList[i].m_TitleTexture )
			{
				bool isselected = ((m_Selected-BUTTONIDBASE_IMAGE) == (int)i) &&
								   m_ImageButtonList[i].IsTouched(Mx,My);
				if( isselected )
				{
					MESLauncher_DrawImage0( m_ImageButtonList[i].m_TitleAlphaTexture, 
											m_ImageButtonList[i].m_TitleX, 
											m_ImageButtonList[i].m_TitleY, Bright*m_ActiveMenuTextAlpha,Bright*m_ActiveMenuTextAlpha,Bright*m_ActiveMenuTextAlpha,1 );
				}
				else
				{
					MESLauncher_DrawImage0( m_ImageButtonList[i].m_TitleAlphaTexture, 
											m_ImageButtonList[i].m_TitleX, 
											m_ImageButtonList[i].m_TitleY, Bright*m_MenuTextAlpha,Bright*m_MenuTextAlpha,Bright*m_MenuTextAlpha,1 );
				}
			}
		}
		glBlendFunc( GL_SRC_ALPHA, GL_ONE );
		for( i=0; i<m_ImageButtonList.size(); i++ )
		{
			if( m_ImageButtonList[i].m_TitleTexture )
			{
				bool isselected = ((m_Selected-BUTTONIDBASE_IMAGE) == (int)i) &&
								   m_ImageButtonList[i].IsTouched(Mx,My);
				if( isselected )
				{
					MESLauncher_DrawImage0( m_ImageButtonList[i].m_TitleTexture, 
											m_ImageButtonList[i].m_TitleX, 
											m_ImageButtonList[i].m_TitleY, Bright,Bright,Bright,m_ActiveMenuTextAlpha );
				}
				else
				{
					MESLauncher_DrawImage0( m_ImageButtonList[i].m_TitleTexture, 
											m_ImageButtonList[i].m_TitleX, 
											m_ImageButtonList[i].m_TitleY, Bright,Bright,Bright,m_MenuTextAlpha );
				}
			}
		}
		glDisable( GL_BLEND );
	}
	void DrawSubItems( float Bright )
	{
		glEnable( GL_BLEND );
		if(m_bCurrent)
		{
			glBlendFunc( GL_SRC_ALPHA, GL_ONE );
			MESLauncher_DrawImage0( m_Title, m_TitlePos[0],m_TitlePos[1], 0,255,0,0.5 );
		}
		else
		{
			glBlendFunc( GL_ZERO, GL_ONE_MINUS_SRC_COLOR );
			MESLauncher_DrawImage0( m_TitleAlpha, m_TitlePos[0],m_TitlePos[1], 0,0,0,1 );
		}
		//glBlendFunc( GL_SRC_ALPHA, GL_ONE );
		/*if(m_bCurrent)
		{
			MESLauncher_DrawImage0( m_Title, m_TitlePos[0],m_TitlePos[1], 255,255,225,0.8 );
		}
		else
		{
			MESLauncher_DrawImage0( m_Title, m_TitlePos[0],m_TitlePos[1], 255,255,255,0 );
		}*/
		glDisable( GL_BLEND );
		if( m_SubItemVisibility & SUBITEMVISIBILITY_TIME ){ DrawTime(Bright); }
		if( m_SubItemVisibility & SUBITEMVISIBILITY_BATTERYLEVEL ){ DrawBatteryLevel(Bright); }
	}
	void Draw( float Bright, int Mx, int My )
	{
		DrawButtons( Bright, Mx, My );
		DrawSubItems( Bright );
	}
	void OnSelect( int x, int y )
	{
		unsigned int i;
		m_Selected = -1;
		for( i=0; i<m_ImageButtonList.size(); i++ )
		{
			if( m_ImageButtonList[i].IsTouched( x, y ) )
			{
				m_Selected = static_cast<short>(BUTTONIDBASE_IMAGE+i);
				return;
			}
		}
		for( i=0; i<m_DiceButtonList.size(); i++ )
		{
			if( m_DiceButtonList[i].IsTouched( x, y ) )
			{
				m_Selected = static_cast<short>(BUTTONIDBASE_CUBE+i);
				return;
			}
		}
	}
	const Button* OnAction( int x, int y )
	{
		unsigned int i;
		for( i=0; i<m_ImageButtonList.size(); i++ )
		{
			if( m_ImageButtonList[i].IsTouched( x, y ) )
			{
				if( (m_Selected-BUTTONIDBASE_IMAGE) == (int)i )
				{
					m_Avtivated = m_Selected;		
					return &(m_ImageButtonList[i]);
				}
			}
		}
		for( i=0; i<m_DiceButtonList.size(); i++ )
		{
			if( m_DiceButtonList[i].IsTouched( x, y ) )
			{
				if( (m_Selected-BUTTONIDBASE_CUBE) == (int)i )
				{
					m_Avtivated = m_Selected;						
					int cx = m_DiceButtonList[i].m_IconX + (m_DiceButtonList[i].m_IconW/2);
					int cy = m_DiceButtonList[i].m_IconY + (m_DiceButtonList[i].m_IconH/2);
					for( unsigned int k=0; k<m_DiceButtonList.size(); k++ )
					{
						int X = m_DiceButtonList[k].m_IconX;
						int Y = m_DiceButtonList[k].m_IconY;
						int W = m_DiceButtonList[k].m_IconW;
						int H = m_DiceButtonList[k].m_IconH;
						float pos[3];
						pos[0] = -(cx - (X+W/2.0f)) / (W*2.0f);
						pos[1] = -(-(cy - (Y+H/2.0f))) / (H*2.0f);
						pos[2] = CONTROL_PLANE_Z;
						Vector3f From (0,0,1);
						Vector3f To   (pos[0],pos[1],pos[2]);
						To.Normalize();
						m_DiceButtonList[k].m_Rotate_Cursor = RotationArc( From, To );
						m_DiceButtonList[k].m_Rotate_CursorSpeed = Quaternionf::IDENTITY;
					}
					return &(m_DiceButtonList[i]);
				}
			}
		}
		m_Selected = -1;
		return NULL;
	}
	const Button* GetActiveButton( void )
	{
		if( (m_Avtivated-BUTTONIDBASE_CUBE) >= 0 && (m_Avtivated-BUTTONIDBASE_CUBE) < (int)m_DiceButtonList.size() )
			return &(m_DiceButtonList[m_Avtivated-BUTTONIDBASE_CUBE]);
		else if( (m_Avtivated-BUTTONIDBASE_IMAGE) >= 0 && (m_Avtivated-BUTTONIDBASE_IMAGE) < (int)m_ImageButtonList.size() )
			return &(m_ImageButtonList[m_Avtivated-BUTTONIDBASE_IMAGE]);
		else
			return NULL;
	}

	Menu &operator =(Menu &menuSource)
	{
		memcpy(m_Ambient, menuSource.m_Ambient, sizeof(m_Ambient));
		memcpy(m_Glow, menuSource.m_Glow, sizeof(m_Glow));
		memcpy(m_TitlePos, menuSource.m_TitlePos, sizeof(m_TitlePos));
		m_MenuTextAlpha = menuSource.m_MenuTextAlpha;
		m_ActiveMenuTextAlpha = menuSource.m_ActiveMenuTextAlpha;
		//m_bCurrent = menuSource.m_bCurrent;
		m_bCurrent = false;
		m_Title = menuSource.m_Title;
		m_TitleAlpha = menuSource.m_TitleAlpha;
		return *this;
	}

};

struct Button_Slide
{
	int               m_TouchArea [4]; // x,y,w,h
	int               m_BackArea  [4]; // x,y,w,h
	int               m_ButtonArea[5]; // sx,ex,y,w,h
	int               m_TitleArea [4]; // x,y,w,h
	MESLauncher_Image m_BackAlphaImage  ;
	MESLauncher_Image m_BackOverlayImage;
	MESLauncher_Image m_ButtonImage     ;
	MESLauncher_Image m_TitleImage      ;

	#define SPRING_CONSTANT		0.05f
	#define DAMPING_CONSTANT	0.3f

	float m_CurButtonPos;
	float m_CurButtonSpeed;
	int   m_TitleScroll;
	int  m_MousePos[2];
	bool m_MouseDown;

	Button_Slide &operator =(Button_Slide &btnSource)
	{
		memcpy(m_TouchArea, btnSource.m_TouchArea, sizeof(m_TouchArea));
		memcpy(m_BackArea, btnSource.m_BackArea, sizeof(m_BackArea));
		memcpy(m_ButtonArea, btnSource.m_ButtonArea, sizeof(m_ButtonArea));
		memcpy(m_TitleArea, btnSource.m_TitleArea, sizeof(m_TitleArea));

		m_BackAlphaImage = btnSource.m_BackAlphaImage;
		m_BackOverlayImage = btnSource.m_BackOverlayImage;
		m_ButtonImage = btnSource.m_ButtonImage;
		m_TitleImage = btnSource.m_TitleImage;

		m_CurButtonPos = btnSource.m_CurButtonPos;
		m_CurButtonSpeed = btnSource.m_CurButtonSpeed;
		m_TitleScroll = btnSource.m_TitleScroll;
		memcpy(m_MousePos, btnSource.m_MousePos, sizeof(m_MousePos));
		m_MouseDown = btnSource.m_MouseDown;
		return *this;
	}

	void LoadSkin( HMESPARSERNODE hNode )
	{
		int numberofproperties = MesParser_GetNumberOfProperties( hNode );
		int i;
		for( i=0; i<numberofproperties; i++ )
		{
			HMESPARSERPROPERTY hproperty = MesParser_GetProperty( hNode, i );

			if     ( CheckPropertyName( hproperty, "TouchArea" ) ){ LoadIntArray( hproperty,0,4,m_TouchArea ); }
			else if( CheckPropertyName( hproperty, "BackArea"  ) ){ LoadIntArray( hproperty,0,4,m_BackArea  ); }
			else if( CheckPropertyName( hproperty, "ButtonArea") ){ LoadIntArray( hproperty,0,5,m_ButtonArea); }
			else if( CheckPropertyName( hproperty, "TitleArea" ) ){ LoadIntArray( hproperty,0,4,m_TitleArea ); }
			else if( CheckPropertyName( hproperty, "BackAlphaImage"   ) ){ m_BackAlphaImage   = LoadImageFromFile( hproperty,0 );}
			else if( CheckPropertyName( hproperty, "BackOverlayImage" ) ){ m_BackOverlayImage = LoadImageFromFile( hproperty,0 );}
			else if( CheckPropertyName( hproperty, "ButtonImage"      ) ){ m_ButtonImage      = LoadImageFromFile( hproperty,0 );}
			else if( CheckPropertyName( hproperty, "TitleImage"       ) ){ m_TitleImage       = LoadImageFromFile( hproperty,0 );}
			else { RETAILMSG( 1, (L"*E:LoadSkin : Unknown proterty(%d,%d)\n", i, __LINE__ ) ); }
		}
	}
	void UnloadSkin( void )
	{
		if( m_BackAlphaImage  ){ MESLauncher_UnloadImage(m_BackAlphaImage); }
		if( m_BackOverlayImage){ MESLauncher_UnloadImage(m_BackOverlayImage); }
		if( m_ButtonImage     ){ MESLauncher_UnloadImage(m_ButtonImage); }
		if( m_TitleImage      ){ MESLauncher_UnloadImage(m_TitleImage); }
		m_TouchArea[0] = m_TouchArea[1] = m_TouchArea[2] = m_TouchArea[3] = -1;
		m_BackArea [0] = m_BackArea [1] = m_BackArea [2] = m_BackArea [3] = -1;
		m_ButtonArea[0]= m_ButtonArea[1]= m_ButtonArea[2]= m_ButtonArea[3]= m_ButtonArea[4]= -1;
		m_TitleArea[0] = m_TitleArea[1] = m_TitleArea[2] = m_TitleArea[3] = -1;
		m_BackAlphaImage  = NULL;
		m_BackOverlayImage= NULL;
		m_ButtonImage     = NULL;
		m_TitleImage      = NULL;
	}
	Button_Slide( void )
	{
		m_TouchArea[0] = m_TouchArea[1] = m_TouchArea[2] = m_TouchArea[3] = -1;
		m_BackArea [0] = m_BackArea [1] = m_BackArea [2] = m_BackArea [3] = -1;
		m_ButtonArea[0]= m_ButtonArea[1]= m_ButtonArea[2]= m_ButtonArea[3]= m_ButtonArea[4]= -1;
		m_TitleArea[0] = m_TitleArea[1] = m_TitleArea[2] = m_TitleArea[3] = -1;
		m_BackAlphaImage  = NULL;
		m_BackOverlayImage= NULL;
		m_ButtonImage     = NULL;
		m_TitleImage      = NULL;

		m_CurButtonPos = 0.0f;
		m_CurButtonSpeed = 0.0f;
		m_MousePos[0] = m_MousePos[1] = 0;
		m_MouseDown = false;
		m_TitleScroll = 0;
	}

	void Reset( void )
	{
		m_CurButtonPos = 0.0f;
		m_CurButtonSpeed=  0.0f;
		m_MouseDown = false;
		m_TitleScroll = 0;
	}
	void Hold( void )
	{
		m_MouseDown = true;
	}
	void OnLButtonDown( int x, int y )
	{
		//if( 0.0f < m_CurButtonPos || ! IsTouched(x,y) ){ return; }
		if( ! IsTouched(x,y) ){ return; }
		if( 0.0f >= m_CurButtonPos )
		{
			m_MousePos[0] = x;
			m_MousePos[1] = y;
		}
		m_MouseDown = true;
		m_TitleScroll = 0;
	}
	void OnMouseMove( int x, int y )
	{
		if( ! m_MouseDown ){ return; }
		if( ! (m_TouchArea[1] <= y && y <= m_TouchArea[1] + m_TouchArea[3]) )
		{
			m_MouseDown = false;
			return;
		}
		m_CurButtonPos   = (float)(x - m_MousePos[0]);
		if( m_CurButtonPos < 0 ){ m_CurButtonPos = 0; }
		if( m_CurButtonPos > m_ButtonArea[1]-m_ButtonArea[0] ){ m_CurButtonPos = (float)(m_ButtonArea[1]-m_ButtonArea[0]); }				
		m_CurButtonSpeed = m_CurButtonPos * SPRING_CONSTANT;
	}
	bool OnLButtonUp( int x, int y )
	{
		if( ! m_MouseDown ){ return false; }
		m_MouseDown = false;
		if( ! (m_TouchArea[1] <= y && y <= m_TouchArea[1] + m_TouchArea[3]) )
		{
			return false;
		}
		m_CurButtonPos   = (float)(x - m_MousePos[0]);
		if( m_CurButtonPos < 0 ){ m_CurButtonPos = 0; }
		if( m_CurButtonPos > m_ButtonArea[1]-m_ButtonArea[0] ){ m_CurButtonPos = (float)(m_ButtonArea[1]-m_ButtonArea[0]); }				
		m_CurButtonSpeed = m_CurButtonPos * SPRING_CONSTANT;

		if( m_CurButtonPos >= m_ButtonArea[1]-m_ButtonArea[0] ){ return true; }			
		return false;
	}

	bool IsTouched( int x, int y )
	{
		return ( m_TouchArea[0] <= x && x <= m_TouchArea[0] + m_TouchArea[2] && m_TouchArea[1] <= y && y <= m_TouchArea[1] + m_TouchArea[3] );
	}

	virtual void Draw ( float dx, float dy, float Bright=1.0f )
	{
		glEnable( GL_BLEND );
		//glBlendFunc( GL_ZERO, GL_SRC_COLOR );
		glBlendFunc( GL_ZERO, GL_ONE_MINUS_SRC_COLOR );
		MESLauncher_DrawImage1 ( m_BackAlphaImage,
								(int)(m_BackArea[0] + dx), (int)(m_BackArea[1] + dy), m_BackArea[2],m_BackArea[3],
								0,0,Bright, Bright, Bright, 1 );
		glBlendFunc( GL_ONE, GL_ONE );
		MESLauncher_DrawImage1 ( m_BackOverlayImage,
								(int)(m_BackArea[0] + dx), (int)(m_BackArea[1] + dy), m_BackArea[2],m_BackArea[3],
								0,0,Bright, Bright, Bright, 1 );

		float textalpha = 1.0f - (2 * m_CurButtonPos / (float)(m_ButtonArea[1] - m_ButtonArea[0]));
		if( textalpha < 0 ){ textalpha = 0; }
		glEnable( GL_BLEND );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -