From 9aedcade7ffe6ac436cc31c6825bcaef08df92e3 Mon Sep 17 00:00:00 2001 From: vladislavbelov Date: Fri, 14 Jan 2022 06:50:44 +0000 Subject: [PATCH] Draws slider button only inside its element. Tested By: Stan Differential Revision: https://code.wildfiregames.com/D4435 This was SVN commit r26213. --- source/gui/ObjectTypes/CSlider.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/gui/ObjectTypes/CSlider.cpp b/source/gui/ObjectTypes/CSlider.cpp index 7d956a0089..91666a1df3 100644 --- a/source/gui/ObjectTypes/CSlider.cpp +++ b/source/gui/ObjectTypes/CSlider.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -120,7 +120,11 @@ void CSlider::UpdateValue() CRect CSlider::GetButtonRect() const { - float ratio = m_MaxValue > m_MinValue ? (m_Value - m_MinValue) / (m_MaxValue - m_MinValue) : 0.0f; + // Even if the value is incorrect it doesn't make sense to draw it outside + // of the element bounds. Because that value might be set intentionally in the + // config for debug purposes. + const float value = Clamp(m_Value, m_MinValue, m_MaxValue); + float ratio = m_MaxValue > m_MinValue ? (value - m_MinValue) / (m_MaxValue - m_MinValue) : 0.0f; float x = m_CachedActualSize.left + ratio * (m_CachedActualSize.GetWidth() - m_ButtonSide); float y = m_CachedActualSize.top + (m_CachedActualSize.GetHeight() - m_ButtonSide) / 2.0; return CRect(x, y, x + m_ButtonSide, y + m_ButtonSide);