📄 mes_ui.cpp
字号:
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 + -