From d96409d9c0a38c8ef99e03f5d1152a113e412eb6 Mon Sep 17 00:00:00 2001 From: "Morgan J." Date: Fri, 13 Mar 2026 04:01:47 +0900 Subject: [PATCH] feat: add font size on no-label mini module --- Kit/Widgets/Mini.swift | 39 +++++++++++++++++++++++++++++++------- Modules/Clock/reader.swift | 1 - 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/Kit/Widgets/Mini.swift b/Kit/Widgets/Mini.swift index 4e384ab1..9aa9f4be 100644 --- a/Kit/Widgets/Mini.swift +++ b/Kit/Widgets/Mini.swift @@ -15,6 +15,7 @@ public class Mini: WidgetWrapper { private var labelState: Bool = true private var colorState: SColor = .monochrome private var alignmentState: String = "left" + private var fontSizeState: CGFloat = 14 private var colors: [SColor] = SColor.allCases @@ -82,6 +83,7 @@ public class Mini: WidgetWrapper { self.colorState = SColor.fromString(Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_color", defaultValue: self.colorState.key)) self.labelState = Store.shared.bool(key: "\(self.title)_\(self.type.rawValue)_label", defaultValue: self.labelState) self.alignmentState = Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_alignment", defaultValue: self.alignmentState) + self.fontSizeState = CGFloat(Store.shared.int(key: "\(self.title)_\(self.type.rawValue)_fontSize", defaultValue: Int(self.fontSizeState))) } } @@ -105,7 +107,7 @@ public class Mini: WidgetWrapper { suffix = self._suffix } - let valueSize: CGFloat = self.labelState ? 12 : 14 + let valueSize: CGFloat = self.labelState ? 12 : self.fontSizeState var origin: CGPoint = CGPoint(x: Constants.Widget.margin.x, y: (Constants.Widget.height-valueSize)/2) let style = NSMutableParagraphStyle() style.alignment = self.labelState ? self.alignment : .center @@ -140,10 +142,10 @@ public class Mini: WidgetWrapper { NSAttributedString.Key.foregroundColor: color, NSAttributedString.Key.paragraphStyle: style ] - let rect = CGRect(x: origin.x, y: origin.y, width: self.width - (Constants.Widget.margin.x*2), height: valueSize+1) let str = NSAttributedString.init(string: "\(Int(value.rounded(toPlaces: 2) * 100))\(suffix)", attributes: stringAttributes) + let rect = CGRect(x: origin.x, y: origin.y, width: self.width - (Constants.Widget.margin.x*2), height: valueSize+1) str.draw(with: rect) - + self.setWidth(width) } @@ -193,10 +195,12 @@ public class Mini: WidgetWrapper { // MARK: - Settings + private var sectionView: PreferencesSection? + public override func settings() -> NSView { let view = SettingsContainerView() - - view.addArrangedSubview(PreferencesSection([ + + let section = PreferencesSection([ PreferencesRow(localizedString("Label"), component: switchView( action: #selector(self.toggleLabel), state: self.labelState @@ -210,9 +214,19 @@ public class Mini: WidgetWrapper { action: #selector(self.toggleAlignment), items: Alignments, selected: self.alignmentState + )), + PreferencesRow(localizedString("Font size"), component: sliderView( + action: #selector(self.changeFontSize), + value: Int(self.fontSizeState), + initialValue: "\(Int(self.fontSizeState)) pt", + min: 8, + max: 20 )) - ])) - + ]) + self.sectionView = section + section.setRowVisibility(3, newState: !self.labelState) + view.addArrangedSubview(section) + return view } @@ -228,9 +242,20 @@ public class Mini: WidgetWrapper { @objc private func toggleLabel(_ sender: NSControl) { self.labelState = controlState(sender) Store.shared.set(key: "\(self.title)_\(self.type.rawValue)_label", value: self.labelState) + self.sectionView?.setRowVisibility(3, newState: !self.labelState) self.display() } + @objc private func changeFontSize(_ sender: NSSlider) { + let value = Int(sender.intValue) + self.fontSizeState = CGFloat(value) + Store.shared.set(key: "\(self.title)_\(self.type.rawValue)_fontSize", value: value) + if let valueField = sender.superview?.subviews.last as? NSTextField { + valueField.stringValue = "\(value) pt" + } + self.display() + } + @objc private func toggleAlignment(_ sender: NSMenuItem) { guard let key = sender.representedObject as? String else { return } if let newAlignment = Alignments.first(where: { $0.key == key }) { diff --git a/Modules/Clock/reader.swift b/Modules/Clock/reader.swift index b219c818..4ee477e2 100644 --- a/Modules/Clock/reader.swift +++ b/Modules/Clock/reader.swift @@ -59,7 +59,6 @@ internal class ClockReader: Reader { guard let serverDate = self.requestTime(server: server) else { return } let newOffset = serverDate.timeIntervalSince(Date()) self._offset = newOffset - self.alignOffset = newOffset } }