#include "StdAfx.h" #include "UINode.h" #include "UINodeData.h" #include "UINodeProperty.h" #include "UIContainer.h" #include "UIEvent.h" #include "UIImage.h" #include "UIRootNode.h" #include "UIIDList.h" #include "UIID.h" #include "FontAgent.h" #include "RenderSystem.h" cUINode::cUINode( eUINodeType type ) : mType( type ) , mpParent( 0 ) , mID( ULONG_MAX ) , mFrontID( ULONG_MAX ) , mpImage( 0 ) , mVisible( true ) , mEnabled( true ) , mPressed( false ) , mMove( false ) , mAlpha( 1.0f ) , mNetLock( false ) , mLockTry( -1 ) , mBackupVisible( true ) , mOutLine( false ) , mFontType( cFontAgent::eFont_UI ) { mSnapType = eSNAP_NONE; mRelativeRect.Set(0, 0, 0, 0); mAbsoluteRect.Set(0, 0, 0, 0); mOldScreenWidth = GetScreenWidth(); mOldScreenHeight = GetScreenHeight(); mDefaultColor = COLOR_DEFAULT; /// ½ºÅ©¸³Æ®ÀÇ ÁÂÇ¥´Â ÇØ´ç »çÀÌÁ ±âÁØÀ¸·Î ÇÑ´Ù mDefaultWidth = DEFAULT_SCREENWIDTH; mDefaultHeight = DEFAULT_SCREENHEIGHT; mExceptionEvent = false; mProcessEnable = false; mIsSetCursorDefault = true; mUseBoldText = false; mHoverTipIndex = 0; } cUINode::~cUINode() { Destroy(); } /// bool cUINode::CreateByProperty( cUINodeProperty* pProperty, cUIContainer* pparent ) { assert( UIMAN && "null ui manager" ); assert( GetRoot() && "null ui root node" ); /// ¾ÆÀ̵𸦠°Ë»ç if( mID != ULONG_MAX ) { assert( 0 && "ui node is already created" ); return false; } /// ¾ÆÀ̵𠼳Á¤ /// ÇÁ·ÎÆÛƼÀÇ ¾ÆÀ̵ð´Â ¾ÆÀ̵𸮽ºÆ®¿¡¼­ µû·Î°¡Á®¿Â´Ù. cUIIDList* pIDList = UIMAN->GetUIIDList(); if( pIDList == 0 ) { assert( 0 && "null ID List" ); return false; } /// ¾ÆÀ̵𠼳Á¤ mID = pIDList->GetPropID( pProperty->mPropertyName ); /// ½ºÅ² À̸§À» ¼³Á¤ mSkinName = pProperty->mSkinName; /// °øÅëÀûÀÎ ºÎºÐÀ» ¼¼ÆÃ if( SetupNode( pparent ) == false ) return false; if( OnCreate(pProperty) == false ) return false; if( mpParent->IsKindof( eUINODE_ROOT ) == true ) { GetRoot()->AddProcessChild( this ); GetRoot()->AddSearchChild( this ); } return IsValid(); } /// bool cUINode::CreateByPropertyId( cUINodeProperty* pProperty, cUIContainer* pparent, unsigned long id ) { assert( UIMAN && "null ui manager" ); assert( GetRoot() && "null ui root node" ); /// ¾ÆÀ̵𸦠°Ë»ç if( mID != ULONG_MAX ) { assert( 0 && "ui node is already created" ); return false; } /// ½ºÅ² À̸§À» ¼³Á¤ mSkinName = pProperty->mSkinName; /// ¾ÆÀ̵𠼳Á¤ mID = id; /// °øÅëÀûÀÎ ºÎºÐÀ» ¼¼ÆÃ if( SetupNode( pparent ) == false ) return false; if( OnCreate(pProperty) == false ) return false; // if( mpParent->IsKindof( eUINODE_ROOT ) == true ) { GetRoot()->AddProcessChild( this ); GetRoot()->AddSearchChild( this ); } return IsValid(); } // ÁÖÀÇ»çÇ× : ½ºÅ²ÀÌ ÇÊ¿äÇÑ ÀϹÝÀûÀÎ À©µµ¿ì´Â À̰ɷΠ»ý¼º bool cUINode::CreateBySkinName( const cString& skinName, cUIContainer* pparent, unsigned long id ) { assert( UIMAN && "null ui manager" ); assert( GetRoot() && "null ui root node" ); /// ¾ÆÀ̵𸦠°Ë»ç if( mID != ULONG_MAX ) { assert( 0 && "ui node is already created" ); return false; } /// ½ºÅ² À̸§À» ¼³Á¤ mSkinName = skinName; /// ¾ÆÀ̵𠼳Á¤ mID = id; /// °øÅëÀûÀÎ ºÎºÐÀ» ¼¼ÆÃ if( SetupNode( pparent ) == false ) return false; if( OnCreate() == false ) return false; if( mpParent->IsKindof( eUINODE_ROOT ) == true ) { GetRoot()->AddProcessChild( this ); GetRoot()->AddSearchChild( this ); } return IsValid(); } bool cUINode::CreateByPropertyName( const cString& propertyName, cUIContainer* pparent ) { assert( UIMAN && "null ui manager" ); assert( GetRoot() && "null ui root node" ); /// ¾ÆÀ̵𸦠°Ë»ç if( mID != ULONG_MAX ) { assert( 0 && "ui node is already created" ); return false; } cUIProperty* prop = UIMAN->GetProperty(); cUINodeProperty* nodeProp = prop->GetNodeProperty( propertyName ); if( nodeProp == 0 ) { assert( 0 && "failed to find ui node property" ); return false; } /// ÇÁ·ÎÆÛƼÀÇ ¾ÆÀ̵ð´Â ¾ÆÀ̵𸮽ºÆ®¿¡¼­ µû·Î°¡Á®¿Â´Ù. cUIIDList* pIDList = UIMAN->GetUIIDList(); if( pIDList == 0 ) { assert( 0 && "null ID List" ); return false; } /// ¾ÆÀ̵𸦠¼³Á¤ mID = pIDList->GetPropID( nodeProp->mPropertyName ); /// ½ºÅ² À̸§À» ¼³Á¤ mSkinName = nodeProp->mSkinName; /// °øÅëÀûÀÎ ºÎºÐÀ» ¼¼ÆÃ if( SetupNode( pparent ) == false ) return false; if( OnCreate(nodeProp) == false ) return false; if( mpParent->IsKindof( eUINODE_ROOT ) == true ) { GetRoot()->AddProcessChild( this ); GetRoot()->AddSearchChild( this ); } return IsValid(); } /// ÁÖÀÇ»çÇ× : °¢ ³ëµå »ý¼º¹æ¹ýÀÇ °øÅëÀûÀÎ ºÎºÐÀ» ¼¼ÆÃ bool cUINode::SetupNode( cUIContainer* pparent ) { /// ºÎ¸ð¸¦ ¼³Á¤ assert( mpParent == 0 && "parent already exists!" ); if( pparent == 0 ) { mpParent = GetRoot(); } else if( pparent->IsKindof( eUINODE_CONTAINER ) ) { mpParent = pparent; } else { assert( 0 && "parent should be kind of container"); return false; } /// ½ºÅ²À» Àû¿ë if( ApplySkin() == false ) { assert( 0 && "failed to apply node skin"); return false; } /// ºÎ¸ð¿¡ Ãß°¡ mpParent->AddChild( this ); /// ºÎ¸ð°¡ ÃÖ»óÀ§·çÆ®°¡ ¾Æ´Ï¸é ¾ËÆÄ°ªÀ» °¡Á®¿Í¼­ ¼¼ÆÃ if( mpParent != GetRoot() ) { SetAlpha( mpParent->GetAlpha() ); } /// Ãʹݿ¡ À©µµ¿ì »ý¼º½Ã visible ¼¼ÆÃ if( mType == eUINODE_WINDOW || mType == eUINODE_TABWINDOW ) { mVisible = false; } return true; } /// ÁÖÀÇ»çÇ× : void cUINode::Destroy() { /// ºÎ¸ð·ÎºÎÅÍ Á¦°Å if( mpParent ) { mpParent->RemoveChild( this ); } if( mID ) { OnDestroy(); /// ¸¶¹«¸®~ mID = ULONG_MAX; } if( mFrontID != ULONG_MAX ) { UIMAN->RemoveFrontNode( mFrontID ); mFrontID = ULONG_MAX; } /// À̹ÌÁö Á¦°Å delete mpImage; mpImage = 0; } /// ÁÖÀÇ»çÇ× : ½ºÅ²¿¡¼­ ÀоîµéÀÎ °ª Àû¿ë bool cUINode::ApplySkin() { cUISkin* pskin = UIMAN->GetSkin(); if( pskin == 0 ) { assert( 0 && "null skin" ); return false; } /// ³ëµå ½ºÅ² °Ë»ö cUINodeSkin* pnodeSkin = pskin->GetNodeSkin( mSkinName ); if( pnodeSkin == 0 ) { assert( 0 && "failed to find node skin" ); return false; } /// ³ëµå ½ºÅ² ¼³Á¤ if( SetSkin( pnodeSkin ) == false ) { return false; } return true; } /// ÁÖÀÇ»çÇ× : bool cUINode::SetSkin( const cUINodeSkin* skin ) { if( skin == 0 ) { assert( 0 && "null skin" ); return false; } /// ³ëµå ½ºÅ²ÀÇ ÀûÇÕ¼º °Ë»ç if( skin->IsValid() == false ) { assert( 0 && "invalid skin" ); return false; } /// À̹ÌÁö ¼³Á¤ if( skin->mpTexture ) { if( mpImage == 0 ) { mpImage = new cUIImage( skin->mpTexture ); } else { assert(0); } /// Ä÷¯¸¦ ÁöÁ¤ SetColor( skin->mColor ); // mpImage->SetColor( skin->mColor ); /// ÅØ½ºÃ³ ¿µ¿ª ¼³Á¤ unsigned int tx = skin->mSkinInfo->mTexX; unsigned int ty = skin->mSkinInfo->mTexY; unsigned int tw = skin->mSkinInfo->mTexWidth; unsigned int th = skin->mSkinInfo->mTexHeight; mpImage->SetTextureRect( tx, ty, tx + tw, ty + th ); } else { delete mpImage; mpImage = 0; } /// ·çÆ®ÀÇ ¹Ù·Î ÀÚ½ÄÀÎ À©µµ¿ìµéÀº ±âÁ¸ÁÂÇ¥¸¦ ÀúÀåÇÑä ÇØ»óµµ¸¦ º¯°æ if( mpParent == 0 ) { assert(0); return false; } int x = skin->mSkinInfo->mX; int y = skin->mSkinInfo->mY; unsigned int w = skin->mSkinInfo->mWidth; unsigned int h = skin->mSkinInfo->mHeight; /// ºÎ¸ð°¡ ·çÆ® ŸÀÔÀÌ¸é ¸ðµÎ °»½Å if( mpParent->GetType() == eUINODE_ROOT ) { x = ( GetScreenWidth() * skin->mSkinInfo->mX ) / mDefaultWidth; y = ( GetScreenHeight() * skin->mSkinInfo->mY ) / mDefaultHeight; /// ¿À¸¥ÂÊÀ̳ª ¾Æ·§ÂÊ¿¡ À©µµ¿ì°¡ ºÙ¾îÀÖÀ¸¸é ÇØ»óµµ º¯°æ½Ã¿¡µµ /// ºÙ¾îÀÖµµ·Ï ÇÑ´Ù if( (skin->mSkinInfo->mX + skin->mSkinInfo->mWidth) >= (int)mDefaultWidth ) { x = GetScreenWidth() - w; } if( (skin->mSkinInfo->mY + skin->mSkinInfo->mHeight) >= (int)mDefaultHeight ) { y = GetScreenHeight() - h; } } mHoverTipIndex = skin->mSkinInfo->mHoverTipIndex; /// Àû¿ë SetRelativeRect( cUIRect( x, y, x + w, y + h) ); return true; } /// ÁÖÀÇ»çÇ× : ÇØ»óµµ º¯°æ½Ã È£Ãâ void cUINode::UpdateSkin() { cUISkin* pskin = UIMAN->GetSkin(); if( pskin == 0 ) { assert(0); } /// ³ëµå ½ºÅ² °Ë»ö cUINodeSkin* pnodeSkin = pskin->GetNodeSkin( mSkinName ); if( pnodeSkin == 0 ) { assert(0); } /// ·çÆ®ÀÇ ¹Ù·Î ÀÚ½ÄÀÎ À©µµ¿ìµéÀº ±âÁ¸ÁÂÇ¥¸¦ ÀúÀåÇÑä ÇØ»óµµ¸¦ º¯°æ if( mpParent == 0 ) { assert(0); return; } /// »çÀÌÁî´Â »õ·Î¿î »ó´ëÁÂÇ¥ * »õ·Î¿î ÇØ»óµµ int x = pnodeSkin->mSkinInfo->mX; int y = pnodeSkin->mSkinInfo->mY; unsigned int w = pnodeSkin->mSkinInfo->mWidth; unsigned int h = pnodeSkin->mSkinInfo->mHeight; /// ºÎ¸ð°¡ ·çÆ® ŸÀÔÀÌ¸é ¸ðµÎ °»½Å if( mpParent->GetType() == eUINODE_ROOT ) { /*x = ( GetScreenWidth() * GetAbsoluteRect().mLeft ) / mOldScreenWidth; y = ( GetScreenHeight() * GetAbsoluteRect().mTop ) / mOldScreenHeight;*/ x = ( GetScreenWidth() * pnodeSkin->mSkinInfo->mX ) / mDefaultWidth; y = ( GetScreenHeight() * pnodeSkin->mSkinInfo->mY ) / mDefaultHeight; /// ¿À¸¥ÂÊÀ̳ª ¾Æ·§ÂÊ¿¡ À©µµ¿ì°¡ ºÙ¾îÀÖÀ¸¸é ÇØ»óµµ º¯°æ½Ã¿¡µµ /// ºÙ¾îÀÖµµ·Ï ÇÑ´Ù if( GetAbsoluteRect().mRight >= (int)mOldScreenWidth ) { x = GetScreenWidth() - w; } if( GetAbsoluteRect().mBottom >= (int)mOldScreenHeight ) { y = GetScreenHeight() - h; } } mHoverTipIndex = pnodeSkin->mSkinInfo->mHoverTipIndex; /// Àû¿ë SetRelativeRect( cUIRect( x, y, x + w, y + h) ); /// ±âÁ¸ ÇØ»óµµ ÀúÀå mOldScreenWidth = GetScreenWidth(); mOldScreenHeight = GetScreenHeight(); } /// ÁÖÀÇ»çÇ× : bool cUINode::IsValid() const { if( mpParent == 0 ) { assert( 0 && "null parent" ); return false; } if( mpImage && mpImage->IsValid() == false ) { assert( 0 && "invalid image" ); return false; } if( mpImage && mpImage->GetTextureRect().IsValid() == false ) { assert( 0 && "invalid tex rect" ); return false; } return true; } /// void cUINode::SetColor( float r, float g, float b, float a ) { SetColor( NiColorA(r,g,b,a) ); } /// void cUINode::SetColor( const NiColorA& color ) { if( mpImage ) { mpImage->SetColor( color ); } } /// ÁÖÀÇ»çÇ× : void cUINode::SetAlpha( float a ) { mAlpha = a; if( mpImage ) { mpImage->SetAlpha( mAlpha ); } } /// ÁÖÀÇ»çÇ× : void cUINode::UpdateRect() { /// »ó´ë ¿µ¿ªÁÂÇ¥°¡ ºÎ¸ð¸¦ ³ÑÁö ¾Ê°Ô ¼³Á¤ÇÑ´Ù (ÀÌ»óÇÑ °ªÀÌ ¸ø¿À°Ô ÇÔ) unsigned int rWidth = mRelativeRect.GetWidth(); unsigned int rHeight = mRelativeRect.GetHeight(); /// È­¸é »çÀÌÁî ¸ø³ª°¡°Ô º¸Á¤ if( mRelativeRect.mLeft < 0 ) { mRelativeRect.mLeft = 0; mRelativeRect.mRight = mRelativeRect.mLeft + rWidth; } if( mRelativeRect.mRight > (int)GetScreenWidth() ) { mRelativeRect.mRight = GetScreenWidth(); mRelativeRect.mLeft = mRelativeRect.mRight - rWidth; if( mRelativeRect.mLeft < 0 ) mRelativeRect.mLeft = 0; } if( mRelativeRect.mTop < 0 ) { mRelativeRect.mTop = 0; mRelativeRect.mBottom = mRelativeRect.mTop + rHeight; } if( mRelativeRect.mBottom > (int)GetScreenHeight() ) { mRelativeRect.mBottom = GetScreenHeight(); mRelativeRect.mTop = mRelativeRect.mBottom - rHeight; if( mRelativeRect.mTop < 0 ) mRelativeRect.mTop = 0; } cUIRect& parentAbsolute = mpParent->mAbsoluteRect; mAbsoluteRect = mRelativeRect + parentAbsolute.mUpperLeft; /// Àý´ë ¿µ¿ªÁÂÇ¥°¡ Àüü È­¸é À» ³ÑÁö ¾Êµµ·Ï ¼³Á¤ unsigned int abWidth = mAbsoluteRect.GetWidth(); unsigned int abHeight = mAbsoluteRect.GetHeight(); /// ÄÁÅ×À̳ÊÀÎ °æ¿ì¿¡´Â if( mMove && IsKindof( eUINODE_CONTAINER ) ) { /// ¹é±×¶ó¿îµå¿ë ÄÁÅ×ÀÌ³Ê¸é ±×³É ¸®ÅÏ cUIContainer* pCon = (cUIContainer*)this; if( pCon->IsOnlyBackground() == true ) return; if( this->mpParent == GetRoot() ) { mAbsoluteRect = mRelativeRect; /// UI ÀÚ¼®±â´É ApplySnap(); if( ::abs(mAbsoluteRect.mLeft) <= (AUTO_MAGNATIC_DIST / 2) ) { mAbsoluteRect.mLeft = 0; mAbsoluteRect.mRight = mAbsoluteRect.mLeft + abWidth; } if( GetScreenWidth() - mAbsoluteRect.mRight <= (AUTO_MAGNATIC_DIST / 2) ) { mAbsoluteRect.mRight = GetScreenWidth(); mAbsoluteRect.mLeft = mAbsoluteRect.mRight - abWidth; } if( ::abs(mAbsoluteRect.mTop) <= (AUTO_MAGNATIC_DIST / 2) ) { mAbsoluteRect.mTop = 0; mAbsoluteRect.mBottom = mAbsoluteRect.mTop + abHeight; } if( GetScreenHeight() - mAbsoluteRect.mBottom <= (AUTO_MAGNATIC_DIST / 2) ) { mAbsoluteRect.mBottom = GetScreenHeight(); mAbsoluteRect.mTop = mAbsoluteRect.mBottom - abHeight; } } /// ·çÆ®¿¡ ´ëÇÑ À§Ä¡À̹ǷÎ, µ¿ÀÏÇÏ°Ô ÇØÁÜ. //mRelativeRect = mAbsoluteRect; mMove = false; } /// À̹ÌÁö ¿µ¿ªÀ» °»½Å if( mpImage ) { mpImage->SetScreenRect( mAbsoluteRect ); } } /// ÁÖÀÇ»çÇ× :UI ÄÁÅ×À̳ʰ¡ À̵¿½Ã¿¡ ÀÚ¼®±â´É void cUINode::ApplySnap() { unsigned int abWidth = mAbsoluteRect.GetWidth(); unsigned int abHeight = mAbsoluteRect.GetHeight(); /// ÇöÀç À̵¿ÇÑ À©µµ¿ì°¡ ºÙ¾î¾ßÇÒ À©µµ¿ì¸¦ ã´Â´Ù.(xÃà°Ë»ç) cUIContainer* interConX = UIMAN->UpdateNearContainer( (cUIContainer*)this, true ); if( interConX ) { /// »ó´ë ÄÁÅ×À̳ÊÀÇ ¿À¸¥ÂÊ¿¡ ºÙ¾î¶ó if( mSnapType == eSNAP_RIGHT ) { mAbsoluteRect.mLeft = interConX->GetAbsoluteRect().mRight; mAbsoluteRect.mRight = mAbsoluteRect.mLeft + abWidth; } /// »ó´ë ÄÁÅ×À̳ÊÀÇ ¿ÞÂÊ¿¡ ºÙ¾î¶ó if( mSnapType == eSNAP_LEFT ) { mAbsoluteRect.mRight = interConX->GetAbsoluteRect().mLeft; mAbsoluteRect.mLeft = mAbsoluteRect.mRight - abWidth; } /// »ó´ëÄÁÅ×ÀÌ³Ê¿Í LEFT °ªÀÌ °°À¸¸é È® ºÙ¿©¶ó ( LEFT Á¤·Ä) if( mSnapType == eSNAP_LEFT_OUT ) { mAbsoluteRect.mLeft = interConX->GetAbsoluteRect().mLeft; mAbsoluteRect.mRight = mAbsoluteRect.mLeft + abWidth; } /// »ó´ëÄÁÅ×ÀÌ³Ê¿Í RIGHT °ªÀÌ °°À¸¸é È® ºÙ¿©¶ó ( RIGHT Á¤·Ä) if( mSnapType == eSNAP_RIGHT_OUT ) { mAbsoluteRect.mRight = interConX->GetAbsoluteRect().mRight; mAbsoluteRect.mLeft = mAbsoluteRect.mRight - abWidth; } } /// y Ãà°Ë»ç cUIContainer* interConY = UIMAN->UpdateNearContainer( (cUIContainer*)this, false ); if( interConY ) { /// »ó´ë ÄÁÅ×À̳ÊÀÇ ¾Æ·§ÂÊ¿¡ ºÙ¿©¶ó if( mSnapType == eSNAP_BOTTOM ) { mAbsoluteRect.mTop = interConY->GetAbsoluteRect().mBottom; mAbsoluteRect.mBottom = mAbsoluteRect.mTop + abHeight; } /// »ó´ë ÄÁÅ×À̳ÊÀÇ À§ÂÊ¿¡ ºÙ¿©¶ó if( mSnapType == eSNAP_TOP ) { mAbsoluteRect.mBottom = interConY->GetAbsoluteRect().mTop; mAbsoluteRect.mTop = mAbsoluteRect.mBottom - abHeight; } /// »ó´ëÄÁÅ×ÀÌ³Ê¿Í TOP °ªÀÌ °°À¸¸é È® ºÙ¿©¶ó ( TOP Á¤·Ä) if( mSnapType == eSNAP_TOP_OUT ) { mAbsoluteRect.mTop = interConY->GetAbsoluteRect().mTop; mAbsoluteRect.mBottom = mAbsoluteRect.mTop + abHeight; } /// »ó´ëÄÁÅ×ÀÌ³Ê¿Í BOTTOM °ªÀÌ °°À¸¸é È® ºÙ¿©¶ó ( BOTTOM Á¤·Ä) if( mSnapType == eSNAP_BOTTOM_OUT ) { mAbsoluteRect.mBottom = interConY->GetAbsoluteRect().mBottom; mAbsoluteRect.mTop = mAbsoluteRect.mBottom - abHeight; } } } bool cUINode::ContainPoint( const cUIPos& pos ) const { if( mVisible == false ) return false; return mAbsoluteRect.ContainPoint( pos ); } /// ÁÖÀÇ»çÇ× : void cUINode::Move( const cUIPos& value ) { mRelativeRect += value; mMove = true; UpdateRect(); } void cUINode::Show() { mVisible = true; } void cUINode::Hide() { ReleaseCapture(); mVisible = false; } /// ÁÖÀÇ»çÇ× : ÀÚ±âÀÚ½ÅÀÇ ´­¸²¿©ºÎ ¼³Á¤ void cUINode::SetPress( bool press ) { if( mEnabled == false ) return; if( mPressed != press ) mPressed = press; } cUINode* cUINode::GetFocus() { return UIMAN->GetFocusedNode(); } cUINode* cUINode::GetHover() { return UIMAN->GetHoverNode(); } void cUINode::CheckEventNode() { UIMAN->CheckEventNode( this ); } void cUINode::SetCapture() { UIMAN->SetCaptureNode( this ); } void cUINode::ReleaseCapture() { UIMAN->ReleaseCaptureNode( this ); } void cUINode::ReleaseHover() { UIMAN->ReleaseHoverNode( this ); } void cUINode::SetFocus() { UIMAN->SetFocusedNode( this ); } void cUINode::ReleaseFocus() { UIMAN->ReleaseFocusedNode( this ); } void cUINode::ReleaseEventNode() { UIMAN->ReleaseEventNode(); } cUIRootNode* cUINode::GetRoot() { return UIMAN->GetRootNode(); } cUINode* cUINode::GetCapture() { return UIMAN->GetCaptureNode(); } unsigned int cUINode::GetScreenWidth() { return RENDERSYS->GetScreenWidth(); } unsigned int cUINode::GetScreenHeight() { return RENDERSYS->GetScreenHeight(); } bool cUINode::SendEvent( cUINode* eventHandler, eUIEventType eventType, cUINode* caller, unsigned int id, bool shift ) { assert( eventHandler ); assert( caller ); cUIEvent event; event.mType = eventType; event.mpCaller = caller; event.mID = id; event.mShift = shift; return eventHandler->HandleEvent( event ); } /// ÁÖÀÇ»çÇ× : bool cUINode::HandleEvent( const cUIEvent& event ) { /// ºñȰ¼ºÈ­µÈ °æ¿ì¿¡´Â ºÎ¸ð¿¡ À̺¥Æ®¸¦ ³Ñ±è LSG070228 if( mEnabled == false || mVisible == false ) { return mpParent->HandleEvent( event ); } switch( event.mType ) { case eUIEVENT_CAPTURE_LOST: OnCaptureLost(); break; case eUIEVENT_FOCUS_LOST: OnFocusLost(); break; case eUIEVENT_MOUSE_MOVE: OnMouseMove( event.mPos ); break; case eUIEVENT_MOUSE_WHEEL: OnMouseWheel( event.mPos, event.mWheel ); break; case eUIEVENT_LBUTTON_DOWN: OnLButtonDown( event.mPos, event.mControl, event.mAlt, event.mShift ); break; case eUIEVENT_RBUTTON_DOWN: OnRButtonDown( event.mPos, event.mControl, event.mAlt, event.mShift ); break; case eUIEVENT_LBUTTON_UP: OnLButtonUp( event.mPos ); break; case eUIEVENT_RBUTTON_UP: OnRButtonUp( event.mPos ); break; case eUIEVENT_LBUTTON_DBLCLK: OnLButtonDoubleClick( event.mPos ); break; case eUIEVENT_MOUSE_HOVERED: OnMouseHovered( event.mPos ); break; case eUIEVENT_MOUSE_LEFT: OnMouseLeft( event.mPos ); break; case eUIEVENT_KEY_DOWN: OnKeyDown( event.mCode ); break; case eUIEVENT_KEY_UP: OnKeyUp( event.mCode ); break; case eUIEVENT_CHAR: OnChar( event.mWparam ); break; case eUIEVENT_IME_NOTIFY: OnImeNotify( event.mWparam ); break; case eUIEVENT_IME_STARTCOMPOSITION: OnImeStartComposition( event.mWparam, event.mLparam ); break; case eUIEVENT_IME_ENDCOMPOSITION: OnImeEndComposition( event.mWparam, event.mLparam ); break; case eUIEVENT_IME_COMPOSITION: OnImeComposition( event.mWparam, event.mLparam ); break; default: return false; } return true; } void cUINode::OnLButtonDown( const cUIPos& /*pos*/, bool /*ctrl*/, bool /*alt*/, bool /*shift*/ ) { UIMAN->GotoFrontNode( this ); } void cUINode::OnMouseHovered( const cUIPos& pos ) { if( mHoverTipIndex > 0 ) UIMAN->ShowUITip( pos, mHoverTipIndex ); } void cUINode::OnMouseLeft( const cUIPos& ) { if( mHoverTipIndex > 0 ) UIMAN->HideTip(); }