added applyTheme() function

added SwiftTerm.Color.uiColor extension to get a UIColor from SwiftTerm.Color
rename SSHTerminalView to SSHTerminalDelegate
This commit is contained in:
neon443
2025-06-27 10:38:03 +01:00
parent 73282fa65d
commit f14492d3fe
4 changed files with 29 additions and 9 deletions

View File

@@ -7,6 +7,7 @@
import Foundation
import SwiftTerm
import SwiftUI
struct Theme: Hashable, Equatable {
var name: String
@@ -21,7 +22,6 @@ struct Theme: Hashable, Equatable {
static func fromiTermColors(name: String, data: Data?) -> Theme? {
guard let data else { return nil }
guard let string = String(data: data, encoding: .utf8) else { return nil }
let decoder = PropertyListDecoder()
@@ -96,7 +96,7 @@ struct ThemeCodable: Codable {
}
extension ThemeCodable {
var ansi: [Color] {
var ansi: [SwiftTerm.Color] {
let arr = [ansi0, ansi1, ansi2, ansi3, ansi4, ansi5, ansi6, ansi7, ansi8, ansi9, ansi10, ansi11, ansi12, ansi13, ansi14, ansi15]
return arr.map(SwiftTerm.Color.init)
}
@@ -123,3 +123,12 @@ extension SwiftTerm.Color {
self.init(red: red, green: green, blue: blue)
}
}
extension SwiftTerm.Color {
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)
}
}

View File

@@ -10,7 +10,7 @@ import UIKit
import SwiftTerm
@MainActor
final class SSHTerminalView: TerminalView, Sendable, @preconcurrency TerminalViewDelegate {
final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency TerminalViewDelegate {
var handler: SSHHandler?
public convenience init(frame: CGRect, handler: SSHHandler) {
@@ -48,6 +48,17 @@ final class SSHTerminalView: TerminalView, Sendable, @preconcurrency TerminalVie
}
}
func applyTheme(_ theme: Theme) {
getTerminal().installPalette(colors: theme.ansi)
getTerminal().foregroundColor = theme.foreground
getTerminal().backgroundColor = theme.background
caretColor = theme.cursor.uiColor
selectedTextBackgroundColor = theme.selection.uiColor
// TODO: selectedtext and cursor colors
}
public override init(frame: CGRect) {
super.init(frame: frame)
terminalDelegate = self

View File

@@ -14,7 +14,7 @@ struct TerminalController: UIViewRepresentable {
@ObservedObject var handler: SSHHandler
final class TerminalViewContainer {
@MainActor static var shared: SSHTerminalView?
@MainActor static var shared: SSHTerminalDelegate?
}
func makeUIView(context: Context) -> TerminalView {
@@ -22,7 +22,7 @@ struct TerminalController: UIViewRepresentable {
return existing
}
let tv = SSHTerminalView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: .zero), handler: handler)
let tv = SSHTerminalDelegate(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: .zero), handler: handler)
tv.translatesAutoresizingMaskIntoConstraints = false
tv.autoresizingMask = [.flexibleWidth, .flexibleHeight]