Files
CydandClaude Opus 4.8 8d2d0b71aa Phase 7: cockpit overlay generator, region extraction, and profile editor
Overlay generator (pure, tested) — RioJoy.Core/Overlay:
- FontFitter ports the legacy calc-fontsize auto-fit search (validated against a
  brute-force oracle); OverlayLayoutEngine ports create-data-layer's fit + h/v
  justification and adds per-region 90 deg CCW rotation; OverlayTemplate/Region +
  OverlayTemplateStore hold cell geometry/colour/rotation (regions.json).
- GoobieDataImporter parses the legacy .data label sheet into label rows.
- src/RioJoy.Overlay: SkiaSharp rasterizer (SkiaTextMeasurer shared with the engine
  so measured layout == drawn output; SkiaOverlayRenderer -> PNG;
  ProfileWallpaperGenerator). Verified end-to-end on the real cockpit art
  (regions.json + riojoy.png + TEST.data) by OverlayRenderIntegrationTests.
- RioJoy.Tray/WallpaperApplier applies via SystemParametersInfo; RioCoordinator
  generates+applies on profile activation (opt-in via AppConfig.OverlayTemplatePath).

Region geometry — tools/XcfRegionExtract parses riojoy.xcf (a GIMP-format binary
reader, no GIMP needed) into the 119-cell regions.json: per-layer offsets/size/
font/colour, with 90 deg CCW rotation on a-00 + b-10..b-1F. Base image riojoy.png.
NOTE: the wallpaper positions are a VGA chroma-split display artifact (6 displays),
not the cockpit's logical layout.

Mapping editor (first cut) — RioJoy.Tray/Editor/ProfileEditorForm renders the
config sheet's logical grid (SheetLayout parses the sheet CSV export). The iRIO
word is edited via ButtonBinding <-> RioMapEntry.Create (no hex bit-twiddling), with
a context-sensitive picker: keyboard keys by name (KeyCatalog VK names), joystick
Button N, hat direction, mouse/RIO-command enum names; modifiers only for keyboard.
Opened from the tray ("Edit profile..."). The sheet-grid layout is a starting point
that needs rework from a better-formatted source.

~220 xUnit tests green. Docs (PLAN.md, README) updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 17:13:48 -05:00

1214 lines
22 KiB
JSON

{
"BaseImagePath": "riojoy.png",
"Width": 2720,
"Height": 600,
"Regions": [
{
"Name": "a-00",
"X": 810,
"Y": 332,
"Width": 197,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-00",
"X": 2558,
"Y": 428,
"Width": 153,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-01",
"X": 2398,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-02",
"X": 2238,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-03",
"X": 2078,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-04",
"X": 2558,
"Y": 5,
"Width": 153,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-05",
"X": 2399,
"Y": 5,
"Width": 149,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-06",
"X": 2238,
"Y": 5,
"Width": 151,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-07",
"X": 2078,
"Y": 5,
"Width": 151,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-08",
"X": 2558,
"Y": 428,
"Width": 153,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-09",
"X": 2398,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-0A",
"X": 2238,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-0B",
"X": 2078,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-0C",
"X": 2558,
"Y": 5,
"Width": 153,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-0D",
"X": 2398,
"Y": 5,
"Width": 151,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-0E",
"X": 2238,
"Y": 5,
"Width": 151,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-0F",
"X": 2078,
"Y": 5,
"Width": 151,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-10",
"X": 823,
"Y": 428,
"Width": 53,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-11",
"X": 926,
"Y": 428,
"Width": 53,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-12",
"X": 1035,
"Y": 428,
"Width": 53,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-13",
"X": 1143,
"Y": 428,
"Width": 53,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-14",
"X": 1247,
"Y": 428,
"Width": 53,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-15",
"X": 1354,
"Y": 428,
"Width": 53,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-16",
"X": 1329,
"Y": 370,
"Width": 50,
"Height": 50,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-17",
"X": 1382,
"Y": 370,
"Width": 50,
"Height": 50,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-18",
"X": 820,
"Y": 5,
"Width": 54,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-19",
"X": 927,
"Y": 6,
"Width": 53,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-1A",
"X": 1035,
"Y": 5,
"Width": 53,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-1B",
"X": 1140,
"Y": 5,
"Width": 53,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-1C",
"X": 1246,
"Y": 5,
"Width": 53,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-1D",
"X": 1354,
"Y": 6,
"Width": 53,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 38,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-1E",
"X": 1330,
"Y": 67,
"Width": 50,
"Height": 50,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-1F",
"X": 1388,
"Y": 67,
"Width": 50,
"Height": 50,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FFFFFF",
"RotationDegrees": 90
},
{
"Name": "b-20",
"X": 1918,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-21",
"X": 1758,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-22",
"X": 1598,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-23",
"X": 1438,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-24",
"X": 1919,
"Y": 6,
"Width": 150,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-25",
"X": 1759,
"Y": 6,
"Width": 149,
"Height": 52,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-26",
"X": 1599,
"Y": 6,
"Width": 149,
"Height": 52,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-27",
"X": 1438,
"Y": 5,
"Width": 150,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#00FF00"
},
{
"Name": "b-28",
"X": 1918,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-29",
"X": 1758,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-2A",
"X": 1598,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-2B",
"X": 1438,
"Y": 428,
"Width": 150,
"Height": 52,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-2C",
"X": 1918,
"Y": 5,
"Width": 151,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-2D",
"X": 1758,
"Y": 5,
"Width": 151,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-2E",
"X": 1598,
"Y": 5,
"Width": 151,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-2F",
"X": 1438,
"Y": 6,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#FF0000"
},
{
"Name": "b-30",
"X": 1918,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#0000FF"
},
{
"Name": "b-31",
"X": 1758,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#0000FF"
},
{
"Name": "b-32",
"X": 1598,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#0000FF"
},
{
"Name": "b-33",
"X": 1438,
"Y": 428,
"Width": 151,
"Height": 53,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#0000FF"
},
{
"Name": "b-34",
"X": 1918,
"Y": 5,
"Width": 151,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#0000FF"
},
{
"Name": "b-35",
"X": 1758,
"Y": 5,
"Width": 151,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#0000FF"
},
{
"Name": "b-36",
"X": 1598,
"Y": 5,
"Width": 151,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#0000FF"
},
{
"Name": "b-37",
"X": 1438,
"Y": 5,
"Width": 151,
"Height": 54,
"FontFamily": "Sans",
"FontSizePx": 45,
"ColorHex": "#0000FF"
},
{
"Name": "b-38",
"X": 2349,
"Y": 105,
"Width": 50,
"Height": 31,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-39",
"X": 2349,
"Y": 139,
"Width": 50,
"Height": 31,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-3A",
"X": 2349,
"Y": 173,
"Width": 50,
"Height": 31,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-3B",
"X": 2349,
"Y": 207,
"Width": 50,
"Height": 32,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-3C",
"X": 2349,
"Y": 242,
"Width": 50,
"Height": 32,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-3D",
"X": 2349,
"Y": 277,
"Width": 50,
"Height": 31,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-3E",
"X": 2349,
"Y": 311,
"Width": 50,
"Height": 32,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-3F",
"X": 2349,
"Y": 346,
"Width": 50,
"Height": 31,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-40",
"X": 2509,
"Y": 105,
"Width": 50,
"Height": 31,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-41",
"X": 2509,
"Y": 277,
"Width": 50,
"Height": 31,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-42",
"X": 2509,
"Y": 242,
"Width": 50,
"Height": 32,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-43",
"X": 2509,
"Y": 346,
"Width": 50,
"Height": 31,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-44",
"X": 2509,
"Y": 311,
"Width": 50,
"Height": 32,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-45",
"X": 2509,
"Y": 207,
"Width": 50,
"Height": 32,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-46",
"X": 2509,
"Y": 173,
"Width": 50,
"Height": 31,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-47",
"X": 2509,
"Y": 139,
"Width": 50,
"Height": 31,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "b-50",
"X": 1682,
"Y": 311,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-51",
"X": 1602,
"Y": 105,
"Width": 77,
"Height": 65,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-52",
"X": 1682,
"Y": 105,
"Width": 77,
"Height": 65,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-53",
"X": 1762,
"Y": 105,
"Width": 77,
"Height": 65,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-54",
"X": 1602,
"Y": 173,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-55",
"X": 1682,
"Y": 173,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-56",
"X": 1762,
"Y": 173,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-57",
"X": 1602,
"Y": 242,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-58",
"X": 1682,
"Y": 242,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-59",
"X": 1762,
"Y": 242,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-5A",
"X": 1602,
"Y": 311,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-5B",
"X": 1762,
"Y": 311,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-5C",
"X": 1842,
"Y": 105,
"Width": 77,
"Height": 65,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-5D",
"X": 1842,
"Y": 173,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-5E",
"X": 1842,
"Y": 242,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-5F",
"X": 1842,
"Y": 311,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#00FF00"
},
{
"Name": "b-60",
"X": 1682,
"Y": 311,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-61",
"X": 1602,
"Y": 105,
"Width": 77,
"Height": 65,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-62",
"X": 1682,
"Y": 105,
"Width": 77,
"Height": 65,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-63",
"X": 1762,
"Y": 105,
"Width": 77,
"Height": 65,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-64",
"X": 1602,
"Y": 173,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-65",
"X": 1682,
"Y": 173,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-66",
"X": 1762,
"Y": 173,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-67",
"X": 1602,
"Y": 242,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-68",
"X": 1682,
"Y": 242,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-69",
"X": 1762,
"Y": 242,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-6A",
"X": 1602,
"Y": 311,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-6B",
"X": 1762,
"Y": 311,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-6C",
"X": 1842,
"Y": 105,
"Width": 77,
"Height": 65,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-6D",
"X": 1842,
"Y": 173,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-6E",
"X": 1842,
"Y": 242,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "b-6F",
"X": 1842,
"Y": 311,
"Width": 77,
"Height": 66,
"FontFamily": "Sans",
"FontSizePx": 40,
"ColorHex": "#FF0000"
},
{
"Name": "KeyPad:INT",
"X": 1695,
"Y": 79,
"Width": 132,
"Height": 21,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "KeyPad:EXT",
"X": 1695,
"Y": 79,
"Width": 132,
"Height": 21,
"FontFamily": "Sans",
"FontSizePx": 20,
"ColorHex": "#00FF00"
},
{
"Name": "HatRight",
"X": 2402,
"Y": 350,
"Width": 104,
"Height": 27,
"FontFamily": "Sans",
"FontSizePx": 18,
"ColorHex": "#00FF00"
},
{
"Name": "HatLeft",
"X": 2402,
"Y": 315,
"Width": 104,
"Height": 28,
"FontFamily": "Sans",
"FontSizePx": 18,
"ColorHex": "#00FF00"
},
{
"Name": "HatDown",
"X": 2402,
"Y": 282,
"Width": 104,
"Height": 26,
"FontFamily": "Sans",
"FontSizePx": 18,
"ColorHex": "#00FF00"
},
{
"Name": "HatUp",
"X": 2402,
"Y": 247,
"Width": 104,
"Height": 27,
"FontFamily": "Sans",
"FontSizePx": 18,
"ColorHex": "#00FF00"
},
{
"Name": "Lower",
"X": 2402,
"Y": 212,
"Width": 104,
"Height": 27,
"FontFamily": "Sans",
"FontSizePx": 18,
"ColorHex": "#00FF00"
},
{
"Name": "Middle",
"X": 2402,
"Y": 178,
"Width": 104,
"Height": 26,
"FontFamily": "Sans",
"FontSizePx": 18,
"ColorHex": "#00FF00"
},
{
"Name": "Upper",
"X": 2402,
"Y": 144,
"Width": 104,
"Height": 26,
"FontFamily": "Sans",
"FontSizePx": 18,
"ColorHex": "#00FF00"
},
{
"Name": "Throttle",
"X": 2242,
"Y": 351,
"Width": 104,
"Height": 26,
"FontFamily": "Sans",
"FontSizePx": 18,
"ColorHex": "#00FF00"
},
{
"Name": "Panic",
"X": 2242,
"Y": 282,
"Width": 104,
"Height": 26,
"FontFamily": "Sans",
"FontSizePx": 18,
"ColorHex": "#00FF00"
},
{
"Name": "Trigger",
"X": 2402,
"Y": 110,
"Width": 104,
"Height": 26,
"FontFamily": "Sans",
"FontSizePx": 18,
"ColorHex": "#00FF00"
},
{
"Name": "Throttle:",
"X": 2243,
"Y": 81,
"Width": 103,
"Height": 20,
"FontFamily": "Sans",
"FontSizePx": 18,
"ColorHex": "#00FF00"
},
{
"Name": "JoyStick:",
"X": 2402,
"Y": 80,
"Width": 104,
"Height": 21,
"FontFamily": "Sans",
"FontSizePx": 18,
"ColorHex": "#00FF00"
}
]
}