Stepikkkk 1 Опубликовано 18 Мая 2019 Ребята, хочу сделать меньше курсор в меню, у меня монитор 2K курсор увеличенный и мутный. Помогите уменьшить. Stretchtexture только фиксирует x и у, recttexture только обрезает текстуру. Скрытый текст #include "stdafx.h" #include "uicursor.h" #include "ui/UIStatic.h" #include "ui/UIBtnHint.h" #define C_DEFAULT D3DCOLOR_XRGB(0xff,0xff,0xff) CUICursor::CUICursor():m_static(NULL),m_b_use_win_cursor(false) { bVisible = false; vPrevPos.set (0.0f, 0.0f); vPos.set (0.f,0.f); InitInternal (); Device.seqRender.Add (this,-3/*2*/); Device.seqResolutionChanged.Add(this); } //-------------------------------------------------------------------- CUICursor::~CUICursor () { xr_delete (m_static); Device.seqRender.Remove (this); Device.seqResolutionChanged.Remove(this); } void CUICursor::OnScreenResolutionChanged() { xr_delete (m_static); InitInternal (); } void CUICursor::InitInternal() { m_static = xr_new<CUIStatic>(); m_static->InitTexture ("ui\\ui_cursor", "hud\\cursor"); Frect rect; rect.set (0.0f,0.0f,40.0f,40.0f); m_static->SetTextureRect (rect); Fvector2 sz; sz.set (rect.rb); sz.x *= UI().get_current_kx(); m_static->SetWndSize (sz); m_static->SetStretchTexture (true); u32 screen_size_x = GetSystemMetrics( SM_CXSCREEN ); u32 screen_size_y = GetSystemMetrics( SM_CYSCREEN ); m_b_use_win_cursor = (screen_size_y >=Device.dwHeight && screen_size_x>=Device.dwWidth); } //-------------------------------------------------------------------- u32 last_render_frame = 0; void CUICursor::OnRender () { g_btnHint->OnRender(); g_statHint->OnRender(); if( !IsVisible() ) return; #ifdef DEBUG VERIFY(last_render_frame != Device.dwFrame); last_render_frame = Device.dwFrame; if(bDebug) { CGameFont* F = UI().Font().pFontDI; F->SetAligment (CGameFont::alCenter); F->SetHeightI (0.02f); F->OutSetI (0.f,-0.9f); F->SetColor (0xffffffff); Fvector2 pt = GetCursorPosition(); F->OutNext ("%f-%f",pt.x, pt.y); } #endif m_static->SetWndPos (vPos); m_static->Update (); m_static->Draw (); } Fvector2 CUICursor::GetCursorPosition() { return vPos; } Fvector2 CUICursor::GetCursorPositionDelta() { Fvector2 res_delta; res_delta.x = vPos.x - vPrevPos.x; res_delta.y = vPos.y - vPrevPos.y; return res_delta; } void CUICursor::UpdateCursorPosition(int _dx, int _dy) { Fvector2 p; vPrevPos = vPos; if(m_b_use_win_cursor) { POINT pti; BOOL r = GetCursorPos(&pti); if(!r) return; p.x = (float)pti.x; p.y = (float)pti.y; vPos.x = p.x * (UI_BASE_WIDTH/(float)Device.dwWidth); vPos.y = p.y * (UI_BASE_HEIGHT/(float)Device.dwHeight); }else { float sens = 1.0f; vPos.x += _dx*sens; vPos.y += _dy*sens; } clamp (vPos.x, 0.f, UI_BASE_WIDTH); clamp (vPos.y, 0.f, UI_BASE_HEIGHT); } void CUICursor::SetUICursorPosition(Fvector2 pos) { vPos = pos; POINT p; p.x = iFloor(vPos.x / (UI_BASE_WIDTH/(float)Device.dwWidth)); p.y = iFloor(vPos.y / (UI_BASE_HEIGHT/(float)Device.dwHeight)); SetCursorPos(p.x, p.y); } Поделиться этим сообщением Ссылка на сообщение
Stepikkkk 1 Опубликовано 18 Мая 2019 1 час назад, AndreySol сказал: Размер 40х40. Уменьши как тебе надо. вот почему-то не работает, квадрат уменьшается, а масштаб текстуры нет - она тупо обрезается, хотя stretch true Я делаю 2k текстуры для меню lost alpha (ТЧ) и проблема такая: stretch не работает на элементах ui_cursor, ui_checker, ui_slider. Поделиться этим сообщением Ссылка на сообщение
Stepikkkk 1 Опубликовано 19 Мая 2019 (изменено) 4 часа назад, naxac сказал: @Stepikkkk, SetTextureRect задет координаты, по которым берется текстура из файла, размер окна задается далее, вот тут: m_static->SetWndSize(sz); Можно задать размер здесь, sz - экземпляр класса Fvector2. Ура, получилось! Спасибо! Сделал так: //sz.set (rect.rb); //sz.x *= UI().get_current_kx(); //m_static->SetWndRect (rect); m_static->SetWndSize (sz.set(20,20)); Изменено 19 Мая 2019 пользователем Stepikkkk Поделиться этим сообщением Ссылка на сообщение
Stepikkkk 1 Опубликовано 19 Мая 2019 (изменено) Если кому надо, написал код для курсора (анимированные тоже работают), можно менять размеры через файл gamedata/config/ui/ui_cursor.xml, чтобы задать размеры для широкоформатного разрешения делаем длину меньше, чем высоту. Скрытый текст 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->SetTextureRect (rect); CUIXml xml_doc; xml_doc.Load (CONFIG_PATH, UI_PATH, "ui_cursor.xml"); float width = xml_doc.ReadAttribFlt("ui_cursor", 0, "width", 40.0f); float height = xml_doc.ReadAttribFlt("ui_cursor", 0, "height", 40.0f); m_static->SetWndSize (Fvector2().set(width, height)); m_static->SetStretchTexture (true); u32 screen_size_x = GetSystemMetrics( SM_CXSCREEN ); u32 screen_size_y = GetSystemMetrics( SM_CYSCREEN ); m_b_use_win_cursor = (screen_size_y >=Device.dwHeight && screen_size_x>=Device.dwWidth); } Скрытый текст <?xml version="1.0" encoding="utf-8"?> <a> <ui_cursor width="15" height="20"> </ui_cursor> </a> Изменено 19 Мая 2019 пользователем Stepikkkk 1 Поделиться этим сообщением Ссылка на сообщение