From 98c7c61cbd681d0aa895a0781095b0400cf57513 Mon Sep 17 00:00:00 2001 From: Hrusteckiy Date: Wed, 5 Jun 2024 16:07:06 +0300 Subject: [PATCH 1/5] Restored mirroring of texture feature for `CUIStatic` Using: in node of element based on `CUIStatic` class type `mirror="b"`, `b` is one of mirroring modes. `b` - both, mirror by vertical and horizontal; `v` - vertical, mirror by vertical; `h` - horizontal, mirror by horizontal. --- src/xrUICore/Static/UIStaticItem.cpp | 13 +++++++++++++ src/xrUICore/Static/UIStaticItem.h | 12 ++++++++++++ src/xrUICore/XML/UIXmlInitBase.cpp | 8 ++++++++ 3 files changed, 33 insertions(+) diff --git a/src/xrUICore/Static/UIStaticItem.cpp b/src/xrUICore/Static/UIStaticItem.cpp index 1cbe4a64c32..e6a5d600c3c 100644 --- a/src/xrUICore/Static/UIStaticItem.cpp +++ b/src/xrUICore/Static/UIStaticItem.cpp @@ -6,6 +6,7 @@ CUIStaticItem::CUIStaticItem() uFlags.zero(); vSize.set(0, 0); TextureRect.set(0, 0, 0, 0); + eMirrorMode = tmNone; vHeadingPivot.set(0, 0); vHeadingOffset.set(0, 0); dwColor = 0xffffffff; @@ -56,6 +57,12 @@ void CUIStaticItem::RenderInternal(const Fvector2& in_pos) LTt.set(TextureRect.x1 / ts.x, TextureRect.y1 / ts.y); RBt.set(TextureRect.x2 / ts.x, TextureRect.y2 / ts.y); + // Check mirror mode + if (tmMirrorHorisontal == eMirrorMode || tmMirrorBoth == eMirrorMode) + std::swap(LTt.x, RBt.x); + if (tmMirrorVertical == eMirrorMode || tmMirrorBoth == eMirrorMode) + std::swap(LTt.y, RBt.y); + float offset = -0.5f; if (UI().m_currentPointType == IUIRender::pttLIT) offset = 0.0f; @@ -131,6 +138,12 @@ void CUIStaticItem::RenderInternal(float angle) LTt.set(TextureRect.x1 / ts.x + hp.x, TextureRect.y1 / ts.y + hp.y); RBt.set(TextureRect.x2 / ts.x + hp.x, TextureRect.y2 / ts.y + hp.y); + // Check mirror mode + if (tmMirrorHorisontal == eMirrorMode || tmMirrorBoth == eMirrorMode) + std::swap(LTt.x, RBt.x); + if (tmMirrorVertical == eMirrorMode || tmMirrorBoth == eMirrorMode) + std::swap(LTt.y, RBt.y); + float kx = UI().get_current_kx(); // clip poly diff --git a/src/xrUICore/Static/UIStaticItem.h b/src/xrUICore/Static/UIStaticItem.h index f50801a52ed..3144db10d32 100644 --- a/src/xrUICore/Static/UIStaticItem.h +++ b/src/xrUICore/Static/UIStaticItem.h @@ -6,6 +6,14 @@ #include "xrCore/xrstring.h" #endif +enum EUIMirroring +{ + tmNone, + tmMirrorHorisontal, + tmMirrorVertical, + tmMirrorBoth +}; + class XRUICORE_API CUIStaticItem { protected: @@ -22,6 +30,7 @@ class XRUICORE_API CUIStaticItem Fvector2 vHeadingPivot; Fvector2 vHeadingOffset; Flags8 uFlags; + EUIMirroring eMirrorMode; ui_shader hShader; Fvector2 vPos; @@ -65,6 +74,9 @@ class XRUICORE_API CUIStaticItem void ResetHeadingPivot(); IC bool GetFixedLTWhileHeading() const { return !!uFlags.test(flFixedLTWhileHeading); } Fvector2 GetHeadingPivot() { return vHeadingPivot; } + IC void SetMirrorMode(EUIMirroring m) { eMirrorMode = m; } + IC EUIMirroring GetMirrorMode() { return eMirrorMode; } + private: void RenderInternal(const Fvector2& pos); void RenderInternal(float angle); diff --git a/src/xrUICore/XML/UIXmlInitBase.cpp b/src/xrUICore/XML/UIXmlInitBase.cpp index 371d56845fe..997c29dfaea 100644 --- a/src/xrUICore/XML/UIXmlInitBase.cpp +++ b/src/xrUICore/XML/UIXmlInitBase.cpp @@ -143,6 +143,14 @@ bool CUIXmlInitBase::InitStatic(CUIXml& xml_doc, pcstr path, int index, CUIStati InitTexture(xml_doc, path, index, pWnd); InitTextureOffset(xml_doc, path, index, pWnd); + shared_str mirroring = xml_doc.ReadAttrib(path, index, "mirror", ""); + if (0 == xr_strcmp(mirroring, "h")) + pWnd->GetStaticItem()->SetMirrorMode(tmMirrorHorisontal); + else if (0 == xr_strcmp(mirroring, "v")) + pWnd->GetStaticItem()->SetMirrorMode(tmMirrorVertical); + else if (0 == xr_strcmp(mirroring, "b")) + pWnd->GetStaticItem()->SetMirrorMode(tmMirrorBoth); + const int flag = xml_doc.ReadAttribInt(path, index, "heading", 0); pWnd->EnableHeading((flag) ? true : false); From caec5577b758e3a21a991614dd9c1593c0bafd30 Mon Sep 17 00:00:00 2001 From: Sultan Uramaev Date: Fri, 7 Jun 2024 10:34:06 +0500 Subject: [PATCH 2/5] Apply suggestions from code review --- src/xrUICore/Static/UIStaticItem.cpp | 1 - src/xrUICore/Static/UIStaticItem.h | 12 ++++++------ src/xrUICore/XML/UIXmlInitBase.cpp | 8 ++++---- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/xrUICore/Static/UIStaticItem.cpp b/src/xrUICore/Static/UIStaticItem.cpp index e6a5d600c3c..399d1ad2a9d 100644 --- a/src/xrUICore/Static/UIStaticItem.cpp +++ b/src/xrUICore/Static/UIStaticItem.cpp @@ -6,7 +6,6 @@ CUIStaticItem::CUIStaticItem() uFlags.zero(); vSize.set(0, 0); TextureRect.set(0, 0, 0, 0); - eMirrorMode = tmNone; vHeadingPivot.set(0, 0); vHeadingOffset.set(0, 0); dwColor = 0xffffffff; diff --git a/src/xrUICore/Static/UIStaticItem.h b/src/xrUICore/Static/UIStaticItem.h index 3144db10d32..43f7a7ef914 100644 --- a/src/xrUICore/Static/UIStaticItem.h +++ b/src/xrUICore/Static/UIStaticItem.h @@ -6,12 +6,12 @@ #include "xrCore/xrstring.h" #endif -enum EUIMirroring +enum cls EUIMirroring { - tmNone, - tmMirrorHorisontal, - tmMirrorVertical, - tmMirrorBoth + None, + Horisontal, + Vertical, + Both }; class XRUICORE_API CUIStaticItem @@ -30,7 +30,7 @@ class XRUICORE_API CUIStaticItem Fvector2 vHeadingPivot; Fvector2 vHeadingOffset; Flags8 uFlags; - EUIMirroring eMirrorMode; + EUIMirroring eMirrorMode{}; ui_shader hShader; Fvector2 vPos; diff --git a/src/xrUICore/XML/UIXmlInitBase.cpp b/src/xrUICore/XML/UIXmlInitBase.cpp index 997c29dfaea..553bd14b0b7 100644 --- a/src/xrUICore/XML/UIXmlInitBase.cpp +++ b/src/xrUICore/XML/UIXmlInitBase.cpp @@ -143,13 +143,13 @@ bool CUIXmlInitBase::InitStatic(CUIXml& xml_doc, pcstr path, int index, CUIStati InitTexture(xml_doc, path, index, pWnd); InitTextureOffset(xml_doc, path, index, pWnd); - shared_str mirroring = xml_doc.ReadAttrib(path, index, "mirror", ""); + cpcstr mirroring = xml_doc.ReadAttrib(path, index, "mirror", ""); if (0 == xr_strcmp(mirroring, "h")) - pWnd->GetStaticItem()->SetMirrorMode(tmMirrorHorisontal); + pWnd->GetStaticItem()->SetMirrorMode(EUIMirroring::Horisontal); else if (0 == xr_strcmp(mirroring, "v")) - pWnd->GetStaticItem()->SetMirrorMode(tmMirrorVertical); + pWnd->GetStaticItem()->SetMirrorMode(EUIMirroring::Vertical); else if (0 == xr_strcmp(mirroring, "b")) - pWnd->GetStaticItem()->SetMirrorMode(tmMirrorBoth); + pWnd->GetStaticItem()->SetMirrorMode(EUIMirroring::Both); const int flag = xml_doc.ReadAttribInt(path, index, "heading", 0); pWnd->EnableHeading((flag) ? true : false); From 759547987f20965512bf6967809343370d23b338 Mon Sep 17 00:00:00 2001 From: Sultan Uramaev Date: Fri, 7 Jun 2024 10:34:53 +0500 Subject: [PATCH 3/5] Update src/xrUICore/Static/UIStaticItem.cpp --- src/xrUICore/Static/UIStaticItem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/xrUICore/Static/UIStaticItem.cpp b/src/xrUICore/Static/UIStaticItem.cpp index 399d1ad2a9d..db96d984c13 100644 --- a/src/xrUICore/Static/UIStaticItem.cpp +++ b/src/xrUICore/Static/UIStaticItem.cpp @@ -57,9 +57,9 @@ void CUIStaticItem::RenderInternal(const Fvector2& in_pos) RBt.set(TextureRect.x2 / ts.x, TextureRect.y2 / ts.y); // Check mirror mode - if (tmMirrorHorisontal == eMirrorMode || tmMirrorBoth == eMirrorMode) + if (EUIMirroring::Horisontal == eMirrorMode || EUIMirroring::Both == eMirrorMode) std::swap(LTt.x, RBt.x); - if (tmMirrorVertical == eMirrorMode || tmMirrorBoth == eMirrorMode) + if (EUIMirroring::Vertical == eMirrorMode || EUIMirroring::Both == eMirrorMode) std::swap(LTt.y, RBt.y); float offset = -0.5f; From 6d37da1eecabd4752b911ce4df03af0eaa2bb7ac Mon Sep 17 00:00:00 2001 From: Sultan Uramaev Date: Fri, 7 Jun 2024 10:37:47 +0500 Subject: [PATCH 4/5] Update src/xrUICore/Static/UIStaticItem.cpp --- src/xrUICore/Static/UIStaticItem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/xrUICore/Static/UIStaticItem.cpp b/src/xrUICore/Static/UIStaticItem.cpp index db96d984c13..4554547f489 100644 --- a/src/xrUICore/Static/UIStaticItem.cpp +++ b/src/xrUICore/Static/UIStaticItem.cpp @@ -138,9 +138,9 @@ void CUIStaticItem::RenderInternal(float angle) RBt.set(TextureRect.x2 / ts.x + hp.x, TextureRect.y2 / ts.y + hp.y); // Check mirror mode - if (tmMirrorHorisontal == eMirrorMode || tmMirrorBoth == eMirrorMode) + if (EUIMirroring::Horisontal == eMirrorMode || EUIMirroring::Both == eMirrorMode) std::swap(LTt.x, RBt.x); - if (tmMirrorVertical == eMirrorMode || tmMirrorBoth == eMirrorMode) + if (EUIMirroring::Vertical == eMirrorMode || EUIMirroring::Both == eMirrorMode) std::swap(LTt.y, RBt.y); float kx = UI().get_current_kx(); From f51e3205eda1776ee15a1683a59aa27d67d6418b Mon Sep 17 00:00:00 2001 From: Sultan Uramaev Date: Fri, 7 Jun 2024 10:40:42 +0500 Subject: [PATCH 5/5] Update src/xrUICore/Static/UIStaticItem.h --- src/xrUICore/Static/UIStaticItem.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/xrUICore/Static/UIStaticItem.h b/src/xrUICore/Static/UIStaticItem.h index 43f7a7ef914..c9bb8a1cd48 100644 --- a/src/xrUICore/Static/UIStaticItem.h +++ b/src/xrUICore/Static/UIStaticItem.h @@ -6,7 +6,7 @@ #include "xrCore/xrstring.h" #endif -enum cls EUIMirroring +enum class EUIMirroring { None, Horisontal,