add channel format argument
This commit is contained in:
parent
5ac7be697a
commit
809966a220
|
@ -238,97 +238,113 @@ namespace QskRgb
|
||||||
|
|
||||||
namespace QskRgb
|
namespace QskRgb
|
||||||
{
|
{
|
||||||
|
enum Format
|
||||||
|
{
|
||||||
|
ARGB,
|
||||||
|
RGBA
|
||||||
|
};
|
||||||
|
|
||||||
// Converts a '#12345678' color hex string to a '0x12345678' unsigned integer
|
// Converts a '#12345678' color hex string to a '0x12345678' unsigned integer
|
||||||
QSK_EXPORT constexpr QRgb fromHexString( const char* const str, const size_t len ) noexcept
|
QSK_EXPORT constexpr QRgb fromHexString(
|
||||||
|
const char* const str, const size_t len, const Format format ) noexcept
|
||||||
{
|
{
|
||||||
if ( ( len != 9 && len != 7 ) || str[ 0 ] != '#' )
|
if ( ( len != 9 && len != 7 ) || str[ 0 ] != '#' )
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
QRgb argb = 0xFF;
|
QRgb c = 0xFF;
|
||||||
|
|
||||||
for ( size_t i = 1; i < len; ++i )
|
for ( size_t i = 1; i < len; ++i )
|
||||||
{
|
{
|
||||||
switch ( str[ i ] )
|
switch ( str[ i ] )
|
||||||
{
|
{
|
||||||
case '0':
|
case '0':
|
||||||
argb = ( argb << 4 ) | 0x0;
|
c = ( c << 4 ) | 0x0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '1':
|
case '1':
|
||||||
argb = ( argb << 4 ) | 0x1;
|
c = ( c << 4 ) | 0x1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '2':
|
case '2':
|
||||||
argb = ( argb << 4 ) | 0x2;
|
c = ( c << 4 ) | 0x2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '3':
|
case '3':
|
||||||
argb = ( argb << 4 ) | 0x3;
|
c = ( c << 4 ) | 0x3;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '4':
|
case '4':
|
||||||
argb = ( argb << 4 ) | 0x4;
|
c = ( c << 4 ) | 0x4;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '5':
|
case '5':
|
||||||
argb = ( argb << 4 ) | 0x5;
|
c = ( c << 4 ) | 0x5;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '6':
|
case '6':
|
||||||
argb = ( argb << 4 ) | 0x6;
|
c = ( c << 4 ) | 0x6;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '7':
|
case '7':
|
||||||
argb = ( argb << 4 ) | 0x7;
|
c = ( c << 4 ) | 0x7;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '8':
|
case '8':
|
||||||
argb = ( argb << 4 ) | 0x8;
|
c = ( c << 4 ) | 0x8;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '9':
|
case '9':
|
||||||
argb = ( argb << 4 ) | 0x9;
|
c = ( c << 4 ) | 0x9;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'A':
|
case 'A':
|
||||||
case 'a':
|
case 'a':
|
||||||
argb = ( argb << 4 ) | 0xA;
|
c = ( c << 4 ) | 0xA;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'B':
|
case 'B':
|
||||||
case 'b':
|
case 'b':
|
||||||
argb = ( argb << 4 ) | 0xB;
|
c = ( c << 4 ) | 0xB;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'C':
|
case 'C':
|
||||||
case 'c':
|
case 'c':
|
||||||
argb = ( argb << 4 ) | 0xC;
|
c = ( c << 4 ) | 0xC;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'D':
|
case 'D':
|
||||||
case 'd':
|
case 'd':
|
||||||
argb = ( argb << 4 ) | 0xD;
|
c = ( c << 4 ) | 0xD;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'E':
|
case 'E':
|
||||||
case 'e':
|
case 'e':
|
||||||
argb = ( argb << 4 ) | 0xE;
|
c = ( c << 4 ) | 0xE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'F':
|
case 'F':
|
||||||
case 'f':
|
case 'f':
|
||||||
argb = ( argb << 4 ) | 0xF;
|
c = ( c << 4 ) | 0xF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
argb = ( argb << 4 ) | 0x0;
|
c = ( c << 4 ) | 0x0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return argb;
|
switch ( format )
|
||||||
|
{
|
||||||
|
case ARGB:
|
||||||
|
return c;
|
||||||
|
case RGBA:
|
||||||
|
return len == 9 ? qRgba( qAlpha( c ), qRed( c ), qGreen( c ), qBlue( c ) )
|
||||||
|
: qRgba( qRed( c ), qGreen( c ), qBlue( c ), 255 );
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace literals
|
namespace literals
|
||||||
|
@ -383,17 +399,14 @@ namespace QskRgb
|
||||||
QSK_EXPORT constexpr QRgb operator""_rgba(
|
QSK_EXPORT constexpr QRgb operator""_rgba(
|
||||||
const char* const str, const size_t len ) noexcept
|
const char* const str, const size_t len ) noexcept
|
||||||
{
|
{
|
||||||
constexpr auto rrggbbaa = 9;
|
return fromHexString( str, len, RGBA );
|
||||||
const auto c = fromHexString( str, len );
|
|
||||||
return len == rrggbbaa ? qRgba( qAlpha( c ), qRed( c ), qGreen( c ), qBlue( c ) )
|
|
||||||
: qRgba( qRed( c ), qGreen( c ), qBlue( c ), qAlpha( c ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// converts a hex string from '#[AA]RRGGBB' to '0xAARRGGBB' integer
|
// converts a hex string from '#[AA]RRGGBB' to '0xAARRGGBB' integer
|
||||||
QSK_EXPORT constexpr QRgb operator""_argb(
|
QSK_EXPORT constexpr QRgb operator""_argb(
|
||||||
const char* const str, const size_t len ) noexcept
|
const char* const str, const size_t len ) noexcept
|
||||||
{
|
{
|
||||||
return fromHexString( str, len );
|
return fromHexString( str, len, ARGB );
|
||||||
}
|
}
|
||||||
|
|
||||||
// converts a hex literal from '0xRRGGBB[AA]' to '0xAARRGGBB' integer
|
// converts a hex literal from '0xRRGGBB[AA]' to '0xAARRGGBB' integer
|
||||||
|
@ -428,17 +441,15 @@ namespace QskRgb
|
||||||
QSK_EXPORT constexpr QColor operator""_rgba(
|
QSK_EXPORT constexpr QColor operator""_rgba(
|
||||||
const char* const str, const size_t len ) noexcept
|
const char* const str, const size_t len ) noexcept
|
||||||
{
|
{
|
||||||
constexpr auto rrggbbaa = 9;
|
const auto c = fromHexString( str, len, RGBA );
|
||||||
const auto c = fromHexString( str, len );
|
return QColor{ qRed( c ), qGreen( c ), qBlue( c ), qAlpha( c ) };
|
||||||
return len == rrggbbaa ? QColor{ qAlpha( c ), qRed( c ), qGreen( c ), qBlue( c ) }
|
|
||||||
: QColor{ qRed( c ), qGreen( c ), qBlue( c ), qAlpha( c ) };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// converts a hex string from '#[AA]RRGGBB' to a QColor
|
// converts a hex string from '#[AA]RRGGBB' to a QColor
|
||||||
QSK_EXPORT constexpr QColor operator""_argb(
|
QSK_EXPORT constexpr QColor operator""_argb(
|
||||||
const char* const str, const size_t len ) noexcept
|
const char* const str, const size_t len ) noexcept
|
||||||
{
|
{
|
||||||
const auto c = fromHexString( str, len );
|
const auto c = fromHexString( str, len, ARGB );
|
||||||
return QColor{ qRed( c ), qGreen( c ), qBlue( c ), qAlpha( c ) };
|
return QColor{ qRed( c ), qGreen( c ), qBlue( c ), qAlpha( c ) };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ void QskRgbLiterals::parsing()
|
||||||
QFETCH( QRgb, expected );
|
QFETCH( QRgb, expected );
|
||||||
|
|
||||||
const auto actual = text.toStdString();
|
const auto actual = text.toStdString();
|
||||||
QCOMPARE( QskRgb::fromHexString( actual.c_str(), actual.size() ), expected );
|
QCOMPARE( QskRgb::fromHexString( actual.c_str(), actual.size(), QskRgb::ARGB ), expected );
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRgbLiterals::qrgbLiterals_data()
|
void QskRgbLiterals::qrgbLiterals_data()
|
||||||
|
|
Loading…
Reference in New Issue