Browse Source

Improve FlatColorPalette (full chart) and add FlatHalfColorPalette

pull/9207/head
robloo 4 years ago
parent
commit
35245877b7
  1. 781
      src/Avalonia.Controls.ColorPicker/ColorPalettes/FlatColorPalette.cs
  2. 150
      src/Avalonia.Controls.ColorPicker/ColorPalettes/FlatHalfColorPalette.cs

781
src/Avalonia.Controls.ColorPicker/ColorPalettes/FlatColorPalette.cs

@ -17,268 +17,603 @@ namespace Avalonia.Controls
/// </remarks>
public class FlatColorPalette : IColorPalette
{
// The full Flat UI color chart has 10 rows and 20 columns
// See: https://htmlcolorcodes.com/assets/downloads/flat-design-colors/flat-design-color-chart.png
// This is a reduced palette for usability
private static Color[,] colorChart = new Color[,]
/// <summary>
/// Defines all colors in the <see cref="FlatColorPalette"/>.
/// </summary>
/// <remarks>
/// This is done in an enum to ensure it is compiled into the assembly improving
/// startup performance.
/// </remarks>
public enum FlatColor : uint
{
// Pomegranate
{
Color.FromArgb(0xFF, 0xF9, 0xEB, 0xEA),
Color.FromArgb(0xFF, 0xE6, 0xB0, 0xAA),
Color.FromArgb(0xFF, 0xCD, 0x61, 0x55),
Color.FromArgb(0xFF, 0xA9, 0x32, 0x26),
Color.FromArgb(0xFF, 0x7B, 0x24, 0x1C),
},
Pomegranate1 = 0xFFF9EBEA,
Pomegranate2 = 0xFFF2D7D5,
Pomegranate3 = 0xFFE6B0AA,
Pomegranate4 = 0xFFD98880,
Pomegranate5 = 0xFFCD6155,
Pomegranate6 = 0xFFC0392B,
Pomegranate7 = 0xFFA93226,
Pomegranate8 = 0xFF922B21,
Pomegranate9 = 0xFF7B241C,
Pomegranate10 = 0xFF641E16,
// Alizarin
Alizarin1 = 0xFFFDEDEC,
Alizarin2 = 0xFFFADBD8,
Alizarin3 = 0xFFF5B7B1,
Alizarin4 = 0xFFF1948A,
Alizarin5 = 0xFFEC7063,
Alizarin6 = 0xFFE74C3C,
Alizarin7 = 0xFFCB4335,
Alizarin8 = 0xFFB03A2E,
Alizarin9 = 0xFF943126,
Alizarin10 = 0xFF78281F,
// Amethyst
{
Color.FromArgb(0xFF, 0xF5, 0xEE, 0xF8),
Color.FromArgb(0xFF, 0xD7, 0xBD, 0xE2),
Color.FromArgb(0xFF, 0xAF, 0x7A, 0xC5),
Color.FromArgb(0xFF, 0x88, 0x4E, 0xA0),
Color.FromArgb(0xFF, 0x63, 0x39, 0x74),
},
Amethyst1 = 0xFFF5EEF8,
Amethyst2 = 0xFFEBDEF0,
Amethyst3 = 0xFFD7BDE2,
Amethyst4 = 0xFFC39BD3,
Amethyst5 = 0xFFAF7AC5,
Amethyst6 = 0xFF9B59B6,
Amethyst7 = 0xFF884EA0,
Amethyst8 = 0xFF76448A,
Amethyst9 = 0xFF633974,
Amethyst10 = 0xFF512E5F,
// Wisteria
Wisteria1 = 0xFFF4ECF7,
Wisteria2 = 0xFFE8DAEF,
Wisteria3 = 0xFFD2B4DE,
Wisteria4 = 0xFFBB8FCE,
Wisteria5 = 0xFFA569BD,
Wisteria6 = 0xFF8E44AD,
Wisteria7 = 0xFF7D3C98,
Wisteria8 = 0xFF6C3483,
Wisteria9 = 0xFF5B2C6F,
Wisteria10 = 0xFF4A235A,
// Belize Hole
{
Color.FromArgb(0xFF, 0xEA, 0xF2, 0xF8),
Color.FromArgb(0xFF, 0xA9, 0xCC, 0xE3),
Color.FromArgb(0xFF, 0x54, 0x99, 0xC7),
Color.FromArgb(0xFF, 0x24, 0x71, 0xA3),
Color.FromArgb(0xFF, 0x1A, 0x52, 0x76),
},
BelizeHole1 = 0xFFEAF2F8,
BelizeHole2 = 0xFFD4E6F1,
BelizeHole3 = 0xFFA9CCE3,
BelizeHole4 = 0xFF7FB3D5,
BelizeHole5 = 0xFF5499C7,
BelizeHole6 = 0xFF2980B9,
BelizeHole7 = 0xFF2471A3,
BelizeHole8 = 0xFF1F618D,
BelizeHole9 = 0xFF1A5276,
BelizeHole10 = 0xFF154360,
// Peter River
PeterRiver1 = 0xFFEBF5FB,
PeterRiver2 = 0xFFD6EAF8,
PeterRiver3 = 0xFFAED6F1,
PeterRiver4 = 0xFF85C1E9,
PeterRiver5 = 0xFF5DADE2,
PeterRiver6 = 0xFF3498DB,
PeterRiver7 = 0xFF2E86C1,
PeterRiver8 = 0xFF2874A6,
PeterRiver9 = 0xFF21618C,
PeterRiver10 = 0xFF1B4F72,
// Turquoise
{
Color.FromArgb(0xFF, 0xE8, 0xF8, 0xF5),
Color.FromArgb(0xFF, 0xA3, 0xE4, 0xD7),
Color.FromArgb(0xFF, 0x48, 0xC9, 0xB0),
Color.FromArgb(0xFF, 0x17, 0xA5, 0x89),
Color.FromArgb(0xFF, 0x11, 0x78, 0x64),
},
Turquoise1 = 0xFFE8F8F5,
Turquoise2 = 0xFFD1F2EB,
Turquoise3 = 0xFFA3E4D7,
Turquoise4 = 0xFF76D7C4,
Turquoise5 = 0xFF48C9B0,
Turquoise6 = 0xFF1ABC9C,
Turquoise7 = 0xFF17A589,
Turquoise8 = 0xFF148F77,
Turquoise9 = 0xFF117864,
Turquoise10 = 0xFF0E6251,
// Green Sea
GreenSea1 = 0xFFE8F6F3,
GreenSea2 = 0xFFD0ECE7,
GreenSea3 = 0xFFA2D9CE,
GreenSea4 = 0xFF73C6B6,
GreenSea5 = 0xFF45B39D,
GreenSea6 = 0xFF16A085,
GreenSea7 = 0xFF138D75,
GreenSea8 = 0xFF117A65,
GreenSea9 = 0xFF0E6655,
GreenSea10 = 0xFF0B5345,
// Nephritis
{
Color.FromArgb(0xFF, 0xE9, 0xF7, 0xEF),
Color.FromArgb(0xFF, 0xA9, 0xDF, 0xBF),
Color.FromArgb(0xFF, 0x52, 0xBE, 0x80),
Color.FromArgb(0xFF, 0x22, 0x99, 0x54),
Color.FromArgb(0xFF, 0x19, 0x6F, 0x3D),
},
Nephritis1 = 0xFFE9F7EF,
Nephritis2 = 0xFFD4EFDF,
Nephritis3 = 0xFFA9DFBF,
Nephritis4 = 0xFF7DCEA0,
Nephritis5 = 0xFF52BE80,
Nephritis6 = 0xFF27AE60,
Nephritis7 = 0xFF229954,
Nephritis8 = 0xFF1E8449,
Nephritis9 = 0xFF196F3D,
Nephritis10 = 0xFF145A32,
// Emerald
Emerald1 = 0xFFEAFAF1,
Emerald2 = 0xFFD5F5E3,
Emerald3 = 0xFFABEBC6,
Emerald4 = 0xFF82E0AA,
Emerald5 = 0xFF58D68D,
Emerald6 = 0xFF2ECC71,
Emerald7 = 0xFF28B463,
Emerald8 = 0xFF239B56,
Emerald9 = 0xFF1D8348,
Emerald10 = 0xFF186A3B,
// Sunflower
{
Color.FromArgb(0xFF, 0xFE, 0xF9, 0xE7),
Color.FromArgb(0xFF, 0xF9, 0xE7, 0x9F),
Color.FromArgb(0xFF, 0xF4, 0xD0, 0x3F),
Color.FromArgb(0xFF, 0xD4, 0xAC, 0x0D),
Color.FromArgb(0xFF, 0x9A, 0x7D, 0x0A),
},
Sunflower1 = 0xFFFEF9E7,
Sunflower2 = 0xFFFCF3CF,
Sunflower3 = 0xFFF9E79F,
Sunflower4 = 0xFFF7DC6F,
Sunflower5 = 0xFFF4D03F,
Sunflower6 = 0xFFF1C40F,
Sunflower7 = 0xFFD4AC0D,
Sunflower8 = 0xFFB7950B,
Sunflower9 = 0xFF9A7D0A,
Sunflower10 = 0xFF7D6608,
// Orange
Orange1 = 0xFFFEF5E7,
Orange2 = 0xFFFDEBD0,
Orange3 = 0xFFFAD7A0,
Orange4 = 0xFFF8C471,
Orange5 = 0xFFF5B041,
Orange6 = 0xFFF39C12,
Orange7 = 0xFFD68910,
Orange8 = 0xFFB9770E,
Orange9 = 0xFF9C640C,
Orange10 = 0xFF7E5109,
// Carrot
{
Color.FromArgb(0xFF, 0xFD, 0xF2, 0xE9),
Color.FromArgb(0xFF, 0xF5, 0xCB, 0xA7),
Color.FromArgb(0xFF, 0xEB, 0x98, 0x4E),
Color.FromArgb(0xFF, 0xCA, 0x6F, 0x1E),
Color.FromArgb(0xFF, 0x93, 0x51, 0x16),
},
Carrot1 = 0xFFFDF2E9,
Carrot2 = 0xFFFAE5D3,
Carrot3 = 0xFFF5CBA7,
Carrot4 = 0xFFF0B27A,
Carrot5 = 0xFFEB984E,
Carrot6 = 0xFFE67E22,
Carrot7 = 0xFFCA6F1E,
Carrot8 = 0xFFAF601A,
Carrot9 = 0xFF935116,
Carrot10 = 0xFF784212,
// Pumpkin
Pumpkin1 = 0xFFFBEEE6,
Pumpkin2 = 0xFFF6DDCC,
Pumpkin3 = 0xFFEDBB99,
Pumpkin4 = 0xFFE59866,
Pumpkin5 = 0xFFDC7633,
Pumpkin6 = 0xFFD35400,
Pumpkin7 = 0xFFBA4A00,
Pumpkin8 = 0xFFA04000,
Pumpkin9 = 0xFF873600,
Pumpkin10 = 0xFF6E2C00,
// Clouds
{
Color.FromArgb(0xFF, 0xFD, 0xFE, 0xFE),
Color.FromArgb(0xFF, 0xF7, 0xF9, 0xF9),
Color.FromArgb(0xFF, 0xF0, 0xF3, 0xF4),
Color.FromArgb(0xFF, 0xD0, 0xD3, 0xD4),
Color.FromArgb(0xFF, 0x97, 0x9A, 0x9A),
},
Clouds1 = 0xFFFDFEFE,
Clouds2 = 0xFFFBFCFC,
Clouds3 = 0xFFF7F9F9,
Clouds4 = 0xFFF4F6F7,
Clouds5 = 0xFFF0F3F4,
Clouds6 = 0xFFECF0F1,
Clouds7 = 0xFFD0D3D4,
Clouds8 = 0xFFB3B6B7,
Clouds9 = 0xFF979A9A,
Clouds10 = 0xFF7B7D7D,
// Silver
Silver1 = 0xFFF8F9F9,
Silver2 = 0xFFF2F3F4,
Silver3 = 0xFFE5E7E9,
Silver4 = 0xFFD7DBDD,
Silver5 = 0xFFCACFD2,
Silver6 = 0xFFBDC3C7,
Silver7 = 0xFFA6ACAF,
Silver8 = 0xFF909497,
Silver9 = 0xFF797D7F,
Silver10 = 0xFF626567,
// Concrete
{
Color.FromArgb(0xFF, 0xF4, 0xF6, 0xF6),
Color.FromArgb(0xFF, 0xD5, 0xDB, 0xDB),
Color.FromArgb(0xFF, 0xAA, 0xB7, 0xB8),
Color.FromArgb(0xFF, 0x83, 0x91, 0x92),
Color.FromArgb(0xFF, 0x5F, 0x6A, 0x6A),
},
Concrete1 = 0xFFF4F6F6,
Concrete2 = 0xFFEAEDED,
Concrete3 = 0xFFD5DBDB,
Concrete4 = 0xFFBFC9CA,
Concrete5 = 0xFFAAB7B8,
Concrete6 = 0xFF95A5A6,
Concrete7 = 0xFF839192,
Concrete8 = 0xFF717D7E,
Concrete9 = 0xFF5F6A6A,
Concrete10 = 0xFF4D5656,
// Asbestos
Asbestos1 = 0xFFF2F4F4,
Asbestos2 = 0xFFE5E8E8,
Asbestos3 = 0xFFCCD1D1,
Asbestos4 = 0xFFB2BABB,
Asbestos5 = 0xFF99A3A4,
Asbestos6 = 0xFF7F8C8D,
Asbestos7 = 0xFF707B7C,
Asbestos8 = 0xFF616A6B,
Asbestos9 = 0xFF515A5A,
Asbestos10 = 0xFF424949,
// Wet Asphalt
{
Color.FromArgb(0xFF, 0xEB, 0xED, 0xEF),
Color.FromArgb(0xFF, 0xAE, 0xB6, 0xBF),
Color.FromArgb(0xFF, 0x5D, 0x6D, 0x7E),
Color.FromArgb(0xFF, 0x2E, 0x40, 0x53),
Color.FromArgb(0xFF, 0x21, 0x2F, 0x3C),
},
WetAsphalt1 = 0xFFEBEDEF,
WetAsphalt2 = 0xFFD6DBDF,
WetAsphalt3 = 0xFFAEB6BF,
WetAsphalt4 = 0xFF85929E,
WetAsphalt5 = 0xFF5D6D7E,
WetAsphalt6 = 0xFF34495E,
WetAsphalt7 = 0xFF2E4053,
WetAsphalt8 = 0xFF283747,
WetAsphalt9 = 0xFF212F3C,
WetAsphalt10 = 0xFF1B2631,
// Midnight Blue
MidnightBlue1 = 0xFFEAECEE,
MidnightBlue2 = 0xFFD5D8DC,
MidnightBlue3 = 0xFFABB2B9,
MidnightBlue4 = 0xFF808B96,
MidnightBlue5 = 0xFF566573,
MidnightBlue6 = 0xFF2C3E50,
MidnightBlue7 = 0xFF273746,
MidnightBlue8 = 0xFF212F3D,
MidnightBlue9 = 0xFF1C2833,
MidnightBlue10 = 0xFF17202A,
Pomegranate = Pomegranate3,
Alizarin = Alizarin3,
Amethyst = Amethyst3,
Wisteria = Wisteria3,
BelizeHole = BelizeHole3,
PeterRiver = PeterRiver3,
Turquoise = Turquoise3,
GreenSea = GreenSea3,
Nephritis = Nephritis3,
Emerald = Emerald3,
Sunflower = Sunflower3,
Orange = Orange3,
Carrot = Carrot3,
Pumpkin = Pumpkin3,
Clouds = Clouds3,
Silver = Silver3,
Concrete = Concrete3,
Asbestos = Asbestos3,
WetAsphalt = WetAsphalt3,
MidnightBlue = MidnightBlue3,
};
/// <summary>
/// Gets the index of the default shade of colors in this palette.
/// </summary>
public const int DefaultShadeIndex = 2;
/// <summary>
/// The index in the color palette of the 'Pomegranate' color.
/// This index can correspond to multiple color shades.
/// </summary>
public const int PomegranateIndex = 0;
/// <summary>
/// The index in the color palette of the 'Amethyst' color.
/// This index can correspond to multiple color shades.
/// </summary>
public const int AmethystIndex = 1;
/// <summary>
/// The index in the color palette of the 'BelizeHole' color.
/// This index can correspond to multiple color shades.
/// </summary>
public const int BelizeHoleIndex = 2;
/// <summary>
/// The index in the color palette of the 'Turquoise' color.
/// This index can correspond to multiple color shades.
/// </summary>
public const int TurquoiseIndex = 3;
/// <summary>
/// The index in the color palette of the 'Nephritis' color.
/// This index can correspond to multiple color shades.
/// </summary>
public const int NephritisIndex = 4;
/// <summary>
/// The index in the color palette of the 'Sunflower' color.
/// This index can correspond to multiple color shades.
/// </summary>
public const int SunflowerIndex = 5;
/// <summary>
/// The index in the color palette of the 'Carrot' color.
/// This index can correspond to multiple color shades.
/// </summary>
public const int CarrotIndex = 6;
/// <summary>
/// The index in the color palette of the 'Clouds' color.
/// This index can correspond to multiple color shades.
/// </summary>
public const int CloudsIndex = 7;
/// <summary>
/// The index in the color palette of the 'Concrete' color.
/// This index can correspond to multiple color shades.
/// </summary>
public const int ConcreteIndex = 8;
// See: https://htmlcolorcodes.com/assets/downloads/flat-design-colors/flat-design-color-chart.png
protected static Color[,]? _colorChart = null;
protected static object _colorChartMutex = new object();
/// <summary>
/// The index in the color palette of the 'WetAsphalt' color.
/// This index can correspond to multiple color shades.
/// Initializes all color chart colors.
/// </summary>
public const int WetAsphaltIndex = 9;
protected void InitColorChart()
{
lock (_colorChartMutex)
{
if (_colorChart != null)
{
return;
}
_colorChart = new Color[,]
{
// Pomegranate
{
Color.FromUInt32((uint)FlatColor.Pomegranate1),
Color.FromUInt32((uint)FlatColor.Pomegranate2),
Color.FromUInt32((uint)FlatColor.Pomegranate3),
Color.FromUInt32((uint)FlatColor.Pomegranate4),
Color.FromUInt32((uint)FlatColor.Pomegranate5),
Color.FromUInt32((uint)FlatColor.Pomegranate6),
Color.FromUInt32((uint)FlatColor.Pomegranate7),
Color.FromUInt32((uint)FlatColor.Pomegranate8),
Color.FromUInt32((uint)FlatColor.Pomegranate9),
Color.FromUInt32((uint)FlatColor.Pomegranate10),
},
// Alizarin
{
Color.FromUInt32((uint)FlatColor.Alizarin1),
Color.FromUInt32((uint)FlatColor.Alizarin2),
Color.FromUInt32((uint)FlatColor.Alizarin3),
Color.FromUInt32((uint)FlatColor.Alizarin4),
Color.FromUInt32((uint)FlatColor.Alizarin5),
Color.FromUInt32((uint)FlatColor.Alizarin6),
Color.FromUInt32((uint)FlatColor.Alizarin7),
Color.FromUInt32((uint)FlatColor.Alizarin8),
Color.FromUInt32((uint)FlatColor.Alizarin9),
Color.FromUInt32((uint)FlatColor.Alizarin10),
},
// Amethyst
{
Color.FromUInt32((uint)FlatColor.Amethyst1),
Color.FromUInt32((uint)FlatColor.Amethyst2),
Color.FromUInt32((uint)FlatColor.Amethyst3),
Color.FromUInt32((uint)FlatColor.Amethyst4),
Color.FromUInt32((uint)FlatColor.Amethyst5),
Color.FromUInt32((uint)FlatColor.Amethyst6),
Color.FromUInt32((uint)FlatColor.Amethyst7),
Color.FromUInt32((uint)FlatColor.Amethyst8),
Color.FromUInt32((uint)FlatColor.Amethyst9),
Color.FromUInt32((uint)FlatColor.Amethyst10),
},
// Wisteria
{
Color.FromUInt32((uint)FlatColor.Wisteria1),
Color.FromUInt32((uint)FlatColor.Wisteria2),
Color.FromUInt32((uint)FlatColor.Wisteria3),
Color.FromUInt32((uint)FlatColor.Wisteria4),
Color.FromUInt32((uint)FlatColor.Wisteria5),
Color.FromUInt32((uint)FlatColor.Wisteria6),
Color.FromUInt32((uint)FlatColor.Wisteria7),
Color.FromUInt32((uint)FlatColor.Wisteria8),
Color.FromUInt32((uint)FlatColor.Wisteria9),
Color.FromUInt32((uint)FlatColor.Wisteria10),
},
// Belize Hole
{
Color.FromUInt32((uint)FlatColor.BelizeHole1),
Color.FromUInt32((uint)FlatColor.BelizeHole2),
Color.FromUInt32((uint)FlatColor.BelizeHole3),
Color.FromUInt32((uint)FlatColor.BelizeHole4),
Color.FromUInt32((uint)FlatColor.BelizeHole5),
Color.FromUInt32((uint)FlatColor.BelizeHole6),
Color.FromUInt32((uint)FlatColor.BelizeHole7),
Color.FromUInt32((uint)FlatColor.BelizeHole8),
Color.FromUInt32((uint)FlatColor.BelizeHole9),
Color.FromUInt32((uint)FlatColor.BelizeHole10),
},
// Peter River
{
Color.FromUInt32((uint)FlatColor.PeterRiver1),
Color.FromUInt32((uint)FlatColor.PeterRiver2),
Color.FromUInt32((uint)FlatColor.PeterRiver3),
Color.FromUInt32((uint)FlatColor.PeterRiver4),
Color.FromUInt32((uint)FlatColor.PeterRiver5),
Color.FromUInt32((uint)FlatColor.PeterRiver6),
Color.FromUInt32((uint)FlatColor.PeterRiver7),
Color.FromUInt32((uint)FlatColor.PeterRiver8),
Color.FromUInt32((uint)FlatColor.PeterRiver9),
Color.FromUInt32((uint)FlatColor.PeterRiver10),
},
// Turquoise
{
Color.FromUInt32((uint)FlatColor.Turquoise1),
Color.FromUInt32((uint)FlatColor.Turquoise2),
Color.FromUInt32((uint)FlatColor.Turquoise3),
Color.FromUInt32((uint)FlatColor.Turquoise4),
Color.FromUInt32((uint)FlatColor.Turquoise5),
Color.FromUInt32((uint)FlatColor.Turquoise6),
Color.FromUInt32((uint)FlatColor.Turquoise7),
Color.FromUInt32((uint)FlatColor.Turquoise8),
Color.FromUInt32((uint)FlatColor.Turquoise9),
Color.FromUInt32((uint)FlatColor.Turquoise10),
},
// Green Sea
{
Color.FromUInt32((uint)FlatColor.GreenSea1),
Color.FromUInt32((uint)FlatColor.GreenSea2),
Color.FromUInt32((uint)FlatColor.GreenSea3),
Color.FromUInt32((uint)FlatColor.GreenSea4),
Color.FromUInt32((uint)FlatColor.GreenSea5),
Color.FromUInt32((uint)FlatColor.GreenSea6),
Color.FromUInt32((uint)FlatColor.GreenSea7),
Color.FromUInt32((uint)FlatColor.GreenSea8),
Color.FromUInt32((uint)FlatColor.GreenSea9),
Color.FromUInt32((uint)FlatColor.GreenSea10),
},
// Nephritis
{
Color.FromUInt32((uint)FlatColor.Nephritis1),
Color.FromUInt32((uint)FlatColor.Nephritis2),
Color.FromUInt32((uint)FlatColor.Nephritis3),
Color.FromUInt32((uint)FlatColor.Nephritis4),
Color.FromUInt32((uint)FlatColor.Nephritis5),
Color.FromUInt32((uint)FlatColor.Nephritis6),
Color.FromUInt32((uint)FlatColor.Nephritis7),
Color.FromUInt32((uint)FlatColor.Nephritis8),
Color.FromUInt32((uint)FlatColor.Nephritis9),
Color.FromUInt32((uint)FlatColor.Nephritis10),
},
// Emerald
{
Color.FromUInt32((uint)FlatColor.Emerald1),
Color.FromUInt32((uint)FlatColor.Emerald2),
Color.FromUInt32((uint)FlatColor.Emerald3),
Color.FromUInt32((uint)FlatColor.Emerald4),
Color.FromUInt32((uint)FlatColor.Emerald5),
Color.FromUInt32((uint)FlatColor.Emerald6),
Color.FromUInt32((uint)FlatColor.Emerald7),
Color.FromUInt32((uint)FlatColor.Emerald8),
Color.FromUInt32((uint)FlatColor.Emerald9),
Color.FromUInt32((uint)FlatColor.Emerald10),
},
// Sunflower
{
Color.FromUInt32((uint)FlatColor.Sunflower1),
Color.FromUInt32((uint)FlatColor.Sunflower2),
Color.FromUInt32((uint)FlatColor.Sunflower3),
Color.FromUInt32((uint)FlatColor.Sunflower4),
Color.FromUInt32((uint)FlatColor.Sunflower5),
Color.FromUInt32((uint)FlatColor.Sunflower6),
Color.FromUInt32((uint)FlatColor.Sunflower7),
Color.FromUInt32((uint)FlatColor.Sunflower8),
Color.FromUInt32((uint)FlatColor.Sunflower9),
Color.FromUInt32((uint)FlatColor.Sunflower10),
},
// Orange
{
Color.FromUInt32((uint)FlatColor.Orange1),
Color.FromUInt32((uint)FlatColor.Orange2),
Color.FromUInt32((uint)FlatColor.Orange3),
Color.FromUInt32((uint)FlatColor.Orange4),
Color.FromUInt32((uint)FlatColor.Orange5),
Color.FromUInt32((uint)FlatColor.Orange6),
Color.FromUInt32((uint)FlatColor.Orange7),
Color.FromUInt32((uint)FlatColor.Orange8),
Color.FromUInt32((uint)FlatColor.Orange9),
Color.FromUInt32((uint)FlatColor.Orange10),
},
// Carrot
{
Color.FromUInt32((uint)FlatColor.Carrot1),
Color.FromUInt32((uint)FlatColor.Carrot2),
Color.FromUInt32((uint)FlatColor.Carrot3),
Color.FromUInt32((uint)FlatColor.Carrot4),
Color.FromUInt32((uint)FlatColor.Carrot5),
Color.FromUInt32((uint)FlatColor.Carrot6),
Color.FromUInt32((uint)FlatColor.Carrot7),
Color.FromUInt32((uint)FlatColor.Carrot8),
Color.FromUInt32((uint)FlatColor.Carrot9),
Color.FromUInt32((uint)FlatColor.Carrot10),
},
// Pumpkin
{
Color.FromUInt32((uint)FlatColor.Pumpkin1),
Color.FromUInt32((uint)FlatColor.Pumpkin2),
Color.FromUInt32((uint)FlatColor.Pumpkin3),
Color.FromUInt32((uint)FlatColor.Pumpkin4),
Color.FromUInt32((uint)FlatColor.Pumpkin5),
Color.FromUInt32((uint)FlatColor.Pumpkin6),
Color.FromUInt32((uint)FlatColor.Pumpkin7),
Color.FromUInt32((uint)FlatColor.Pumpkin8),
Color.FromUInt32((uint)FlatColor.Pumpkin9),
Color.FromUInt32((uint)FlatColor.Pumpkin10),
},
// Clouds
{
Color.FromUInt32((uint)FlatColor.Clouds1),
Color.FromUInt32((uint)FlatColor.Clouds2),
Color.FromUInt32((uint)FlatColor.Clouds3),
Color.FromUInt32((uint)FlatColor.Clouds4),
Color.FromUInt32((uint)FlatColor.Clouds5),
Color.FromUInt32((uint)FlatColor.Clouds6),
Color.FromUInt32((uint)FlatColor.Clouds7),
Color.FromUInt32((uint)FlatColor.Clouds8),
Color.FromUInt32((uint)FlatColor.Clouds9),
Color.FromUInt32((uint)FlatColor.Clouds10),
},
// Silver
{
Color.FromUInt32((uint)FlatColor.Silver1),
Color.FromUInt32((uint)FlatColor.Silver2),
Color.FromUInt32((uint)FlatColor.Silver3),
Color.FromUInt32((uint)FlatColor.Silver4),
Color.FromUInt32((uint)FlatColor.Silver5),
Color.FromUInt32((uint)FlatColor.Silver6),
Color.FromUInt32((uint)FlatColor.Silver7),
Color.FromUInt32((uint)FlatColor.Silver8),
Color.FromUInt32((uint)FlatColor.Silver9),
Color.FromUInt32((uint)FlatColor.Silver10),
},
// Concrete
{
Color.FromUInt32((uint)FlatColor.Concrete1),
Color.FromUInt32((uint)FlatColor.Concrete2),
Color.FromUInt32((uint)FlatColor.Concrete3),
Color.FromUInt32((uint)FlatColor.Concrete4),
Color.FromUInt32((uint)FlatColor.Concrete5),
Color.FromUInt32((uint)FlatColor.Concrete6),
Color.FromUInt32((uint)FlatColor.Concrete7),
Color.FromUInt32((uint)FlatColor.Concrete8),
Color.FromUInt32((uint)FlatColor.Concrete9),
Color.FromUInt32((uint)FlatColor.Concrete10),
},
// Asbestos
{
Color.FromUInt32((uint)FlatColor.Asbestos1),
Color.FromUInt32((uint)FlatColor.Asbestos2),
Color.FromUInt32((uint)FlatColor.Asbestos3),
Color.FromUInt32((uint)FlatColor.Asbestos4),
Color.FromUInt32((uint)FlatColor.Asbestos5),
Color.FromUInt32((uint)FlatColor.Asbestos6),
Color.FromUInt32((uint)FlatColor.Asbestos7),
Color.FromUInt32((uint)FlatColor.Asbestos8),
Color.FromUInt32((uint)FlatColor.Asbestos9),
Color.FromUInt32((uint)FlatColor.Asbestos10),
},
// Wet Asphalt
{
Color.FromUInt32((uint)FlatColor.WetAsphalt1),
Color.FromUInt32((uint)FlatColor.WetAsphalt2),
Color.FromUInt32((uint)FlatColor.WetAsphalt3),
Color.FromUInt32((uint)FlatColor.WetAsphalt4),
Color.FromUInt32((uint)FlatColor.WetAsphalt5),
Color.FromUInt32((uint)FlatColor.WetAsphalt6),
Color.FromUInt32((uint)FlatColor.WetAsphalt7),
Color.FromUInt32((uint)FlatColor.WetAsphalt8),
Color.FromUInt32((uint)FlatColor.WetAsphalt9),
Color.FromUInt32((uint)FlatColor.WetAsphalt10),
},
// Midnight Blue
{
Color.FromUInt32((uint)FlatColor.MidnightBlue1),
Color.FromUInt32((uint)FlatColor.MidnightBlue2),
Color.FromUInt32((uint)FlatColor.MidnightBlue3),
Color.FromUInt32((uint)FlatColor.MidnightBlue4),
Color.FromUInt32((uint)FlatColor.MidnightBlue5),
Color.FromUInt32((uint)FlatColor.MidnightBlue6),
Color.FromUInt32((uint)FlatColor.MidnightBlue7),
Color.FromUInt32((uint)FlatColor.MidnightBlue8),
Color.FromUInt32((uint)FlatColor.MidnightBlue9),
Color.FromUInt32((uint)FlatColor.MidnightBlue10),
},
};
}
return;
}
/// <inheritdoc/>
public int ColorCount
{
// Table is transposed compared to the reference chart
get => colorChart.GetLength(0);
get => 20;
}
/// <inheritdoc/>
public int ShadeCount
{
// Table is transposed compared to the reference chart
get => colorChart.GetLength(1);
}
/// <summary>
/// Gets the palette defined color that has an ARGB value of #FFC0392B.
/// </summary>
public static Color Pomegranate
{
get => colorChart[PomegranateIndex, DefaultShadeIndex];
}
/// <summary>
/// Gets the palette defined color that has an ARGB value of #FF9B59B6.
/// </summary>
public static Color Amethyst
{
get => colorChart[AmethystIndex, DefaultShadeIndex];
}
/// <summary>
/// Gets the palette defined color that has an ARGB value of #FF2980B9.
/// </summary>
public static Color BelizeHole
{
get => colorChart[BelizeHoleIndex, DefaultShadeIndex];
}
/// <summary>
/// Gets the palette defined color that has an ARGB value of #FF1ABC9C.
/// </summary>
public static Color Turquoise
{
get => colorChart[TurquoiseIndex, DefaultShadeIndex];
}
/// <summary>
/// Gets the palette defined color that has an ARGB value of #FF27AE60.
/// </summary>
public static Color Nephritis
{
get => colorChart[NephritisIndex, DefaultShadeIndex];
}
/// <summary>
/// Gets the palette defined color that has an ARGB value of #FFF1C40F.
/// </summary>
public static Color Sunflower
{
get => colorChart[SunflowerIndex, DefaultShadeIndex];
}
/// <summary>
/// Gets the palette defined color that has an ARGB value of #FFE67E22.
/// </summary>
public static Color Carrot
{
get => colorChart[CarrotIndex, DefaultShadeIndex];
}
/// <summary>
/// Gets the palette defined color that has an ARGB value of #FFECF0F1.
/// </summary>
public static Color Clouds
{
get => colorChart[CloudsIndex, DefaultShadeIndex];
}
/// <summary>
/// Gets the palette defined color that has an ARGB value of #FF95A5A6.
/// </summary>
public static Color Concrete
{
get => colorChart[ConcreteIndex, DefaultShadeIndex];
}
/// <summary>
/// Gets the palette defined color that has an ARGB value of #FF34495E.
/// </summary>
public static Color WetAsphalt
{
get => colorChart[WetAsphaltIndex, DefaultShadeIndex];
get => 10;
}
/// <inheritdoc/>
public Color GetColor(int colorIndex, int shadeIndex)
{
// Table is transposed compared to the reference chart
return colorChart[
MathUtilities.Clamp(colorIndex, 0, colorChart.GetLength(0) - 1),
MathUtilities.Clamp(shadeIndex, 0, colorChart.GetLength(1) - 1)];
if (_colorChart == null)
{
InitColorChart();
}
return _colorChart![
MathUtilities.Clamp(colorIndex, 0, ColorCount - 1),
MathUtilities.Clamp(shadeIndex, 0, ShadeCount - 1)];
}
}
}

150
src/Avalonia.Controls.ColorPicker/ColorPalettes/FlatHalfColorPalette.cs

@ -0,0 +1,150 @@
using Avalonia.Media;
using Avalonia.Utilities;
using FlatColor = Avalonia.Controls.FlatColorPalette.FlatColor;
namespace Avalonia.Controls
{
/// <summary>
/// Implements half of the <see cref="FlatColorPalette"/> for improved usability.
/// </summary>
/// <inheritdoc cref="FlatColorPalette"/>
public class FlatHalfColorPalette : IColorPalette
{
protected static Color[,]? _colorChart = null;
protected static object _colorChartMutex = new object();
/// <summary>
/// Initializes all color chart colors.
/// </summary>
protected void InitColorChart()
{
lock (_colorChartMutex)
{
if (_colorChart != null)
{
return;
}
_colorChart = new Color[,]
{
// Pomegranate
{
Color.FromUInt32((uint)FlatColor.Pomegranate1),
Color.FromUInt32((uint)FlatColor.Pomegranate3),
Color.FromUInt32((uint)FlatColor.Pomegranate5),
Color.FromUInt32((uint)FlatColor.Pomegranate7),
Color.FromUInt32((uint)FlatColor.Pomegranate9),
},
// Amethyst
{
Color.FromUInt32((uint)FlatColor.Amethyst1),
Color.FromUInt32((uint)FlatColor.Amethyst3),
Color.FromUInt32((uint)FlatColor.Amethyst5),
Color.FromUInt32((uint)FlatColor.Amethyst7),
Color.FromUInt32((uint)FlatColor.Amethyst9),
},
// Belize Hole
{
Color.FromUInt32((uint)FlatColor.BelizeHole1),
Color.FromUInt32((uint)FlatColor.BelizeHole3),
Color.FromUInt32((uint)FlatColor.BelizeHole5),
Color.FromUInt32((uint)FlatColor.BelizeHole7),
Color.FromUInt32((uint)FlatColor.BelizeHole9),
},
// Turquoise
{
Color.FromUInt32((uint)FlatColor.Turquoise1),
Color.FromUInt32((uint)FlatColor.Turquoise3),
Color.FromUInt32((uint)FlatColor.Turquoise5),
Color.FromUInt32((uint)FlatColor.Turquoise7),
Color.FromUInt32((uint)FlatColor.Turquoise9),
},
// Nephritis
{
Color.FromUInt32((uint)FlatColor.Nephritis1),
Color.FromUInt32((uint)FlatColor.Nephritis3),
Color.FromUInt32((uint)FlatColor.Nephritis5),
Color.FromUInt32((uint)FlatColor.Nephritis7),
Color.FromUInt32((uint)FlatColor.Nephritis9),
},
// Sunflower
{
Color.FromUInt32((uint)FlatColor.Sunflower1),
Color.FromUInt32((uint)FlatColor.Sunflower3),
Color.FromUInt32((uint)FlatColor.Sunflower5),
Color.FromUInt32((uint)FlatColor.Sunflower7),
Color.FromUInt32((uint)FlatColor.Sunflower9),
},
// Carrot
{
Color.FromUInt32((uint)FlatColor.Carrot1),
Color.FromUInt32((uint)FlatColor.Carrot3),
Color.FromUInt32((uint)FlatColor.Carrot5),
Color.FromUInt32((uint)FlatColor.Carrot7),
Color.FromUInt32((uint)FlatColor.Carrot9),
},
// Clouds
{
Color.FromUInt32((uint)FlatColor.Clouds1),
Color.FromUInt32((uint)FlatColor.Clouds3),
Color.FromUInt32((uint)FlatColor.Clouds5),
Color.FromUInt32((uint)FlatColor.Clouds7),
Color.FromUInt32((uint)FlatColor.Clouds9),
},
// Concrete
{
Color.FromUInt32((uint)FlatColor.Concrete1),
Color.FromUInt32((uint)FlatColor.Concrete3),
Color.FromUInt32((uint)FlatColor.Concrete5),
Color.FromUInt32((uint)FlatColor.Concrete7),
Color.FromUInt32((uint)FlatColor.Concrete9),
},
// Wet Asphalt
{
Color.FromUInt32((uint)FlatColor.WetAsphalt1),
Color.FromUInt32((uint)FlatColor.WetAsphalt3),
Color.FromUInt32((uint)FlatColor.WetAsphalt5),
Color.FromUInt32((uint)FlatColor.WetAsphalt7),
Color.FromUInt32((uint)FlatColor.WetAsphalt9),
},
};
}
return;
}
/// <inheritdoc/>
public int ColorCount
{
get => 10;
}
/// <inheritdoc/>
public int ShadeCount
{
get => 5;
}
/// <inheritdoc/>
public Color GetColor(int colorIndex, int shadeIndex)
{
if (_colorChart == null)
{
InitColorChart();
}
return _colorChart![
MathUtilities.Clamp(colorIndex, 0, ColorCount - 1),
MathUtilities.Clamp(shadeIndex, 0, ShadeCount - 1)];
}
}
}
Loading…
Cancel
Save