D:/Zythum/DinoKod/Interface/Edit.cpp

00001 //---------------------------------------------------------------------------------------------
00002 //      This file is a part of "DinoKod".
00003 //      Copyright © 2003 Dino Productions. All Rights Reserved.
00004 //      
00005 //      File                    : Edit.cpp
00006 //      Author                  : Sebastien LEIX        sebastien.leix@wanadoo.fr
00007 //      Date                    : 09/09/2002
00008 //      Modification    :
00009 //
00010 //---------------------------------------------------------------------------------------------
00011 #include "Common/Time.h"
00012 #include "Render/Render.h"
00013 #include "Render/Font.h"
00014 #include "Interface/Interface.h"
00015 #include "Interface/Edit.h"
00016 
00017 //---------------------------------------------------------------------------------------------------------------------
00018 KEdit::KEdit( KWin* pFather, KFPt& Pos, KFPt& Size, KInterface* pInterface, char* pText, bool bPassword )
00019 : KWin( pFather, Pos, Size, pInterface, 0, pText )
00020 {
00021         m_bEditing      = false;
00022         m_bPassword     = bPassword;
00023 
00024         m_ShaderId = KSHADER_NO;
00025 }
00026 
00027 //---------------------------------------------------------------------------------------------------------------------
00028 KEdit::~KEdit()
00029 {
00030 }
00031 
00032 //---------------------------------------------------------------------------------------------------------------------
00033 void KEdit::Display()
00034 {
00035         u8      FadeAlpha = (u8)(255.0f * GetFade());
00036 
00037         KCOLOR  Color = KRGBA( 255, 255, 200, FadeAlpha );
00038         float   pTU[4] = { 0.0f, 1.0f, 0.0f, 1.0f };
00039         float   pTV[4] = { 0.0f, 0.0f, 1.0f, 1.0f };
00040         KPt             TextOffset( 0, 0 );
00041 
00042         if( IsInside( GetMousePos() ) )
00043         {
00044                 Color = KRGBA( 255, 200, 200, FadeAlpha );
00045                 if( m_pInterface->GetpMouse()->IsLButtonDown() )
00046                 {
00047                         m_pInterface->SetpFocus( this );
00048                 }
00049         }
00050 
00051         float   dtexelu = 0.5f / 64.0f;
00052         float   dtexelv = 0.5f / 64.0f;
00053         KFPt    TexSize = GetFloatPoint( KPt( 32, 32 ) );
00054 
00055         // Left
00056         pTU[0] = 0.0f + dtexelu;        pTV[0] = 0.5f + dtexelv;
00057         pTU[1] = 0.5f + dtexelu;        pTV[1] = 0.5f + dtexelv;
00058         pTU[2] = 0.0f + dtexelu;        pTV[2] = 0.0f + dtexelv;
00059         pTU[3] = 0.5f + dtexelu;        pTV[3] = 0.0f + dtexelv;
00060         DrawQuad( m_Pos.x, m_Pos.y, TexSize.x, TexSize.y, m_ShaderId, KRGBA( 255, 255, 255, FadeAlpha ), KRGB_BLACK, KRM_NORMAL, pTU, pTV );
00061         // Right
00062         pTU[0] = 0.5f + dtexelu;        pTV[0] = 0.5f + dtexelv;
00063         pTU[1] = 1.0f + dtexelu;        pTV[1] = 0.5f + dtexelv;
00064         pTU[2] = 0.5f + dtexelu;        pTV[2] = 0.0f + dtexelv;
00065         pTU[3] = 1.0f + dtexelu;        pTV[3] = 0.0f + dtexelv;
00066         DrawQuad( m_Pos.x + m_Size.x - TexSize.x, m_Pos.y, TexSize.x, TexSize.y, m_ShaderId, KRGBA( 255, 255, 255, FadeAlpha ), KRGB_BLACK, KRM_NORMAL, pTU, pTV );
00067         // Middle
00068         pTU[0] = 0.0f + dtexelu;        pTV[0] = 1.0f + dtexelv;
00069         pTU[1] = 1.0f + dtexelu;        pTV[1] = 1.0f + dtexelv;
00070         pTU[2] = 0.0f + dtexelu;        pTV[2] = 0.5f + dtexelv;
00071         pTU[3] = 1.0f + dtexelu;        pTV[3] = 0.5f + dtexelv;
00072         DrawQuad( m_Pos.x + TexSize.x, m_Pos.y, m_Size.x - TexSize.x * 2.0f, TexSize.y, m_ShaderId, KRGBA( 255, 255, 255, FadeAlpha ), KRGB_BLACK, KRM_NORMAL, pTU, pTV );
00073         
00074         char    pNewText[1024];
00075         KASSERT( strlen( m_pText ) < sizeof( pNewText ) );
00076         
00077         strcpy( pNewText, m_pText );
00078 
00079         if( m_bPassword )
00080         {
00081                 for( u32 i = 0; i < strlen( pNewText ); i ++ )
00082                 {
00083                         pNewText[i] = '*';
00084                 }
00085         }
00086 
00087         if( m_bEditing )
00088         {
00089                 Color = KRGBA( 255, 200, 200, FadeAlpha );
00090                 if( ( (g_Time.GetTime() / 500) % 2 ) )
00091                 {
00092                         strcat( pNewText, "_" );
00093                 }
00094         }
00095 
00096         KFPt    Border = GetFloatPoint( KPt( 16, 10 ) );
00097         KFPt    TextSize = GetFloatPoint( m_pRender->GetpFont()->GetTextSize( pNewText ) );
00098         //m_pRender->DrawText( KPt( m_Pos.x + 16, m_Pos.y + (m_Size.y - TextSize.y) / 2 + TextOffset.y ), pNewText, Color );
00099         m_pRender->DrawText( GetIntPoint( KFPt( m_Pos.x + Border.x, m_Pos.y + Border.y ) ), pNewText, Color );
00100 }
00101 
00102 //---------------------------------------------------------------------------------------------------------------------
00103 void KEdit::OnSetFocus()
00104 {
00105         m_bEditing = true;
00106 }
00107 
00108 //---------------------------------------------------------------------------------------------------------------------
00109 void KEdit::OnLostFocus()
00110 {
00111         m_bEditing = false;
00112 }
00113 
00114 //---------------------------------------------------------------------------------------------------------------------
00115 bool KEdit::OnKeyDown( u32 VirtKey, u32 KeyData )
00116 {
00117         if( m_bEditing )
00118         {
00119                 switch( VirtKey )
00120                 {
00121                 case VK_RETURN:
00122                         m_bEditing = false;
00123                         break;
00124                 case VK_BACK:
00125                         {
00126                                 if( strlen( m_pText ) < 1 )
00127                                         break;
00128 
00129                                 char*   pTmpText = (char*)malloc( strlen( m_pText ) );
00130                                 
00131                                 strncpy( pTmpText, m_pText, strlen( m_pText ) - 1 );
00132                                 pTmpText[strlen( m_pText ) - 1] = '\0';
00133                                 Freep( m_pText );
00134                                 m_pText = pTmpText;
00135                                 break;
00136                         }
00137                 default:
00138                         if( ( KeyData >= 0x20 ) && ( KeyData <= 0xff ) )
00139                         {
00140                                 char*   pTmpText = (char*)malloc( strlen( m_pText ) + 2 );
00141                                 
00142                                 sprintf( pTmpText, "%s%c", m_pText, (unsigned char)KeyData );
00143                                 Freep( m_pText );
00144                                 m_pText = pTmpText;
00145                                 break;
00146                         }
00147                 }
00148 
00149                 return true;
00150         }
00151 
00152         return false;
00153 }
00154 
00155 //---------------------------------------------------------------------------------------------------------------------
00156 void KEdit::Load()
00157 {
00158         KWin::Load();
00159 
00160         m_ShaderId = m_pRender->GetpShaderBank()->LoadShader( "GUI/Edit" );
00161 }
00162 
00163 //---------------------------------------------------------------------------------------------------------------------
00164 void KEdit::Unload()
00165 {
00166         KWin::Unload();
00167 
00168         m_pRender->GetpShaderBank()->UnloadShader( m_ShaderId );
00169 }

Generated on Sun Mar 25 20:02:12 2007 for Zythum Project by  doxygen 1.5.1-p1