Control* Window::MouseButtonDownEvent(int x, int y, uchar button) { Control* control = Control::MouseButtonDownEvent(x, y, button); if (control == this && IsDraggable() && xaih::IsPointInRectangle(x, y, GetAbsX(), GetAbsY(), GetWidth(), GetHeight())) { SetDragX(x - GetAbsX() + GetAlignmentX()); SetDragY(y - GetAbsY() + GetAlignmentY()); } return control; }
Control* AnalogStick::MouseButtonDownEvent(int x, int y, uchar button) { Control* control = Control::MouseButtonDownEvent(x, y, button); if (control == this) { if (x < GetAbsX() + GetWidth() / 2) { SetStickX(x - GetWidth() / 2); } else { SetStickX(x - GetWidth() / 2); } if (y < GetAbsY() + GetHeight() / 2) { SetStickY(y - GetHeight() / 2); } else { SetStickY(y - GetHeight() / 2); } } return control; }
Control* AnalogStick::MouseMoveEvent(int x, int y) { Control* control = Control::MouseMoveEvent(x, y); if (IsPressed()) { if (x < GetAbsX() + GetWidth() / 2) { SetStickX(x - GetWidth() / 2); } else { SetStickX(x - GetWidth() / 2); } if (y < GetAbsY() + GetHeight() / 2) { SetStickY(y - GetHeight() / 2); } else { SetStickY(y - GetHeight() / 2); } } return control; }
void CGuageDialog::Render() { // FlickerMussangGuage(); //cDialog::Render(); if( !IsActive() ) return ; cDialog::RenderWindow(); cDialog::RenderComponent(); if(PARTYMGR->GetMasterID() == gHeroID) { const float extraWidth = 11.0f; const float markWidth = 14.0f; VECTOR2 position = { GetAbsX() + float(GetWidth()) - extraWidth - markWidth, GetAbsY() + 8.0f}; VECTOR2 scale = {1.0f, 1.0f}; m_MasterMark.RenderSprite( &scale, 0, 0, &position, 0xffffffff) ; } }
void Label::Render() { if (!IsVisible()) return; XAGUI::GetRenderer()->Render(GetStaticText(), GetAbsX(), GetAbsY(), GetFlip()); Control::Render(); }
//100118 ONS 친구관리 다이얼로그에 PC방정보관련 기능추가(클래스 아이콘 출력) void CFriendDialog::Render() { cDialog::RenderWindow(); cDialog::RenderComponent(); cTabDialog::RenderTabComponent(); if(m_pPCRoomTabBtn->IsActive()) { VECTOR2 scale = {0,}; // 이미지 스케일을 적용할 벡터를 선언한다. scale.x = 1.0f; // 스케일 X를 1로 세팅한다. scale.y = 1.0f; // 스케일 Y를 1로 세팅한다. VECTOR2 vPos = {0,}; // 이미지 위치를 적용할 벡터를 선언한다. DWORD dwColor = 0xffffffff ; // 이미지 출력에 적용할 색상을 선언한다. for( int nRow = 0 ; nRow < MAX_PCROOM_MEMBER_LIST ; ++nRow ) { vPos.y = (float)(GetAbsY() + 122) + (20*nRow) ; // 이미지 출력위치 Y를 세팅한다. vPos.x = (float)(GetAbsX() + 30) ; // 이미지 출력위치 X를 세팅한다. if( !m_pClassImg[nRow].IsNull() ) // 멤버 클래스 이미지가 널이 아니라면, { m_pClassImg[nRow].RenderSprite(&scale, NULL, 0, &vPos, dwColor) ; // 멤버 클래스 이미지를 출력한다. } } } }
void AnalogStick::SetStickY(sint stickY) { if (stickY < GetAbsY() - ceil(GetHeight() / 4.0f)) { _stickY = GetAbsY() - static_cast<sint>(ceil(GetHeight() / 4.0f)); SetValueY(1.0f); } else if (stickY > GetAbsY() + ceil(GetHeight() / 4.0f)) { _stickY = GetAbsY() + static_cast<sint>(ceil(GetHeight() / 4.0f)); SetValueY(-1.0f); } else { _stickY = stickY; SetValueY(-(GetStickY() - GetAbsY()) / xaih::Round((GetHeight() / 4.0f))); } }
void ScrollBar::Render() { if (!IsVisible()) return; XAGUI::GetRenderer()->Render(XAGUI::GetSkin(), GetAbsX(), GetAbsY(), Slider::GetWidth(), Slider::GetHeight(), GetSrcX(GetState()), GetSrcY(GetState()), GetSrcWidth(), GetSrcHeight(), GetColorRed(GetState()), GetColorGreen(GetState()), GetColorBlue(GetState()), GetColorAlpha(GetState()), GetFlip()); Control::Render(); }
//---중요!!! 다이얼로그가 액티브상태가 아니라 그려지 않으면 원래 하위 게임유아이들도 그려지지 않으나, //---이 브라우저는 윈도우가 뜨는 것이라 꼭 액티브상태를 꺼줘야한다. //---따라서 cDialog::SetActiveRecursive() 를 사용하라. //---void CItemShopDlg::SetActive( BOOL val ) 참고. void cBrowser::SetActive(BOOL val) { if(IsDisable()) { return; } m_bActive = val; if(val) { // 091221 LUJ, 맵 이동 시 종종 cBrowser의 소멸자 호출 시에 // ATL 오류가 발생한다. m_hwndIE가 사용되지 않은 // 핸들로 나타난다. 오류 빈도를 줄이기 위해 창을 // 열때에만 창을 생성하도록 수정 if(0 == m_hwndIE) { m_hwndIE = CreateWindow( "AtlAxWin71", "about:blank", FULLSCREEN_WITH_BLT == GAMERESRCMNGR->GetResolution().dispType ? WS_POPUP : WS_CHILD, int(GetAbsX()), int(GetAbsY()), GetWidth(), GetHeight(), _g_hWnd, 0, GetModuleHandle(0), 0); CComPtr<IUnknown> punkIE = 0; if(S_OK == AtlAxGetControl( m_hwndIE, &punkIE)) { m_pWebBrowser = punkIE; } } ShowWindow( m_hwndIE, SW_SHOW); } else { if(m_hwndIE) { ShowWindow( m_hwndIE, SW_HIDE); } } }
void Slider::MarkerOnMouseButtonDown(Control* control, int x, int y, uchar button) { if (GetOrientation() == ORIENTATION_VERTICAL) { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetHeight() / static_cast<float>(y - GetAbsY())))); } else { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetWidth() / static_cast<float>(x - GetAbsX())))); } }
DWORD CMiniMapDlg::ActionEvent( CMouse* mouseInfo ) { DWORD we = cDialog::ActionEvent( mouseInfo ); if( ! m_bActive ) { return we; } if( we & WE_MOUSEOVER ) { cImageRect& rect = m_MiniMap.mRect; char text[128] = {0,}; VECTOR2 trans; trans.x = GetAbsX() + m_MiniMap.mTranslation.x - rect.left; trans.y = GetAbsY() + m_MiniMap.mTranslation.y - rect.top; m_IconTable.SetPositionHead(); for(CMiniMapIcon* pIcon = m_IconTable.GetData(); 0 < pIcon; pIcon = m_IconTable.GetData()) { int sort = pIcon->GetToolTip(mouseInfo->GetMouseX(),mouseInfo->GetMouseY(),&trans,text); if(sort == 1) // Npc { SetToolTip( text, RGB_HALF( 255, 255, 0 ), &m_TooltipImage, RGB_HALF( 0, 0, 0 ) ); } else if(sort == 2) // Party { SetToolTip( text, RGB_HALF(185, 241, 69), &m_TooltipImage, RGB_HALF( 0, 0, 0 ) ); } else if(sort == 3) // Farm { SetToolTip( text, RGB_HALF( 255, 255, 0 ), &m_TooltipImage, RGB_HALF( 0, 0, 0 ) ); } } if( ! strlen( text ) ) { SetToolTip(""); } } return we; }
void Slider::MarkerOnMouseMove(Control* control, int x, int y) { if (GetMarker()->IsPressed()) { if (GetOrientation() == ORIENTATION_VERTICAL) { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetHeight() / static_cast<float>(y - GetAbsY())))); } else { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetWidth() / static_cast<float>(x - GetAbsX())))); } } }
Control* Slider::MouseButtonDownEvent(int x, int y, uchar button) { Control* control = Control::MouseButtonDownEvent(x, y, button); if (control == this) { if (GetOrientation() == ORIENTATION_VERTICAL) { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetHeight() / static_cast<float>(y - GetAbsY())))); } else { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetWidth() / static_cast<float>(x - GetAbsX())))); } } return control; }
Control* Slider::MouseMoveEvent(int x, int y) { Control* control = Control::MouseMoveEvent(x, y); if (control == this && IsPressed()) { if (GetOrientation() == ORIENTATION_VERTICAL) { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetHeight() / static_cast<float>(y - GetAbsY())))); } else { SetValue(static_cast<int>((GetMaxValue() - GetMinValue()) / static_cast<float>(GetWidth() / static_cast<float>(x - GetAbsX())))); } } return control; }
void AnalogStick::ResetStick() { SetStickX(GetAbsX()); SetStickY(GetAbsY()); }
void CMiniMapDlg::Render() { if( ! m_bActive || m_MiniMap.mImage.IsNull() ) { return; } // 100612 레벨업 버튼 활성화시 if( m_pLevelUpBTN ) { if( m_pLevelUpBTN->IsActive() && !(m_pLevelUpBTN->IsPushed()) ) { DWORD dwCurTick = GetTickCount(); DWORD dwResultTime = dwCurTick - m_dwLevelUPBTNStartTime; if( dwResultTime > 1000 ) { m_dwLevelUPBTNStartTime = GetTickCount(); } m_pLevelUpBTN->SetAlpha((BYTE)(2.5f * (dwResultTime/10)) ); } else m_pLevelUpBTN->SetAlpha( 255 ); } cDialog::RenderWindow(); VECTOR2 trans; trans.x = GetAbsX() + m_MiniMap.mTranslation.x; trans.y = GetAbsY() + m_MiniMap.mTranslation.y; m_MiniMap.mImage.RenderSprite( &m_MiniMap.mScale, 0, 0, &trans, m_dwImageRGB ); cImageRect* rect = &m_MiniMap.mRect; trans.x -= rect->left; trans.y -= rect->top; m_IconTable.SetPositionHead(); for(CMiniMapIcon* pIcon = m_IconTable.GetData(); 0 < pIcon; pIcon = m_IconTable.GetData()) { pIcon->Render(&trans,rect); } m_IconTable.SetPositionHead(); for(CMiniMapIcon* pIcon = m_IconTable.GetData(); 0 < pIcon; pIcon = m_IconTable.GetData()) { pIcon->RenderQuestMark(&trans,rect); } m_HeroIcon.Render(&trans); // 090909 ShinJS --- Move Point 출력, 기존의 퀘스트마크 출력을 이용 m_MovePoint.RenderQuestMark( &trans, rect ); cDialog::RenderComponent(); }