├── .gitignore
├── LICENSE
├── README.md
├── SimpleClock
├── SimpleClock.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
├── SimpleClock
│ ├── ClockSkin.swift
│ ├── Date.swift
│ ├── Resources
│ │ ├── Info.plist
│ │ ├── thumbnail.png
│ │ ├── thumbnail@2x.png
│ │ └── thumbnail_source.png
│ ├── SimpleClock.swift
│ └── Skins
│ │ ├── AscotClock.swift
│ │ ├── BraunBN0032Dark.swift
│ │ ├── FiveOClock.swift
│ │ ├── KundoQuartzRepetitionWestGermanyWecker.swift
│ │ ├── PunktAC01AlarmClock.swift
│ │ ├── SeikoStandardKX308K.swift
│ │ ├── SeikoStandardKX308KDark.swift
│ │ ├── SeikoStandardKX308W.swift
│ │ ├── SeikoStandardKX308WDark.swift
│ │ ├── SwissRailwayClockDark.swift
│ │ ├── SwissRailwayClockLight.swift
│ │ └── TimeSaverClock.swift
└── SimpleClockDemo
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ └── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Base.lproj
│ └── Main.storyboard
│ ├── Info.plist
│ └── MainViewController.swift
├── icon.png
├── icon.svg
├── images
├── BraunBN0032Dark.png
├── FiveOClock.png
├── KundoQuartzRepetitionWestGermanyWecker.png
├── SeikoStandardKX308K.png
├── SwissRailwayClockDark.png
└── SwissRailwayClockLight.png
└── scripts
└── release.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata/
19 |
20 | ## Other
21 | *.moved-aside
22 | *.xccheckout
23 | *.xcscmblueprint
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 | *.ipa
28 | *.dSYM.zip
29 | *.dSYM
30 |
31 | ## Playgrounds
32 | timeline.xctimeline
33 | playground.xcworkspace
34 |
35 | # Swift Package Manager
36 | #
37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
38 | # Packages/
39 | # Package.pins
40 | .build/
41 |
42 | # CocoaPods
43 | #
44 | # We recommend against adding the Pods directory to your .gitignore. However
45 | # you should judge for yourself, the pros and cons are mentioned at:
46 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
47 | #
48 | # Pods/
49 |
50 | # Carthage
51 | #
52 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
53 | # Carthage/Checkouts
54 |
55 | Carthage/Build
56 |
57 | # fastlane
58 | #
59 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
60 | # screenshots whenever they are needed.
61 | # For more information about the recommended setup visit:
62 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
63 |
64 | fastlane/report.xml
65 | fastlane/Preview.html
66 | fastlane/screenshots
67 | fastlane/test_output
68 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2016 - 2018, Pascal Wagler
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | * Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | * Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | * Neither the name of the copyright holder nor the names of its
17 | contributors may be used to endorse or promote products derived from
18 | this software without specific prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # Simple Clock Screensaver
4 |
5 | A simple clock screensaver for macOS written entirely in Swift. It has support for skins/themes (in source code only) and can be styled to match a wide variety of analogue wall clocks.
6 |
7 | ## Skins
8 |
9 | 
10 |
11 | 
12 |
13 | 
14 |
15 | 
16 |
17 | 
18 |
19 | 
20 |
21 | ## Installation
22 |
23 | - Download the [latest version](https://github.com/Wandmalfarbe/Simple-Clock-Screensaver/releases/latest) of the screensaver from the releases page.
24 | - Extract the ZIP file by double-clicking on it.
25 | - Install the screensaver by double-clicking on the file with the extension `.saver`.
26 |
27 | ## Credits
28 |
29 | - The screensaver uses a `Date` extension by Daniel Love.
30 |
31 | ## License
32 |
33 | This project is open source licensed under the BSD 3-Clause License. Please see the [LICENSE file](LICENSE) for more information.
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 500111511D3000850049411A /* SwissRailwayClockDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 500111501D3000850049411A /* SwissRailwayClockDark.swift */; };
11 | 501C52AF1D33F112002F845D /* BraunBN0032Dark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501C52AE1D33F112002F845D /* BraunBN0032Dark.swift */; };
12 | 501DF9E01D54B1AD003A6DC9 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501DF9DF1D54B1AD003A6DC9 /* MainViewController.swift */; };
13 | 501DF9E11D54BBCE003A6DC9 /* PunktAC01AlarmClock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507B2FA61D52551E002218B6 /* PunktAC01AlarmClock.swift */; };
14 | 504BEDC11D4E539700437ED2 /* KundoQuartzRepetitionWestGermanyWecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504BEDC01D4E539700437ED2 /* KundoQuartzRepetitionWestGermanyWecker.swift */; };
15 | 504BEDC31D4E5AB100437ED2 /* SeikoStandardKX308K.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504BEDC21D4E5AB100437ED2 /* SeikoStandardKX308K.swift */; };
16 | 504BEDC51D4E70DD00437ED2 /* SeikoStandardKX308KDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504BEDC41D4E70DD00437ED2 /* SeikoStandardKX308KDark.swift */; };
17 | 504BEDC71D4E727400437ED2 /* SeikoStandardKX308W.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504BEDC61D4E727400437ED2 /* SeikoStandardKX308W.swift */; };
18 | 504BEDC91D4E72AE00437ED2 /* SeikoStandardKX308WDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504BEDC81D4E72AE00437ED2 /* SeikoStandardKX308WDark.swift */; };
19 | 504BEDCB1D4E74E700437ED2 /* FiveOClock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504BEDCA1D4E74E700437ED2 /* FiveOClock.swift */; };
20 | 5055063B1D2FD38B00C647A3 /* SwissRailwayClockLight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5055063A1D2FD38B00C647A3 /* SwissRailwayClockLight.swift */; };
21 | 5055063D1D2FD5AA00C647A3 /* ClockSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5055063C1D2FD5AA00C647A3 /* ClockSkin.swift */; };
22 | 5070EF431BC1719200BB18C5 /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5070EF421BC1719200BB18C5 /* Date.swift */; };
23 | 5077845B1D34493300A7A6B5 /* thumbnail.png in Resources */ = {isa = PBXBuildFile; fileRef = 507784591D34493300A7A6B5 /* thumbnail.png */; };
24 | 5077845C1D34493300A7A6B5 /* thumbnail@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5077845A1D34493300A7A6B5 /* thumbnail@2x.png */; };
25 | 507B2FA71D52551E002218B6 /* PunktAC01AlarmClock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507B2FA61D52551E002218B6 /* PunktAC01AlarmClock.swift */; };
26 | 50D1BF881BC1388A0023EFF5 /* SimpleClock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50D1BF871BC1388A0023EFF5 /* SimpleClock.swift */; };
27 | 50DB822F1D300300005A4E5D /* AscotClock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DB822E1D300300005A4E5D /* AscotClock.swift */; };
28 | 50DB82311D3004F2005A4E5D /* TimeSaverClock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DB82301D3004F2005A4E5D /* TimeSaverClock.swift */; };
29 | 50EDE28C1D50E2B60019277B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50EDE28B1D50E2B60019277B /* AppDelegate.swift */; };
30 | 50EDE2901D50E2B60019277B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50EDE28F1D50E2B60019277B /* Assets.xcassets */; };
31 | 50EDE2931D50E2B60019277B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 50EDE2911D50E2B60019277B /* Main.storyboard */; };
32 | 50EDE2981D50E2E70019277B /* AscotClock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DB822E1D300300005A4E5D /* AscotClock.swift */; };
33 | 50EDE2991D50E2EA0019277B /* SwissRailwayClockDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 500111501D3000850049411A /* SwissRailwayClockDark.swift */; };
34 | 50EDE29A1D50E2EE0019277B /* SwissRailwayClockLight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5055063A1D2FD38B00C647A3 /* SwissRailwayClockLight.swift */; };
35 | 50EDE29B1D50E2F10019277B /* TimeSaverClock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DB82301D3004F2005A4E5D /* TimeSaverClock.swift */; };
36 | 50EDE29C1D50E2F50019277B /* BraunBN0032Dark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501C52AE1D33F112002F845D /* BraunBN0032Dark.swift */; };
37 | 50EDE29D1D50E2F80019277B /* KundoQuartzRepetitionWestGermanyWecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504BEDC01D4E539700437ED2 /* KundoQuartzRepetitionWestGermanyWecker.swift */; };
38 | 50EDE29E1D50E2FC0019277B /* SeikoStandardKX308K.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504BEDC21D4E5AB100437ED2 /* SeikoStandardKX308K.swift */; };
39 | 50EDE29F1D50E3010019277B /* SeikoStandardKX308KDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504BEDC41D4E70DD00437ED2 /* SeikoStandardKX308KDark.swift */; };
40 | 50EDE2A01D50E3050019277B /* SeikoStandardKX308W.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504BEDC61D4E727400437ED2 /* SeikoStandardKX308W.swift */; };
41 | 50EDE2A11D50E3080019277B /* SeikoStandardKX308WDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504BEDC81D4E72AE00437ED2 /* SeikoStandardKX308WDark.swift */; };
42 | 50EDE2A21D50E30C0019277B /* FiveOClock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504BEDCA1D4E74E700437ED2 /* FiveOClock.swift */; };
43 | 50EDE2A31D50E30F0019277B /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5070EF421BC1719200BB18C5 /* Date.swift */; };
44 | 50EDE2A41D50E3130019277B /* SimpleClock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50D1BF871BC1388A0023EFF5 /* SimpleClock.swift */; };
45 | 50EDE2A51D50E3170019277B /* ClockSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5055063C1D2FD5AA00C647A3 /* ClockSkin.swift */; };
46 | /* End PBXBuildFile section */
47 |
48 | /* Begin PBXFileReference section */
49 | 500111501D3000850049411A /* SwissRailwayClockDark.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwissRailwayClockDark.swift; sourceTree = ""; };
50 | 501C52AE1D33F112002F845D /* BraunBN0032Dark.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BraunBN0032Dark.swift; sourceTree = ""; };
51 | 501DF9DF1D54B1AD003A6DC9 /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; };
52 | 504BEDC01D4E539700437ED2 /* KundoQuartzRepetitionWestGermanyWecker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KundoQuartzRepetitionWestGermanyWecker.swift; sourceTree = ""; };
53 | 504BEDC21D4E5AB100437ED2 /* SeikoStandardKX308K.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SeikoStandardKX308K.swift; sourceTree = ""; };
54 | 504BEDC41D4E70DD00437ED2 /* SeikoStandardKX308KDark.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SeikoStandardKX308KDark.swift; sourceTree = ""; };
55 | 504BEDC61D4E727400437ED2 /* SeikoStandardKX308W.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SeikoStandardKX308W.swift; sourceTree = ""; };
56 | 504BEDC81D4E72AE00437ED2 /* SeikoStandardKX308WDark.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SeikoStandardKX308WDark.swift; sourceTree = ""; };
57 | 504BEDCA1D4E74E700437ED2 /* FiveOClock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FiveOClock.swift; sourceTree = ""; };
58 | 5055063A1D2FD38B00C647A3 /* SwissRailwayClockLight.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwissRailwayClockLight.swift; sourceTree = ""; };
59 | 5055063C1D2FD5AA00C647A3 /* ClockSkin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClockSkin.swift; sourceTree = ""; };
60 | 5070EF421BC1719200BB18C5 /* Date.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Date.swift; sourceTree = ""; };
61 | 507784591D34493300A7A6B5 /* thumbnail.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = thumbnail.png; sourceTree = ""; };
62 | 5077845A1D34493300A7A6B5 /* thumbnail@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "thumbnail@2x.png"; sourceTree = ""; };
63 | 507B2FA61D52551E002218B6 /* PunktAC01AlarmClock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PunktAC01AlarmClock.swift; sourceTree = ""; };
64 | 50D1BF7A1BC1385E0023EFF5 /* SimpleClock.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SimpleClock.saver; sourceTree = BUILT_PRODUCTS_DIR; };
65 | 50D1BF811BC1385E0023EFF5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
66 | 50D1BF871BC1388A0023EFF5 /* SimpleClock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleClock.swift; sourceTree = ""; };
67 | 50DB822E1D300300005A4E5D /* AscotClock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AscotClock.swift; sourceTree = ""; };
68 | 50DB82301D3004F2005A4E5D /* TimeSaverClock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimeSaverClock.swift; sourceTree = ""; };
69 | 50EDE2891D50E2B60019277B /* SimpleClockDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SimpleClockDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
70 | 50EDE28B1D50E2B60019277B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
71 | 50EDE28F1D50E2B60019277B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
72 | 50EDE2921D50E2B60019277B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
73 | 50EDE2941D50E2B60019277B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
74 | /* End PBXFileReference section */
75 |
76 | /* Begin PBXFrameworksBuildPhase section */
77 | 50D1BF761BC1385E0023EFF5 /* Frameworks */ = {
78 | isa = PBXFrameworksBuildPhase;
79 | buildActionMask = 2147483647;
80 | files = (
81 | );
82 | runOnlyForDeploymentPostprocessing = 0;
83 | };
84 | 50EDE2861D50E2B60019277B /* Frameworks */ = {
85 | isa = PBXFrameworksBuildPhase;
86 | buildActionMask = 2147483647;
87 | files = (
88 | );
89 | runOnlyForDeploymentPostprocessing = 0;
90 | };
91 | /* End PBXFrameworksBuildPhase section */
92 |
93 | /* Begin PBXGroup section */
94 | 5004A3BF1D3518EE004C8020 /* Skins */ = {
95 | isa = PBXGroup;
96 | children = (
97 | 50DB822E1D300300005A4E5D /* AscotClock.swift */,
98 | 500111501D3000850049411A /* SwissRailwayClockDark.swift */,
99 | 5055063A1D2FD38B00C647A3 /* SwissRailwayClockLight.swift */,
100 | 50DB82301D3004F2005A4E5D /* TimeSaverClock.swift */,
101 | 501C52AE1D33F112002F845D /* BraunBN0032Dark.swift */,
102 | 504BEDC01D4E539700437ED2 /* KundoQuartzRepetitionWestGermanyWecker.swift */,
103 | 504BEDC21D4E5AB100437ED2 /* SeikoStandardKX308K.swift */,
104 | 504BEDC41D4E70DD00437ED2 /* SeikoStandardKX308KDark.swift */,
105 | 504BEDC61D4E727400437ED2 /* SeikoStandardKX308W.swift */,
106 | 504BEDC81D4E72AE00437ED2 /* SeikoStandardKX308WDark.swift */,
107 | 504BEDCA1D4E74E700437ED2 /* FiveOClock.swift */,
108 | 507B2FA61D52551E002218B6 /* PunktAC01AlarmClock.swift */,
109 | );
110 | path = Skins;
111 | sourceTree = "";
112 | };
113 | 507784501D3448D700A7A6B5 /* Resources */ = {
114 | isa = PBXGroup;
115 | children = (
116 | 507784591D34493300A7A6B5 /* thumbnail.png */,
117 | 5077845A1D34493300A7A6B5 /* thumbnail@2x.png */,
118 | 50D1BF811BC1385E0023EFF5 /* Info.plist */,
119 | );
120 | path = Resources;
121 | sourceTree = "";
122 | };
123 | 50D1BF701BC1385E0023EFF5 = {
124 | isa = PBXGroup;
125 | children = (
126 | 50D1BF7C1BC1385E0023EFF5 /* SimpleClock */,
127 | 50EDE28A1D50E2B60019277B /* SimpleClockDemo */,
128 | 50D1BF7B1BC1385E0023EFF5 /* Products */,
129 | );
130 | sourceTree = "";
131 | };
132 | 50D1BF7B1BC1385E0023EFF5 /* Products */ = {
133 | isa = PBXGroup;
134 | children = (
135 | 50D1BF7A1BC1385E0023EFF5 /* SimpleClock.saver */,
136 | 50EDE2891D50E2B60019277B /* SimpleClockDemo.app */,
137 | );
138 | name = Products;
139 | sourceTree = "";
140 | };
141 | 50D1BF7C1BC1385E0023EFF5 /* SimpleClock */ = {
142 | isa = PBXGroup;
143 | children = (
144 | 507784501D3448D700A7A6B5 /* Resources */,
145 | 5004A3BF1D3518EE004C8020 /* Skins */,
146 | 5070EF421BC1719200BB18C5 /* Date.swift */,
147 | 50D1BF871BC1388A0023EFF5 /* SimpleClock.swift */,
148 | 5055063C1D2FD5AA00C647A3 /* ClockSkin.swift */,
149 | );
150 | path = SimpleClock;
151 | sourceTree = "";
152 | };
153 | 50EDE28A1D50E2B60019277B /* SimpleClockDemo */ = {
154 | isa = PBXGroup;
155 | children = (
156 | 50EDE28B1D50E2B60019277B /* AppDelegate.swift */,
157 | 50EDE28F1D50E2B60019277B /* Assets.xcassets */,
158 | 50EDE2911D50E2B60019277B /* Main.storyboard */,
159 | 50EDE2941D50E2B60019277B /* Info.plist */,
160 | 501DF9DF1D54B1AD003A6DC9 /* MainViewController.swift */,
161 | );
162 | path = SimpleClockDemo;
163 | sourceTree = "";
164 | };
165 | /* End PBXGroup section */
166 |
167 | /* Begin PBXHeadersBuildPhase section */
168 | 50D1BF771BC1385E0023EFF5 /* Headers */ = {
169 | isa = PBXHeadersBuildPhase;
170 | buildActionMask = 2147483647;
171 | files = (
172 | );
173 | runOnlyForDeploymentPostprocessing = 0;
174 | };
175 | /* End PBXHeadersBuildPhase section */
176 |
177 | /* Begin PBXNativeTarget section */
178 | 50D1BF791BC1385E0023EFF5 /* SimpleClock */ = {
179 | isa = PBXNativeTarget;
180 | buildConfigurationList = 50D1BF841BC1385E0023EFF5 /* Build configuration list for PBXNativeTarget "SimpleClock" */;
181 | buildPhases = (
182 | 50D1BF751BC1385E0023EFF5 /* Sources */,
183 | 50D1BF761BC1385E0023EFF5 /* Frameworks */,
184 | 50D1BF771BC1385E0023EFF5 /* Headers */,
185 | 50D1BF781BC1385E0023EFF5 /* Resources */,
186 | 509D84E91D32E15E00E232C4 /* ShellScript */,
187 | );
188 | buildRules = (
189 | );
190 | dependencies = (
191 | );
192 | name = SimpleClock;
193 | productName = SimpleClock;
194 | productReference = 50D1BF7A1BC1385E0023EFF5 /* SimpleClock.saver */;
195 | productType = "com.apple.product-type.bundle";
196 | };
197 | 50EDE2881D50E2B60019277B /* SimpleClockDemo */ = {
198 | isa = PBXNativeTarget;
199 | buildConfigurationList = 50EDE2951D50E2B60019277B /* Build configuration list for PBXNativeTarget "SimpleClockDemo" */;
200 | buildPhases = (
201 | 50EDE2851D50E2B60019277B /* Sources */,
202 | 50EDE2861D50E2B60019277B /* Frameworks */,
203 | 50EDE2871D50E2B60019277B /* Resources */,
204 | );
205 | buildRules = (
206 | );
207 | dependencies = (
208 | );
209 | name = SimpleClockDemo;
210 | productName = SimpleClockDemo;
211 | productReference = 50EDE2891D50E2B60019277B /* SimpleClockDemo.app */;
212 | productType = "com.apple.product-type.application";
213 | };
214 | /* End PBXNativeTarget section */
215 |
216 | /* Begin PBXProject section */
217 | 50D1BF711BC1385E0023EFF5 /* Project object */ = {
218 | isa = PBXProject;
219 | attributes = {
220 | LastSwiftUpdateCheck = 0730;
221 | LastUpgradeCheck = 0940;
222 | ORGANIZATIONNAME = "Pascal Wagler";
223 | TargetAttributes = {
224 | 50D1BF791BC1385E0023EFF5 = {
225 | CreatedOnToolsVersion = 7.0.1;
226 | LastSwiftMigration = 1010;
227 | };
228 | 50EDE2881D50E2B60019277B = {
229 | CreatedOnToolsVersion = 7.3.1;
230 | LastSwiftMigration = 0800;
231 | };
232 | };
233 | };
234 | buildConfigurationList = 50D1BF741BC1385E0023EFF5 /* Build configuration list for PBXProject "SimpleClock" */;
235 | compatibilityVersion = "Xcode 3.2";
236 | developmentRegion = English;
237 | hasScannedForEncodings = 0;
238 | knownRegions = (
239 | en,
240 | Base,
241 | );
242 | mainGroup = 50D1BF701BC1385E0023EFF5;
243 | productRefGroup = 50D1BF7B1BC1385E0023EFF5 /* Products */;
244 | projectDirPath = "";
245 | projectRoot = "";
246 | targets = (
247 | 50D1BF791BC1385E0023EFF5 /* SimpleClock */,
248 | 50EDE2881D50E2B60019277B /* SimpleClockDemo */,
249 | );
250 | };
251 | /* End PBXProject section */
252 |
253 | /* Begin PBXResourcesBuildPhase section */
254 | 50D1BF781BC1385E0023EFF5 /* Resources */ = {
255 | isa = PBXResourcesBuildPhase;
256 | buildActionMask = 2147483647;
257 | files = (
258 | 5077845B1D34493300A7A6B5 /* thumbnail.png in Resources */,
259 | 5077845C1D34493300A7A6B5 /* thumbnail@2x.png in Resources */,
260 | );
261 | runOnlyForDeploymentPostprocessing = 0;
262 | };
263 | 50EDE2871D50E2B60019277B /* Resources */ = {
264 | isa = PBXResourcesBuildPhase;
265 | buildActionMask = 2147483647;
266 | files = (
267 | 50EDE2901D50E2B60019277B /* Assets.xcassets in Resources */,
268 | 50EDE2931D50E2B60019277B /* Main.storyboard in Resources */,
269 | );
270 | runOnlyForDeploymentPostprocessing = 0;
271 | };
272 | /* End PBXResourcesBuildPhase section */
273 |
274 | /* Begin PBXShellScriptBuildPhase section */
275 | 509D84E91D32E15E00E232C4 /* ShellScript */ = {
276 | isa = PBXShellScriptBuildPhase;
277 | buildActionMask = 2147483647;
278 | files = (
279 | );
280 | inputPaths = (
281 | );
282 | outputPaths = (
283 | );
284 | runOnlyForDeploymentPostprocessing = 0;
285 | shellPath = /bin/sh;
286 | shellScript = "if which swiftlint >/dev/null; then\nswiftlint\nelse\necho \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi";
287 | };
288 | /* End PBXShellScriptBuildPhase section */
289 |
290 | /* Begin PBXSourcesBuildPhase section */
291 | 50D1BF751BC1385E0023EFF5 /* Sources */ = {
292 | isa = PBXSourcesBuildPhase;
293 | buildActionMask = 2147483647;
294 | files = (
295 | 50D1BF881BC1388A0023EFF5 /* SimpleClock.swift in Sources */,
296 | 504BEDC91D4E72AE00437ED2 /* SeikoStandardKX308WDark.swift in Sources */,
297 | 504BEDC51D4E70DD00437ED2 /* SeikoStandardKX308KDark.swift in Sources */,
298 | 5070EF431BC1719200BB18C5 /* Date.swift in Sources */,
299 | 5055063B1D2FD38B00C647A3 /* SwissRailwayClockLight.swift in Sources */,
300 | 504BEDC71D4E727400437ED2 /* SeikoStandardKX308W.swift in Sources */,
301 | 507B2FA71D52551E002218B6 /* PunktAC01AlarmClock.swift in Sources */,
302 | 50DB82311D3004F2005A4E5D /* TimeSaverClock.swift in Sources */,
303 | 5055063D1D2FD5AA00C647A3 /* ClockSkin.swift in Sources */,
304 | 504BEDC11D4E539700437ED2 /* KundoQuartzRepetitionWestGermanyWecker.swift in Sources */,
305 | 500111511D3000850049411A /* SwissRailwayClockDark.swift in Sources */,
306 | 50DB822F1D300300005A4E5D /* AscotClock.swift in Sources */,
307 | 501C52AF1D33F112002F845D /* BraunBN0032Dark.swift in Sources */,
308 | 504BEDCB1D4E74E700437ED2 /* FiveOClock.swift in Sources */,
309 | 504BEDC31D4E5AB100437ED2 /* SeikoStandardKX308K.swift in Sources */,
310 | );
311 | runOnlyForDeploymentPostprocessing = 0;
312 | };
313 | 50EDE2851D50E2B60019277B /* Sources */ = {
314 | isa = PBXSourcesBuildPhase;
315 | buildActionMask = 2147483647;
316 | files = (
317 | 50EDE2981D50E2E70019277B /* AscotClock.swift in Sources */,
318 | 50EDE29D1D50E2F80019277B /* KundoQuartzRepetitionWestGermanyWecker.swift in Sources */,
319 | 50EDE29B1D50E2F10019277B /* TimeSaverClock.swift in Sources */,
320 | 50EDE29C1D50E2F50019277B /* BraunBN0032Dark.swift in Sources */,
321 | 50EDE2A41D50E3130019277B /* SimpleClock.swift in Sources */,
322 | 50EDE2A01D50E3050019277B /* SeikoStandardKX308W.swift in Sources */,
323 | 50EDE29A1D50E2EE0019277B /* SwissRailwayClockLight.swift in Sources */,
324 | 501DF9E01D54B1AD003A6DC9 /* MainViewController.swift in Sources */,
325 | 50EDE2A11D50E3080019277B /* SeikoStandardKX308WDark.swift in Sources */,
326 | 50EDE29E1D50E2FC0019277B /* SeikoStandardKX308K.swift in Sources */,
327 | 501DF9E11D54BBCE003A6DC9 /* PunktAC01AlarmClock.swift in Sources */,
328 | 50EDE2A31D50E30F0019277B /* Date.swift in Sources */,
329 | 50EDE2A51D50E3170019277B /* ClockSkin.swift in Sources */,
330 | 50EDE2A21D50E30C0019277B /* FiveOClock.swift in Sources */,
331 | 50EDE2991D50E2EA0019277B /* SwissRailwayClockDark.swift in Sources */,
332 | 50EDE28C1D50E2B60019277B /* AppDelegate.swift in Sources */,
333 | 50EDE29F1D50E3010019277B /* SeikoStandardKX308KDark.swift in Sources */,
334 | );
335 | runOnlyForDeploymentPostprocessing = 0;
336 | };
337 | /* End PBXSourcesBuildPhase section */
338 |
339 | /* Begin PBXVariantGroup section */
340 | 50EDE2911D50E2B60019277B /* Main.storyboard */ = {
341 | isa = PBXVariantGroup;
342 | children = (
343 | 50EDE2921D50E2B60019277B /* Base */,
344 | );
345 | name = Main.storyboard;
346 | sourceTree = "";
347 | };
348 | /* End PBXVariantGroup section */
349 |
350 | /* Begin XCBuildConfiguration section */
351 | 50D1BF821BC1385E0023EFF5 /* Debug */ = {
352 | isa = XCBuildConfiguration;
353 | buildSettings = {
354 | ALWAYS_SEARCH_USER_PATHS = NO;
355 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
356 | CLANG_CXX_LIBRARY = "libc++";
357 | CLANG_ENABLE_MODULES = YES;
358 | CLANG_ENABLE_OBJC_ARC = YES;
359 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
360 | CLANG_WARN_BOOL_CONVERSION = YES;
361 | CLANG_WARN_COMMA = YES;
362 | CLANG_WARN_CONSTANT_CONVERSION = YES;
363 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
364 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
365 | CLANG_WARN_EMPTY_BODY = YES;
366 | CLANG_WARN_ENUM_CONVERSION = YES;
367 | CLANG_WARN_INFINITE_RECURSION = YES;
368 | CLANG_WARN_INT_CONVERSION = YES;
369 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
370 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
371 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
372 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
373 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
374 | CLANG_WARN_STRICT_PROTOTYPES = YES;
375 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
376 | CLANG_WARN_UNREACHABLE_CODE = YES;
377 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
378 | COPY_PHASE_STRIP = NO;
379 | DEBUG_INFORMATION_FORMAT = dwarf;
380 | ENABLE_STRICT_OBJC_MSGSEND = YES;
381 | ENABLE_TESTABILITY = YES;
382 | GCC_C_LANGUAGE_STANDARD = gnu99;
383 | GCC_DYNAMIC_NO_PIC = NO;
384 | GCC_NO_COMMON_BLOCKS = YES;
385 | GCC_OPTIMIZATION_LEVEL = 0;
386 | GCC_PREPROCESSOR_DEFINITIONS = (
387 | "DEBUG=1",
388 | "$(inherited)",
389 | );
390 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
391 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
392 | GCC_WARN_UNDECLARED_SELECTOR = YES;
393 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
394 | GCC_WARN_UNUSED_FUNCTION = YES;
395 | GCC_WARN_UNUSED_VARIABLE = YES;
396 | MACOSX_DEPLOYMENT_TARGET = 10.10;
397 | MTL_ENABLE_DEBUG_INFO = YES;
398 | ONLY_ACTIVE_ARCH = YES;
399 | PRODUCT_NAME = SimpleClock;
400 | SDKROOT = macosx;
401 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
402 | SWIFT_VERSION = 4.0;
403 | };
404 | name = Debug;
405 | };
406 | 50D1BF831BC1385E0023EFF5 /* Release */ = {
407 | isa = XCBuildConfiguration;
408 | buildSettings = {
409 | ALWAYS_SEARCH_USER_PATHS = NO;
410 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
411 | CLANG_CXX_LIBRARY = "libc++";
412 | CLANG_ENABLE_MODULES = YES;
413 | CLANG_ENABLE_OBJC_ARC = YES;
414 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
415 | CLANG_WARN_BOOL_CONVERSION = YES;
416 | CLANG_WARN_COMMA = YES;
417 | CLANG_WARN_CONSTANT_CONVERSION = YES;
418 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
419 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
420 | CLANG_WARN_EMPTY_BODY = YES;
421 | CLANG_WARN_ENUM_CONVERSION = YES;
422 | CLANG_WARN_INFINITE_RECURSION = YES;
423 | CLANG_WARN_INT_CONVERSION = YES;
424 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
425 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
426 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
427 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
428 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
429 | CLANG_WARN_STRICT_PROTOTYPES = YES;
430 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
431 | CLANG_WARN_UNREACHABLE_CODE = YES;
432 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
433 | COPY_PHASE_STRIP = NO;
434 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
435 | ENABLE_NS_ASSERTIONS = NO;
436 | ENABLE_STRICT_OBJC_MSGSEND = YES;
437 | GCC_C_LANGUAGE_STANDARD = gnu99;
438 | GCC_NO_COMMON_BLOCKS = YES;
439 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
440 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
441 | GCC_WARN_UNDECLARED_SELECTOR = YES;
442 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
443 | GCC_WARN_UNUSED_FUNCTION = YES;
444 | GCC_WARN_UNUSED_VARIABLE = YES;
445 | MACOSX_DEPLOYMENT_TARGET = 10.10;
446 | MTL_ENABLE_DEBUG_INFO = NO;
447 | PRODUCT_NAME = SimpleClock;
448 | SDKROOT = macosx;
449 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
450 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
451 | SWIFT_VERSION = 4.0;
452 | };
453 | name = Release;
454 | };
455 | 50D1BF851BC1385E0023EFF5 /* Debug */ = {
456 | isa = XCBuildConfiguration;
457 | buildSettings = {
458 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
459 | CLANG_ENABLE_MODULES = YES;
460 | COMBINE_HIDPI_IMAGES = YES;
461 | INFOPLIST_FILE = SimpleClock/Resources/Info.plist;
462 | INSTALL_PATH = "$(HOME)/Library/Screen Savers";
463 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
464 | PRODUCT_BUNDLE_IDENTIFIER = de.pascalwagler.SimpleClock;
465 | PRODUCT_NAME = SimpleClock;
466 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
467 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
468 | SWIFT_VERSION = 4.2;
469 | WRAPPER_EXTENSION = saver;
470 | };
471 | name = Debug;
472 | };
473 | 50D1BF861BC1385E0023EFF5 /* Release */ = {
474 | isa = XCBuildConfiguration;
475 | buildSettings = {
476 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
477 | CLANG_ENABLE_MODULES = YES;
478 | COMBINE_HIDPI_IMAGES = YES;
479 | INFOPLIST_FILE = SimpleClock/Resources/Info.plist;
480 | INSTALL_PATH = "$(HOME)/Library/Screen Savers";
481 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
482 | PRODUCT_BUNDLE_IDENTIFIER = de.pascalwagler.SimpleClock;
483 | PRODUCT_NAME = SimpleClock;
484 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
485 | SWIFT_VERSION = 4.2;
486 | WRAPPER_EXTENSION = saver;
487 | };
488 | name = Release;
489 | };
490 | 50EDE2961D50E2B60019277B /* Debug */ = {
491 | isa = XCBuildConfiguration;
492 | buildSettings = {
493 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
494 | CLANG_ANALYZER_NONNULL = YES;
495 | CODE_SIGN_IDENTITY = "-";
496 | COMBINE_HIDPI_IMAGES = YES;
497 | INFOPLIST_FILE = SimpleClockDemo/Info.plist;
498 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
499 | MACOSX_DEPLOYMENT_TARGET = 10.11;
500 | PRODUCT_BUNDLE_IDENTIFIER = de.pascalwagler.SimpleClockDemo;
501 | PRODUCT_NAME = "$(TARGET_NAME)";
502 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
503 | SWIFT_VERSION = 3.0;
504 | };
505 | name = Debug;
506 | };
507 | 50EDE2971D50E2B60019277B /* Release */ = {
508 | isa = XCBuildConfiguration;
509 | buildSettings = {
510 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
511 | CLANG_ANALYZER_NONNULL = YES;
512 | CODE_SIGN_IDENTITY = "-";
513 | COMBINE_HIDPI_IMAGES = YES;
514 | INFOPLIST_FILE = SimpleClockDemo/Info.plist;
515 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
516 | MACOSX_DEPLOYMENT_TARGET = 10.11;
517 | PRODUCT_BUNDLE_IDENTIFIER = de.pascalwagler.SimpleClockDemo;
518 | PRODUCT_NAME = "$(TARGET_NAME)";
519 | SWIFT_VERSION = 3.0;
520 | };
521 | name = Release;
522 | };
523 | /* End XCBuildConfiguration section */
524 |
525 | /* Begin XCConfigurationList section */
526 | 50D1BF741BC1385E0023EFF5 /* Build configuration list for PBXProject "SimpleClock" */ = {
527 | isa = XCConfigurationList;
528 | buildConfigurations = (
529 | 50D1BF821BC1385E0023EFF5 /* Debug */,
530 | 50D1BF831BC1385E0023EFF5 /* Release */,
531 | );
532 | defaultConfigurationIsVisible = 0;
533 | defaultConfigurationName = Release;
534 | };
535 | 50D1BF841BC1385E0023EFF5 /* Build configuration list for PBXNativeTarget "SimpleClock" */ = {
536 | isa = XCConfigurationList;
537 | buildConfigurations = (
538 | 50D1BF851BC1385E0023EFF5 /* Debug */,
539 | 50D1BF861BC1385E0023EFF5 /* Release */,
540 | );
541 | defaultConfigurationIsVisible = 0;
542 | defaultConfigurationName = Release;
543 | };
544 | 50EDE2951D50E2B60019277B /* Build configuration list for PBXNativeTarget "SimpleClockDemo" */ = {
545 | isa = XCConfigurationList;
546 | buildConfigurations = (
547 | 50EDE2961D50E2B60019277B /* Debug */,
548 | 50EDE2971D50E2B60019277B /* Release */,
549 | );
550 | defaultConfigurationIsVisible = 0;
551 | defaultConfigurationName = Release;
552 | };
553 | /* End XCConfigurationList section */
554 | };
555 | rootObject = 50D1BF711BC1385E0023EFF5 /* Project object */;
556 | }
557 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/ClockSkin.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ClockSkin.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 08/07/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | protocol ClockSkin {
12 |
13 | var scaling: ClockSkinScaling { get }
14 | var color: ClockSkinColor { get }
15 | var tick: ClockSkinTick { get }
16 | var lineCap: ClockSkinLineCap { get }
17 | }
18 |
19 | protocol ClockSkinScaling {
20 | var clockFaceHeight: CGFloat { get }
21 | var borderWidth: CGFloat { get }
22 |
23 | var majorTickWidth: CGFloat { get }
24 | var majorTickHeight: CGFloat { get }
25 |
26 | var minorTickWidth: CGFloat { get }
27 | var minorTickHeight: CGFloat { get }
28 |
29 | var majorTickRadius: CGFloat { get }
30 | var minorTickRadius: CGFloat { get }
31 |
32 | var secondHandWidth: CGFloat { get }
33 | var secondHandHeight: CGFloat { get }
34 | var secondHandOverhangWidth: CGFloat { get }
35 | var secondHandOverhangHeight: CGFloat { get }
36 |
37 | var minuteHandWidth: CGFloat { get }
38 | var minuteHandHeight: CGFloat { get }
39 | var minuteHandOverhangWidth: CGFloat { get }
40 | var minuteHandOverhangHeight: CGFloat { get }
41 |
42 | var hourHandWidth: CGFloat { get }
43 | var hourHandHeight: CGFloat { get }
44 | var hourHandOverhangWidth: CGFloat { get }
45 | var hourHandOverhangHeight: CGFloat { get }
46 |
47 | var handCircleRadius: CGFloat { get }
48 | }
49 |
50 | protocol ClockSkinColor {
51 | var screenBackground: CGColor { get }
52 | var clockBackground: CGColor { get }
53 |
54 | var border: CGColor { get }
55 | var majorTick: CGColor { get }
56 | var minorTick: CGColor { get }
57 |
58 | var secondHand: CGColor { get }
59 | var minuteHand: CGColor { get }
60 | var hourHand: CGColor { get }
61 | var handShadow: CGColor { get }
62 | }
63 |
64 | protocol ClockSkinTick {
65 | var totalTicks: Int { get }
66 | var majorTickEveryX: Int { get }
67 | var removeTickEveryX: Int { get }
68 | }
69 |
70 | protocol ClockSkinLineCap {
71 | var majorTick: CGLineCap { get }
72 | var minorTick: CGLineCap { get }
73 |
74 | var secondHand: CGLineCap { get }
75 | var secondHandOverhang: CGLineCap { get }
76 |
77 | var minuteHand: CGLineCap { get }
78 | var minuteHandOverhang: CGLineCap { get }
79 |
80 | var hourHand: CGLineCap { get }
81 | var hourHandOverhang: CGLineCap { get }
82 | }
83 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Date.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DateExtensions.swift
3 | // Timesaver
4 | //
5 | // Created by Daniel Love on 14/06/2014.
6 | // Copyright (c) 2014 Daniel Love. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 |
11 | extension Date {
12 |
13 | func millisAgo() -> CGFloat {
14 | return CGFloat(self.timeIntervalSince1970 * 1000)
15 | }
16 |
17 | func secondsAgo() -> CGFloat {
18 | let comps = (Calendar.current as NSCalendar).components(NSCalendar.Unit.second, from: self)
19 | return CGFloat(comps.second!) / 60.0
20 | }
21 |
22 | func minutesAgo() -> CGFloat {
23 | let comps = (Calendar.current as NSCalendar).components(NSCalendar.Unit.minute, from: self)
24 | return CGFloat(comps.minute!) / 60.0 + self.secondsAgo() / 60.0
25 | }
26 |
27 | func hoursAgo() -> CGFloat {
28 | let comps = (Calendar.current as NSCalendar).components(NSCalendar.Unit.hour, from: self)
29 | return CGFloat(comps.hour!) / 12.0 + (CGFloat((self.minutesAgo() / 60.0) * (60.0 / 12.0)))
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Resources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.1
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.1
23 | NSHumanReadableCopyright
24 | Copyright © 2016 - 2018 Pascal Wagler. All rights reserved.
25 | NSPrincipalClass
26 | SimpleClock.SimpleClock
27 |
28 |
29 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Resources/thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wandmalfarbe/Simple-Clock-Screensaver/3bba2fc76cf8ffb3d39986836e73d172463c99d4/SimpleClock/SimpleClock/Resources/thumbnail.png
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Resources/thumbnail@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wandmalfarbe/Simple-Clock-Screensaver/3bba2fc76cf8ffb3d39986836e73d172463c99d4/SimpleClock/SimpleClock/Resources/thumbnail@2x.png
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Resources/thumbnail_source.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wandmalfarbe/Simple-Clock-Screensaver/3bba2fc76cf8ffb3d39986836e73d172463c99d4/SimpleClock/SimpleClock/Resources/thumbnail_source.png
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/SimpleClock.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SimpleClock.swift
3 | // Timesaver
4 | //
5 | // Created by Pascal Wagler.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class SimpleClock: ScreenSaverView {
13 |
14 | var context: CGContext! = nil
15 | var skin: ClockSkin! = nil
16 | var clockRect: NSRect! = nil
17 |
18 | func getSize(_ scalingFactor: CGFloat) -> CGFloat {
19 | return clockRect.size.height * scalingFactor
20 | }
21 |
22 | override func draw(_ screenRect: NSRect) {
23 | super.draw(screenRect)
24 |
25 | context = NSGraphicsContext.current!.cgContext
26 |
27 | //skin = SwissRailwayClockDark()
28 | //skin = SwissRailwayClockLight()
29 | //skin = TimeSaverClock()
30 | //skin = AscotClock()
31 | skin = BraunBN0032Dark()
32 | //skin = KundoQuartzRepetitionWestGermanyWecker()
33 |
34 | //skin = SeikoStandardKX308K()
35 | //skin = SeikoStandardKX308KDark()
36 |
37 | //skin = SeikoStandardKX308W()
38 | //skin = SeikoStandardKX308WDark()
39 |
40 | //skin = FiveOClock()
41 |
42 | if skin == nil {
43 | //Swift.print("Is nil")
44 | skin = BraunBN0032Dark()
45 | //return
46 | }
47 |
48 | clockRect = getClockRect(screenRect)
49 |
50 | /*
51 | * Draw the screen background (color)
52 | */
53 | context.saveGState()
54 | context.setFillColor(skin.color.screenBackground)
55 | context.fill(self.bounds)
56 | context.restoreGState()
57 |
58 | /*
59 | * Get the time
60 | */
61 |
62 | let date: Date = Date()
63 | let seconds: CGFloat = date.secondsAgo()
64 | let minutes: CGFloat = date.minutesAgo()
65 | let hours: CGFloat = date.hoursAgo()
66 |
67 | /*
68 | * Draw the clock
69 | */
70 |
71 | drawClockFace()
72 |
73 | drawClockTicks(
74 | skin.tick.totalTicks,
75 | majorTickEveryX: skin.tick.majorTickEveryX,
76 | removeTickEveryX: skin.tick.removeTickEveryX
77 | )
78 |
79 | drawClockHand( // Hour
80 | CGSize(width: getSize(skin.scaling.hourHandWidth),
81 | height: getSize(skin.scaling.hourHandHeight)),
82 | overhangSize: CGSize(
83 | width: getSize(skin.scaling.hourHandOverhangWidth),
84 | height: getSize(skin.scaling.hourHandOverhangHeight)),
85 | color: skin.color.hourHand,
86 | lineCap: (skin.lineCap.hourHand, skin.lineCap.hourHandOverhang),
87 | progress: hours * 12,
88 | total: 12)
89 |
90 | drawClockHand( // Minute
91 | CGSize(width: getSize(skin.scaling.minuteHandWidth),
92 | height: getSize(skin.scaling.minuteHandHeight)),
93 | overhangSize: CGSize(
94 | width: getSize(skin.scaling.minuteHandOverhangWidth),
95 | height: getSize(skin.scaling.minuteHandOverhangHeight)),
96 | color: skin.color.minuteHand,
97 | lineCap: (skin.lineCap.minuteHand, skin.lineCap.minuteHandOverhang),
98 | progress: minutes * 60,
99 | total: 60)
100 |
101 | drawClockHand( // Second
102 | CGSize(width: getSize(skin.scaling.secondHandWidth),
103 | height: getSize(skin.scaling.secondHandHeight)),
104 | overhangSize: CGSize(
105 | width: getSize(skin.scaling.secondHandOverhangWidth),
106 | height: getSize(skin.scaling.secondHandOverhangHeight)),
107 | color: skin.color.secondHand,
108 | lineCap: (skin.lineCap.secondHand, skin.lineCap.secondHandOverhang),
109 | progress: seconds * 60,
110 | total: 60)
111 |
112 | drawHandCircle()
113 | }
114 |
115 | func drawClockFace() {
116 |
117 | context.saveGState()
118 |
119 | context.setLineWidth(ceil(getSize(skin.scaling.borderWidth)))
120 | context.setStrokeColor(skin.color.border)
121 | context.setFillColor(skin.color.clockBackground)
122 |
123 | context.addEllipse(in: clockRect)
124 | context.drawPath(using: .fillStroke)
125 | context.strokePath()
126 |
127 | context.restoreGState()
128 | }
129 |
130 | func drawClockTicks(_ totalTicks: Int, majorTickEveryX: Int, removeTickEveryX: Int) {
131 |
132 | context.saveGState()
133 |
134 | let center: CGPoint = CGPoint(x: clockRect.midX, y: clockRect.midY)
135 |
136 | let majorTickWidth = getSize(skin.scaling.majorTickWidth)
137 | let majorTickHeight = getSize(skin.scaling.majorTickHeight)
138 | let majorTickColor = skin.color.majorTick
139 | let majorTickRadius = getSize(skin.scaling.majorTickRadius)
140 | let majorTickLineCap = skin.lineCap.majorTick
141 |
142 | let minorTickWidth = getSize(skin.scaling.minorTickWidth)
143 | let minorTickHeight = getSize(skin.scaling.minorTickHeight)
144 | let minorTickColor = skin.color.minorTick
145 | let minorTickRadius = getSize(skin.scaling.minorTickRadius)
146 | let minorTickLineCap = skin.lineCap.minorTick
147 |
148 | var tickHeight: CGFloat
149 | var tickRadius: CGFloat
150 |
151 | var time: Int = totalTicks
152 | while time > 0 {
153 |
154 | let angle: CGFloat = self.angleForTimeUnit(CGFloat(time), total: totalTicks)
155 | let isMajorTick = (time % majorTickEveryX == 0)
156 | let isHiddenTick = (time % removeTickEveryX == 0)
157 |
158 | if isMajorTick {
159 | context.setLineWidth(ceil(majorTickWidth))
160 | context.setStrokeColor(majorTickColor)
161 | context.setLineCap(majorTickLineCap)
162 | tickHeight = majorTickHeight
163 | tickRadius = majorTickRadius
164 | } else {
165 | context.setLineWidth(ceil(minorTickWidth))
166 | context.setStrokeColor(minorTickColor)
167 | context.setLineCap(minorTickLineCap)
168 | tickHeight = minorTickHeight
169 | tickRadius = minorTickRadius
170 | }
171 |
172 | if !isHiddenTick {
173 | let startLineX: CGFloat = center.x + (cos(angle) * tickRadius)
174 | let startLineY: CGFloat = center.y + (sin(angle) * tickRadius)
175 |
176 | let endLineX: CGFloat = center.x + (cos(angle) * (tickRadius - tickHeight))
177 | let endLineY: CGFloat = center.y + (sin(angle) * (tickRadius - tickHeight))
178 |
179 | context.beginPath()
180 | context.move(to: CGPoint(x: ceil(startLineX), y: ceil(startLineY)))
181 | context.addLine(to: CGPoint(x: ceil(endLineX), y: ceil(endLineY)))
182 | context.strokePath()
183 | }
184 |
185 | time -= 1
186 | }
187 | context.restoreGState()
188 | }
189 |
190 | func drawClockHand(_ size: CGSize, overhangSize: CGSize, color: CGColor, lineCap: (CGLineCap, CGLineCap), progress: CGFloat, total: Int) {
191 | let center: CGPoint = CGPoint(x: clockRect.midX, y: clockRect.midY)
192 |
193 | let angle: CGFloat = self.angleForTimeUnit(progress, total: total)
194 | let handLineX: CGFloat = center.x + (cos(angle) * size.height)
195 | let handLineY: CGFloat = center.y + (sin(angle) * size.height)
196 |
197 | let overhangLineX: CGFloat = center.x + (-cos(angle) * overhangSize.height)
198 | let overhangLineY: CGFloat = center.y + (-sin(angle) * overhangSize.height)
199 |
200 | context.saveGState()
201 |
202 | //CGContextSetShadowWithColor(context, CGSize(width: 0, height: 0), 1, skin.color.handShadow)
203 | context.setStrokeColor(color)
204 |
205 | // draw the hand
206 | context.beginPath()
207 | context.setLineCap(lineCap.0)
208 | context.setLineWidth(ceil(size.width))
209 | context.move(to: CGPoint(x: handLineX, y: handLineY))
210 | context.addLine(to: CGPoint(x: center.x, y: center.y))
211 | context.strokePath()
212 |
213 | // draw the overhang of the hand
214 | context.beginPath()
215 | context.setLineCap(lineCap.1)
216 | context.setLineWidth(ceil(overhangSize.width))
217 | context.move(to: CGPoint(x: center.x, y: center.y))
218 | context.addLine(to: CGPoint(x: overhangLineX, y: overhangLineY))
219 | context.strokePath()
220 |
221 | context.restoreGState()
222 | }
223 |
224 | func drawHandCircle() {
225 |
226 | let size = CGSize(
227 | width: getSize(skin.scaling.handCircleRadius) * 2,
228 | height: getSize(skin.scaling.handCircleRadius) * 2
229 | )
230 |
231 | let rect = newRectCenteredInRect(size, outerRect: clockRect)
232 |
233 | context.saveGState()
234 |
235 | context.setFillColor(skin.color.secondHand)
236 | context.addEllipse(in: rect)
237 | (context).fillPath()
238 |
239 | context.restoreGState()
240 | }
241 |
242 | func getClockRect(_ screenRect: CGRect) -> CGRect {
243 |
244 | let maxClockHeight = min(screenRect.size.width, screenRect.size.height)
245 | let clockHeight = maxClockHeight * skin.scaling.clockFaceHeight
246 |
247 | let size = CGSize(width: clockHeight, height: clockHeight)
248 | let clockRect = newRectCenteredInRect(size, outerRect: screenRect)
249 |
250 | return clockRect
251 | }
252 |
253 | func angleForTimeUnit(_ time: CGFloat, total: Int) -> CGFloat {
254 | let degreesPerTime = 360 / CGFloat(total)
255 | let radians = (degreesPerTime * CGFloat(Double.pi)) / 180
256 | let angle = -(radians * CGFloat(time) - CGFloat(Double.pi/2.0))
257 |
258 | return CGFloat(angle)
259 | }
260 |
261 | /*
262 | * from ScreenSaverView
263 | */
264 |
265 | override init(frame: NSRect, isPreview: Bool) {
266 | super.init(frame: frame, isPreview: isPreview)!
267 |
268 | self.animationTimeInterval = TimeInterval(1)
269 | }
270 |
271 | required init?(coder aDecoder: NSCoder) {
272 | super.init(coder: aDecoder)
273 | }
274 |
275 | override func startAnimation() {
276 | super.startAnimation()
277 | }
278 |
279 | override func stopAnimation() {
280 | super.stopAnimation()
281 | }
282 |
283 | override func animateOneFrame() {
284 | needsDisplay = true
285 | }
286 |
287 | override var hasConfigureSheet: Bool {
288 | return false
289 | }
290 |
291 | override var configureSheet: NSWindow? {
292 | return nil
293 | }
294 | }
295 |
296 | func newRectCenteredInRect(_ size: CGSize, outerRect: NSRect) -> CGRect {
297 |
298 | var innerRect = NSRect()
299 | innerRect.size.width = size.width
300 | innerRect.size.height = size.height
301 |
302 | innerRect.origin.x =
303 | floor(outerRect.origin.x + (outerRect.size.width - innerRect.size.width) / 2)
304 |
305 | innerRect.origin.y =
306 | floor(outerRect.origin.y + (outerRect.size.height - innerRect.size.height) / 2)
307 |
308 | return innerRect
309 | }
310 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Skins/AscotClock.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PascalAscotClock.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 08/07/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class AscotClock: ClockSkin {
13 |
14 | class Scaling: NSObject, ClockSkinScaling {
15 | let clockFaceHeight = CGFloat(0.8)
16 | let borderWidth = CGFloat(0.03)
17 |
18 | let majorTickWidth = CGFloat(0.016)
19 | let majorTickHeight = CGFloat(0.14)
20 |
21 | let minorTickWidth = CGFloat(0.012)
22 | let minorTickHeight = CGFloat(0.1)
23 |
24 | let majorTickRadius = CGFloat(0.475)
25 | let minorTickRadius = CGFloat(0.44)
26 |
27 | let secondHandWidth = CGFloat(0.020)
28 | let secondHandHeight = CGFloat(0.475)
29 | let secondHandOverhangWidth = CGFloat(0.02)
30 | let secondHandOverhangHeight = CGFloat(0.1)
31 |
32 | let minuteHandWidth = CGFloat(0.02)
33 | let minuteHandHeight = CGFloat(0.43)
34 | let minuteHandOverhangWidth = CGFloat(0.02)
35 | let minuteHandOverhangHeight = CGFloat(0.1)
36 |
37 | let hourHandWidth = CGFloat(0.02)
38 | let hourHandHeight = CGFloat(0.32)
39 | let hourHandOverhangWidth = CGFloat(0.02)
40 | let hourHandOverhangHeight = CGFloat(0.1)
41 |
42 | let handCircleRadius = CGFloat(0.02)
43 | }
44 |
45 | class Color: NSObject, ClockSkinColor {
46 | let screenBackground = NSColor(red: 0.6744, green: 0.7857, blue: 0.3298, alpha: 1.0).cgColor
47 | let clockBackground = NSColor(red: 0, green: 0, blue: 0, alpha: 1).cgColor
48 |
49 | let border = NSColor(red: 0.6, green: 0.6, blue: 0.6, alpha: 0).cgColor
50 | let majorTick = NSColor(red: 1, green: 1, blue: 1, alpha: 0.8).cgColor
51 | let minorTick = NSColor(red: 1, green: 1, blue: 1, alpha: 0.8).cgColor
52 |
53 | let secondHand = NSColor(red: 0.8987, green: 0.9, blue: 0.8956, alpha: 0).cgColor
54 | let minuteHand = NSColor(red: 0.8987, green: 0.9, blue: 0.8956, alpha: 1.0).cgColor
55 | let hourHand = NSColor(red: 0.8987, green: 0.9, blue: 0.8956, alpha: 1.0).cgColor
56 | let handShadow = NSColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
57 | }
58 |
59 | class Tick: NSObject, ClockSkinTick {
60 | let totalTicks = 12
61 | let majorTickEveryX = 3
62 | let removeTickEveryX = 13
63 | }
64 |
65 | class LineCap: NSObject, ClockSkinLineCap {
66 | let majorTick = CGLineCap.butt
67 | let minorTick = CGLineCap.butt
68 |
69 | let secondHand = CGLineCap.butt
70 | let secondHandOverhang = CGLineCap.butt
71 |
72 | let minuteHand = CGLineCap.butt
73 | let minuteHandOverhang = CGLineCap.butt
74 |
75 | let hourHand = CGLineCap.butt
76 | let hourHandOverhang = CGLineCap.butt
77 | }
78 |
79 | let scaling: ClockSkinScaling = Scaling()
80 | let tick: ClockSkinTick = Tick()
81 | let color: ClockSkinColor = Color()
82 | let lineCap: ClockSkinLineCap = LineCap()
83 | }
84 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Skins/BraunBN0032Dark.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwissRailwayClockDark.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 08/07/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class BraunBN0032Dark: ClockSkin {
13 |
14 | class Scaling: NSObject, ClockSkinScaling {
15 | let clockFaceHeight = CGFloat(0.586)
16 | let borderWidth = CGFloat(0.025)
17 |
18 | let majorTickWidth = CGFloat(0.009)
19 | let majorTickHeight = CGFloat(0.045)
20 |
21 | let minorTickWidth = CGFloat(0.0045)
22 | let minorTickHeight = CGFloat(0.045)
23 |
24 | let majorTickRadius = CGFloat(0.455)
25 | let minorTickRadius = CGFloat(0.455)
26 |
27 | let secondHandWidth = CGFloat(0.009)
28 | let secondHandHeight = CGFloat(0.37)
29 | let secondHandOverhangWidth = CGFloat(0.025)
30 | let secondHandOverhangHeight = CGFloat(0.07)
31 |
32 | let minuteHandWidth = CGFloat(0.015)
33 | let minuteHandHeight = CGFloat(0.37)
34 | let minuteHandOverhangWidth = CGFloat(0.015)
35 | let minuteHandOverhangHeight = CGFloat(0.01)
36 |
37 | let hourHandWidth = CGFloat(0.022)
38 | let hourHandHeight = CGFloat(0.265)
39 | let hourHandOverhangWidth = CGFloat(0.022)
40 | let hourHandOverhangHeight = CGFloat(0.001)
41 |
42 | let handCircleRadius = CGFloat(0.025)
43 | }
44 |
45 | class Color: NSObject, ClockSkinColor {
46 | let screenBackground = NSColor(red: 0.13, green: 0.125, blue: 0.1409, alpha: 1.0).cgColor
47 | let clockBackground = NSColor(red: 0, green: 0, blue: 0, alpha: 0).cgColor
48 |
49 | let border = NSColor(red: 0.6, green: 0.6, blue: 0.6, alpha: 0).cgColor
50 | let majorTick = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
51 | let minorTick = NSColor(red: 0.5632, green: 0.5598, blue: 0.5705, alpha: 1.0).cgColor
52 |
53 | let secondHand = NSColor(red: 0.9663, green: 0.7711, blue: 0.1798, alpha: 1.0).cgColor
54 | let minuteHand = NSColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0).cgColor
55 | let hourHand = NSColor(red: 0.7027, green: 0.7027, blue: 0.7027, alpha: 1.0).cgColor
56 | let handShadow = NSColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
57 | }
58 |
59 | class Tick: NSObject, ClockSkinTick {
60 | let totalTicks = 60
61 | let majorTickEveryX = 5
62 | let removeTickEveryX = 61
63 | }
64 |
65 | class LineCap: NSObject, ClockSkinLineCap {
66 | let majorTick = CGLineCap.butt
67 | let minorTick = CGLineCap.butt
68 |
69 | let secondHand = CGLineCap.butt
70 | let secondHandOverhang = CGLineCap.round
71 |
72 | let minuteHand = CGLineCap.butt
73 | let minuteHandOverhang = CGLineCap.butt
74 |
75 | let hourHand = CGLineCap.butt
76 | let hourHandOverhang = CGLineCap.butt
77 | }
78 |
79 | let scaling: ClockSkinScaling = Scaling()
80 | let tick: ClockSkinTick = Tick()
81 | let color: ClockSkinColor = Color()
82 | let lineCap: ClockSkinLineCap = LineCap()
83 | }
84 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Skins/FiveOClock.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwissRailwayClockDark.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 08/07/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class FiveOClock: ClockSkin {
13 |
14 | class Scaling: NSObject, ClockSkinScaling {
15 | let clockFaceHeight = CGFloat(0.65)
16 | let borderWidth = CGFloat(0.027)
17 |
18 | let majorTickWidth = CGFloat(0.033)
19 | let majorTickHeight = CGFloat(0.11)
20 |
21 | let minorTickWidth = CGFloat(0.014)
22 | let minorTickHeight = CGFloat(0.0340)
23 |
24 | let majorTickRadius = CGFloat(0.455)
25 | let minorTickRadius = CGFloat(0.455)
26 |
27 | let secondHandWidth = CGFloat(0.004)
28 | let secondHandHeight = CGFloat(0.345)
29 | let secondHandOverhangWidth = CGFloat(0.015)
30 | let secondHandOverhangHeight = CGFloat(0.15)
31 |
32 | let minuteHandWidth = CGFloat(0.015)
33 | let minuteHandHeight = CGFloat(0.44)
34 | let minuteHandOverhangWidth = CGFloat(0.015)
35 | let minuteHandOverhangHeight = CGFloat(0.1)
36 |
37 | let hourHandWidth = CGFloat(0.015)
38 | let hourHandHeight = CGFloat(0.265)
39 | let hourHandOverhangWidth = CGFloat(0.015)
40 | let hourHandOverhangHeight = CGFloat(0.1)
41 |
42 | let handCircleRadius = CGFloat(0.013)
43 | }
44 |
45 | class Color: NSObject, ClockSkinColor {
46 | let screenBackground = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
47 | let clockBackground = NSColor(red: 0, green: 0, blue: 0, alpha: 0).cgColor
48 |
49 | let border = NSColor(srgbRed: 0.1201, green: 0.1201, blue: 0.1201, alpha: 1.0).cgColor
50 | let majorTick = NSColor(srgbRed: 0.1201, green: 0.1201, blue: 0.1201, alpha: 0).cgColor
51 | let minorTick = NSColor(srgbRed: 0.1201, green: 0.1201, blue: 0.1201, alpha: 0).cgColor
52 |
53 | let secondHand = NSColor(srgbRed: 0.7293, green: 0.1348, blue: 0.1447, alpha: 1.0).cgColor
54 | let minuteHand = NSColor(srgbRed: 0.1201, green: 0.1201, blue: 0.1201, alpha: 1.0).cgColor
55 | let hourHand = NSColor(srgbRed: 0.1201, green: 0.1201, blue: 0.1201, alpha: 1.0).cgColor
56 | let handShadow = NSColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
57 | }
58 |
59 | class Tick: NSObject, ClockSkinTick {
60 | let totalTicks = 60
61 | let majorTickEveryX = 5
62 | let removeTickEveryX = 61
63 | }
64 |
65 | class LineCap: NSObject, ClockSkinLineCap {
66 | let majorTick = CGLineCap.butt
67 | let minorTick = CGLineCap.butt
68 |
69 | let secondHand = CGLineCap.butt
70 | let secondHandOverhang = CGLineCap.butt
71 |
72 | let minuteHand = CGLineCap.butt
73 | let minuteHandOverhang = CGLineCap.butt
74 |
75 | let hourHand = CGLineCap.butt
76 | let hourHandOverhang = CGLineCap.butt
77 | }
78 |
79 | let scaling: ClockSkinScaling = Scaling()
80 | let tick: ClockSkinTick = Tick()
81 | let color: ClockSkinColor = Color()
82 | let lineCap: ClockSkinLineCap = LineCap()
83 | }
84 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Skins/KundoQuartzRepetitionWestGermanyWecker.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwissRailwayClockDark.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 31/07/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class KundoQuartzRepetitionWestGermanyWecker: ClockSkin {
13 |
14 | class Scaling: NSObject, ClockSkinScaling {
15 | let clockFaceHeight = CGFloat(0.57)
16 | let borderWidth = CGFloat(0.025)
17 |
18 | let majorTickWidth = CGFloat(0.012)
19 | let majorTickHeight = CGFloat(0.015)
20 |
21 | let minorTickWidth = CGFloat(0.0025)
22 | let minorTickHeight = CGFloat(0.02)
23 |
24 | let majorTickRadius = CGFloat(0.453)
25 | let minorTickRadius = CGFloat(0.455)
26 |
27 | let secondHandWidth = CGFloat(0.005)
28 | let secondHandHeight = CGFloat(0.37)
29 | let secondHandOverhangWidth = CGFloat(0.025)
30 | let secondHandOverhangHeight = CGFloat(0.001)
31 |
32 | let minuteHandWidth = CGFloat(0.015)
33 | let minuteHandHeight = CGFloat(0.37)
34 | let minuteHandOverhangWidth = CGFloat(0.015)
35 | let minuteHandOverhangHeight = CGFloat(0.001)
36 |
37 | let hourHandWidth = CGFloat(0.022)
38 | let hourHandHeight = CGFloat(0.275)
39 | let hourHandOverhangWidth = CGFloat(0.022)
40 | let hourHandOverhangHeight = CGFloat(0.001)
41 |
42 | let handCircleRadius = CGFloat(0.03)
43 | }
44 |
45 | class Color: NSObject, ClockSkinColor {
46 | let screenBackground = NSColor(srgbRed: 0.17, green: 0.1671, blue: 0.1846, alpha: 1.0).cgColor
47 | let clockBackground = NSColor(red: 0, green: 0, blue: 0, alpha: 0).cgColor
48 |
49 | let border = NSColor(srgbRed: 0.9354, green: 0.9354, blue: 0.9354, alpha: 0).cgColor
50 | let majorTick = NSColor(srgbRed: 0.9354, green: 0.9354, blue: 0.9354, alpha: 1.0).cgColor
51 | let minorTick = NSColor(srgbRed: 0.9354, green: 0.9354, blue: 0.9354, alpha: 1.0).cgColor
52 |
53 | let secondHand = NSColor(srgbRed: 0.8942, green: 0.3633, blue: 0.2739, alpha: 1.0).cgColor
54 | let minuteHand = NSColor(srgbRed: 0.9354, green: 0.9354, blue: 0.9354, alpha: 1.0).cgColor
55 | let hourHand = NSColor(srgbRed: 0.9354, green: 0.9354, blue: 0.9354, alpha: 1.0).cgColor
56 | let handShadow = NSColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
57 | }
58 |
59 | class Tick: NSObject, ClockSkinTick {
60 | let totalTicks = 60
61 | let majorTickEveryX = 5
62 | let removeTickEveryX = 61
63 | }
64 |
65 | class LineCap: NSObject, ClockSkinLineCap {
66 | let majorTick = CGLineCap.round
67 | let minorTick = CGLineCap.round
68 |
69 | let secondHand = CGLineCap.round
70 | let secondHandOverhang = CGLineCap.round
71 |
72 | let minuteHand = CGLineCap.round
73 | let minuteHandOverhang = CGLineCap.round
74 |
75 | let hourHand = CGLineCap.round
76 | let hourHandOverhang = CGLineCap.round
77 | }
78 |
79 | let scaling: ClockSkinScaling = Scaling()
80 | let tick: ClockSkinTick = Tick()
81 | let color: ClockSkinColor = Color()
82 | let lineCap: ClockSkinLineCap = LineCap()
83 | }
84 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Skins/PunktAC01AlarmClock.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PunktAC01AlarmClock.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 03/08/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class PunktAC01AlarmClock: ClockSkin {
13 |
14 | class Scaling: NSObject, ClockSkinScaling {
15 | let clockFaceHeight = CGFloat(0.65)
16 | let borderWidth = CGFloat(0.027)
17 |
18 | let majorTickWidth = CGFloat(0.033)
19 | let majorTickHeight = CGFloat(0.11)
20 |
21 | let minorTickWidth = CGFloat(0.014)
22 | let minorTickHeight = CGFloat(0.0340)
23 |
24 | let majorTickRadius = CGFloat(0.455)
25 | let minorTickRadius = CGFloat(0.455)
26 |
27 | let secondHandWidth = CGFloat(0.004)
28 | let secondHandHeight = CGFloat(0.345)
29 | let secondHandOverhangWidth = CGFloat(0.015)
30 | let secondHandOverhangHeight = CGFloat(0.15)
31 |
32 | let minuteHandWidth = CGFloat(0.015)
33 | let minuteHandHeight = CGFloat(0.44)
34 | let minuteHandOverhangWidth = CGFloat(0.015)
35 | let minuteHandOverhangHeight = CGFloat(0.1)
36 |
37 | let hourHandWidth = CGFloat(0.015)
38 | let hourHandHeight = CGFloat(0.265)
39 | let hourHandOverhangWidth = CGFloat(0.015)
40 | let hourHandOverhangHeight = CGFloat(0.1)
41 |
42 | let handCircleRadius = CGFloat(0.013)
43 | }
44 |
45 | class Color: NSObject, ClockSkinColor {
46 | let screenBackground = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
47 | let clockBackground = NSColor(red: 0, green: 0, blue: 0, alpha: 0).cgColor
48 |
49 | let border = NSColor(srgbRed: 0.1201, green: 0.1201, blue: 0.1201, alpha: 1.0).cgColor
50 | let majorTick = NSColor(srgbRed: 0.1201, green: 0.1201, blue: 0.1201, alpha: 0).cgColor
51 | let minorTick = NSColor(srgbRed: 0.1201, green: 0.1201, blue: 0.1201, alpha: 0).cgColor
52 |
53 | let secondHand = NSColor(srgbRed: 0.7293, green: 0.1348, blue: 0.1447, alpha: 1.0).cgColor
54 | let minuteHand = NSColor(srgbRed: 0.1201, green: 0.1201, blue: 0.1201, alpha: 1.0).cgColor
55 | let hourHand = NSColor(srgbRed: 0.1201, green: 0.1201, blue: 0.1201, alpha: 1.0).cgColor
56 | let handShadow = NSColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
57 | }
58 |
59 | class Tick: NSObject, ClockSkinTick {
60 | let totalTicks = 60
61 | let majorTickEveryX = 5
62 | let removeTickEveryX = 61
63 | }
64 |
65 | class LineCap: NSObject, ClockSkinLineCap {
66 | let majorTick = CGLineCap.butt
67 | let minorTick = CGLineCap.butt
68 |
69 | let secondHand = CGLineCap.butt
70 | let secondHandOverhang = CGLineCap.butt
71 |
72 | let minuteHand = CGLineCap.butt
73 | let minuteHandOverhang = CGLineCap.butt
74 |
75 | let hourHand = CGLineCap.butt
76 | let hourHandOverhang = CGLineCap.butt
77 | }
78 |
79 | let scaling: ClockSkinScaling = Scaling()
80 | let tick: ClockSkinTick = Tick()
81 | let color: ClockSkinColor = Color()
82 | let lineCap: ClockSkinLineCap = LineCap()
83 | }
84 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Skins/SeikoStandardKX308K.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwissRailwayClockDark.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 31/07/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class SeikoStandardKX308K: ClockSkin {
13 |
14 | class Scaling: NSObject, ClockSkinScaling {
15 | let clockFaceHeight = CGFloat(0.57)
16 | let borderWidth = CGFloat(0.022)
17 |
18 | let majorTickWidth = CGFloat(0.016)
19 | let majorTickHeight = CGFloat(0.104)
20 |
21 | let minorTickWidth = CGFloat(0.004)
22 | let minorTickHeight = CGFloat(0.029)
23 |
24 | let majorTickRadius = CGFloat(0.440)
25 | let minorTickRadius = CGFloat(0.440)
26 |
27 | let secondHandWidth = CGFloat(0.005)
28 | let secondHandHeight = CGFloat(0.390)
29 | let secondHandOverhangWidth = CGFloat(0.005)
30 | let secondHandOverhangHeight = CGFloat(0.0001)
31 |
32 | let minuteHandWidth = CGFloat(0.014)
33 | let minuteHandHeight = CGFloat(0.410)
34 | let minuteHandOverhangWidth = CGFloat(0.014)
35 | let minuteHandOverhangHeight = CGFloat(0.07)
36 |
37 | let hourHandWidth = CGFloat(0.024)
38 | let hourHandHeight = CGFloat(0.265)
39 | let hourHandOverhangWidth = CGFloat(0.024)
40 | let hourHandOverhangHeight = CGFloat(0.07)
41 |
42 | let handCircleRadius = CGFloat(0.027)
43 | }
44 |
45 | class Color: NSObject, ClockSkinColor {
46 | let screenBackground = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
47 | let clockBackground = NSColor(red: 1, green: 1, blue: 1, alpha: 0).cgColor
48 |
49 | let border = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
50 | let majorTick = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
51 | let minorTick = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
52 |
53 | let secondHand = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
54 | let minuteHand = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
55 | let hourHand = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
56 | let handShadow = NSColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
57 | }
58 |
59 | class Tick: NSObject, ClockSkinTick {
60 | let totalTicks = 60
61 | let majorTickEveryX = 5
62 | let removeTickEveryX = 61
63 | }
64 |
65 | class LineCap: NSObject, ClockSkinLineCap {
66 | let majorTick = CGLineCap.butt
67 | let minorTick = CGLineCap.butt
68 |
69 | let secondHand = CGLineCap.butt
70 | let secondHandOverhang = CGLineCap.butt
71 |
72 | let minuteHand = CGLineCap.butt
73 | let minuteHandOverhang = CGLineCap.butt
74 |
75 | let hourHand = CGLineCap.butt
76 | let hourHandOverhang = CGLineCap.butt
77 | }
78 |
79 | let scaling: ClockSkinScaling = Scaling()
80 | let tick: ClockSkinTick = Tick()
81 | let color: ClockSkinColor = Color()
82 | let lineCap: ClockSkinLineCap = LineCap()
83 | }
84 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Skins/SeikoStandardKX308KDark.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwissRailwayClockDark.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 31/07/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class SeikoStandardKX308KDark: ClockSkin {
13 |
14 | class Scaling: NSObject, ClockSkinScaling {
15 | let clockFaceHeight = CGFloat(0.57)
16 | let borderWidth = CGFloat(0.022)
17 |
18 | let majorTickWidth = CGFloat(0.016)
19 | let majorTickHeight = CGFloat(0.104)
20 |
21 | let minorTickWidth = CGFloat(0.004)
22 | let minorTickHeight = CGFloat(0.029)
23 |
24 | let majorTickRadius = CGFloat(0.440)
25 | let minorTickRadius = CGFloat(0.440)
26 |
27 | let secondHandWidth = CGFloat(0.005)
28 | let secondHandHeight = CGFloat(0.390)
29 | let secondHandOverhangWidth = CGFloat(0.005)
30 | let secondHandOverhangHeight = CGFloat(0.0001)
31 |
32 | let minuteHandWidth = CGFloat(0.014)
33 | let minuteHandHeight = CGFloat(0.410)
34 | let minuteHandOverhangWidth = CGFloat(0.014)
35 | let minuteHandOverhangHeight = CGFloat(0.07)
36 |
37 | let hourHandWidth = CGFloat(0.024)
38 | let hourHandHeight = CGFloat(0.265)
39 | let hourHandOverhangWidth = CGFloat(0.024)
40 | let hourHandOverhangHeight = CGFloat(0.07)
41 |
42 | let handCircleRadius = CGFloat(0.027)
43 | }
44 |
45 | class Color: NSObject, ClockSkinColor {
46 | let screenBackground = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
47 | let clockBackground = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 0).cgColor
48 |
49 | let border = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
50 | let majorTick = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
51 | let minorTick = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
52 |
53 | let secondHand = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
54 | let minuteHand = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
55 | let hourHand = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
56 | let handShadow = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
57 | }
58 |
59 | class Tick: NSObject, ClockSkinTick {
60 | let totalTicks = 60
61 | let majorTickEveryX = 5
62 | let removeTickEveryX = 61
63 | }
64 |
65 | class LineCap: NSObject, ClockSkinLineCap {
66 | let majorTick = CGLineCap.butt
67 | let minorTick = CGLineCap.butt
68 |
69 | let secondHand = CGLineCap.butt
70 | let secondHandOverhang = CGLineCap.butt
71 |
72 | let minuteHand = CGLineCap.butt
73 | let minuteHandOverhang = CGLineCap.butt
74 |
75 | let hourHand = CGLineCap.butt
76 | let hourHandOverhang = CGLineCap.butt
77 | }
78 |
79 | let scaling: ClockSkinScaling = Scaling()
80 | let tick: ClockSkinTick = Tick()
81 | let color: ClockSkinColor = Color()
82 | let lineCap: ClockSkinLineCap = LineCap()
83 | }
84 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Skins/SeikoStandardKX308W.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwissRailwayClockDark.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 31/07/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class SeikoStandardKX308W: ClockSkin {
13 |
14 | class Scaling: NSObject, ClockSkinScaling {
15 | let clockFaceHeight = CGFloat(0.57)
16 | let borderWidth = CGFloat(0.022)
17 |
18 | let majorTickWidth = CGFloat(0.016)
19 | let majorTickHeight = CGFloat(0.104)
20 |
21 | let minorTickWidth = CGFloat(0.004)
22 | let minorTickHeight = CGFloat(0.029)
23 |
24 | let majorTickRadius = CGFloat(0.440)
25 | let minorTickRadius = CGFloat(0.440)
26 |
27 | let secondHandWidth = CGFloat(0.005)
28 | let secondHandHeight = CGFloat(0.390)
29 | let secondHandOverhangWidth = CGFloat(0.005)
30 | let secondHandOverhangHeight = CGFloat(0.0001)
31 |
32 | let minuteHandWidth = CGFloat(0.014)
33 | let minuteHandHeight = CGFloat(0.410)
34 | let minuteHandOverhangWidth = CGFloat(0.014)
35 | let minuteHandOverhangHeight = CGFloat(0.07)
36 |
37 | let hourHandWidth = CGFloat(0.024)
38 | let hourHandHeight = CGFloat(0.265)
39 | let hourHandOverhangWidth = CGFloat(0.024)
40 | let hourHandOverhangHeight = CGFloat(0.07)
41 |
42 | let handCircleRadius = CGFloat(0.027)
43 | }
44 |
45 | class Color: NSObject, ClockSkinColor {
46 | let screenBackground = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
47 | let clockBackground = NSColor(red: 1, green: 1, blue: 1, alpha: 0).cgColor
48 |
49 | let border = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 0).cgColor
50 | let majorTick = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
51 | let minorTick = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
52 |
53 | let secondHand = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
54 | let minuteHand = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
55 | let hourHand = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
56 | let handShadow = NSColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
57 | }
58 |
59 | class Tick: NSObject, ClockSkinTick {
60 | let totalTicks = 60
61 | let majorTickEveryX = 5
62 | let removeTickEveryX = 61
63 | }
64 |
65 | class LineCap: NSObject, ClockSkinLineCap {
66 | let majorTick = CGLineCap.butt
67 | let minorTick = CGLineCap.butt
68 |
69 | let secondHand = CGLineCap.butt
70 | let secondHandOverhang = CGLineCap.butt
71 |
72 | let minuteHand = CGLineCap.butt
73 | let minuteHandOverhang = CGLineCap.butt
74 |
75 | let hourHand = CGLineCap.butt
76 | let hourHandOverhang = CGLineCap.butt
77 | }
78 |
79 | let scaling: ClockSkinScaling = Scaling()
80 | let tick: ClockSkinTick = Tick()
81 | let color: ClockSkinColor = Color()
82 | let lineCap: ClockSkinLineCap = LineCap()
83 | }
84 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Skins/SeikoStandardKX308WDark.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwissRailwayClockDark.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 31/07/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class SeikoStandardKX308WDark: ClockSkin {
13 |
14 | class Scaling: NSObject, ClockSkinScaling {
15 | let clockFaceHeight = CGFloat(0.57)
16 | let borderWidth = CGFloat(0.022)
17 |
18 | let majorTickWidth = CGFloat(0.016)
19 | let majorTickHeight = CGFloat(0.104)
20 |
21 | let minorTickWidth = CGFloat(0.004)
22 | let minorTickHeight = CGFloat(0.029)
23 |
24 | let majorTickRadius = CGFloat(0.440)
25 | let minorTickRadius = CGFloat(0.440)
26 |
27 | let secondHandWidth = CGFloat(0.005)
28 | let secondHandHeight = CGFloat(0.390)
29 | let secondHandOverhangWidth = CGFloat(0.005)
30 | let secondHandOverhangHeight = CGFloat(0.0001)
31 |
32 | let minuteHandWidth = CGFloat(0.014)
33 | let minuteHandHeight = CGFloat(0.410)
34 | let minuteHandOverhangWidth = CGFloat(0.014)
35 | let minuteHandOverhangHeight = CGFloat(0.07)
36 |
37 | let hourHandWidth = CGFloat(0.024)
38 | let hourHandHeight = CGFloat(0.265)
39 | let hourHandOverhangWidth = CGFloat(0.024)
40 | let hourHandOverhangHeight = CGFloat(0.07)
41 |
42 | let handCircleRadius = CGFloat(0.027)
43 | }
44 |
45 | class Color: NSObject, ClockSkinColor {
46 | let screenBackground = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 1.0).cgColor
47 | let clockBackground = NSColor(srgbRed: 0.0628, green: 0.1178, blue: 0.1187, alpha: 0).cgColor
48 |
49 | let border = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 0).cgColor
50 | let majorTick = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
51 | let minorTick = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
52 |
53 | let secondHand = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
54 | let minuteHand = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
55 | let hourHand = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
56 | let handShadow = NSColor(srgbRed: 1, green: 1, blue: 1, alpha: 1.0).cgColor
57 | }
58 |
59 | class Tick: NSObject, ClockSkinTick {
60 | let totalTicks = 60
61 | let majorTickEveryX = 5
62 | let removeTickEveryX = 61
63 | }
64 |
65 | class LineCap: NSObject, ClockSkinLineCap {
66 | let majorTick = CGLineCap.butt
67 | let minorTick = CGLineCap.butt
68 |
69 | let secondHand = CGLineCap.butt
70 | let secondHandOverhang = CGLineCap.butt
71 |
72 | let minuteHand = CGLineCap.butt
73 | let minuteHandOverhang = CGLineCap.butt
74 |
75 | let hourHand = CGLineCap.butt
76 | let hourHandOverhang = CGLineCap.butt
77 | }
78 |
79 | let scaling: ClockSkinScaling = Scaling()
80 | let tick: ClockSkinTick = Tick()
81 | let color: ClockSkinColor = Color()
82 | let lineCap: ClockSkinLineCap = LineCap()
83 | }
84 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Skins/SwissRailwayClockDark.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwissRailwayClockDark.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 08/07/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class SwissRailwayClockDark: ClockSkin {
13 |
14 | class Scaling: NSObject, ClockSkinScaling {
15 | let clockFaceHeight = CGFloat(0.7)
16 | let borderWidth = CGFloat(0.025)
17 |
18 | let majorTickWidth = CGFloat(0.033)
19 | let majorTickHeight = CGFloat(0.11)
20 |
21 | let minorTickWidth = CGFloat(0.014)
22 | let minorTickHeight = CGFloat(0.0340)
23 |
24 | let majorTickRadius = CGFloat(0.455)
25 | let minorTickRadius = CGFloat(0.455)
26 |
27 | let secondHandWidth = CGFloat(0.015)
28 | let secondHandHeight = CGFloat(0.345)
29 | let secondHandOverhangWidth = CGFloat(0.015)
30 | let secondHandOverhangHeight = CGFloat(0.15)
31 |
32 | let minuteHandWidth = CGFloat(0.04)
33 | let minuteHandHeight = CGFloat(0.44)
34 | let minuteHandOverhangWidth = CGFloat(0.04)
35 | let minuteHandOverhangHeight = CGFloat(0.1)
36 |
37 | let hourHandWidth = CGFloat(0.05)
38 | let hourHandHeight = CGFloat(0.265)
39 | let hourHandOverhangWidth = CGFloat(0.05)
40 | let hourHandOverhangHeight = CGFloat(0.1)
41 |
42 | let handCircleRadius = CGFloat(0.0145)
43 | }
44 |
45 | class Color: NSObject, ClockSkinColor {
46 | let screenBackground = NSColor(red: 0.1486, green: 0.1486, blue: 0.1486, alpha: 1.0).cgColor
47 | let clockBackground = NSColor(red: 0, green: 0, blue: 0, alpha: 0).cgColor
48 |
49 | let border = NSColor(red: 0.6, green: 0.6, blue: 0.6, alpha: 0).cgColor
50 | let majorTick = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
51 | let minorTick = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
52 |
53 | let secondHand = NSColor(red: 0.7322, green: 0.0957, blue: 0.0, alpha: 1.0).cgColor
54 | let minuteHand = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
55 | let hourHand = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
56 | let handShadow = NSColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
57 | }
58 |
59 | class Tick: NSObject, ClockSkinTick {
60 | let totalTicks = 60
61 | let majorTickEveryX = 5
62 | let removeTickEveryX = 61
63 | }
64 |
65 | class LineCap: NSObject, ClockSkinLineCap {
66 | let majorTick = CGLineCap.butt
67 | let minorTick = CGLineCap.butt
68 |
69 | let secondHand = CGLineCap.butt
70 | let secondHandOverhang = CGLineCap.butt
71 |
72 | let minuteHand = CGLineCap.butt
73 | let minuteHandOverhang = CGLineCap.butt
74 |
75 | let hourHand = CGLineCap.butt
76 | let hourHandOverhang = CGLineCap.butt
77 | }
78 |
79 | let scaling: ClockSkinScaling = Scaling()
80 | let tick: ClockSkinTick = Tick()
81 | let color: ClockSkinColor = Color()
82 | let lineCap: ClockSkinLineCap = LineCap()
83 | }
84 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Skins/SwissRailwayClockLight.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwissRailwayClockDark.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 08/07/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class SwissRailwayClockLight: ClockSkin {
13 |
14 | class Scaling: NSObject, ClockSkinScaling {
15 | let clockFaceHeight = CGFloat(0.7)
16 | let borderWidth = CGFloat(0.025)
17 |
18 | let majorTickWidth = CGFloat(0.033)
19 | let majorTickHeight = CGFloat(0.11)
20 |
21 | let minorTickWidth = CGFloat(0.014)
22 | let minorTickHeight = CGFloat(0.0340)
23 |
24 | let majorTickRadius = CGFloat(0.455)
25 | let minorTickRadius = CGFloat(0.455)
26 |
27 | let secondHandWidth = CGFloat(0.015)
28 | let secondHandHeight = CGFloat(0.345)
29 | let secondHandOverhangWidth = CGFloat(0.015)
30 | let secondHandOverhangHeight = CGFloat(0.15)
31 |
32 | let minuteHandWidth = CGFloat(0.04)
33 | let minuteHandHeight = CGFloat(0.44)
34 | let minuteHandOverhangWidth = CGFloat(0.04)
35 | let minuteHandOverhangHeight = CGFloat(0.1)
36 |
37 | let hourHandWidth = CGFloat(0.05)
38 | let hourHandHeight = CGFloat(0.265)
39 | let hourHandOverhangWidth = CGFloat(0.05)
40 | let hourHandOverhangHeight = CGFloat(0.1)
41 |
42 | let handCircleRadius = CGFloat(0.0145)
43 | }
44 |
45 | class Color: NSObject, ClockSkinColor {
46 | let screenBackground = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
47 | let clockBackground = NSColor(red: 0, green: 0, blue: 0, alpha: 0).cgColor
48 |
49 | let border = NSColor(red: 0.6, green: 0.6, blue: 0.6, alpha: 0).cgColor
50 | let majorTick = NSColor(red: 0, green: 0, blue: 0, alpha: 1).cgColor
51 | let minorTick = NSColor(red: 0, green: 0, blue: 0, alpha: 1).cgColor
52 |
53 | let secondHand = NSColor(red: 0.7322, green: 0.0957, blue: 0.0, alpha: 1.0).cgColor
54 | let minuteHand = NSColor(red: 0, green: 0, blue: 0, alpha: 1).cgColor
55 | let hourHand = NSColor(red: 0, green: 0, blue: 0, alpha: 1).cgColor
56 | let handShadow = NSColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
57 | }
58 |
59 | class Tick: NSObject, ClockSkinTick {
60 | let totalTicks = 60
61 | let majorTickEveryX = 5
62 | let removeTickEveryX = 61
63 | }
64 |
65 | class LineCap: NSObject, ClockSkinLineCap {
66 | let majorTick = CGLineCap.butt
67 | let minorTick = CGLineCap.butt
68 |
69 | let secondHand = CGLineCap.butt
70 | let secondHandOverhang = CGLineCap.butt
71 |
72 | let minuteHand = CGLineCap.butt
73 | let minuteHandOverhang = CGLineCap.butt
74 |
75 | let hourHand = CGLineCap.butt
76 | let hourHandOverhang = CGLineCap.butt
77 | }
78 |
79 | let scaling: ClockSkinScaling = Scaling()
80 | let tick: ClockSkinTick = Tick()
81 | let color: ClockSkinColor = Color()
82 | let lineCap: ClockSkinLineCap = LineCap()
83 | }
84 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClock/Skins/TimeSaverClock.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TimeSaverClockDark.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 08/07/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ScreenSaver
11 |
12 | class TimeSaverClock: ClockSkin {
13 |
14 | class Scaling: NSObject, ClockSkinScaling {
15 | let clockFaceHeight = CGFloat(0.8)
16 | let borderWidth = CGFloat(0.03)
17 |
18 | let majorTickWidth = CGFloat(0.018)
19 | let majorTickHeight = CGFloat(0.04)
20 |
21 | let minorTickWidth = CGFloat(0.006)
22 | let minorTickHeight = CGFloat(0.012)
23 |
24 | let majorTickRadius = CGFloat(0.455)
25 | let minorTickRadius = CGFloat(0.455)
26 |
27 | let secondHandWidth = CGFloat(0.012)
28 | let secondHandHeight = CGFloat(0.455)
29 | let secondHandOverhangWidth = CGFloat(0.012)
30 | let secondHandOverhangHeight = CGFloat(0.1)
31 |
32 | let minuteHandWidth = CGFloat(0.032)
33 | let minuteHandHeight = CGFloat(0.455)
34 | let minuteHandOverhangWidth = CGFloat(0.032)
35 | let minuteHandOverhangHeight = CGFloat(0.1)
36 |
37 | let hourHandWidth = CGFloat(0.04)
38 | let hourHandHeight = CGFloat(0.3)
39 | let hourHandOverhangWidth = CGFloat(0.04)
40 | let hourHandOverhangHeight = CGFloat(0.1)
41 |
42 | let handCircleRadius = CGFloat(0.032)
43 | }
44 |
45 | class Color: NSObject, ClockSkinColor {
46 | let screenBackground = NSColor(red: 0.1, green: 0.1, blue: 0.1, alpha: 1).cgColor
47 | let clockBackground = NSColor(red: 0, green: 0, blue: 0, alpha: 1).cgColor
48 |
49 | let border = NSColor(red: 1, green: 1, blue: 1, alpha: 0.6).cgColor
50 | let majorTick = NSColor(red: 1, green: 1, blue: 1, alpha: 0.4).cgColor
51 | let minorTick = NSColor(red: 1, green: 1, blue: 1, alpha: 0.4).cgColor
52 |
53 | let secondHand = NSColor(red: 1, green: 1, blue: 1, alpha: 1.0).cgColor
54 | let minuteHand = NSColor(red: 1, green: 1, blue: 1, alpha: 1.0).cgColor
55 | let hourHand = NSColor(red: 1, green: 1, blue: 1, alpha: 1.0).cgColor
56 | let handShadow = NSColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
57 | }
58 |
59 | class Tick: NSObject, ClockSkinTick {
60 | let totalTicks = 60
61 | let majorTickEveryX = 5
62 | let removeTickEveryX = 61
63 | }
64 |
65 | class LineCap: NSObject, ClockSkinLineCap {
66 | let majorTick = CGLineCap.butt
67 | let minorTick = CGLineCap.butt
68 |
69 | let secondHand = CGLineCap.butt
70 | let secondHandOverhang = CGLineCap.butt
71 |
72 | let minuteHand = CGLineCap.butt
73 | let minuteHandOverhang = CGLineCap.butt
74 |
75 | let hourHand = CGLineCap.butt
76 | let hourHandOverhang = CGLineCap.butt
77 | }
78 |
79 | let scaling: ClockSkinScaling = Scaling()
80 | let tick: ClockSkinTick = Tick()
81 | let color: ClockSkinColor = Color()
82 | let lineCap: ClockSkinLineCap = LineCap()
83 | }
84 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClockDemo/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // SimpleClockDemo
4 | //
5 | // Created by Pascal Wagler on 02/08/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 | import ScreenSaver
11 |
12 | @NSApplicationMain
13 | class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate {
14 |
15 | func applicationDidFinishLaunching(_ aNotification: Notification) {
16 |
17 | }
18 |
19 | func applicationWillTerminate(_ aNotification: Notification) {
20 |
21 | }
22 |
23 | @objc func applicationShouldTerminateAfterLastWindowClosed(_ theApplication: NSApplication) -> Bool {
24 | return true
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClockDemo/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "size" : "16x16",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "size" : "16x16",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "size" : "32x32",
16 | "scale" : "1x"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "size" : "32x32",
21 | "scale" : "2x"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "size" : "128x128",
26 | "scale" : "1x"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "size" : "128x128",
31 | "scale" : "2x"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "size" : "256x256",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "size" : "256x256",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "size" : "512x512",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "size" : "512x512",
51 | "scale" : "2x"
52 | }
53 | ],
54 | "info" : {
55 | "version" : 1,
56 | "author" : "xcode"
57 | }
58 | }
--------------------------------------------------------------------------------
/SimpleClock/SimpleClockDemo/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.1
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1.1
25 | LSMinimumSystemVersion
26 | $(MACOSX_DEPLOYMENT_TARGET)
27 | NSHumanReadableCopyright
28 | Copyright © 2016 - 2018 Pascal Wagler. All rights reserved.
29 | NSMainStoryboardFile
30 | Main
31 | NSPrincipalClass
32 | NSApplication
33 |
34 |
35 |
--------------------------------------------------------------------------------
/SimpleClock/SimpleClockDemo/MainViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MainViewController.swift
3 | // SimpleClock
4 | //
5 | // Created by Pascal Wagler on 05/08/16.
6 | // Copyright (c) 2016 - 2018 Pascal Wagler. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 |
11 | class MainViewController: NSViewController {
12 |
13 | @IBOutlet weak var clockView: SimpleClock!
14 | @IBOutlet weak var clockSizeSlider: NSSlider!
15 | @IBOutlet weak var borderSizeSlider: NSSlider!
16 |
17 | @IBOutlet weak var majorTickWidthSlider: NSSlider!
18 | @IBOutlet weak var majorTickHeightSlider: NSSlider!
19 | @IBOutlet weak var majorTickRadiusSlider: NSSlider!
20 |
21 | @IBOutlet weak var minorTickWidthSlider: NSSlider!
22 | @IBOutlet weak var minorTickHeightSlider: NSSlider!
23 | @IBOutlet weak var minorTickRadiusSlider: NSSlider!
24 |
25 | @IBOutlet weak var secondHandWidthSlider: NSSlider!
26 | @IBOutlet weak var secondHandHeightSlider: NSSlider!
27 | @IBOutlet weak var secondHandOverhangWidthSlider: NSSlider!
28 | @IBOutlet weak var secondHandOverhangHeightSlider: NSSlider!
29 |
30 | @IBOutlet weak var minuteHandWidthSlider: NSSlider!
31 | @IBOutlet weak var minuteHandHeightSlider: NSSlider!
32 | @IBOutlet weak var minuteHandOverhangWidthSlider: NSSlider!
33 | @IBOutlet weak var minuteHandOverhangHeightSlider: NSSlider!
34 |
35 | @IBOutlet weak var hourHandWidthSlider: NSSlider!
36 | @IBOutlet weak var hourHandHeightSlider: NSSlider!
37 | @IBOutlet weak var hourHandOverhangWidthSlider: NSSlider!
38 | @IBOutlet weak var hourHandOverhangHeightSlider: NSSlider!
39 |
40 | @IBOutlet weak var skinSelectionButton: NSPopUpButton!
41 | @IBOutlet weak var lineCapButton: NSPopUpButton!
42 |
43 | var liveSkin = LiveSkin()
44 |
45 | let itemTitles = [String](arrayLiteral:
46 | String(describing: AscotClock.self),
47 | String(describing: SwissRailwayClockDark.self),
48 | String(describing: SwissRailwayClockLight.self),
49 | String(describing: TimeSaverClock.self),
50 | String(describing: BraunBN0032Dark.self),
51 | String(describing: KundoQuartzRepetitionWestGermanyWecker.self),
52 | String(describing: SeikoStandardKX308K.self),
53 | String(describing: SeikoStandardKX308KDark.self),
54 | String(describing: SeikoStandardKX308W.self),
55 | String(describing: SeikoStandardKX308WDark.self),
56 | String(describing: FiveOClock.self),
57 | String(describing: PunktAC01AlarmClock.self)
58 | )
59 |
60 | override func viewDidLoad() {
61 | super.viewDidLoad()
62 |
63 | Swift.print("MainViewController did load.")
64 |
65 | // Setup the clock timer
66 | let timer = Timer.scheduledTimer(
67 | timeInterval: clockView.animationTimeInterval,
68 | target: clockView,
69 | selector: #selector(SimpleClock.animateOneFrame),
70 | userInfo: nil,
71 | repeats: true)
72 | RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)
73 |
74 | // Setup the skin selector
75 | skinSelectionButton.removeAllItems()
76 | skinSelectionButton.addItems(withTitles: itemTitles)
77 |
78 | // Setup the bindings
79 | clockSizeSlider.bind("value",
80 | to: liveSkin.scaling as AnyObject,
81 | withKeyPath: "clockFaceHeight",
82 | options: nil)
83 | borderSizeSlider.bind("value",
84 | to: liveSkin.scaling as AnyObject,
85 | withKeyPath: "borderWidth",
86 | options: nil)
87 |
88 | majorTickWidthSlider.bind("value",
89 | to: liveSkin.scaling as AnyObject,
90 | withKeyPath: "majorTickWidth",
91 | options: nil)
92 | majorTickHeightSlider.bind("value",
93 | to: liveSkin.scaling as AnyObject,
94 | withKeyPath: "majorTickHeight",
95 | options: nil)
96 | majorTickRadiusSlider.bind("value",
97 | to: liveSkin.scaling as AnyObject,
98 | withKeyPath: "majorTickRadius",
99 | options: nil)
100 |
101 | minorTickWidthSlider.bind("value",
102 | to: liveSkin.scaling as AnyObject,
103 | withKeyPath: "minorTickWidth",
104 | options: nil)
105 | minorTickHeightSlider.bind("value",
106 | to: liveSkin.scaling as AnyObject,
107 | withKeyPath: "minorTickHeight",
108 | options: nil)
109 | minorTickRadiusSlider.bind("value",
110 | to: liveSkin.scaling as AnyObject,
111 | withKeyPath: "minorTickRadius",
112 | options: nil)
113 |
114 | secondHandWidthSlider.bind("value",
115 | to: liveSkin.scaling as AnyObject,
116 | withKeyPath: "secondHandWidth",
117 | options: nil)
118 | secondHandHeightSlider.bind("value",
119 | to: liveSkin.scaling as AnyObject,
120 | withKeyPath: "secondHandHeight",
121 | options: nil)
122 | secondHandOverhangWidthSlider.bind("value",
123 | to: liveSkin.scaling as AnyObject,
124 | withKeyPath: "secondHandOverhangWidth",
125 | options: nil)
126 | secondHandOverhangHeightSlider.bind("value",
127 | to: liveSkin.scaling as AnyObject,
128 | withKeyPath: "secondHandOverhangHeight",
129 | options: nil)
130 |
131 | minuteHandWidthSlider.bind("value",
132 | to: liveSkin.scaling as AnyObject,
133 | withKeyPath: "minuteHandWidth",
134 | options: nil)
135 | minuteHandHeightSlider.bind("value",
136 | to: liveSkin.scaling as AnyObject,
137 | withKeyPath: "minuteHandHeight",
138 | options: nil)
139 | minuteHandOverhangWidthSlider.bind("value",
140 | to: liveSkin.scaling as AnyObject,
141 | withKeyPath: "minuteHandOverhangWidth",
142 | options: nil)
143 | minuteHandOverhangHeightSlider.bind("value",
144 | to: liveSkin.scaling as AnyObject,
145 | withKeyPath: "minuteHandOverhangHeight",
146 | options: nil)
147 |
148 | hourHandWidthSlider.bind("value",
149 | to: liveSkin.scaling as AnyObject,
150 | withKeyPath: "hourHandWidth",
151 | options: nil)
152 | hourHandHeightSlider.bind("value",
153 | to: liveSkin.scaling as AnyObject,
154 | withKeyPath: "hourHandHeight",
155 | options: nil)
156 | hourHandOverhangWidthSlider.bind("value",
157 | to: liveSkin.scaling as AnyObject,
158 | withKeyPath: "hourHandOverhangWidth",
159 | options: nil)
160 | hourHandOverhangHeightSlider.bind("value",
161 | to: liveSkin.scaling as AnyObject,
162 | withKeyPath: "hourHandOverhangHeight",
163 | options: nil)
164 |
165 | lineCapButton.bind("selectedIndex",
166 | to: liveSkin.lineCap as AnyObject,
167 | withKeyPath: "minorTick",
168 | options: nil)
169 |
170 | clockView.skin = liveSkin
171 | }
172 |
173 | @IBAction func skinSelectionChange(_ sender: NSPopUpButton) {
174 | Swift.print("Skin change")
175 |
176 | var skin: ClockSkin
177 |
178 | switch sender.titleOfSelectedItem! {
179 | case String(describing: AscotClock.self):
180 | skin = AscotClock()
181 |
182 | case String(describing: SwissRailwayClockDark.self):
183 | skin = SwissRailwayClockDark()
184 |
185 | case String(describing: SwissRailwayClockLight.self):
186 | skin = SwissRailwayClockLight()
187 |
188 | case String(describing: TimeSaverClock.self):
189 | skin = TimeSaverClock()
190 |
191 | case String(describing: BraunBN0032Dark.self):
192 | skin = BraunBN0032Dark()
193 |
194 | case String(describing: KundoQuartzRepetitionWestGermanyWecker.self):
195 | skin = KundoQuartzRepetitionWestGermanyWecker()
196 |
197 | case String(describing: SeikoStandardKX308K.self):
198 | skin = SeikoStandardKX308K()
199 |
200 | case String(describing: SeikoStandardKX308KDark.self):
201 | skin = SeikoStandardKX308KDark()
202 |
203 | case String(describing: SeikoStandardKX308W.self):
204 | skin = SeikoStandardKX308W()
205 |
206 | case String(describing: SeikoStandardKX308WDark.self):
207 | skin = SeikoStandardKX308WDark()
208 |
209 | case String(describing: FiveOClock.self):
210 | skin = FiveOClock()
211 |
212 | case String(describing: PunktAC01AlarmClock.self):
213 | skin = PunktAC01AlarmClock()
214 |
215 | default:
216 | skin = KundoQuartzRepetitionWestGermanyWecker()
217 | }
218 |
219 | clockView.skin = skin
220 | }
221 | }
222 |
223 | class LiveSkin: ClockSkin {
224 |
225 | class Scaling: NSObject, ClockSkinScaling {
226 |
227 | var clockFaceHeight = CGFloat(0.4)
228 | var borderWidth = CGFloat(0.025)
229 |
230 | var majorTickWidth = CGFloat(0.033)
231 | var majorTickHeight = CGFloat(0.11)
232 |
233 | var minorTickWidth = CGFloat(0.014)
234 | var minorTickHeight = CGFloat(0.0340)
235 |
236 | var majorTickRadius = CGFloat(0.455)
237 | var minorTickRadius = CGFloat(0.455)
238 |
239 | var secondHandWidth = CGFloat(0.015)
240 | var secondHandHeight = CGFloat(0.345)
241 | var secondHandOverhangWidth = CGFloat(0.015)
242 | var secondHandOverhangHeight = CGFloat(0.15)
243 |
244 | var minuteHandWidth = CGFloat(0.04)
245 | var minuteHandHeight = CGFloat(0.44)
246 | var minuteHandOverhangWidth = CGFloat(0.04)
247 | var minuteHandOverhangHeight = CGFloat(0.1)
248 |
249 | var hourHandWidth = CGFloat(0.05)
250 | var hourHandHeight = CGFloat(0.265)
251 | var hourHandOverhangWidth = CGFloat(0.05)
252 | var hourHandOverhangHeight = CGFloat(0.1)
253 |
254 | var handCircleRadius = CGFloat(0.0145)
255 | }
256 |
257 | class Color: NSObject, ClockSkinColor {
258 | var screenBackground = NSColor(red: 0.1486, green: 0.1486, blue: 0.1486, alpha: 1.0).cgColor
259 | var clockBackground = NSColor(red: 0, green: 0, blue: 0, alpha: 0).cgColor
260 |
261 | var border = NSColor(red: 0.6, green: 0.6, blue: 0.6, alpha: 1).cgColor
262 | var majorTick = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
263 | var minorTick = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
264 |
265 | var secondHand = NSColor(red: 0.7322, green: 0.0957, blue: 0.0, alpha: 1.0).cgColor
266 | var minuteHand = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
267 | var hourHand = NSColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
268 | var handShadow = NSColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
269 | }
270 |
271 | class Tick: NSObject, ClockSkinTick {
272 | var totalTicks = 60
273 | var majorTickEveryX = 5
274 | var removeTickEveryX = 61
275 | }
276 |
277 | class LineCap: NSObject, ClockSkinLineCap {
278 | var majorTick = CGLineCap.butt
279 | var minorTick = CGLineCap.butt
280 |
281 | var secondHand = CGLineCap.butt
282 | var secondHandOverhang = CGLineCap.butt
283 |
284 | var minuteHand = CGLineCap.butt
285 | var minuteHandOverhang = CGLineCap.butt
286 |
287 | var hourHand = CGLineCap.butt
288 | var hourHandOverhang = CGLineCap.butt
289 | }
290 |
291 | let scaling: ClockSkinScaling = Scaling()
292 | let tick: ClockSkinTick = Tick()
293 | let color: ClockSkinColor = Color()
294 | let lineCap: ClockSkinLineCap = LineCap()
295 | }
296 |
--------------------------------------------------------------------------------
/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wandmalfarbe/Simple-Clock-Screensaver/3bba2fc76cf8ffb3d39986836e73d172463c99d4/icon.png
--------------------------------------------------------------------------------
/images/BraunBN0032Dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wandmalfarbe/Simple-Clock-Screensaver/3bba2fc76cf8ffb3d39986836e73d172463c99d4/images/BraunBN0032Dark.png
--------------------------------------------------------------------------------
/images/FiveOClock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wandmalfarbe/Simple-Clock-Screensaver/3bba2fc76cf8ffb3d39986836e73d172463c99d4/images/FiveOClock.png
--------------------------------------------------------------------------------
/images/KundoQuartzRepetitionWestGermanyWecker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wandmalfarbe/Simple-Clock-Screensaver/3bba2fc76cf8ffb3d39986836e73d172463c99d4/images/KundoQuartzRepetitionWestGermanyWecker.png
--------------------------------------------------------------------------------
/images/SeikoStandardKX308K.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wandmalfarbe/Simple-Clock-Screensaver/3bba2fc76cf8ffb3d39986836e73d172463c99d4/images/SeikoStandardKX308K.png
--------------------------------------------------------------------------------
/images/SwissRailwayClockDark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wandmalfarbe/Simple-Clock-Screensaver/3bba2fc76cf8ffb3d39986836e73d172463c99d4/images/SwissRailwayClockDark.png
--------------------------------------------------------------------------------
/images/SwissRailwayClockLight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wandmalfarbe/Simple-Clock-Screensaver/3bba2fc76cf8ffb3d39986836e73d172463c99d4/images/SwissRailwayClockLight.png
--------------------------------------------------------------------------------
/scripts/release.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | zip -r -X "Simple-Clock-${1}.saver.zip" "SimpleClock.saver"
--------------------------------------------------------------------------------