Skip to content

Instantly share code, notes, and snippets.

@d-srd
d-srd / DarkMode.swift
Last active September 29, 2019 15:53
enum DarkMode {
static var isEnabled: Bool {
let script = """
tell application "System Events"
tell appearance preferences
get properties
return dark mode
end tell
end tell
"""
GeometryReader { geometry in
ScrollView {
ForEach(self.messages) { message in
MessageView(message: message)
.padding(.horizontal, 8)
.padding(EdgeInsets(
top: 0,
leading: message.sender == .me ? geometry.size.width * 0.5 : 0 ,
bottom: 0,
trailing: message.sender == .me ? 0 : geometry.size.width * 0.5))
GeometryReader { geometry in
ForEach(self.messages) { message in
MessageView(message: message)
.padding(.horizontal, 8)
.padding(EdgeInsets(
top: 0,
leading: message.sender == .me ? geometry.size.width * 0.5 : 0 ,
bottom: 0,
trailing: message.sender == .me ? 0 : geometry.size.width * 0.5))
}
.padding(EdgeInsets(
top: 0,
leading: message.sender == .me ? 64 : 0 ,
bottom: 0,
trailing: message.sender == .me ? 0 : 64))
struct MessageListView: View {
let messages: [Message]
var body: some View {
ForEach(self.messages) { message in
MessageView(message: message)
.padding(.horizontal, 8)
}
}
}
struct MessageView: View {
let message: Message
var body: some View {
HStack {
if message.sender == .me {
Spacer()
}
Text(message.content)
.multilineTextAlignment(.leading)
.fixedSize(horizontal: false, vertical: true)
struct MessageView: View {
let message: Message
var body: some View {
Text(message.content)
.multilineTextAlignment(.leading)
.fixedSize(horizontal: false, vertical: true)
.padding(.horizontal, 12)
.padding(.vertical, 4)
.background(message.sender == .me ? Color.blue : Color.gray)
.foregroundColor(message.sender == .me ? Color.white : Color.black)
struct Message: Hashable, Identifiable {
enum Sender: Hashable {
case me
case other(named: String)
}
let id: Int
let sender: Sender
let content: String
}
struct HighScoreView: View {
@EnvironmentObject var highScore: HighScore
var body: some View {
Text(highScore.value)
}
}
struct UserInputView: View {
@ObservedObject var user: User
var body: some View {
VStack {
Text(user.name)
Text(user.surname)
}
}
}