| 3394 | |
| 3395 | |
| 3396 | function convertToOLEDColor(color) { |
| 3397 | if (!color || color === "transparent") return "#000000"; |
| 3398 | |
| 3399 | // For OLED displays, convert to cyan shades for consistency with cyan theme |
| 3400 | // Check if color is already a hex color |
| 3401 | if (color.startsWith('#')) { |
| 3402 | // Convert to grayscale then to cyan shades |
| 3403 | const hex = color.replace('#', ''); |
| 3404 | const r = parseInt(hex.substr(0, 2), 16); |
| 3405 | const g = parseInt(hex.substr(2, 2), 16); |
| 3406 | const b = parseInt(hex.substr(4, 2), 16); |
| 3407 | |
| 3408 | // Calculate luminance (brightness) |
| 3409 | const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255; |
| 3410 | |
| 3411 | if (luminance < 0.1) return "#002244"; // Very dark cyan |
| 3412 | if (luminance < 0.2) return "#004466"; // Dark cyan |
| 3413 | if (luminance < 0.3) return "#006688"; // Medium-dark cyan |
| 3414 | if (luminance < 0.4) return "#0088aa"; // Medium cyan |
| 3415 | if (luminance < 0.5) return "#00aacc"; // Light medium cyan |
| 3416 | if (luminance < 0.6) return "#00ccee"; // Light cyan |
| 3417 | if (luminance < 0.7) return "#22ddff"; // Bright cyan |
| 3418 | if (luminance < 0.8) return "#44eeff"; // Very bright cyan |
| 3419 | if (luminance < 0.9) return "#66ffff"; // Maximum cyan |
| 3420 | return "#88ffff"; // Ultra bright cyan |
| 3421 | } |
| 3422 | |
| 3423 | // Handle named colors with OLED-appropriate cyan shades |
| 3424 | const colorMap = { |
| 3425 | "white": "#88ffff", // Bright cyan |
| 3426 | "black": "#002244", // Dark cyan |
| 3427 | "gray": "#006688", // Medium cyan |
| 3428 | "grey": "#006688", |
| 3429 | "red": "#0088aa", // Medium cyan |
| 3430 | "green": "#00ccee", // Light cyan |
| 3431 | "blue": "#44eeff", // Bright cyan |
| 3432 | "yellow": "#66ffff", // Very bright cyan |
| 3433 | "orange": "#22ddff", // Bright cyan |
| 3434 | "purple": "#00aacc", // Light medium cyan |
| 3435 | "pink": "#44eeff", // Bright cyan |
| 3436 | "cyan": "#88ffff", // Ultra bright cyan (keeps cyan bright) |
| 3437 | "magenta": "#22ddff", // Bright cyan |
| 3438 | "brown": "#004466", // Dark cyan |
| 3439 | "navy": "#002244", // Very dark cyan |
| 3440 | "maroon": "#004466", // Dark cyan |
| 3441 | "olive": "#006688" // Medium cyan |
| 3442 | }; |
| 3443 | |
| 3444 | return colorMap[color.toLowerCase()] || "#0088aa"; |
| 3445 | } |
| 3446 | |
| 3447 | // OLED canvas rendering helpers (pixel-accurate preview) |
| 3448 | const _oledImageCache = new Map(); // src -> HTMLImageElement |