move implementation
This commit is contained in:
parent
221f7ccbed
commit
9faaccbfc3
|
@ -1,142 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
* Copyright (C) 2023 Edelhirsch Software GmbH
|
|
||||||
* This file may be used under the terms of the 3-clause BSD License
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef QSK_RGB_LITERALS_H
|
|
||||||
#define QSK_RGB_LITERALS_H
|
|
||||||
|
|
||||||
namespace QskRgb
|
|
||||||
{
|
|
||||||
namespace literals
|
|
||||||
{
|
|
||||||
/// @brief converts HTML #RRGGBB[AA] color hex string to Qt's RGB 0xAARRGGBB integer
|
|
||||||
/// @param str The string literal
|
|
||||||
/// @param len The length of the literal
|
|
||||||
/// @note non-hexadecimal characters are replaced with 0x0 value
|
|
||||||
constexpr unsigned int operator""_rgba( const char* const str, const size_t len )
|
|
||||||
{
|
|
||||||
if ( len != 7 && len != 9 )
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int rgb = 0x00;
|
|
||||||
|
|
||||||
// skip # character
|
|
||||||
for ( size_t i = 1; i < len; ++i )
|
|
||||||
{
|
|
||||||
switch ( str[ i ] )
|
|
||||||
{
|
|
||||||
case '0':
|
|
||||||
rgb = ( rgb << 4 ) | 0x0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '1':
|
|
||||||
rgb = ( rgb << 4 ) | 0x1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '2':
|
|
||||||
rgb = ( rgb << 4 ) | 0x2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '3':
|
|
||||||
rgb = ( rgb << 4 ) | 0x3;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '4':
|
|
||||||
rgb = ( rgb << 4 ) | 0x4;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '5':
|
|
||||||
rgb = ( rgb << 4 ) | 0x5;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '6':
|
|
||||||
rgb = ( rgb << 4 ) | 0x6;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '7':
|
|
||||||
rgb = ( rgb << 4 ) | 0x7;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '8':
|
|
||||||
rgb = ( rgb << 4 ) | 0x8;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '9':
|
|
||||||
rgb = ( rgb << 4 ) | 0x9;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'A':
|
|
||||||
case 'a':
|
|
||||||
rgb = ( rgb << 4 ) | 0xA;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'B':
|
|
||||||
case 'b':
|
|
||||||
rgb = ( rgb << 4 ) | 0xB;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'C':
|
|
||||||
case 'c':
|
|
||||||
rgb = ( rgb << 4 ) | 0xC;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'D':
|
|
||||||
case 'd':
|
|
||||||
rgb = ( rgb << 4 ) | 0xD;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'E':
|
|
||||||
case 'e':
|
|
||||||
rgb = ( rgb << 4 ) | 0xE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'F':
|
|
||||||
case 'f':
|
|
||||||
rgb = ( rgb << 4 ) | 0xF;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
rgb = ( rgb << 4 ) | 0x0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// add default 0xFF for alpha channel
|
|
||||||
if ( len > 1 && len <= 7 )
|
|
||||||
{
|
|
||||||
rgb |= 0xFF000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
// convert rrggbbaa to aarrggbb
|
|
||||||
if ( len > 7 )
|
|
||||||
{
|
|
||||||
rgb = ( 0x000000FF & rgb ) << 24 | ( rgb >> 8 );
|
|
||||||
}
|
|
||||||
|
|
||||||
return rgb;
|
|
||||||
}
|
|
||||||
|
|
||||||
// example for rgb
|
|
||||||
static_assert( "#123456"_rgba == 0xFF123456, "not constexpr" );
|
|
||||||
// example for rgba
|
|
||||||
static_assert( "#112233aa"_rgba == 0xAA112233, "not constexpr" );
|
|
||||||
|
|
||||||
// bad examples
|
|
||||||
static_assert( ""_rgba == 0x0, "not constexpr" );
|
|
||||||
static_assert( "#"_rgba == 0x0, "not constexpr" );
|
|
||||||
static_assert( "#1"_rgba == 0x0, "not constexpr" );
|
|
||||||
static_assert( "#12"_rgba == 0x0, "not constexpr" );
|
|
||||||
static_assert( "#123"_rgba == 0x0, "not constexpr" );
|
|
||||||
static_assert( "#1234"_rgba == 0x0, "not constexpr" );
|
|
||||||
static_assert( "#12345"_rgba == 0x0, "not constexpr" );
|
|
||||||
static_assert( "#112233a"_rgba == 0x0, "not constexpr" );
|
|
||||||
static_assert( "#fffffffff"_rgba == 0x0, "not constexpr" );
|
|
||||||
static_assert( "#WTF01337"_rgba == 0x3700F013, "not constexpr" );
|
|
||||||
static_assert( "#JUSTWHY?"_rgba == 0x0, "not constexpr" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -236,4 +236,135 @@ namespace QskRgb
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
namespace QskRgb
|
||||||
|
{
|
||||||
|
// Converts a HTML #RRGGBB[AA] color hex string to Qt's RGB 0xAARRGGBB integer
|
||||||
|
QSK_EXPORT Q_REQUIRED_RESULT constexpr QRgb fromHexString(
|
||||||
|
const char* const str, const size_t len ) noexcept
|
||||||
|
{
|
||||||
|
if ( len != 7 && len != 9 )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( str[ 0 ] != '#' )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QRgb rgb = 0x00;
|
||||||
|
|
||||||
|
for ( size_t i = 1; i < len; ++i )
|
||||||
|
{
|
||||||
|
switch ( str[ i ] )
|
||||||
|
{
|
||||||
|
case '0':
|
||||||
|
rgb = ( rgb << 4 ) | 0x0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '1':
|
||||||
|
rgb = ( rgb << 4 ) | 0x1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '2':
|
||||||
|
rgb = ( rgb << 4 ) | 0x2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '3':
|
||||||
|
rgb = ( rgb << 4 ) | 0x3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '4':
|
||||||
|
rgb = ( rgb << 4 ) | 0x4;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '5':
|
||||||
|
rgb = ( rgb << 4 ) | 0x5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '6':
|
||||||
|
rgb = ( rgb << 4 ) | 0x6;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '7':
|
||||||
|
rgb = ( rgb << 4 ) | 0x7;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '8':
|
||||||
|
rgb = ( rgb << 4 ) | 0x8;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '9':
|
||||||
|
rgb = ( rgb << 4 ) | 0x9;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'A':
|
||||||
|
case 'a':
|
||||||
|
rgb = ( rgb << 4 ) | 0xA;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'B':
|
||||||
|
case 'b':
|
||||||
|
rgb = ( rgb << 4 ) | 0xB;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'C':
|
||||||
|
case 'c':
|
||||||
|
rgb = ( rgb << 4 ) | 0xC;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'D':
|
||||||
|
case 'd':
|
||||||
|
rgb = ( rgb << 4 ) | 0xD;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'E':
|
||||||
|
case 'e':
|
||||||
|
rgb = ( rgb << 4 ) | 0xE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'F':
|
||||||
|
case 'f':
|
||||||
|
rgb = ( rgb << 4 ) | 0xF;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
rgb = ( rgb << 4 ) | 0x0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add default 0xFF for alpha channel
|
||||||
|
if ( len > 1 && len <= 7 )
|
||||||
|
{
|
||||||
|
rgb |= 0xFF000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert rrggbbaa to aarrggbb
|
||||||
|
if ( len > 7 )
|
||||||
|
{
|
||||||
|
rgb = ( 0x000000FF & rgb ) << 24 | ( rgb >> 8 );
|
||||||
|
}
|
||||||
|
|
||||||
|
return rgb;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace literals
|
||||||
|
{
|
||||||
|
Q_REQUIRED_RESULT constexpr QRgb operator""_rgba(
|
||||||
|
const char* const str, const size_t len ) noexcept
|
||||||
|
{
|
||||||
|
return fromHexString( str, len );
|
||||||
|
}
|
||||||
|
|
||||||
|
#define QSK_CHECK_CONSTEXPR_LITERAL
|
||||||
|
#ifdef QSK_CHECK_CONSTEXPR_LITERAL
|
||||||
|
// example for rgb with alpha channel set to 0xFF
|
||||||
|
static_assert( "#123456"_rgba == 0xFF123456, "not constexpr" );
|
||||||
|
// example for rgba
|
||||||
|
static_assert( "#112233AA"_rgba == 0xAA112233, "not constexpr" );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -40,7 +40,6 @@ HEADERS += \
|
||||||
common/QskPlacementPolicy.h \
|
common/QskPlacementPolicy.h \
|
||||||
common/QskPlatform.h \
|
common/QskPlatform.h \
|
||||||
common/QskRgbValue.h \
|
common/QskRgbValue.h \
|
||||||
common/QskRgbLiterals.h \
|
|
||||||
common/QskScaleEngine.h \
|
common/QskScaleEngine.h \
|
||||||
common/QskScaleTickmarks.h \
|
common/QskScaleTickmarks.h \
|
||||||
common/QskShadowMetrics.h \
|
common/QskShadowMetrics.h \
|
||||||
|
|
Loading…
Reference in New Issue