Repo // Reorganize CandidateCellData contents.
This commit is contained in:
parent
0abc362576
commit
64ab1bc676
|
@ -7,6 +7,9 @@
|
||||||
// requirements defined in MIT License.
|
// requirements defined in MIT License.
|
||||||
|
|
||||||
import Cocoa
|
import Cocoa
|
||||||
|
import Shared
|
||||||
|
import SwiftUI
|
||||||
|
import SwiftUIBackports
|
||||||
|
|
||||||
// MARK: - Classes used by Candidate Window
|
// MARK: - Classes used by Candidate Window
|
||||||
|
|
||||||
|
@ -44,6 +47,15 @@ public class CandidateCellData: Hashable {
|
||||||
self.isSelected = isSelected
|
self.isSelected = isSelected
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static func == (lhs: CandidateCellData, rhs: CandidateCellData) -> Bool {
|
||||||
|
lhs.key == rhs.key && lhs.displayedText == rhs.displayedText
|
||||||
|
}
|
||||||
|
|
||||||
|
public func hash(into hasher: inout Hasher) {
|
||||||
|
hasher.combine(key)
|
||||||
|
hasher.combine(displayedText)
|
||||||
|
}
|
||||||
|
|
||||||
public var cellLength: Int {
|
public var cellLength: Int {
|
||||||
if displayedText.count <= 2 { return Int(ceil(size * 3)) }
|
if displayedText.count <= 2 { return Int(ceil(size * 3)) }
|
||||||
let rect = attributedStringForLengthCalculation.boundingRect(
|
let rect = attributedStringForLengthCalculation.boundingRect(
|
||||||
|
@ -120,13 +132,79 @@ public class CandidateCellData: Hashable {
|
||||||
let attrStrCandidate = NSMutableAttributedString(string: displayedText, attributes: attrCandidate)
|
let attrStrCandidate = NSMutableAttributedString(string: displayedText, attributes: attrCandidate)
|
||||||
return attrStrCandidate
|
return attrStrCandidate
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static func == (lhs: CandidateCellData, rhs: CandidateCellData) -> Bool {
|
// MARK: - Contents specifically made for macOS 12 and newer.
|
||||||
lhs.key == rhs.key && lhs.displayedText == rhs.displayedText
|
|
||||||
|
@available(macOS 12, *)
|
||||||
|
extension CandidateCellData {
|
||||||
|
public var attributedStringForSwiftUI: some View {
|
||||||
|
var result: some View {
|
||||||
|
ZStack(alignment: .leading) {
|
||||||
|
if isSelected {
|
||||||
|
Color(nsColor: CandidateCellData.highlightBackground).ignoresSafeArea().cornerRadius(6)
|
||||||
}
|
}
|
||||||
|
VStack(spacing: 0) {
|
||||||
public func hash(into hasher: inout Hasher) {
|
HStack(spacing: 4) {
|
||||||
hasher.combine(key)
|
if UserDefaults.standard.bool(forKey: UserDef.kHandleDefaultCandidateFontsByLangIdentifier.rawValue) {
|
||||||
hasher.combine(displayedText)
|
Text(AttributedString(attributedStringHeader))
|
||||||
|
Text(AttributedString(attributedString))
|
||||||
|
} else {
|
||||||
|
Text(key).font(.system(size: fontSizeKey).monospaced())
|
||||||
|
.foregroundColor(.init(nsColor: fontColorKey)).lineLimit(1)
|
||||||
|
Text(displayedText).font(.system(size: fontSizeCandidate))
|
||||||
|
.foregroundColor(.init(nsColor: fontColorCandidate)).lineLimit(1)
|
||||||
|
}
|
||||||
|
}.padding(4)
|
||||||
|
}
|
||||||
|
}.fixedSize(horizontal: false, vertical: true)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Contents specifically made for macOS 10.15 and macOS 11.
|
||||||
|
|
||||||
|
@available(macOS 10.15, *)
|
||||||
|
extension CandidateCellData {
|
||||||
|
public var themeColorBackports: some View {
|
||||||
|
// 設定當前高亮候選字的背景顏色。
|
||||||
|
let result: Color = {
|
||||||
|
switch locale {
|
||||||
|
case "zh-Hans": return Color.red
|
||||||
|
case "zh-Hant": return Color.blue
|
||||||
|
case "ja": return Color.pink
|
||||||
|
default: return Color.accentColor
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return result.opacity(0.85)
|
||||||
|
}
|
||||||
|
|
||||||
|
public var attributedStringForSwiftUIBackports: some View {
|
||||||
|
var result: some View {
|
||||||
|
ZStack(alignment: .leading) {
|
||||||
|
if isSelected {
|
||||||
|
themeColorBackports.cornerRadius(6)
|
||||||
|
VStack(spacing: 0) {
|
||||||
|
HStack(spacing: 4) {
|
||||||
|
Text(key).font(.custom("Menlo", size: fontSizeKey))
|
||||||
|
.foregroundColor(Color.white.opacity(0.8)).lineLimit(1)
|
||||||
|
Text(displayedText).font(.system(size: fontSizeCandidate))
|
||||||
|
.foregroundColor(Color(white: 1)).lineLimit(1)
|
||||||
|
}.padding(4).foregroundColor(Color(white: 0.9))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
VStack(spacing: 0) {
|
||||||
|
HStack(spacing: 4) {
|
||||||
|
Text(key).font(.custom("Menlo", size: fontSizeKey))
|
||||||
|
.foregroundColor(Color.secondary).lineLimit(1)
|
||||||
|
Text(displayedText).font(.system(size: fontSizeCandidate))
|
||||||
|
.foregroundColor(Color.primary).lineLimit(1)
|
||||||
|
}.padding(4).foregroundColor(Color(white: 0.9))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.fixedSize(horizontal: false, vertical: true)
|
||||||
|
}
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,37 +0,0 @@
|
||||||
// (c) 2022 and onwards The vChewing Project (MIT-NTL License).
|
|
||||||
// ====================
|
|
||||||
// This code is released under the MIT license (SPDX-License-Identifier: MIT)
|
|
||||||
// ... with NTL restriction stating that:
|
|
||||||
// No trademark license is granted to use the trade names, trademarks, service
|
|
||||||
// marks, or product names of Contributor, except as required to fulfill notice
|
|
||||||
// requirements defined in MIT License.
|
|
||||||
|
|
||||||
import Shared
|
|
||||||
import SwiftUI
|
|
||||||
|
|
||||||
@available(macOS 12, *)
|
|
||||||
extension CandidateCellData {
|
|
||||||
public var attributedStringForSwiftUI: some View {
|
|
||||||
var result: some View {
|
|
||||||
ZStack(alignment: .leading) {
|
|
||||||
if isSelected {
|
|
||||||
Color(nsColor: CandidateCellData.highlightBackground).ignoresSafeArea().cornerRadius(6)
|
|
||||||
}
|
|
||||||
VStack(spacing: 0) {
|
|
||||||
HStack(spacing: 4) {
|
|
||||||
if UserDefaults.standard.bool(forKey: UserDef.kHandleDefaultCandidateFontsByLangIdentifier.rawValue) {
|
|
||||||
Text(AttributedString(attributedStringHeader))
|
|
||||||
Text(AttributedString(attributedString))
|
|
||||||
} else {
|
|
||||||
Text(key).font(.system(size: fontSizeKey).monospaced())
|
|
||||||
.foregroundColor(.init(nsColor: fontColorKey)).lineLimit(1)
|
|
||||||
Text(displayedText).font(.system(size: fontSizeCandidate))
|
|
||||||
.foregroundColor(.init(nsColor: fontColorCandidate)).lineLimit(1)
|
|
||||||
}
|
|
||||||
}.padding(4)
|
|
||||||
}
|
|
||||||
}.fixedSize(horizontal: false, vertical: true)
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,55 +0,0 @@
|
||||||
// (c) 2022 and onwards The vChewing Project (MIT-NTL License).
|
|
||||||
// ====================
|
|
||||||
// This code is released under the MIT license (SPDX-License-Identifier: MIT)
|
|
||||||
// ... with NTL restriction stating that:
|
|
||||||
// No trademark license is granted to use the trade names, trademarks, service
|
|
||||||
// marks, or product names of Contributor, except as required to fulfill notice
|
|
||||||
// requirements defined in MIT License.
|
|
||||||
|
|
||||||
import Shared
|
|
||||||
import SwiftUI
|
|
||||||
import SwiftUIBackports
|
|
||||||
|
|
||||||
@available(macOS 10.15, *)
|
|
||||||
extension CandidateCellData {
|
|
||||||
public var themeColorBackports: some View {
|
|
||||||
// 設定當前高亮候選字的背景顏色。
|
|
||||||
let result: Color = {
|
|
||||||
switch locale {
|
|
||||||
case "zh-Hans": return Color.red
|
|
||||||
case "zh-Hant": return Color.blue
|
|
||||||
case "ja": return Color.pink
|
|
||||||
default: return Color.accentColor
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
return result.opacity(0.85)
|
|
||||||
}
|
|
||||||
|
|
||||||
public var attributedStringForSwiftUIBackports: some View {
|
|
||||||
var result: some View {
|
|
||||||
ZStack(alignment: .leading) {
|
|
||||||
if isSelected {
|
|
||||||
themeColorBackports.cornerRadius(6)
|
|
||||||
VStack(spacing: 0) {
|
|
||||||
HStack(spacing: 4) {
|
|
||||||
Text(key).font(.custom("Menlo", size: fontSizeKey))
|
|
||||||
.foregroundColor(Color.white.opacity(0.8)).lineLimit(1)
|
|
||||||
Text(displayedText).font(.system(size: fontSizeCandidate))
|
|
||||||
.foregroundColor(Color(white: 1)).lineLimit(1)
|
|
||||||
}.padding(4).foregroundColor(Color(white: 0.9))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
VStack(spacing: 0) {
|
|
||||||
HStack(spacing: 4) {
|
|
||||||
Text(key).font(.custom("Menlo", size: fontSizeKey))
|
|
||||||
.foregroundColor(Color.secondary).lineLimit(1)
|
|
||||||
Text(displayedText).font(.system(size: fontSizeCandidate))
|
|
||||||
.foregroundColor(Color.primary).lineLimit(1)
|
|
||||||
}.padding(4).foregroundColor(Color(white: 0.9))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.fixedSize(horizontal: false, vertical: true)
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue