include/tools/helpers.hxx | 47 -------
include/vcl/bitmap.hxx | 7 -
tools/CppunitTest_tools_test.mk | 1
tools/qa/cppunit/test_minmax.cxx | 98 ----------------
tools/source/generic/poly.cxx | 8 -
vcl/source/bitmap/BitmapColorizeFilter.cxx | 6
vcl/source/bitmap/BitmapConvolutionMatrixFilter.cxx | 9 -
vcl/source/bitmap/BitmapGaussianSeparableBlurFilter.cxx | 7 -
vcl/source/bitmap/BitmapInterpolateScaleFilter.cxx | 6
vcl/source/bitmap/BitmapScaleConvolutionFilter.cxx | 14 +-
vcl/source/bitmap/BitmapScaleSuperFilter.cxx | 2
vcl/source/bitmap/BitmapSeparableUnsharpenFilter.cxx | 15 +-
vcl/source/bitmap/bitmap.cxx | 20 +--
vcl/source/bitmap/bitmappaint.cxx | 36 ++---
vcl/source/filter/ipsd/ipsd.cxx | 6
vcl/source/gdi/gdimtf.cxx | 20 +--
vcl/source/outdev/bitmap.cxx | 2
vcl/source/outdev/transparent.cxx | 2
18 files changed, 86 insertions(+), 220 deletions(-)
New commits:
commit d205274a014acabbed88b18d5058682a0ca46f9c
Author: Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Wed Oct 4 15:13:53 2023 +0300
Commit: Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Thu Oct 5 13:58:12 2023 +0200
Drop MinMax in favor of std::clamp
Change-Id: I021f524b232ddbe091981444d859d35dd9cd05ac
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157582
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
diff --git a/include/tools/helpers.hxx b/include/tools/helpers.hxx
index 5f61ba80836c..05ee59960f50 100644
--- a/include/tools/helpers.hxx
+++ b/include/tools/helpers.hxx
@@ -15,53 +15,6 @@
#include <limits>
#include <type_traits>
-template<typename T>
-inline
-typename std::enable_if<
- std::is_signed<T>::value || std::is_floating_point<T>::value,
long >::type
-MinMax(T nVal, tools::Long nMin, tools::Long nMax)
-{
- assert(nMin <= nMax);
- if (nVal >= nMin)
- {
- if (nVal <= nMax)
- return static_cast<tools::Long>(nVal);
- else
- return nMax;
- }
- else
- {
- return nMin;
- }
-}
-
-template<typename T>
-inline
-typename std::enable_if<
- std::is_unsigned<T>::value, long >::type
-MinMax(T nVal, tools::Long nMin, tools::Long nMax)
-{
- assert(nMin <= nMax);
- if (nMax < 0)
- {
- return nMax;
- }
- else
- {
- if (nMin < 0 || nVal >= static_cast<unsigned long>(nMin))
- {
- if (nVal <= static_cast<unsigned long>(nMax))
- return static_cast<tools::Long>(nVal);
- else
- return nMax;
- }
- else
- {
- return nMin;
- }
- }
-}
-
inline sal_uInt32 AlignedWidth4Bytes(sal_uInt32 nWidthBits)
{
if (nWidthBits > SAL_MAX_UINT32 - 31)
diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx
index 1c5f7bcc7ec6..b0a26700d6f5 100644
--- a/include/vcl/bitmap.hxx
+++ b/include/vcl/bitmap.hxx
@@ -21,6 +21,7 @@
#define INCLUDED_VCL_BITMAP_HXX
#include <tools/degree.hxx>
+#include <tools/helpers.hxx>
#include <vcl/checksum.hxx>
#include <vcl/dllapi.h>
#include <vcl/mapmod.hxx>
@@ -30,9 +31,13 @@
#include <o3tl/typed_flags_set.hxx>
+#include <algorithm>
#include <memory>
-#define GAMMA( _def_cVal, _def_InvGamma )
(static_cast<sal_uInt8>(MinMax(FRound(pow(
_def_cVal/255.0,_def_InvGamma)*255.0),0,255)))
+inline sal_uInt8 GAMMA(double _def_cVal, double _def_InvGamma)
+{
+ return FRound(std::clamp(pow(_def_cVal / 255.0, _def_InvGamma) * 255.0,
0.0, 255.0));
+}
class Color;
diff --git a/tools/CppunitTest_tools_test.mk b/tools/CppunitTest_tools_test.mk
index d27f8c3efa58..1063b778ab0a 100644
--- a/tools/CppunitTest_tools_test.mk
+++ b/tools/CppunitTest_tools_test.mk
@@ -28,7 +28,6 @@ $(eval $(call
gb_CppunitTest_add_exception_objects,tools_test, \
tools/qa/cppunit/test_urlobj \
tools/qa/cppunit/test_color \
tools/qa/cppunit/test_rectangle \
- tools/qa/cppunit/test_minmax \
tools/qa/cppunit/test_100mm2twips \
tools/qa/cppunit/test_fround \
tools/qa/cppunit/test_xmlwalker \
diff --git a/tools/qa/cppunit/test_minmax.cxx b/tools/qa/cppunit/test_minmax.cxx
deleted file mode 100644
index 509499910216..000000000000
--- a/tools/qa/cppunit/test_minmax.cxx
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <sal/types.h>
-#include <cppunit/TestFixture.h>
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <tools/helpers.hxx>
-
-namespace tools
-{
-class MinMaxTest : public CppUnit::TestFixture
-{
-public:
- void testSignedMinMax()
- {
- sal_Int32 nSignedVal = -10;
- tools::Long nMin = 1;
- tools::Long nMax = 10;
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(nMin),
- static_cast<sal_Int32>(MinMax(nSignedVal, nMin,
nMax)));
-
- nSignedVal = -10;
- nMin = -15;
- nMax = 10;
- CPPUNIT_ASSERT_EQUAL(nSignedVal,
static_cast<sal_Int32>(MinMax(nSignedVal, nMin, nMax)));
-
- nSignedVal = -15;
- nMin = -15;
- nMax = 10;
- CPPUNIT_ASSERT_EQUAL(nSignedVal,
static_cast<sal_Int32>(MinMax(nSignedVal, nMin, nMax)));
- }
-
- void testUnsignedMinMax()
- {
- sal_uInt32 nUnsignedVal = 5;
- tools::Long nMin = 1;
- tools::Long nMax = 10;
- CPPUNIT_ASSERT_EQUAL(nUnsignedVal,
- static_cast<sal_uInt32>(MinMax(nUnsignedVal,
nMin, nMax)));
-
- nUnsignedVal = 5;
- nMin = 1;
- nMax = 5;
- CPPUNIT_ASSERT_EQUAL(nUnsignedVal,
- static_cast<sal_uInt32>(MinMax(nUnsignedVal,
nMin, nMax)));
-
- nUnsignedVal = 5;
- nMin = 5;
- nMax = 5;
- CPPUNIT_ASSERT_EQUAL(nUnsignedVal,
- static_cast<sal_uInt32>(MinMax(nUnsignedVal,
nMin, nMax)));
-
- nUnsignedVal = 10;
- nMin = -20;
- nMax = 15;
- CPPUNIT_ASSERT_EQUAL(nUnsignedVal,
- static_cast<sal_uInt32>(MinMax(nUnsignedVal,
nMin, nMax)));
-
- nUnsignedVal = 20;
- nMin = 10;
- nMax = 15;
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(nMax),
- static_cast<sal_uInt32>(MinMax(nUnsignedVal,
nMin, nMax)));
-
- nUnsignedVal = 5;
- nMin = 10;
- nMax = 15; // irrelevant, but cannot be less than nMin
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(nMin),
- static_cast<sal_uInt32>(MinMax(nUnsignedVal,
nMin, nMax)));
- }
-
- CPPUNIT_TEST_SUITE(MinMaxTest);
- CPPUNIT_TEST(testSignedMinMax);
- CPPUNIT_TEST(testUnsignedMinMax);
- CPPUNIT_TEST_SUITE_END();
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(MinMaxTest);
-} // namespace tools
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/tools/source/generic/poly.cxx b/tools/source/generic/poly.cxx
index efd04b9b3e3d..89405eea410a 100644
--- a/tools/source/generic/poly.cxx
+++ b/tools/source/generic/poly.cxx
@@ -178,10 +178,10 @@ ImplPolygon::ImplPolygon( const Point& rCenter,
tools::Long nRadX, tools::Long n
const bool bOverflow = o3tl::checked_multiply(nRadX, nRadY, nRadXY);
if (!bOverflow)
{
- nPoints = static_cast<sal_uInt16>(MinMax(
+ nPoints = std::clamp(
( M_PI * ( 1.5 * ( nRadX + nRadY ) -
sqrt( static_cast<double>(std::abs(nRadXY)) ) ) ),
- 32, 256 ));
+ 32.0, 256.0 );
}
else
{
@@ -244,10 +244,10 @@ ImplPolygon::ImplPolygon(const tools::Rectangle& rBound,
const Point& rStart, co
const bool bOverflow = o3tl::checked_multiply(nRadX, nRadY, nRadXY);
if (!bOverflow)
{
- nPoints = static_cast<sal_uInt16>(MinMax(
+ nPoints = std::clamp(
( M_PI * ( 1.5 * ( nRadX + nRadY ) -
sqrt( static_cast<double>(std::abs(nRadXY)) ) ) ),
- 32, 256 ));
+ 32.0, 256.0 );
}
else
{
diff --git a/vcl/source/bitmap/BitmapColorizeFilter.cxx
b/vcl/source/bitmap/BitmapColorizeFilter.cxx
index 5f58f6147986..b006ddcdc1c0 100644
--- a/vcl/source/bitmap/BitmapColorizeFilter.cxx
+++ b/vcl/source/bitmap/BitmapColorizeFilter.cxx
@@ -37,9 +37,9 @@ BitmapEx BitmapColorizeFilter::execute(BitmapEx const&
rBitmapEx) const
for (nX = 0; nX < 256; ++nX)
{
- aMapR[nX] = MinMax((nX + cR) / 2, 0, 255);
- aMapG[nX] = MinMax((nX + cG) / 2, 0, 255);
- aMapB[nX] = MinMax((nX + cB) / 2, 0, 255);
+ aMapR[nX] = std::clamp((nX + cR) / 2, sal_Int32(0), sal_Int32(255));
+ aMapG[nX] = std::clamp((nX + cG) / 2, sal_Int32(0), sal_Int32(255));
+ aMapB[nX] = std::clamp((nX + cB) / 2, sal_Int32(0), sal_Int32(255));
}
if (pWriteAccess->HasPalette())
diff --git a/vcl/source/bitmap/BitmapConvolutionMatrixFilter.cxx
b/vcl/source/bitmap/BitmapConvolutionMatrixFilter.cxx
index 39b8cf4cc18d..dc6b7e1fee70 100644
--- a/vcl/source/bitmap/BitmapConvolutionMatrixFilter.cxx
+++ b/vcl/source/bitmap/BitmapConvolutionMatrixFilter.cxx
@@ -141,9 +141,12 @@ BitmapEx BitmapConvolutionMatrixFilter::execute(BitmapEx
const& rBitmapEx) const
// calculate destination color
pWriteAcc->SetPixelOnData(
pScanline, nX,
- BitmapColor(static_cast<sal_uInt8>(MinMax(nSumR / nDivisor, 0,
255)),
- static_cast<sal_uInt8>(MinMax(nSumG / nDivisor, 0,
255)),
- static_cast<sal_uInt8>(MinMax(nSumB / nDivisor, 0,
255))));
+ BitmapColor(static_cast<sal_uInt8>(
+ std::clamp(nSumR / nDivisor, sal_Int32(0),
sal_Int32(255))),
+ static_cast<sal_uInt8>(
+ std::clamp(nSumG / nDivisor, sal_Int32(0),
sal_Int32(255))),
+ static_cast<sal_uInt8>(
+ std::clamp(nSumB / nDivisor, sal_Int32(0),
sal_Int32(255)))));
}
if (++nY < nHeight)
diff --git a/vcl/source/bitmap/BitmapGaussianSeparableBlurFilter.cxx
b/vcl/source/bitmap/BitmapGaussianSeparableBlurFilter.cxx
index 85c790422140..0b3662e67ce8 100644
--- a/vcl/source/bitmap/BitmapGaussianSeparableBlurFilter.cxx
+++ b/vcl/source/bitmap/BitmapGaussianSeparableBlurFilter.cxx
@@ -124,9 +124,10 @@ bool
BitmapGaussianSeparableBlurFilter::convolutionPass(const Bitmap& rBitmap, B
aValueBlue += aWeight * aColor.GetBlue();
}
- BitmapColor aResultColor(static_cast<sal_uInt8>(MinMax(aValueRed /
aSum, 0, 255)),
- static_cast<sal_uInt8>(MinMax(aValueGreen
/ aSum, 0, 255)),
- static_cast<sal_uInt8>(MinMax(aValueBlue
/ aSum, 0, 255)));
+ BitmapColor aResultColor(
+ static_cast<sal_uInt8>(std::clamp(aValueRed / aSum, 0.0,
255.0)),
+ static_cast<sal_uInt8>(std::clamp(aValueGreen / aSum, 0.0,
255.0)),
+ static_cast<sal_uInt8>(std::clamp(aValueBlue / aSum, 0.0,
255.0)));
int nDestX = nSourceY;
int nDestY = nSourceX;
diff --git a/vcl/source/bitmap/BitmapInterpolateScaleFilter.cxx
b/vcl/source/bitmap/BitmapInterpolateScaleFilter.cxx
index ce32f2512163..701c91298a80 100644
--- a/vcl/source/bitmap/BitmapInterpolateScaleFilter.cxx
+++ b/vcl/source/bitmap/BitmapInterpolateScaleFilter.cxx
@@ -82,7 +82,8 @@ BitmapEx BitmapInterpolateScaleFilter::execute(BitmapEx
const& rBitmapEx) const
for (sal_Int32 nX = 0, nTemp = nWidth - 2; nX < nNewWidth;
nX++)
{
double fTemp = nX * fRevScaleX;
- pLutInt[nX] = MinMax(static_cast<sal_Int32>(fTemp), 0,
nTemp);
+ pLutInt[nX]
+ = std::clamp(static_cast<sal_Int32>(fTemp),
sal_Int32(0), nTemp);
fTemp -= pLutInt[nX];
pLutFrac[nX] = static_cast<sal_Int32>(fTemp * 1024.);
}
@@ -176,7 +177,8 @@ BitmapEx BitmapInterpolateScaleFilter::execute(BitmapEx
const& rBitmapEx) const
for (sal_Int32 nY = 0, nTemp = nHeight - 2; nY <
nNewHeight; nY++)
{
double fTemp = nY * fRevScaleY;
- pLutInt[nY] =
MinMax(static_cast<sal_Int32>(fTemp), 0, nTemp);
+ pLutInt[nY]
+ = std::clamp(static_cast<sal_Int32>(fTemp),
sal_Int32(0), nTemp);
fTemp -= pLutInt[nY];
pLutFrac[nY] = static_cast<sal_Int32>(fTemp *
1024.);
}
diff --git a/vcl/source/bitmap/BitmapScaleConvolutionFilter.cxx
b/vcl/source/bitmap/BitmapScaleConvolutionFilter.cxx
index 6ee56d14a366..5bec5810cb5f 100644
--- a/vcl/source/bitmap/BitmapScaleConvolutionFilter.cxx
+++ b/vcl/source/bitmap/BitmapScaleConvolutionFilter.cxx
@@ -71,7 +71,7 @@ void ImplCalculateContributions(
}
// Handling on edges
- const sal_Int32 aPixelIndex(MinMax(j, 0, aSourceSize - 1));
+ const sal_Int32 aPixelIndex(std::clamp(j, sal_Int32(0),
aSourceSize - 1));
const sal_Int32 nIndex(aIndex + aCurrentCount);
// scale the weight by 255 since we're converting from float to int
@@ -151,9 +151,9 @@ bool ImplScaleConvolutionHor(Bitmap& rSource, Bitmap&
rTarget, const double& rSc
assert(aSum != 0);
const BitmapColor aResultColor(
- static_cast< sal_uInt8 >(MinMax(static_cast< sal_Int32
>(aValueRed / aSum), 0, 255)),
- static_cast< sal_uInt8 >(MinMax(static_cast< sal_Int32
>(aValueGreen / aSum), 0, 255)),
- static_cast< sal_uInt8 >(MinMax(static_cast< sal_Int32
>(aValueBlue / aSum), 0, 255)));
+ static_cast< sal_uInt8 >(std::clamp< sal_Int32
>(aValueRed / aSum, 0, 255)),
+ static_cast< sal_uInt8 >(std::clamp< sal_Int32
>(aValueGreen / aSum, 0, 255)),
+ static_cast< sal_uInt8 >(std::clamp< sal_Int32
>(aValueBlue / aSum, 0, 255)));
pWriteAcc->SetPixelOnData(pScanline, x, aResultColor);
}
@@ -233,9 +233,9 @@ bool ImplScaleConvolutionVer(Bitmap& rSource, Bitmap&
rTarget, const double& rSc
assert(aSum != 0);
const BitmapColor aResultColor(
- static_cast< sal_uInt8 >(MinMax(static_cast< sal_Int32
>(aValueRed / aSum), 0, 255)),
- static_cast< sal_uInt8 >(MinMax(static_cast< sal_Int32
>(aValueGreen / aSum), 0, 255)),
- static_cast< sal_uInt8 >(MinMax(static_cast< sal_Int32
>(aValueBlue / aSum), 0, 255)));
+ static_cast< sal_uInt8 >(std::clamp< sal_Int32 >(aValueRed /
aSum, 0, 255)),
+ static_cast< sal_uInt8 >(std::clamp< sal_Int32 >(aValueGreen /
aSum, 0, 255)),
+ static_cast< sal_uInt8 >(std::clamp< sal_Int32 >(aValueBlue /
aSum, 0, 255)));
if(pWriteAcc->HasPalette())
{
diff --git a/vcl/source/bitmap/BitmapScaleSuperFilter.cxx
b/vcl/source/bitmap/BitmapScaleSuperFilter.cxx
index 59ed78c8d6f3..3389195aceec 100644
--- a/vcl/source/bitmap/BitmapScaleSuperFilter.cxx
+++ b/vcl/source/bitmap/BitmapScaleSuperFilter.cxx
@@ -100,7 +100,7 @@ struct ScaleContext
double fTemp = i * fRevScale;
if (bMirrored)
fTemp = nTempX - fTemp;
- rMapIX[i] = MinMax(sal_Int32(fTemp), 0, nTemp);
+ rMapIX[i] = std::clamp(sal_Int32(fTemp), sal_Int32(0), nTemp);
rMapFX[i] = BilinearWeightType((fTemp - rMapIX[i]) *
(BilinearWeightType(1) << MAP_PRECISION));
}
}
diff --git a/vcl/source/bitmap/BitmapSeparableUnsharpenFilter.cxx
b/vcl/source/bitmap/BitmapSeparableUnsharpenFilter.cxx
index bbf5950dc968..641725cb32d1 100644
--- a/vcl/source/bitmap/BitmapSeparableUnsharpenFilter.cxx
+++ b/vcl/source/bitmap/BitmapSeparableUnsharpenFilter.cxx
@@ -51,14 +51,15 @@ BitmapEx BitmapSeparableUnsharpenFilter::execute(BitmapEx
const& rBitmapEx) cons
aColor = pReadAcc->GetColor(y, x);
BitmapColor aResultColor(
- static_cast<sal_uInt8>(MinMax(
- aColor.GetRed() + (aColor.GetRed() - aColorBlur.GetRed())
* aAmount, 0, 255)),
- static_cast<sal_uInt8>(MinMax(
- aColor.GetGreen() + (aColor.GetGreen() -
aColorBlur.GetGreen()) * aAmount, 0,
- 255)),
static_cast<sal_uInt8>(
- MinMax(aColor.GetBlue() + (aColor.GetBlue() -
aColorBlur.GetBlue()) * aAmount,
- 0, 255)));
+ std::clamp(aColor.GetRed() + (aColor.GetRed() -
aColorBlur.GetRed()) * aAmount,
+ 0.0, 255.0)),
+ static_cast<sal_uInt8>(std::clamp(
+ aColor.GetGreen() + (aColor.GetGreen() -
aColorBlur.GetGreen()) * aAmount, 0.0,
+ 255.0)),
+ static_cast<sal_uInt8>(std::clamp(
+ aColor.GetBlue() + (aColor.GetBlue() -
aColorBlur.GetBlue()) * aAmount, 0.0,
+ 255.0)));
pWriteAcc->SetPixelOnData(pScanline, x, aResultColor);
}
diff --git a/vcl/source/bitmap/bitmap.cxx b/vcl/source/bitmap/bitmap.cxx
index 80bff80e05f4..917c59e7e3b7 100644
--- a/vcl/source/bitmap/bitmap.cxx
+++ b/vcl/source/bitmap/bitmap.cxx
@@ -1524,15 +1524,15 @@ bool Bitmap::Adjust( short nLuminancePercent, short
nContrastPercent,
// calculate slope
if( nContrastPercent >= 0 )
- fM = 128.0 / ( 128.0 - 1.27 * MinMax( nContrastPercent, 0, 100 ) );
+ fM = 128.0 / ( 128.0 - 1.27 * std::clamp( nContrastPercent, short(0),
short(100) ) );
else
- fM = ( 128.0 + 1.27 * MinMax( nContrastPercent, -100, 0 ) ) / 128.0;
+ fM = ( 128.0 + 1.27 * std::clamp( nContrastPercent, short(-100),
short(0) ) ) / 128.0;
if(!msoBrightness)
// total offset = luminance offset + contrast offset
- fOff = MinMax( nLuminancePercent, -100, 100 ) * 2.55 + 128.0 - fM *
128.0;
+ fOff = std::clamp( nLuminancePercent, short(-100), short(100) ) * 2.55
+ 128.0 - fM * 128.0;
else
- fOff = MinMax( nLuminancePercent, -100, 100 ) * 2.55;
+ fOff = std::clamp( nLuminancePercent, short(-100), short(100) ) * 2.55;
// channel offset = channel offset + total offset
fROff = nChannelRPercent * 2.55 + fOff;
@@ -1548,18 +1548,18 @@ bool Bitmap::Adjust( short nLuminancePercent, short
nContrastPercent,
{
if(!msoBrightness)
{
- cMapR[ nX ] = static_cast<sal_uInt8>(MinMax( FRound( nX * fM +
fROff ), 0, 255 ));
- cMapG[ nX ] = static_cast<sal_uInt8>(MinMax( FRound( nX * fM +
fGOff ), 0, 255 ));
- cMapB[ nX ] = static_cast<sal_uInt8>(MinMax( FRound( nX * fM +
fBOff ), 0, 255 ));
+ cMapR[ nX ] = FRound( std::clamp( nX * fM + fROff, 0.0, 255.0 ) );
+ cMapG[ nX ] = FRound( std::clamp( nX * fM + fGOff, 0.0, 255.0 ) );
+ cMapB[ nX ] = FRound( std::clamp( nX * fM + fBOff, 0.0, 255.0 ) );
}
else
{
// LO simply uses (in a somewhat optimized form) "newcolor =
(oldcolor-128)*contrast+brightness+128"
// as the formula, i.e. contrast first, brightness afterwards.
MSOffice, for whatever weird reason,
// use neither first, but apparently it applies half of brightness
before contrast and half afterwards.
- cMapR[ nX ] = static_cast<sal_uInt8>(MinMax( FRound(
(nX+fROff/2-128) * fM + 128 + fROff/2 ), 0, 255 ));
- cMapG[ nX ] = static_cast<sal_uInt8>(MinMax( FRound(
(nX+fGOff/2-128) * fM + 128 + fGOff/2 ), 0, 255 ));
- cMapB[ nX ] = static_cast<sal_uInt8>(MinMax( FRound(
(nX+fBOff/2-128) * fM + 128 + fBOff/2 ), 0, 255 ));
+ cMapR[ nX ] = FRound( std::clamp( (nX+fROff/2-128) * fM + 128 +
fROff/2, 0.0, 255.0 ) );
+ cMapG[ nX ] = FRound( std::clamp( (nX+fGOff/2-128) * fM + 128 +
fGOff/2, 0.0, 255.0 ) );
+ cMapB[ nX ] = FRound( std::clamp( (nX+fBOff/2-128) * fM + 128 +
fBOff/2, 0.0, 255.0 ) );
}
if( bGamma )
{
diff --git a/vcl/source/bitmap/bitmappaint.cxx
b/vcl/source/bitmap/bitmappaint.cxx
index 91a43b951748..dc4fda1eedac 100644
--- a/vcl/source/bitmap/bitmappaint.cxx
+++ b/vcl/source/bitmap/bitmappaint.cxx
@@ -556,12 +556,12 @@ Bitmap Bitmap::CreateMask(const Color& rTransColor,
sal_uInt8 nTol) const
BitmapColor aCol;
tools::Long nR, nG, nB;
- const tools::Long nMinR = MinMax<tools::Long>(rTransColor.GetRed() - nTol,
0, 255);
- const tools::Long nMaxR = MinMax<tools::Long>(rTransColor.GetRed() + nTol,
0, 255);
- const tools::Long nMinG = MinMax<tools::Long>(rTransColor.GetGreen() -
nTol, 0, 255);
- const tools::Long nMaxG = MinMax<tools::Long>(rTransColor.GetGreen() +
nTol, 0, 255);
- const tools::Long nMinB = MinMax<tools::Long>(rTransColor.GetBlue() -
nTol, 0, 255);
- const tools::Long nMaxB = MinMax<tools::Long>(rTransColor.GetBlue() +
nTol, 0, 255);
+ const tools::Long nMinR = std::clamp<tools::Long>(rTransColor.GetRed() -
nTol, 0, 255);
+ const tools::Long nMaxR = std::clamp<tools::Long>(rTransColor.GetRed() +
nTol, 0, 255);
+ const tools::Long nMinG = std::clamp<tools::Long>(rTransColor.GetGreen() -
nTol, 0, 255);
+ const tools::Long nMaxG = std::clamp<tools::Long>(rTransColor.GetGreen() +
nTol, 0, 255);
+ const tools::Long nMinB = std::clamp<tools::Long>(rTransColor.GetBlue() -
nTol, 0, 255);
+ const tools::Long nMaxB = std::clamp<tools::Long>(rTransColor.GetBlue() +
nTol, 0, 255);
if (pReadAcc->HasPalette())
{
@@ -724,12 +724,12 @@ AlphaMask Bitmap::CreateAlphaMask(const Color&
rTransColor, sal_uInt8 nTol) cons
BitmapColor aCol;
tools::Long nR, nG, nB;
- const tools::Long nMinR = MinMax<tools::Long>(rTransColor.GetRed() - nTol,
0, 255);
- const tools::Long nMaxR = MinMax<tools::Long>(rTransColor.GetRed() + nTol,
0, 255);
- const tools::Long nMinG = MinMax<tools::Long>(rTransColor.GetGreen() -
nTol, 0, 255);
- const tools::Long nMaxG = MinMax<tools::Long>(rTransColor.GetGreen() +
nTol, 0, 255);
- const tools::Long nMinB = MinMax<tools::Long>(rTransColor.GetBlue() -
nTol, 0, 255);
- const tools::Long nMaxB = MinMax<tools::Long>(rTransColor.GetBlue() +
nTol, 0, 255);
+ const tools::Long nMinR = std::clamp<tools::Long>(rTransColor.GetRed() -
nTol, 0, 255);
+ const tools::Long nMaxR = std::clamp<tools::Long>(rTransColor.GetRed() +
nTol, 0, 255);
+ const tools::Long nMinG = std::clamp<tools::Long>(rTransColor.GetGreen() -
nTol, 0, 255);
+ const tools::Long nMaxG = std::clamp<tools::Long>(rTransColor.GetGreen() +
nTol, 0, 255);
+ const tools::Long nMinB = std::clamp<tools::Long>(rTransColor.GetBlue() -
nTol, 0, 255);
+ const tools::Long nMaxB = std::clamp<tools::Long>(rTransColor.GetBlue() +
nTol, 0, 255);
if (pReadAcc->HasPalette())
{
@@ -1019,12 +1019,12 @@ bool Bitmap::Replace(const Color& rSearchColor, const
Color& rReplaceColor, sal_
if (!pAcc)
return false;
- const tools::Long nMinR = MinMax<tools::Long>(rSearchColor.GetRed() -
nTol, 0, 255);
- const tools::Long nMaxR = MinMax<tools::Long>(rSearchColor.GetRed() +
nTol, 0, 255);
- const tools::Long nMinG = MinMax<tools::Long>(rSearchColor.GetGreen() -
nTol, 0, 255);
- const tools::Long nMaxG = MinMax<tools::Long>(rSearchColor.GetGreen() +
nTol, 0, 255);
- const tools::Long nMinB = MinMax<tools::Long>(rSearchColor.GetBlue() -
nTol, 0, 255);
- const tools::Long nMaxB = MinMax<tools::Long>(rSearchColor.GetBlue() +
nTol, 0, 255);
+ const tools::Long nMinR = std::clamp<tools::Long>(rSearchColor.GetRed() -
nTol, 0, 255);
+ const tools::Long nMaxR = std::clamp<tools::Long>(rSearchColor.GetRed() +
nTol, 0, 255);
+ const tools::Long nMinG = std::clamp<tools::Long>(rSearchColor.GetGreen()
- nTol, 0, 255);
+ const tools::Long nMaxG = std::clamp<tools::Long>(rSearchColor.GetGreen()
+ nTol, 0, 255);
+ const tools::Long nMinB = std::clamp<tools::Long>(rSearchColor.GetBlue() -
nTol, 0, 255);
+ const tools::Long nMaxB = std::clamp<tools::Long>(rSearchColor.GetBlue() +
nTol, 0, 255);
if (pAcc->HasPalette())
{
diff --git a/vcl/source/filter/ipsd/ipsd.cxx b/vcl/source/filter/ipsd/ipsd.cxx
index 04446e728b84..887dccce1bf3 100644
--- a/vcl/source/filter/ipsd/ipsd.cxx
+++ b/vcl/source/filter/ipsd/ipsd.cxx
@@ -691,9 +691,9 @@ bool PSDReader::ImplReadBody()
sal_Int32 nDAT = aBlack[ nX + nY *
mpFileHeader->nColumns ] * ( nBlackMax - 256 ) / 0x1ff;
aBitmapColor = mpBitmap->GetPixel( nY, nX );
- sal_uInt8 cR = static_cast<sal_uInt8>(MinMax(
aBitmapColor.GetRed() - nDAT, 0, 255L ));
- sal_uInt8 cG = static_cast<sal_uInt8>(MinMax(
aBitmapColor.GetGreen() - nDAT, 0, 255L ));
- sal_uInt8 cB = static_cast<sal_uInt8>(MinMax(
aBitmapColor.GetBlue() - nDAT, 0, 255L ));
+ sal_uInt8 cR = static_cast<sal_uInt8>(std::clamp(
aBitmapColor.GetRed() - nDAT, sal_Int32(0), sal_Int32(255) ));
+ sal_uInt8 cG = static_cast<sal_uInt8>(std::clamp(
aBitmapColor.GetGreen() - nDAT, sal_Int32(0), sal_Int32(255) ));
+ sal_uInt8 cB = static_cast<sal_uInt8>(std::clamp(
aBitmapColor.GetBlue() - nDAT, sal_Int32(0), sal_Int32(255) ));
mpBitmap->SetPixel( nY, nX, Color( cR, cG, cB ) );
}
}
diff --git a/vcl/source/gdi/gdimtf.cxx b/vcl/source/gdi/gdimtf.cxx
index 359b9f69b944..ecb7c25aa368 100644
--- a/vcl/source/gdi/gdimtf.cxx
+++ b/vcl/source/gdi/gdimtf.cxx
@@ -2084,15 +2084,15 @@ void GDIMetaFile::Adjust( short nLuminancePercent,
short nContrastPercent,
// calculate slope
if( nContrastPercent >= 0 )
- fM = 128.0 / ( 128.0 - 1.27 * MinMax( nContrastPercent, 0, 100 ) );
+ fM = 128.0 / ( 128.0 - 1.27 * std::clamp( nContrastPercent, short(0),
short(100) ) );
else
- fM = ( 128.0 + 1.27 * MinMax( nContrastPercent, -100, 0 ) ) / 128.0;
+ fM = ( 128.0 + 1.27 * std::clamp( nContrastPercent, short(-100),
short(0) ) ) / 128.0;
if(!msoBrightness)
// total offset = luminance offset + contrast offset
- fOff = MinMax( nLuminancePercent, -100, 100 ) * 2.55 + 128.0 - fM *
128.0;
+ fOff = std::clamp( nLuminancePercent, short(-100), short(100) ) * 2.55
+ 128.0 - fM * 128.0;
else
- fOff = MinMax( nLuminancePercent, -100, 100 ) * 2.55;
+ fOff = std::clamp( nLuminancePercent, short(-100), short(100) ) * 2.55;
// channel offset = channel offset + total offset
fROff = nChannelRPercent * 2.55 + fOff;
@@ -2108,15 +2108,15 @@ void GDIMetaFile::Adjust( short nLuminancePercent,
short nContrastPercent,
{
if(!msoBrightness)
{
- aColParam.pMapR[ nX ] = static_cast<sal_uInt8>(MinMax( FRound( nX
* fM + fROff ), 0, 255 ));
- aColParam.pMapG[ nX ] = static_cast<sal_uInt8>(MinMax( FRound( nX
* fM + fGOff ), 0, 255 ));
- aColParam.pMapB[ nX ] = static_cast<sal_uInt8>(MinMax( FRound( nX
* fM + fBOff ), 0, 255 ));
+ aColParam.pMapR[ nX ] = FRound(std::clamp( nX * fM + fROff, 0.0,
255.0 ));
+ aColParam.pMapG[ nX ] = FRound(std::clamp( nX * fM + fGOff, 0.0,
255.0 ));
+ aColParam.pMapB[ nX ] = FRound(std::clamp( nX * fM + fBOff, 0.0,
255.0 ));
}
else
{
- aColParam.pMapR[ nX ] = static_cast<sal_uInt8>(MinMax( FRound(
(nX+fROff/2-128) * fM + 128 + fROff/2 ), 0, 255 ));
- aColParam.pMapG[ nX ] = static_cast<sal_uInt8>(MinMax( FRound(
(nX+fGOff/2-128) * fM + 128 + fGOff/2 ), 0, 255 ));
- aColParam.pMapB[ nX ] = static_cast<sal_uInt8>(MinMax( FRound(
(nX+fBOff/2-128) * fM + 128 + fBOff/2 ), 0, 255 ));
+ aColParam.pMapR[ nX ] = FRound(std::clamp( (nX+fROff/2-128) * fM +
128 + fROff/2, 0.0, 255.0 ));
+ aColParam.pMapG[ nX ] = FRound(std::clamp( (nX+fGOff/2-128) * fM +
128 + fGOff/2, 0.0, 255.0 ));
+ aColParam.pMapB[ nX ] = FRound(std::clamp( (nX+fBOff/2-128) * fM +
128 + fBOff/2, 0.0, 255.0 ));
}
if( bGamma )
{
diff --git a/vcl/source/outdev/bitmap.cxx b/vcl/source/outdev/bitmap.cxx
index fa1b93421b0a..d95c97e8633c 100644
--- a/vcl/source/outdev/bitmap.cxx
+++ b/vcl/source/outdev/bitmap.cxx
@@ -430,7 +430,7 @@ private:
{
double fTemp = std::abs((nOffset + i) * fReverseScale);
- pMap[i] = MinMax(nDstLocation + tools::Long(fTemp), 0,
nSampleRange);
+ pMap[i] = std::clamp(nDstLocation + tools::Long(fTemp),
tools::Long(0), nSampleRange);
pMapOffset[i] = static_cast<tools::Long>((fTemp - pMap[i]) *
128.0);
}
}
diff --git a/vcl/source/outdev/transparent.cxx
b/vcl/source/outdev/transparent.cxx
index 11f89efc7a27..8817f54c738d 100644
--- a/vcl/source/outdev/transparent.cxx
+++ b/vcl/source/outdev/transparent.cxx
@@ -337,7 +337,7 @@ void OutputDevice::EmulateDrawTransparent ( const
tools::PolyPolygon& rPolyPoly,
{
ScopedVclPtrInstance< VirtualDevice > aVDev(*this);
const Size aDstSz( aDstRect.GetSize() );
- const sal_uInt8 cTrans = static_cast<sal_uInt8>(MinMax( FRound(
nTransparencePercent * 2.55 ), 0, 255 ));
+ const sal_uInt8 cTrans = FRound( std::clamp( nTransparencePercent
* 2.55, 0.0, 255.0 ) );
if( aDstRect.Left() || aDstRect.Top() )
aPolyPoly.Move( -aDstRect.Left(), -aDstRect.Top() );