mirror of https://github.com/einverne/dotfiles.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.2 KiB
117 lines
3.2 KiB
4 years ago
|
--- === CircleClock ===
|
||
|
---
|
||
|
--- A circleclock inset into the desktop
|
||
|
---
|
||
|
--- Download: [https://github.com/Hammerspoon/Spoons/raw/master/Spoons/CircleClock.spoon.zip](https://github.com/Hammerspoon/Spoons/raw/master/Spoons/CircleClock.spoon.zip)
|
||
|
|
||
|
local obj={}
|
||
|
obj.__index = obj
|
||
|
|
||
|
-- Metadata
|
||
|
obj.name = "CircleClock"
|
||
|
obj.version = "1.0"
|
||
|
obj.author = "ashfinal <[email protected]>"
|
||
|
obj.homepage = "https://github.com/Hammerspoon/Spoons"
|
||
|
obj.license = "MIT - https://opensource.org/licenses/MIT"
|
||
|
|
||
|
-- Internal function used to find our location, so we know where to load files from
|
||
|
local function script_path()
|
||
|
local str = debug.getinfo(2, "S").source:sub(2)
|
||
|
return str:match("(.*/)")
|
||
|
end
|
||
|
|
||
|
obj.spoonPath = script_path()
|
||
|
|
||
|
local function updateClock()
|
||
|
local secnum = math.tointeger(os.date("%S"))
|
||
|
local minnum = math.tointeger(os.date("%M"))
|
||
|
local hournum = math.tointeger(os.date("%I"))
|
||
|
local secangle = 6*secnum
|
||
|
local minangle = 6*minnum+6/60*secnum
|
||
|
local hourangle = 30*hournum+30/60*minnum+30/60/60*secnum
|
||
|
|
||
|
obj.canvas[3].endAngle = secangle
|
||
|
obj.canvas[7].endAngle = minangle
|
||
|
-- hourangle may be larger than 360 at 12pm-1pm
|
||
|
if hourangle >= 360 then
|
||
|
hourangle = hourangle-360
|
||
|
end
|
||
|
obj.canvas[5].endAngle = hourangle
|
||
|
end
|
||
|
|
||
|
function obj:init()
|
||
|
local cscreen = hs.screen.mainScreen()
|
||
|
local cres = cscreen:fullFrame()
|
||
|
self.canvas = hs.canvas.new({
|
||
|
x = cres.w-300-20,
|
||
|
y = 100,
|
||
|
w = 200,
|
||
|
h = 200
|
||
|
}):show()
|
||
|
obj.canvas:behavior(hs.canvas.windowBehaviors.canJoinAllSpaces)
|
||
|
obj.canvas:level(hs.canvas.windowLevels.desktopIcon)
|
||
|
obj.canvas[1] = {
|
||
|
id = "watch_image",
|
||
|
type = "image",
|
||
|
image = hs.image.imageFromPath(self.spoonPath .. "/watchbg.png"),
|
||
|
}
|
||
|
obj.canvas[2] = {
|
||
|
id = "watch_circle",
|
||
|
type = "circle",
|
||
|
radius = "40%",
|
||
|
action = "stroke",
|
||
|
strokeColor = {hex="#9E9E9E", alpha=0.3},
|
||
|
}
|
||
|
obj.canvas[3] = {
|
||
|
id = "watch_sechand",
|
||
|
type = "arc",
|
||
|
radius = "40%",
|
||
|
fillColor = {hex="#9E9E9E", alpha=0.1},
|
||
|
strokeColor = {hex="#9E9E9E", alpha=0.3},
|
||
|
endAngle = 0,
|
||
|
}
|
||
|
obj.canvas[4] = {
|
||
|
id = "watch_hourcircle",
|
||
|
type = "circle",
|
||
|
action = "stroke",
|
||
|
radius = "20%",
|
||
|
strokeWidth = 3,
|
||
|
strokeColor = {hex="#FFFFFF", alpha=0.1},
|
||
|
}
|
||
|
obj.canvas[5] = {
|
||
|
id = "watch_hourarc",
|
||
|
type = "arc",
|
||
|
action = "stroke",
|
||
|
radius = "20%",
|
||
|
arcRadii = false,
|
||
|
strokeWidth = 3,
|
||
|
strokeColor = {hex="#EC6D27", alpha=0.75},
|
||
|
endAngle = 0,
|
||
|
}
|
||
|
obj.canvas[6] = {
|
||
|
id = "watch_mincircle",
|
||
|
type = "circle",
|
||
|
action = "stroke",
|
||
|
radius = "27%",
|
||
|
strokeWidth = 3,
|
||
|
strokeColor = {hex="#FFFFFF", alpha=0.1},
|
||
|
}
|
||
|
obj.canvas[7] = {
|
||
|
id = "watch_minarc",
|
||
|
type = "arc",
|
||
|
action = "stroke",
|
||
|
radius = "27%",
|
||
|
arcRadii = false,
|
||
|
strokeWidth = 3,
|
||
|
strokeColor = {hex="#1891C3", alpha=0.75},
|
||
|
endAngle = 0,
|
||
|
}
|
||
|
if obj.timer == nil then
|
||
|
obj.timer = hs.timer.doEvery(1, function() updateClock() end)
|
||
|
else
|
||
|
obj.timer:start()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return obj
|