bool CUIWindow::AlignHintWndPos( Frect const& vis_rect, float border, float dx16pos ) //this = hint wnd { float const cursor_height = 43.0f; Fvector2 cursor_pos = GetUICursor()->GetCursorPosition(); if ( UI()->is_16_9_mode() ) { cursor_pos.x -= dx16pos; } if ( !vis_rect.in(cursor_pos) ) { return false; } Frect rect; rect.set( -border, -border, GetWidth() - 2.0f*border, GetHeight() - 2.0f*border ); rect.add( cursor_pos.x, cursor_pos.y ); rect.sub( 0.0f, rect.height() - border ); if ( !is_in( vis_rect, rect ) ) { rect.sub( rect.width() - border, 0.0f ); } if ( !is_in( vis_rect, rect ) ) { rect.add( 0.0f , rect.height() - border ); } if ( !is_in( vis_rect, rect ) ) { rect.add( rect.width() - border, cursor_height ); } float yn = rect.top - vis_rect.height() + rect.height( ) - border + cursor_height; if ( !is_in( vis_rect, rect ) ) { rect.sub( 0.0f , yn ); } if ( !is_in( vis_rect, rect ) ) { rect.sub( rect.width() - border, 0.0f ); } SetWndPos( rect.lt ); return true; }
void CUIButton::Update() { CUIStatic::Update(); if(CursorOverWindow() && m_hint_text.size() && !g_btnHint->Owner() && Device.dwTimeGlobal>m_dwFocusReceiveTime+500) { g_btnHint->SetHintText (this,*m_hint_text); Fvector2 c_pos = GetUICursor()->GetCursorPosition(); Frect vis_rect; vis_rect.set (0,0,UI_BASE_WIDTH, UI_BASE_HEIGHT); //select appropriate position Frect r; r.set (0.0f, 0.0f, g_btnHint->GetWidth(), g_btnHint->GetHeight()); r.add (c_pos.x, c_pos.y); r.sub (0.0f,r.height()); if (false==is_in2(vis_rect,r)) r.sub (r.width(),0.0f); if (false==is_in2(vis_rect,r)) r.add (0.0f,r.height()); if (false==is_in2(vis_rect,r)) r.add (r.width(), 45.0f); g_btnHint->SetWndPos(r.lt); } }
void ui_core::PushScissor(const Frect& r_tgt, bool overlapped) { //. return; Frect r_top = ScreenRect(); Frect result = r_tgt; if (!m_Scissors.empty()&&!overlapped){ r_top = m_Scissors.top(); } if (!result.intersection(r_top,r_tgt)) result.set (0.0f,0.0f,0.0f,0.0f); if (!(result.x1>=0&&result.y1>=0&&result.x2<=UI_BASE_WIDTH&&result.y2<=UI_BASE_HEIGHT) ) { Msg("! r_tgt [%.3f][%.3f][%.3f][%.3f]", r_tgt.x1, r_tgt.y1, r_tgt.x2, r_tgt.y2); Msg("! result [%.3f][%.3f][%.3f][%.3f]", result.x1, result.y1, result.x2, result.y2); VERIFY(result.x1>=0&&result.y1>=0&&result.x2<=UI_BASE_WIDTH&&result.y2<=UI_BASE_HEIGHT); } m_Scissors.push (result); result.lt.x = ClientToScreenScaledX(result.lt.x); result.lt.y = ClientToScreenScaledY(result.lt.y); result.rb.x = ClientToScreenScaledX(result.rb.x); result.rb.y = ClientToScreenScaledY(result.rb.y); Irect r; r.x1 = iFloor(result.x1); r.x2 = iFloor(result.x2+0.5f); r.y1 = iFloor(result.y1); r.y2 = iFloor(result.y2+0.5f); RCache.set_Scissor (&r); }
bool CUITradeWnd::OnItemFocusedUpdate(CUICellItem* itm) { if ( itm ) { #ifdef INV_FLOAT_ITEM_INFO Fvector2 c_pos = GetUICursor()->GetCursorPosition(); Frect vis_rect; vis_rect.set (0,0,UI_BASE_WIDTH, UI_BASE_HEIGHT); Frect r; r.set (0.0f, 0.0f, m_uidata->UIItemInfo.GetWidth(), m_uidata->UIItemInfo.GetHeight()); r.add (c_pos.x, c_pos.y); r.sub (0.0f,r.height()); if (false==((vis_rect.x1<r.x1)&&(vis_rect.x2>r.x2)&&(vis_rect.y1<r.y1)&&(vis_rect.y2>r.y2))) r.sub (r.width(),0.0f); if (false==((vis_rect.x1<r.x1)&&(vis_rect.x2>r.x2)&&(vis_rect.y1<r.y1)&&(vis_rect.y2>r.y2))) r.add (0.0f,r.height()); if (false==((vis_rect.x1<r.x1)&&(vis_rect.x2>r.x2)&&(vis_rect.y1<r.y1)&&(vis_rect.y2>r.y2))) r.add (r.width(), 45.0f); m_uidata->UIItemInfo.SetWndPos(r.lt); SetCurrentItem (itm); #endif } return true; }
void CUICursor::InitInternal() { m_static = xr_new<CUIStatic>(); m_static->InitTextureEx ("ui\\ui_ani_cursor", "hud\\cursor"); Frect rect; rect.set (0.0f,0.0f,40.0f,40.0f); m_static->SetOriginalRect (rect); Fvector2 sz; sz.set (rect.rb); if(UI()->is_16_9_mode()) sz.x /= 1.2f; m_static->SetWndSize (sz); m_static->SetStretchTexture (true); }
float CUIGlobalMap::CalcOpenRect(const Fvector2& center_point, Frect& map_desired_rect, float tgt_zoom) { Fvector2 new_center_pt; // calculate desired rect in new zoom map_desired_rect.set (0.0f,0.0f, BoundRect().width()*tgt_zoom,BoundRect().height()*tgt_zoom); // calculate center point in new zoom (center_point is in identity global map space) new_center_pt.set (center_point.x*tgt_zoom,center_point.y*tgt_zoom); // get vis width & height Frect vis_abs_rect = m_mapWnd->ActiveMapRect(); float vis_w = vis_abs_rect.width(); float vis_h = vis_abs_rect.height(); // calculate center delta from vis rect Fvector2 delta_pos; delta_pos.set (new_center_pt.x-vis_w*0.5f,new_center_pt.y-vis_h*0.5f); // correct desired rect map_desired_rect.sub (delta_pos.x,delta_pos.y); // clamp pos by vis rect const Frect& r = map_desired_rect; Fvector2 np = r.lt; if (r.x2<vis_w) np.x += vis_w-r.x2; if (r.y2<vis_h) np.y += vis_h-r.y2; if (r.x1>0.0f) np.x = 0.0f; if (r.y1>0.0f) np.y = 0.0f; np.sub (r.lt); map_desired_rect.add (np.x,np.y); // calculate max way dist float dist = 0.f; Frect s_rect,t_rect; s_rect.div (GetWndRect(),GetCurrentZoom(),GetCurrentZoom()); t_rect.div (map_desired_rect,tgt_zoom,tgt_zoom); Fvector2 cpS,cpT; s_rect.getcenter (cpS); t_rect.getcenter (cpT); dist = cpS.distance_to(cpT); return dist; }