mirror of
https://github.com/neon443/ShhShell.git
synced 2026-03-11 21:36:17 +00:00
added reloading for edited themes on the fly
added a get/set SwiftUI.Color to SwiftTerm.Color overhaul themeeditor's state stuff updated themeeditor to use a binding updated themepreview to use a binding remove the massive subscript - its not needed anymore moved all swifterm color stuff to its own file
This commit is contained in:
@@ -60,53 +60,3 @@ extension ColorCodable {
|
||||
return SwiftTerm.Color(self)
|
||||
}
|
||||
}
|
||||
|
||||
extension SwiftTerm.Color {
|
||||
convenience init(_ color: SwiftUI.Color) {
|
||||
var r: CGFloat = 0; var g: CGFloat = 0; var b: CGFloat = 0; var a: CGFloat = 0
|
||||
let uiColor = UIColor(color)
|
||||
uiColor.getRed(&r, green: &g, blue: &b, alpha: &a)
|
||||
|
||||
self.init(red: UInt16(r*65535), green: UInt16(g*65535), blue: UInt16(b*65535))
|
||||
}
|
||||
|
||||
convenience init(_ colorCodable: ColorCodable) {
|
||||
var cc = colorCodable
|
||||
if cc.red < 0 { cc.red.negate() }
|
||||
if cc.green < 0 { cc.green.negate() }
|
||||
if cc.blue < 0 { cc.blue.negate() }
|
||||
if cc.red > 1 { cc.red = 1 }
|
||||
if cc.green > 1 { cc.green = 1 }
|
||||
if cc.blue > 1 { cc.blue = 1 }
|
||||
|
||||
let red = UInt16(cc.red * 65535)
|
||||
let green = UInt16(cc.green * 65535)
|
||||
let blue = UInt16(cc.blue * 65535)
|
||||
self.init(red: red, green: green, blue: blue)
|
||||
}
|
||||
|
||||
var colorCodable: ColorCodable {
|
||||
let red = Double(self.red)/65535
|
||||
let green = Double(self.green)/65535
|
||||
let blue = Double(self.blue)/65535
|
||||
return ColorCodable(red: red, green: green, blue: blue)
|
||||
}
|
||||
|
||||
var suiColor: SwiftUI.Color {
|
||||
return Color(uiColor: self.uiColor)
|
||||
}
|
||||
|
||||
var uiColor: UIColor {
|
||||
let red = CGFloat(self.red)/65535
|
||||
let green = CGFloat(self.green)/65535
|
||||
let blue = CGFloat(self.blue)/65535
|
||||
return UIColor(red: red, green: green, blue: blue, alpha: 1)
|
||||
}
|
||||
|
||||
var luminance: Double {
|
||||
let r = Double(red)/65535
|
||||
let g = Double(green)/65535
|
||||
let b = Double(blue)/65535
|
||||
return (0.2126*r + 0.7152*g + 0.0722*b)
|
||||
}
|
||||
}
|
||||
|
||||
77
ShhShell/Themes/SwiftTerm.Color.swift
Normal file
77
ShhShell/Themes/SwiftTerm.Color.swift
Normal file
@@ -0,0 +1,77 @@
|
||||
//
|
||||
// SwiftTerm.Color.swift
|
||||
// ShhShell
|
||||
//
|
||||
// Created by neon443 on 08/07/2025.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
import SwiftTerm
|
||||
|
||||
extension SwiftTerm.Color {
|
||||
var suiColor: SwiftUI.Color {
|
||||
get {
|
||||
return Color(uiColor: self.uiColor)
|
||||
} set {
|
||||
let newOne = SwiftTerm.Color(newValue)
|
||||
self.red = newOne.red
|
||||
self.green = newOne.green
|
||||
self.blue = newOne.blue
|
||||
// let uiColor = UIColor(newValue)
|
||||
// var r: CGFloat = 0; var g: CGFloat = 0; var b: CGFloat = 0
|
||||
// uiColor.getRed(&r, green: &g, blue: &b, alpha: nil)
|
||||
// self.red = r*65535
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension SwiftTerm.Color {
|
||||
var colorCodable: ColorCodable {
|
||||
let red = Double(self.red)/65535
|
||||
let green = Double(self.green)/65535
|
||||
let blue = Double(self.blue)/65535
|
||||
return ColorCodable(red: red, green: green, blue: blue)
|
||||
}
|
||||
|
||||
var uiColor: UIColor {
|
||||
let red = CGFloat(self.red)/65535
|
||||
let green = CGFloat(self.green)/65535
|
||||
let blue = CGFloat(self.blue)/65535
|
||||
return UIColor(red: red, green: green, blue: blue, alpha: 1)
|
||||
}
|
||||
}
|
||||
|
||||
extension SwiftTerm.Color {
|
||||
convenience init(_ color: SwiftUI.Color) {
|
||||
var r: CGFloat = 0; var g: CGFloat = 0; var b: CGFloat = 0; var a: CGFloat = 0
|
||||
let uiColor = UIColor(color)
|
||||
uiColor.getRed(&r, green: &g, blue: &b, alpha: &a)
|
||||
|
||||
self.init(red: UInt16(r*65535), green: UInt16(g*65535), blue: UInt16(b*65535))
|
||||
}
|
||||
|
||||
convenience init(_ colorCodable: ColorCodable) {
|
||||
var cc = colorCodable
|
||||
if cc.red < 0 { cc.red.negate() }
|
||||
if cc.green < 0 { cc.green.negate() }
|
||||
if cc.blue < 0 { cc.blue.negate() }
|
||||
if cc.red > 1 { cc.red = 1 }
|
||||
if cc.green > 1 { cc.green = 1 }
|
||||
if cc.blue > 1 { cc.blue = 1 }
|
||||
|
||||
let red = UInt16(cc.red * 65535)
|
||||
let green = UInt16(cc.green * 65535)
|
||||
let blue = UInt16(cc.blue * 65535)
|
||||
self.init(red: red, green: green, blue: blue)
|
||||
}
|
||||
}
|
||||
|
||||
extension SwiftTerm.Color {
|
||||
var luminance: Double {
|
||||
let r = Double(red)/65535
|
||||
let g = Double(green)/65535
|
||||
let b = Double(blue)/65535
|
||||
return (0.2126*r + 0.7152*g + 0.0722*b)
|
||||
}
|
||||
}
|
||||
@@ -77,17 +77,6 @@ struct Theme: Hashable, Equatable, Identifiable {
|
||||
static var builtinThemes: [Theme] {
|
||||
return ThemesBuiltin.allCases.map({ decodeLocalTheme(fileName: $0.rawValue)! })
|
||||
}
|
||||
|
||||
// static func ==(lhs: Theme, rhs: Theme) -> Bool {
|
||||
// return lhs.ansi == rhs.ansi &&
|
||||
// lhs.foreground == rhs.foreground &&
|
||||
// lhs.background == rhs.background &&
|
||||
// lhs.cursor == rhs.cursor &&
|
||||
// lhs.cursorText == rhs.cursorText &&
|
||||
// lhs.bold == rhs.bold &&
|
||||
// lhs.selectedText == rhs.selectedText &&
|
||||
// lhs.selection == rhs.selection
|
||||
// }
|
||||
}
|
||||
|
||||
enum ThemesBuiltin: String, CaseIterable, Hashable, Equatable {
|
||||
@@ -105,3 +94,99 @@ enum ThemesBuiltin: String, CaseIterable, Hashable, Equatable {
|
||||
case gruvboxDark = "gruvboxDark"
|
||||
case ubuntu = "ubuntu"
|
||||
}
|
||||
|
||||
//extension ThemeCodable {
|
||||
// subscript(ansiIndex index: Int) -> SwiftUI.Color {
|
||||
// get {
|
||||
// switch index {
|
||||
// case 0: return ansi0.stColor.suiColor
|
||||
// case 1: return ansi1.stColor.suiColor
|
||||
// case 2: return ansi2.stColor.suiColor
|
||||
// case 3: return ansi3.stColor.suiColor
|
||||
// case 4: return ansi4.stColor.suiColor
|
||||
// case 5: return ansi5.stColor.suiColor
|
||||
// case 6: return ansi6.stColor.suiColor
|
||||
// case 7: return ansi7.stColor.suiColor
|
||||
// case 8: return ansi8.stColor.suiColor
|
||||
// case 9: return ansi9.stColor.suiColor
|
||||
// case 10: return ansi10.stColor.suiColor
|
||||
// case 11: return ansi11.stColor.suiColor
|
||||
// case 12: return ansi12.stColor.suiColor
|
||||
// case 13: return ansi13.stColor.suiColor
|
||||
// case 14: return ansi14.stColor.suiColor
|
||||
// case 15: return ansi15.stColor.suiColor
|
||||
// default: fatalError()
|
||||
// }
|
||||
// }
|
||||
// set {
|
||||
// let cc = ColorCodable(color: newValue)
|
||||
// switch index {
|
||||
// case 0:
|
||||
// ansi0.red = cc.red
|
||||
// ansi0.green = cc.green
|
||||
// ansi0.blue = cc.blue
|
||||
// case 1:
|
||||
// ansi1.red = cc.red
|
||||
// ansi1.green = cc.green
|
||||
// ansi1.blue = cc.blue
|
||||
// case 2:
|
||||
// ansi2.red = cc.red
|
||||
// ansi2.green = cc.green
|
||||
// ansi2.blue = cc.blue
|
||||
// case 3:
|
||||
// ansi3.red = cc.red
|
||||
// ansi3.green = cc.green
|
||||
// ansi3.blue = cc.blue
|
||||
// case 4:
|
||||
// ansi4.red = cc.red
|
||||
// ansi4.green = cc.green
|
||||
// ansi4.blue = cc.blue
|
||||
// case 5:
|
||||
// ansi5.red = cc.red
|
||||
// ansi5.green = cc.green
|
||||
// ansi5.blue = cc.blue
|
||||
// case 6:
|
||||
// ansi6.red = cc.red
|
||||
// ansi6.green = cc.green
|
||||
// ansi6.blue = cc.blue
|
||||
// case 7:
|
||||
// ansi7.red = cc.red
|
||||
// ansi7.green = cc.green
|
||||
// ansi7.blue = cc.blue
|
||||
// case 8:
|
||||
// ansi8.red = cc.red
|
||||
// ansi8.green = cc.green
|
||||
// ansi8.blue = cc.blue
|
||||
// case 9:
|
||||
// ansi9.red = cc.red
|
||||
// ansi9.green = cc.green
|
||||
// ansi9.blue = cc.blue
|
||||
// case 10:
|
||||
// ansi10.red = cc.red
|
||||
// ansi10.green = cc.green
|
||||
// ansi10.blue = cc.blue
|
||||
// case 11:
|
||||
// ansi11.red = cc.red
|
||||
// ansi11.green = cc.green
|
||||
// ansi11.blue = cc.blue
|
||||
// case 12:
|
||||
// ansi12.red = cc.red
|
||||
// ansi12.green = cc.green
|
||||
// ansi12.blue = cc.blue
|
||||
// case 13:
|
||||
// ansi13.red = cc.red
|
||||
// ansi13.green = cc.green
|
||||
// ansi13.blue = cc.blue
|
||||
// case 14:
|
||||
// ansi14.red = cc.red
|
||||
// ansi14.green = cc.green
|
||||
// ansi14.blue = cc.blue
|
||||
// case 15:
|
||||
// ansi15.red = cc.red
|
||||
// ansi15.green = cc.green
|
||||
// ansi15.blue = cc.blue
|
||||
// default: fatalError()
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
@@ -88,99 +88,3 @@ extension ThemeCodable {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension ThemeCodable {
|
||||
subscript(ansiIndex index: Int) -> SwiftUI.Color {
|
||||
get {
|
||||
switch index {
|
||||
case 0: return ansi0.stColor.suiColor
|
||||
case 1: return ansi1.stColor.suiColor
|
||||
case 2: return ansi2.stColor.suiColor
|
||||
case 3: return ansi3.stColor.suiColor
|
||||
case 4: return ansi4.stColor.suiColor
|
||||
case 5: return ansi5.stColor.suiColor
|
||||
case 6: return ansi6.stColor.suiColor
|
||||
case 7: return ansi7.stColor.suiColor
|
||||
case 8: return ansi8.stColor.suiColor
|
||||
case 9: return ansi9.stColor.suiColor
|
||||
case 10: return ansi10.stColor.suiColor
|
||||
case 11: return ansi11.stColor.suiColor
|
||||
case 12: return ansi12.stColor.suiColor
|
||||
case 13: return ansi13.stColor.suiColor
|
||||
case 14: return ansi14.stColor.suiColor
|
||||
case 15: return ansi15.stColor.suiColor
|
||||
default: fatalError()
|
||||
}
|
||||
}
|
||||
set {
|
||||
let cc = ColorCodable(color: newValue)
|
||||
switch index {
|
||||
case 0:
|
||||
ansi0.red = cc.red
|
||||
ansi0.green = cc.green
|
||||
ansi0.blue = cc.blue
|
||||
case 1:
|
||||
ansi1.red = cc.red
|
||||
ansi1.green = cc.green
|
||||
ansi1.blue = cc.blue
|
||||
case 2:
|
||||
ansi2.red = cc.red
|
||||
ansi2.green = cc.green
|
||||
ansi2.blue = cc.blue
|
||||
case 3:
|
||||
ansi3.red = cc.red
|
||||
ansi3.green = cc.green
|
||||
ansi3.blue = cc.blue
|
||||
case 4:
|
||||
ansi4.red = cc.red
|
||||
ansi4.green = cc.green
|
||||
ansi4.blue = cc.blue
|
||||
case 5:
|
||||
ansi5.red = cc.red
|
||||
ansi5.green = cc.green
|
||||
ansi5.blue = cc.blue
|
||||
case 6:
|
||||
ansi6.red = cc.red
|
||||
ansi6.green = cc.green
|
||||
ansi6.blue = cc.blue
|
||||
case 7:
|
||||
ansi7.red = cc.red
|
||||
ansi7.green = cc.green
|
||||
ansi7.blue = cc.blue
|
||||
case 8:
|
||||
ansi8.red = cc.red
|
||||
ansi8.green = cc.green
|
||||
ansi8.blue = cc.blue
|
||||
case 9:
|
||||
ansi9.red = cc.red
|
||||
ansi9.green = cc.green
|
||||
ansi9.blue = cc.blue
|
||||
case 10:
|
||||
ansi10.red = cc.red
|
||||
ansi10.green = cc.green
|
||||
ansi10.blue = cc.blue
|
||||
case 11:
|
||||
ansi11.red = cc.red
|
||||
ansi11.green = cc.green
|
||||
ansi11.blue = cc.blue
|
||||
case 12:
|
||||
ansi12.red = cc.red
|
||||
ansi12.green = cc.green
|
||||
ansi12.blue = cc.blue
|
||||
case 13:
|
||||
ansi13.red = cc.red
|
||||
ansi13.green = cc.green
|
||||
ansi13.blue = cc.blue
|
||||
case 14:
|
||||
ansi14.red = cc.red
|
||||
ansi14.green = cc.green
|
||||
ansi14.blue = cc.blue
|
||||
case 15:
|
||||
ansi15.red = cc.red
|
||||
ansi15.green = cc.green
|
||||
ansi15.blue = cc.blue
|
||||
default: fatalError()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user