Browse Source

Add fonts

- Supports choosing from serif, sans, or mono
- Remembers preference
- Submits the type with the post
master
Matt Baer 4 years ago
parent
commit
cda7517224
4 changed files with 133 additions and 1 deletions
  1. +45
    -1
      writeas/AppDelegate.swift
  2. +59
    -0
      writeas/Base.lproj/Main.storyboard
  3. +24
    -0
      writeas/Preferences.swift
  4. +5
    -0
      writeas/ViewController.swift

+ 45
- 1
writeas/AppDelegate.swift View File

@@ -14,12 +14,29 @@ class AppDelegate: NSObject, NSApplicationDelegate {
var vc: ViewController?

@IBOutlet weak var nightModeItem: NSMenuItem!
@IBOutlet weak var formatFontSerifItem: NSMenuItem!
@IBOutlet weak var formatFontSansItem: NSMenuItem!
@IBOutlet weak var formatFontMonoItem: NSMenuItem!

func applicationDidFinishLaunching(_ aNotification: Notification) {
// Set night mode state
nightModeItem.state = Int(UserDefaults.standard.string(forKey: "night_mode_state") ?? String(NSOffState))!
if nightModeItem.state == NSOnState {
vc?.toggle(isNight: true)
}

// Set font
let font = Preferences.getFont()
if font == Preferences.PostFont.serif {
formatFontSerifItem.state = NSOnState
vc?.setFont(.serif)
} else if font == Preferences.PostFont.sans {
formatFontSansItem.state = NSOnState
vc?.setFont(.sans)
} else if font == Preferences.PostFont.mono {
formatFontMonoItem.state = NSOnState
vc?.setFont(.mono)
}
}

func applicationWillTerminate(_ aNotification: Notification) {
@@ -39,6 +56,33 @@ class AppDelegate: NSObject, NSApplicationDelegate {
UserDefaults.standard.set(String(sender.state), forKey: "night_mode_state")
}

@IBAction func setFontSerif(_ sender: NSMenuItem) {
deselectAllFonts()
sender.state = NSOnState
vc?.setFont(.serif)
Preferences.setFont(.serif)
}

@IBAction func setFontSans(_ sender: NSMenuItem) {
deselectAllFonts()
sender.state = NSOnState
vc?.setFont(.sans)
Preferences.setFont(.sans)
}

@IBAction func setFontMono(_ sender: NSMenuItem) {
deselectAllFonts()
sender.state = NSOnState
vc?.setFont(.mono)
Preferences.setFont(.mono)
}

func deselectAllFonts() {
formatFontSerifItem.state = NSOffState
formatFontSansItem.state = NSOffState
formatFontMonoItem.state = NSOffState
}

@IBAction func saveDocument(_ sender: AnyObject) {
vc?.saveDocument()
}


+ 59
- 0
writeas/Base.lproj/Main.storyboard View File

@@ -235,6 +235,62 @@ DQ
</items>
</menu>
</menuItem>
<menuItem title="Format" id="jxT-CU-nIS">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Format" id="GEO-Iw-cKr">
<items>
<menuItem title="Font" id="Gi5-1S-RQB">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Font" systemMenu="font" id="aXa-aM-Jaq">
<items>
<menuItem title="Serif" tag="2" id="GB9-OM-e27">
<attributedString key="attributedTitle">
<fragment content="Serif">
<attributes>
<font key="NSFont" size="13" name="Lora-Regular"/>
<paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
</attributedString>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="setFontSerif:" target="Voe-Tx-rLC" id="B5Z-AG-dYj"/>
</connections>
</menuItem>
<menuItem title="Sans-serif" tag="1" id="Vjx-xi-njq">
<attributedString key="attributedTitle">
<fragment content="Sans-serif">
<attributes>
<font key="NSFont" size="13" name="OpenSans-Regular"/>
<paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
</attributedString>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="setFontSans:" target="Voe-Tx-rLC" id="BCb-aN-CNi"/>
</connections>
</menuItem>
<menuItem title="Monospace" id="WRG-CD-K1S">
<attributedString key="attributedTitle">
<fragment content="Monospace">
<attributes>
<font key="NSFont" size="13" name="Hack-Regular"/>
<paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
</attributedString>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="setFontMono:" target="Voe-Tx-rLC" id="bck-1A-bhC"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="View" id="H8h-7b-M4v">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="View" id="HyV-fh-RgO">
@@ -304,6 +360,9 @@ DQ
</application>
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Write_as" customModuleProvider="target">
<connections>
<outlet property="formatFontMonoItem" destination="WRG-CD-K1S" id="919-ab-Ig1"/>
<outlet property="formatFontSansItem" destination="Vjx-xi-njq" id="LIr-Ct-Ied"/>
<outlet property="formatFontSerifItem" destination="GB9-OM-e27" id="rVW-JC-eyr"/>
<outlet property="nightModeItem" destination="jYO-0u-qN9" id="8xF-SV-B70"/>
</connections>
</customObject>


+ 24
- 0
writeas/Preferences.swift View File

@@ -6,10 +6,34 @@
import Foundation

class Preferences {
enum PostFont: String {
case serif = "norm"
case sans = "sans"
case mono = "wrap"

var typeface: String {
switch self {
case .serif:
return "Lora"
case .sans:
return "Open Sans"
case .mono:
return "Hack"
}
}
}

class func getFontSize() -> CGFloat {
let size = Int(UserDefaults.standard.string(forKey: "editor_text_size") ?? "16") ?? 16

return CGFloat(size)
}

class func getFont() -> PostFont {
return PostFont(rawValue: UserDefaults.standard.string(forKey: "editor_font") ?? PostFont.serif.rawValue) ?? PostFont.serif
}

class func setFont(_ font: PostFont) {
UserDefaults.standard.set(font.rawValue, forKey: "editor_font")
}
}

+ 5
- 0
writeas/ViewController.swift View File

@@ -99,6 +99,7 @@ class ViewController: NSViewController, NSTextViewDelegate, NSUserNotificationCe
DispatchQueue.global(qos: .background).async {
let task = Process()
task.launchPath = Bundle.main.executablePath! + "/../../Resources/writeas"
task.arguments = ["--font", Preferences.getFont().rawValue]
let pipe = Pipe()
task.standardInput = pipe
task.launch()
@@ -148,5 +149,9 @@ class ViewController: NSViewController, NSTextViewDelegate, NSUserNotificationCe
UserDefaults.standard.set(String(Int(size)), forKey: "editor_text_size")
configureWindow()
}

func setFont(_ font: Preferences.PostFont) {
self.writerText.font = NSFont(name: font.typeface, size: Preferences.getFontSize())
}
}


Loading…
Cancel
Save