using System.Drawing;
namespace Akwaier.Ui;
///
/// Een van de twee weergaven. De kleuren van "Retro" zijn de paren uit
/// DATA 29000-29007 van het origineel, omgezet naar de acht kleuren van MODE 6.
///
public sealed class Thema
{
public string Naam { get; private init; }
public string Lettertype { get; private init; }
public Color Achtergrond { get; private init; }
public Color Voorgrond { get; private init; }
public Color Gedempt { get; private init; }
public Color Raster { get; private init; }
public Color LeegVak { get; private init; }
public Color Stip { get; private init; }
public Color Los { get; private init; }
public Color KopAchter { get; private init; }
public Color KopVoor { get; private init; }
public Color Band { get; private init; }
public Color Keuze { get; private init; }
public Color Wenk { get; private init; }
public Color LogAchter { get; private init; }
public Color LogVoor { get; private init; }
public Color Knop { get; private init; }
public Color KnopVoor { get; private init; }
/// Kleur van een knop waar de muis boven zweeft.
public Color KnopZweef { get; private init; }
/// Achter- en voorgrondkleur per keten, plaats 1..8.
public Color[] KetenAchter { get; private init; }
public Color[] KetenVoor { get; private init; }
/// Toont de kolomkop als "123456789012345", zoals op het BBC-scherm.
public bool BbcKolomkop { get; private init; }
private static Color K(int rgb) => Color.FromArgb(unchecked((int)0xFF000000) | rgb);
public static readonly Thema Modern = new()
{
Naam = "Modern",
Lettertype = "Segoe UI",
Achtergrond = K(0xECEFF1),
Voorgrond = K(0x212121),
Gedempt = K(0x78909C),
Raster = K(0xCFD8DC),
LeegVak = K(0xF5F7F8),
Stip = K(0xDBE2E6),
Los = K(0x90A4AE),
KopAchter = K(0x37474F),
KopVoor = K(0xFFFFFF),
Band = K(0xE3E8EA),
Keuze = K(0xFF6F00),
Wenk = K(0xB0BEC5),
LogAchter = K(0xFFFFFF),
LogVoor = K(0x37474F),
Knop = K(0x37474F),
KnopVoor = K(0xFFFFFF),
KnopZweef = K(0x546E7A),
BbcKolomkop = false,
KetenAchter = new[]
{
Color.Empty,
K(0x455A64), K(0x2E7D32), K(0xF9A825), K(0x1565C0),
K(0x8E24AA), K(0x00838F), K(0x5D4037), K(0xC62828),
},
KetenVoor = new[]
{
Color.Empty,
K(0xFFFFFF), K(0xFFFFFF), K(0x3E2723), K(0xFFFFFF),
K(0xFFFFFF), K(0xFFFFFF), K(0xFFFFFF), K(0xFFFFFF),
},
};
public static readonly Thema Retro = new()
{
Naam = "Retro BBC",
Lettertype = "Consolas",
Achtergrond = K(0x000000),
Voorgrond = K(0xFFFFFF),
Gedempt = K(0x00FFFF),
Raster = K(0x303030),
LeegVak = K(0x000000),
Stip = K(0x404040),
Los = K(0x00FF00),
KopAchter = K(0x00FFFF),
KopVoor = K(0x000000),
Band = K(0x101010),
Keuze = K(0xFFFF00),
Wenk = K(0x005000),
LogAchter = K(0x000000),
LogVoor = K(0x00FF00),
Knop = K(0x0000BB),
KnopVoor = K(0xFFFFFF),
KnopZweef = K(0x3333FF),
BbcKolomkop = true,
// Kleurparen uit DATA 29000-29007 van het origineel, met twee aanpassingen
// voor de leesbaarheid: het vlak van keten A staat op 20,20,20 in plaats
// van zuiver zwart, anders valt het weg tegen de achtergrond, en de F
// krijgt een zwarte letter op het lichtblauwe vlak in plaats van een witte.
KetenAchter = new[]
{
Color.Empty,
K(0x141414), K(0x00FF00), K(0xFFFF00), K(0x0000FF),
K(0xFF00FF), K(0x00FFFF), K(0xFFFFFF), K(0xFF0000),
},
KetenVoor = new[]
{
Color.Empty,
K(0xFFFFFF), K(0xFFFFFF), K(0x0000FF), K(0xFFFFFF),
K(0xFFFFFF), K(0x000000), K(0x0000FF), K(0xFFFFFF),
},
};
}