Skip to content
This repository has been archived by the owner on Feb 6, 2022. It is now read-only.

Commit

Permalink
Added conditional translucency options
Browse files Browse the repository at this point in the history
  • Loading branch information
JadenGeller committed Oct 26, 2015
1 parent f7914ce commit a4d2ccd
Show file tree
Hide file tree
Showing 3 changed files with 162 additions and 59 deletions.
119 changes: 74 additions & 45 deletions Helium/Helium/Base.lproj/Main.storyboard
Original file line number Diff line number Diff line change
Expand Up @@ -117,68 +117,97 @@ CA
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Appearance" id="HyV-fh-RgO">
<items>
<menuItem title="Translucent" keyEquivalent="t" id="wnn-Wb-fUq">
<connections>
<action selector="translucencyPress:" target="Ady-hI-5gd" id="orR-QV-BPD"/>
</connections>
</menuItem>
<menuItem title="Opacity" id="wlj-XI-Lng">
<menuItem title="Translucency" id="RVf-yr-XjB" userLabel="Translucency">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Opacity" systemMenu="window" id="5ao-Bb-P10">
<menu key="submenu" title="Translucency" systemMenu="window" id="fPu-ZA-vuX">
<items>
<menuItem title="10%" keyEquivalent="1" id="SpQ-gr-DsG">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="RXN-qL-deK"/>
</connections>
</menuItem>
<menuItem title="20%" keyEquivalent="2" id="B4x-FQ-kVj">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="SJU-4R-onV"/>
</connections>
</menuItem>
<menuItem title="30%" keyEquivalent="3" id="S1G-zW-xWx">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="UJH-Ul-L4m"/>
</connections>
</menuItem>
<menuItem title="40%" keyEquivalent="4" id="sB8-xz-mYZ">
<menuItem title="Enabled" keyEquivalent="t" id="wnn-Wb-fUq">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="sew-bc-Bz1"/>
<action selector="translucencyPress:" target="Ady-hI-5gd" id="orR-QV-BPD"/>
</connections>
</menuItem>
<menuItem title="50%" keyEquivalent="5" id="BNJ-gh-yGK">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="Aa8-hl-bKq"/>
</connections>
</menuItem>
<menuItem title="60%" state="on" keyEquivalent="6" id="iS5-Jd-p7Q">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="du4-a9-MJw"/>
</connections>
</menuItem>
<menuItem title="70%" keyEquivalent="7" id="0pX-17-4u5">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="AjV-cx-Ila"/>
</connections>
<menuItem title="Opacity" id="wlj-XI-Lng">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Opacity" systemMenu="window" id="5ao-Bb-P10">
<items>
<menuItem title="10%" keyEquivalent="1" id="SpQ-gr-DsG">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="RXN-qL-deK"/>
</connections>
</menuItem>
<menuItem title="20%" keyEquivalent="2" id="B4x-FQ-kVj">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="SJU-4R-onV"/>
</connections>
</menuItem>
<menuItem title="30%" keyEquivalent="3" id="S1G-zW-xWx">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="UJH-Ul-L4m"/>
</connections>
</menuItem>
<menuItem title="40%" keyEquivalent="4" id="sB8-xz-mYZ">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="sew-bc-Bz1"/>
</connections>
</menuItem>
<menuItem title="50%" keyEquivalent="5" id="BNJ-gh-yGK">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="Aa8-hl-bKq"/>
</connections>
</menuItem>
<menuItem title="60%" state="on" keyEquivalent="6" id="iS5-Jd-p7Q">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="du4-a9-MJw"/>
</connections>
</menuItem>
<menuItem title="70%" keyEquivalent="7" id="0pX-17-4u5">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="AjV-cx-Ila"/>
</connections>
</menuItem>
<menuItem title="80%" keyEquivalent="8" id="mJa-We-e3P">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="Ets-Bj-vej"/>
</connections>
</menuItem>
<menuItem title="90%" keyEquivalent="9" id="JLI-El-Rtf">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="jqj-3n-Dci"/>
</connections>
</menuItem>
<menuItem title="100%" keyEquivalent="0" id="2NP-ZM-pKs">
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="wDd-yl-gr1"/>
</connections>
</menuItem>
</items>
<connections>
<outlet property="delegate" destination="Voe-Tx-rLC" id="hNg-oj-Cad"/>
</connections>
</menu>
</menuItem>
<menuItem title="80%" keyEquivalent="8" id="mJa-We-e3P">
<menuItem isSeparatorItem="YES" id="52B-gm-nq5"/>
<menuItem title="Always" state="on" id="UhQ-aG-PEv" userLabel="Always">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="Ets-Bj-vej"/>
<action selector="alwaysPreferencePress:" target="Ady-hI-5gd" id="HmW-j0-3Nx"/>
</connections>
</menuItem>
<menuItem title="90%" keyEquivalent="9" id="JLI-El-Rtf">
<menuItem title="Mouse Over" id="Tdi-1w-idY">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="jqj-3n-Dci"/>
<action selector="overPreferencePress:" target="Ady-hI-5gd" id="mAm-Yw-rQF"/>
</connections>
</menuItem>
<menuItem title="100%" keyEquivalent="0" id="2NP-ZM-pKs">
<menuItem title="Mouse Outside" id="keL-ga-Rmv">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="percentagePress:" target="Ady-hI-5gd" id="wDd-yl-gr1"/>
<action selector="outsidePreferencePress:" target="Ady-hI-5gd" id="9TA-nd-SjS"/>
</connections>
</menuItem>
</items>
<connections>
<outlet property="delegate" destination="Voe-Tx-rLC" id="hNg-oj-Cad"/>
<outlet property="delegate" destination="Voe-Tx-rLC" id="Pga-5b-ccP"/>
</connections>
</menu>
</menuItem>
Expand Down
101 changes: 87 additions & 14 deletions Helium/Helium/HeliumPanelController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,76 @@ import AppKit

class HeliumPanelController : NSWindowController {

var mouseOver: Bool = false
override func mouseEntered(theEvent: NSEvent) {
mouseOver = true
updateTranslucency()
}

override func mouseExited(theEvent: NSEvent) {
mouseOver = false
updateTranslucency()
}

var alpha: CGFloat = 0.6 { //default
didSet {
if translucent {
panel.alphaValue = alpha
}
updateTranslucency()
}
}

func updateTranslucency() {
currentlyTranslucent = shouldBeTranslucent()
}

func shouldBeTranslucent() -> Bool {
/* Implicit Arguments
* - mouseOver
* - translucencyPreference
* - tranlucencyEnalbed
*/

guard translucencyEnabled else { return false }

switch translucencyPreference {
case .Always:
return true
case .MouseOver:
return mouseOver
case .MouseOutside:
return !mouseOver
}
}

enum TranslucencyPreference {
case Always
case MouseOver
case MouseOutside
}

var translucencyPreference: TranslucencyPreference = .Always {
didSet {
updateTranslucency()
}
}

var translucencyEnabled: Bool = false {
didSet {
updateTranslucency()
}
}

var translucent: Bool = false {
var currentlyTranslucent: Bool = false {
didSet {
if !NSApplication.sharedApplication().active {
panel.ignoresMouseEvents = translucent
panel.ignoresMouseEvents = currentlyTranslucent
}
if translucent {
if currentlyTranslucent {
panel.animator().alphaValue = alpha
panel.opaque = false
panel.alphaValue = alpha
}
else {
panel.opaque = true
panel.alphaValue = 1.0
panel.animator().alphaValue = 1
}
}
}
Expand Down Expand Up @@ -57,6 +107,29 @@ class HeliumPanelController : NSWindowController {

//MARK: IBActions

func disabledAllMouseOverPreferences(allMenus: [NSMenuItem]) {
// GROSS HARD CODED
for x in allMenus.dropFirst(2) {
x.state = NSOffState
}
}

@IBAction func alwaysPreferencePress(sender: NSMenuItem) {
disabledAllMouseOverPreferences(sender.menu!.itemArray)
translucencyPreference = .Always
sender.state = NSOnState
}
@IBAction func overPreferencePress(sender: NSMenuItem) {
disabledAllMouseOverPreferences(sender.menu!.itemArray)
translucencyPreference = .MouseOver
sender.state = NSOnState
}
@IBAction func outsidePreferencePress(sender: NSMenuItem) {
disabledAllMouseOverPreferences(sender.menu!.itemArray)
translucencyPreference = .MouseOutside
sender.state = NSOnState
}

@IBAction func translucencyPress(sender: NSMenuItem) {
if sender.state == NSOnState {
sender.state = NSOffState
Expand All @@ -75,7 +148,7 @@ class HeliumPanelController : NSWindowController {
sender.state = NSOnState
let value = sender.title.substringToIndex(sender.title.endIndex.advancedBy(-1))
if let alpha = Int(value) {
didUpdateAlpha(NSNumber(integer: alpha))
didUpdateAlpha(CGFloat(alpha))
}
}

Expand Down Expand Up @@ -137,20 +210,20 @@ class HeliumPanelController : NSWindowController {
}

func willResignActive() {
if translucent {
if currentlyTranslucent {
panel.ignoresMouseEvents = true
}
}

func didEnableTranslucency() {
translucent = true
translucencyEnabled = true
}

func didDisableTranslucency() {
translucent = false
translucencyEnabled = false
}

func didUpdateAlpha(newAlpha: NSNumber) {
alpha = CGFloat(newAlpha.doubleValue) / CGFloat(100.0)
func didUpdateAlpha(newAlpha: CGFloat) {
alpha = newAlpha / 100
}
}
1 change: 1 addition & 0 deletions Helium/Helium/WebViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class WebViewController: NSViewController, WKNavigationDelegate {

override func viewDidLoad() {
super.viewDidLoad()
view.addTrackingRect(view.bounds, owner: self, userData: nil, assumeInside: false)

NSNotificationCenter.defaultCenter().addObserver(self, selector: "loadURLObject:", name: "HeliumLoadURL", object: nil)

Expand Down

0 comments on commit a4d2ccd

Please sign in to comment.