diff --git a/ShhShell/Terminal/CRT.metal b/ShhShell/Terminal/CRT.metal index 65ab852..f2576be 100644 --- a/ShhShell/Terminal/CRT.metal +++ b/ShhShell/Terminal/CRT.metal @@ -6,9 +6,25 @@ // #include +#include using namespace metal; //learning shaders stuff here +[[ stitchable ]] half4 loupe(float2 pos, SwiftUI::Layer layer, float2 size, float2 touch) { + float maxDist = 0.1; + float2 uv = pos/size; + float2 center = touch/size; + float2 delta = uv-center; + float aspectRatio = size.x/size.y; + float dist = (delta.x * delta.x) + (delta.y * delta.y) / aspectRatio; + float totalZoom = 1; + if(dist < maxDist) { + totalZoom /= 2; + } + float2 newPos = delta * totalZoom + center; + return layer.sample(newPos*size); +} + [[ stitchable ]] float2 waveFlag(float2 pos, float time, float2 size) { float2 distance = pos/size; pos.y += sin(time*5 + pos.x/20) * 5 * distance.x; diff --git a/ShhShell/Views/Settings/SettingsView.swift b/ShhShell/Views/Settings/SettingsView.swift index b7518b8..850004a 100644 --- a/ShhShell/Views/Settings/SettingsView.swift +++ b/ShhShell/Views/Settings/SettingsView.swift @@ -15,6 +15,7 @@ struct SettingsView: View { @State private var blinkCursor: Int = 0 @State var blinkTimer: Timer? @State private var start = Date.now + @State private var touch = CGPoint.zero func startBlinkingIfNeeded() { if hostsManager.settings.cursorType.blink { @@ -42,19 +43,20 @@ struct SettingsView: View { Section("Shaded") { TimelineView(.animation) { tl in let time = start.distance(to: tl.date) -// Image(systemName: "figure.walk.circle") -// .font(.system(size: 300)) -// .foregroundStyle(.blue) -// .distortionEffect( -// ShaderLibrary.wave( -// .float(time) -// ), -// maxSampleOffset: .zero -// ) - Image(systemName: "square.and.arrow.up") - .font(.system(size: 300)) + // Image(systemName: "figure.walk.circle") + // .font(.system(size: 300)) + // .foregroundStyle(.blue) + // .distortionEffect( + // ShaderLibrary.wave( + // .float(time) + // ), + // maxSampleOffset: .zero + // ) + Rectangle() + .frame(width: 200, height: 100) + .padding(.vertical, 20) .foregroundStyle(.red) - .drawingGroup() + .compositingGroup() .visualEffect { content, proxy in @@ -63,22 +65,25 @@ struct SettingsView: View { .float(time), .float2(proxy.size) ), - maxSampleOffset: .zero + maxSampleOffset: CGSize(width: 0, height: 40) ) } - .border(.red) + .gesture( + DragGesture(minimumDistance: 0) + .onChanged { touch = $0.location} + ) } } - + Section("Shaded") { TimelineView(.animation) { tl in let time = start.distance(to: tl.date) -// Image(systemName: "figure.walk.circle") -// .font(.system(size: 300)) -// .foregroundStyle(.blue) -// .colorEffect(ShaderLibrary.rainbow( -// .float(time) -// )) + // Image(systemName: "figure.walk.circle") + // .font(.system(size: 300)) + // .foregroundStyle(.blue) + // .colorEffect(ShaderLibrary.rainbow( + // .float(time) + // )) } } Section("Original") { @@ -102,7 +107,7 @@ struct SettingsView: View { ) } } - + Section("Cursor") { HStack(spacing: 20) { Text("neon443") @@ -128,7 +133,7 @@ struct SettingsView: View { .padding(.top, 36) } } -// .padding(.leading, 248) + // .padding(.leading, 248) .onChange(of: hostsManager.settings.cursorType.blink) { _ in startBlinkingIfNeeded() } @@ -215,7 +220,7 @@ struct SettingsView: View { hostsManager.saveSettings() } } - } + } } #Preview {