my personal dotfiles managed by dotbot, zinit
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

--- === 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