KMEditPDFTextPropertyViewController.swift 67 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486
  1. //
  2. // KMEditPDFTextPropertyViewController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lxy on 2022/12/27.
  6. //
  7. import Cocoa
  8. class KMSliderItemView: NSView {
  9. var titleLabel: NSTextField {
  10. get {
  11. return self.titleLabel_
  12. }
  13. }
  14. private lazy var titleLabel_: NSTextField = {
  15. let view = NSTextField(labelWithString: "")
  16. return view
  17. }()
  18. var slider: NSSlider {
  19. get {
  20. return self.slider_
  21. }
  22. }
  23. private lazy var slider_: NSSlider = {
  24. let view = NSSlider()
  25. view.minValue = 0
  26. view.maxValue = 1
  27. view.target = self
  28. view.action = #selector(sliderValueDidChange)
  29. return view
  30. }()
  31. var box: NSBox {
  32. get {
  33. return self.box_
  34. }
  35. }
  36. private lazy var box_: NSBox = {
  37. let view = NSBox()
  38. view.boxType = .custom
  39. view.titlePosition = .noTitle
  40. view.contentViewMargins = .zero
  41. view.borderWidth = 0
  42. return view
  43. }()
  44. var minValue: Double = 0 {
  45. didSet {
  46. self.slider.minValue = self.minValue
  47. }
  48. }
  49. var maxValue: Double = 1 {
  50. didSet {
  51. self.slider.maxValue = self.maxValue
  52. }
  53. }
  54. var doubleValue: Double = 1 {
  55. didSet {
  56. self.slider.doubleValue = self.doubleValue
  57. }
  58. }
  59. var valueChange: ((Double)->Void)?
  60. convenience init() {
  61. self.init(frame: .zero)
  62. self.initSubViews()
  63. }
  64. func initSubViews() {
  65. self.addSubview(self.titleLabel_)
  66. self.addSubview(self.slider_)
  67. self.addSubview(self.box_)
  68. self.titleLabel_.km_add_top_constraint(constant: 0)
  69. self.titleLabel_.km_add_left_constraint(constant: 4)
  70. self.slider_.km_add_left_constraint(constant: 4)
  71. self.slider_.km_add_top_constraint(equalTo: self.titleLabel_, attribute: .bottom, constant: 4)
  72. self.slider_.km_add_height_constraint(constant: 26)
  73. self.slider_.km_add_right_constraint(equalTo: self.box_, attribute: .left, constant: -8)
  74. self.box_.km_add_right_constraint(constant: 0)
  75. self.box_.km_add_bottom_constraint(constant: -4)
  76. }
  77. @objc func sliderValueDidChange(_ sender: NSSlider) {
  78. self.valueChange?(sender.doubleValue)
  79. }
  80. }
  81. class KMEditPDFTextPropertyViewController: NSViewController {
  82. @IBOutlet weak var contentView: NSClipView!
  83. @IBOutlet weak var backgroundView: NSView!
  84. @IBOutlet weak var headerBox: NSBox!
  85. @IBOutlet weak var imageContentView: NSView!
  86. @IBOutlet weak var imageViewHeightConstraint: NSLayoutConstraint!
  87. @IBOutlet weak var propertyTitle: NSTextField!
  88. @IBOutlet weak var preImageView: NSImageView!
  89. @IBOutlet weak var textPresuppositionContentView: NSView!
  90. @IBOutlet weak var textPresuppositionBox: NSBox!
  91. @IBOutlet weak var resetTextPresuppositionBox: NSBox!
  92. @IBOutlet weak var textPresuppositionTopContstraint: NSLayoutConstraint!
  93. @IBOutlet weak var textPresuppositionHeightContstraint: NSLayoutConstraint!
  94. @IBOutlet weak var fontContentView: NSView!
  95. @IBOutlet weak var fontTitleLabel: NSTextField!
  96. @IBOutlet weak var fontImageView: NSButton!
  97. @IBOutlet weak var fontContentViewHeightConstraint: NSLayoutConstraint!
  98. @IBOutlet weak var fontContentViewTopConstraint: NSLayoutConstraint!
  99. @IBOutlet weak var fontNameBox: NSBox!
  100. @IBOutlet weak var fontStyleBox: NSBox!
  101. @IBOutlet weak var fontSizeBox: NSBox!
  102. @IBOutlet weak var leftAlignmentBox: NSBox!
  103. @IBOutlet weak var centerAlignmentBox: NSBox!
  104. @IBOutlet weak var rightAlignmentBox: NSBox!
  105. @IBOutlet weak var colorBox: NSBox!
  106. @IBOutlet weak var fontColorButton: NSButton!
  107. @IBOutlet weak var fontCustomColorButton: NSButton!
  108. @IBOutlet weak var alignmentTopConstraint: NSLayoutConstraint!
  109. @IBOutlet weak var alignmentView: KMEditPropertyAlignmentView!
  110. var textPresuppositionVC: KMDesignSelect?
  111. var textPresuppositionResetVC: KMDesignPropertySelector?
  112. var textPresuppositionResetString: String = ""
  113. var leftAlignmentVC: KMDesignPropertySelector?
  114. var centerAlignmentVC: KMDesignPropertySelector?
  115. var rightAlignmentVC: KMDesignPropertySelector?
  116. var fontNameVC: KMDesignSelect?
  117. var fontSizeVC: KMDesignSelect?
  118. var fontStyleVC: KMDesignSelect?
  119. var borderWidthVC: KMDesignSelect?
  120. @IBOutlet weak var fontBoldBox: NSBox!
  121. @IBOutlet weak var fontItalicBox: NSBox!
  122. var fontBoldVC: KMDesignButton?
  123. var fontItalicVC: KMDesignButton?
  124. @IBOutlet weak var fontAddBox: NSBox!
  125. @IBOutlet weak var fontReduceBox: NSBox!
  126. var fontAddVC: KMDesignButton?
  127. var fontReduceVC: KMDesignButton?
  128. @IBOutlet weak var opacityBox: NSBox!
  129. var opacitVC: KMDesignSelect?
  130. var sliderItemView: KMSliderItemView?
  131. var textsAreas : [CPDFEditTextArea] = []
  132. var listView : CPDFListView!
  133. var fonts: [NSDictionary] = []
  134. var currentColor : NSColor = NSColor.black
  135. var alignment : NSTextAlignment = .left
  136. var fontName: String = "Helvetica" {
  137. didSet {
  138. if self.fontNameVC != nil {
  139. if self.fontNameVC!.items.contains(fontName) {
  140. let areas = self.handdler?.editingTextAreas ?? []
  141. if areas.count == 1 {
  142. let cfont = self.listView.editingSelectionCFont(byRangeEdit: areas.first)
  143. self.fontNameVC?.stringValue = cfont == nil ? "--" : fontName
  144. } else {
  145. self.fontNameVC?.stringValue = fontName
  146. }
  147. } else {
  148. let areas = self.handdler?.editingTextAreas ?? []
  149. if areas.count == 1 {
  150. let cfont = self.listView.editingSelectionCFont(byRangeEdit: areas.first)
  151. self.fontNameVC?.stringValue = cfont == nil ? "--" : fontName
  152. } else {
  153. self.fontNameVC?.stringValue = fontName
  154. }
  155. }
  156. }
  157. }
  158. }
  159. var fontStyle: String = "Regular" {
  160. didSet {
  161. self.fontStyleVC?.stringValue = fontStyle
  162. }
  163. }
  164. var fontSize: CGFloat = 12 {
  165. didSet {
  166. if self.fontSize == -1 {
  167. self.fontSizeVC?.stringValue = "--"
  168. self.fontAddVC?.state = .Disabled
  169. self.fontReduceVC?.state = .Disabled
  170. } else {
  171. self.fontSizeVC?.stringValue = Int(ceil(fontSize)).description + "pt"
  172. self.fontAddVC?.state = .Norm
  173. self.fontReduceVC?.state = .Norm
  174. }
  175. }
  176. }
  177. var selectAreas: [Any] {
  178. get {
  179. return self.listView.editingAreas() ?? []
  180. }
  181. }
  182. weak var handdler: KMEditPDfHanddler?
  183. deinit {
  184. KMPrint("KMEditPDFTextPropertyViewController 已释放.")
  185. NSColorPanel.shared.setTarget(nil)
  186. NSColorPanel.shared.setAction(nil)
  187. NSColorPanel.shared.close()
  188. self.removeNotification()
  189. }
  190. override func viewDidLoad() {
  191. super.viewDidLoad()
  192. self.addNotification()
  193. self.setup()
  194. self.initData()
  195. self.updateLanguage()
  196. self.updateUI()
  197. self.headerBox.isHidden = true
  198. self.imageViewHeightConstraint.constant = 0
  199. self.textPresuppositionTopContstraint.constant = 50
  200. self.alignmentTopConstraint.constant = 16+50
  201. }
  202. func setup() {
  203. self.propertyTitle.font = NSFont.SFProTextSemiboldFont(14.0)
  204. self.propertyTitle.textColor = KMAppearance.Layout.h0Color()
  205. self.fontTitleLabel.font = NSFont.SFProTextRegularFont(12.0)
  206. self.fontTitleLabel.textColor = KMAppearance.Layout.h0Color()
  207. self.headerBox.borderWidth = 1
  208. self.headerBox.borderColor = KMAppearance.Interactive.s0Color()
  209. self.headerBox.cornerRadius = 4
  210. self.headerBox.fillColor = KMAppearance.Layout.l1Color()
  211. self.fontColorButton.border(NSColor.clear, 0, 10)
  212. self.fontColorButton.target = self
  213. self.fontColorButton.action = #selector(fontColorAction)
  214. leftAlignmentVC = KMDesignPropertySelector.init(withType: .Icon_Btn)
  215. leftAlignmentBox.contentView = leftAlignmentVC?.view
  216. leftAlignmentBox.fillColor = NSColor.clear
  217. leftAlignmentVC?.target = self
  218. leftAlignmentVC?.action = #selector(leftAlignmentAction)
  219. leftAlignmentVC?.image = NSImage(named: "KMImageNameEditPDFAlignLeft")!
  220. leftAlignmentVC?.image_sel = NSImage(named: "KMImageNameEditPDFAlignLeftSelect")!
  221. leftAlignmentVC?.background_hov = KMAppearance.Layout.l1Color()
  222. leftAlignmentVC?.background_sel = KMAppearance.view_bg_dis_color()
  223. leftAlignmentVC?.updateUI()
  224. centerAlignmentVC = KMDesignPropertySelector.init(withType: .Icon_Btn)
  225. centerAlignmentBox.contentView = centerAlignmentVC?.view
  226. centerAlignmentBox.fillColor = NSColor.clear
  227. centerAlignmentVC?.target = self
  228. centerAlignmentVC?.action = #selector(centerAlignmentAction)
  229. centerAlignmentVC?.image = NSImage(named: "KMImageNameEditPDFAlignCenter")!
  230. centerAlignmentVC?.image_sel = NSImage(named: "KMImageNameEditPDFAlignCenterSelect")!
  231. centerAlignmentVC?.background_hov = KMAppearance.Layout.l1Color()
  232. centerAlignmentVC?.background_sel = KMAppearance.view_bg_dis_color()
  233. centerAlignmentVC?.updateUI()
  234. rightAlignmentVC = KMDesignPropertySelector.init(withType: .Icon_Btn)
  235. rightAlignmentBox.contentView = rightAlignmentVC?.view
  236. rightAlignmentBox.fillColor = NSColor.clear
  237. rightAlignmentVC?.target = self
  238. rightAlignmentVC?.action = #selector(rightAlignmentAction)
  239. rightAlignmentVC?.image = NSImage(named: "KMImageNameEditPDFAlignRight")!
  240. rightAlignmentVC?.image_sel = NSImage(named: "KMImageNameEditPDFAlignRightSelect")!
  241. rightAlignmentVC?.background_hov = KMAppearance.Layout.l1Color()
  242. rightAlignmentVC?.background_sel = KMAppearance.view_bg_dis_color()
  243. rightAlignmentVC?.updateUI()
  244. let fontNameArray = KMEditPDFTextManager.manager.fetchTextFontNames()
  245. let familyNames = CPDFFont.familyNames
  246. fontNameVC = KMDesignSelect.init(withType: .PopButton)
  247. fontNameBox.contentView = fontNameVC?.view
  248. fontNameBox.fillColor = NSColor.clear
  249. fontNameVC?.addItems(withObjectValues: familyNames)
  250. fontNameVC?.selectItem(at: 0)
  251. fontNameVC?.delete = self
  252. fontNameVC?.borderColor = KMAppearance.Interactive.s0Color()
  253. fontNameVC?.background = KMAppearance.Layout.l1Color()
  254. fontNameVC?.background_hov = KMAppearance.Layout.l1Color()
  255. fontNameVC?.background_focus = KMAppearance.Layout.l1Color()
  256. fontNameVC?.textColor = KMAppearance.Layout.h1Color()
  257. fontNameVC?.textColor_hov = KMAppearance.Layout.h1Color()
  258. fontNameVC?.textColor_focus = KMAppearance.Layout.h1Color()
  259. fontNameVC?.popViewControllerBackground = KMAppearance.Layout.bgColor()
  260. fontNameVC?.popViewControllerTextColor = KMAppearance.Layout.h0Color()
  261. fontNameVC?.popViewControllerEnterFillColor = KMAppearance.Interactive.s0Color()
  262. fontNameVC?.updateUI()
  263. self.fontNameVC?.isScrollPop = true
  264. self.fontNameVC?.showVerticalScroller = true
  265. let styleArray = defaultFontStyles //KMEditPDFTextManager.manager.fetchFontStyleWithFontName(fontName: fontName)
  266. let fontStyleNames = CPDFFont.fontNames(forFamilyName: "Helvetica")
  267. fontStyleVC = KMDesignSelect.init(withType: .PopButton)
  268. fontStyleBox.contentView = fontStyleVC?.view
  269. fontStyleBox.fillColor = NSColor.clear
  270. fontStyleVC?.addItems(withObjectValues: fontStyleNames)
  271. fontStyleVC?.selectItem(at: 0)
  272. fontStyleVC?.delete = self
  273. fontStyleVC?.borderColor = KMAppearance.Interactive.s0Color()
  274. fontStyleVC?.background = KMAppearance.Layout.l1Color()
  275. fontStyleVC?.background_hov = KMAppearance.Layout.l1Color()
  276. fontStyleVC?.background_focus = KMAppearance.Layout.l1Color()
  277. fontStyleVC?.textColor = KMAppearance.Layout.h1Color()
  278. fontStyleVC?.textColor_hov = KMAppearance.Layout.h1Color()
  279. fontStyleVC?.textColor_focus = KMAppearance.Layout.h1Color()
  280. fontStyleVC?.popViewControllerBackground = KMAppearance.Layout.bgColor()
  281. fontStyleVC?.popViewControllerTextColor = KMAppearance.Layout.h0Color()
  282. fontStyleVC?.popViewControllerEnterFillColor = KMAppearance.Interactive.s0Color()
  283. fontStyleVC?.updateUI()
  284. self.fontBoldVC = KMDesignButton(withType: .Image)
  285. self.fontBoldBox.contentView = self.fontBoldVC?.view
  286. self.fontBoldBox.borderWidth = 0
  287. self.fontBoldVC?.target = self
  288. self.fontBoldVC?.action = #selector(fontBoldAction)
  289. self.fontBoldVC?.image = NSImage(named: "KMImageNameEditPDFFontBold")!
  290. self.fontBoldVC?.pagination()
  291. self.fontBoldVC?.initDefaultValue()
  292. self.fontItalicVC = KMDesignButton(withType: .Image)
  293. self.fontItalicBox.contentView = self.fontItalicVC?.view
  294. self.fontItalicBox.borderWidth = 0
  295. self.fontItalicVC?.target = self
  296. self.fontItalicVC?.action = #selector(fontItalicAction)
  297. self.fontItalicVC?.image = NSImage(named: "KMImageNameEditPDFFontItalic")!
  298. self.fontItalicVC?.pagination()
  299. self.fontItalicVC?.initDefaultValue()
  300. fontSizeVC = KMDesignSelect.init(withType: .Combox)
  301. fontSizeBox.contentView = fontSizeVC?.view
  302. fontSizeBox.fillColor = NSColor.clear
  303. fontSizeVC?.removeAllItems()
  304. fontSizeVC?.addItems(withObjectValues: self.supportFontSize())
  305. fontSizeVC?.selectItem(at: 0)
  306. fontSizeVC?.delete = self
  307. fontSizeVC?.borderColor = KMAppearance.Interactive.s0Color()
  308. fontSizeVC?.background = KMAppearance.Layout.l1Color()
  309. fontSizeVC?.background_hov = KMAppearance.Layout.l1Color()
  310. fontSizeVC?.background_focus = KMAppearance.Layout.l1Color()
  311. fontSizeVC?.textColor = KMAppearance.Layout.h1Color()
  312. fontSizeVC?.textColor_hov = KMAppearance.Layout.h1Color()
  313. fontSizeVC?.textColor_focus = KMAppearance.Layout.h1Color()
  314. fontSizeVC?.popViewControllerBackground = KMAppearance.Layout.bgColor()
  315. fontSizeVC?.popViewControllerTextColor = KMAppearance.Layout.h0Color()
  316. fontSizeVC?.popViewControllerEnterFillColor = KMAppearance.Interactive.s0Color()
  317. fontSizeVC?.updateUI()
  318. self.fontSizeVC?.editable = true
  319. self.fontAddVC = KMDesignButton(withType: .Image)
  320. self.fontAddBox.contentView = self.fontAddVC?.view
  321. self.fontAddBox.borderWidth = 0
  322. self.fontAddVC?.target = self
  323. self.fontAddVC?.action = #selector(fontAddAction)
  324. self.fontAddVC?.image = NSImage(named: "KMImageNameEditPDFFontAdd")!
  325. self.fontAddVC?.pagination()
  326. self.fontAddVC?.initDefaultValue()
  327. self.fontReduceVC = KMDesignButton(withType: .Image)
  328. self.fontReduceBox.contentView = self.fontReduceVC?.view
  329. self.fontReduceBox.borderWidth = 0
  330. self.fontReduceVC?.target = self
  331. self.fontReduceVC?.action = #selector(fontReduceAction)
  332. self.fontReduceVC?.image = NSImage(named: "KMImageNameEditPDFFontReduce")!
  333. self.fontReduceVC?.pagination()
  334. self.fontReduceVC?.initDefaultValue()
  335. //textPresupposition
  336. textPresuppositionVC = KMDesignSelect.init(withType: .PopButton)
  337. textPresuppositionBox.contentView = textPresuppositionVC?.view
  338. textPresuppositionBox.fillColor = NSColor.clear
  339. textPresuppositionVC?.addItems(withObjectValues: KMEditPDFTextManager.manager.updateTextPresuppositionFontNameArray())
  340. textPresuppositionVC?.selectItem(at: 0)
  341. textPresuppositionVC?.delete = self
  342. textPresuppositionVC?.borderColor = KMAppearance.Interactive.s0Color()
  343. textPresuppositionVC?.background = KMAppearance.Layout.l1Color()
  344. textPresuppositionVC?.background_hov = KMAppearance.Layout.l1Color()
  345. textPresuppositionVC?.background_focus = KMAppearance.Layout.l1Color()
  346. textPresuppositionVC?.textColor = KMAppearance.Layout.h1Color()
  347. textPresuppositionVC?.textColor_hov = KMAppearance.Layout.h1Color()
  348. textPresuppositionVC?.textColor_focus = KMAppearance.Layout.h1Color()
  349. textPresuppositionVC?.popViewControllerBackground = KMAppearance.Layout.bgColor()
  350. textPresuppositionVC?.popViewControllerTextColor = KMAppearance.Layout.h0Color()
  351. textPresuppositionVC?.popViewControllerEnterFillColor = KMAppearance.Interactive.s0Color()
  352. textPresuppositionVC?.updateUI()
  353. textPresuppositionResetVC = KMDesignPropertySelector.init(withType: .Icon_Btn)
  354. resetTextPresuppositionBox.contentView = textPresuppositionResetVC?.view
  355. resetTextPresuppositionBox.fillColor = NSColor.clear
  356. textPresuppositionResetVC?.borderWidth = 1
  357. textPresuppositionResetVC?.borderWidth_hov = 1
  358. textPresuppositionResetVC?.borderWidth_sel = 1
  359. textPresuppositionResetVC?.target = self
  360. textPresuppositionResetVC?.action = #selector(resetTextPresuppositionButtonAction)
  361. textPresuppositionResetVC?.image = NSImage(named: "KMImagePropertPanelTextDefaultMore")!
  362. textPresuppositionResetVC?._image_disabled = NSImage(named: "KMImagePropertPanelTextDefaultMore")!
  363. textPresuppositionResetVC?.background_hov = KMAppearance.Layout.l1Color()
  364. textPresuppositionResetVC?.background_disabled = KMAppearance.view_bg_dis_color()
  365. textPresuppositionResetVC?.cornerRadius = 4
  366. textPresuppositionResetVC?.cornerRadius_hov = 4
  367. textPresuppositionResetVC?.cornerRadius_disabled = 4
  368. textPresuppositionResetVC?.borderWidth_disabled = 1
  369. textPresuppositionResetVC?.borderColor_disabled = KMAppearance.view_border_dis_color()
  370. textPresuppositionResetVC?.updateUI()
  371. self.colorBox.borderColor = KMAppearance.Interactive.s0Color()
  372. let sliderItemView = KMSliderItemView()
  373. self.sliderItemView = sliderItemView
  374. self.opacityBox.contentView = sliderItemView
  375. self.opacityBox.borderWidth = 0
  376. sliderItemView.titleLabel.font = NSFont.SFProTextRegularFont(12)
  377. sliderItemView.titleLabel.stringValue = NSLocalizedString("Opacity", comment: "")
  378. sliderItemView.minValue = 0.0001
  379. sliderItemView.maxValue = 1
  380. sliderItemView.valueChange = { [weak self] value in
  381. self?.opacitVC?.stringValue = String(format: "%0.f%%", value*100)
  382. if let data = self?.opacitVC {
  383. self?.km_comboBoxSelectionDidChange(data)
  384. }
  385. }
  386. opacitVC = KMDesignSelect.init(withType: .PopButton)
  387. sliderItemView.box.contentView = opacitVC?.view
  388. opacitVC?.addItems(withObjectValues: ["25%", "50%", "75%", "100%"])
  389. opacitVC?.selectItem(at: 0)
  390. opacitVC?.delete = self
  391. opacitVC?.borderColor = KMAppearance.Interactive.s0Color()
  392. opacitVC?.background = KMAppearance.Layout.l1Color()
  393. opacitVC?.background_hov = KMAppearance.Layout.l1Color()
  394. opacitVC?.background_focus = KMAppearance.Layout.l1Color()
  395. opacitVC?.textColor = KMAppearance.Layout.h1Color()
  396. opacitVC?.textColor_hov = KMAppearance.Layout.h1Color()
  397. opacitVC?.textColor_focus = KMAppearance.Layout.h1Color()
  398. opacitVC?.popViewControllerBackground = KMAppearance.Layout.bgColor()
  399. opacitVC?.popViewControllerTextColor = KMAppearance.Layout.h0Color()
  400. opacitVC?.popViewControllerEnterFillColor = KMAppearance.Interactive.s0Color()
  401. opacitVC?.updateUI()
  402. self.alignmentView.didChange = { [unowned self] view, areasArray, boundsArray in
  403. self.changeAreasAlign(areas: areasArray, newBounds: boundsArray)
  404. }
  405. self.changeEffectiveAppearance()
  406. }
  407. func initData() {
  408. self.updateTextPresupposition(type: .commonly, needChangeListView: false)
  409. let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: .commonly)
  410. self.currentColor = model.color
  411. DispatchQueue.main.async {
  412. NSColorPanel.shared.color = model.color
  413. }
  414. self.fontColorButton.image = self.swatchWithColor(color: self.currentColor, size: NSSize(width: 20, height: 20))
  415. self.fonts = CPDFAnnotationModel.supportFonts() as! [NSDictionary]
  416. }
  417. func updateLanguage() {
  418. let areas = self.selectAreas
  419. if textsAreas.count > 0 && textsAreas.count != areas.count { //多选图片跟文字
  420. self.propertyTitle.stringValue = NSLocalizedString("General Properties", comment: "")
  421. } else {
  422. self.propertyTitle.stringValue = NSLocalizedString("Text", comment: "")
  423. }
  424. self.fontTitleLabel.stringValue = NSLocalizedString("Font", comment: "")
  425. }
  426. func addNotification() {
  427. NotificationCenter.default.addObserver(self, selector: #selector(changeEffectiveAppearance), name: NSNotification.Name(rawValue: "kEffectiveAppearance"), object: nil)
  428. }
  429. func removeNotification() {
  430. NotificationCenter.default.removeObserver(self)
  431. DistributedNotificationCenter.default().removeObserver(self)
  432. }
  433. @objc func changeEffectiveAppearance() {
  434. let isDarkModel = KMAdvertisementConfig.isDarkModel()
  435. if isDarkModel {
  436. self.view.appearance = NSAppearance(named: .darkAqua)
  437. } else {
  438. self.view.appearance = NSAppearance(named: .aqua)
  439. }
  440. self.updateUI()
  441. }
  442. func updateUI() {
  443. let isDarkModel = KMAdvertisementConfig.isDarkModel()
  444. if isDarkModel {
  445. self.backgroundView.backgroundColor(NSColor.km_init(hex: "#252526"))
  446. self.fontTitleLabel.textColor = NSColor(hex: "#C8C9CC")
  447. self.sliderItemView?.titleLabel.textColor = NSColor(hex: "#C8C9CC")
  448. self.alignmentView.alignmentLabel.textColor = NSColor(hex: "#C8C9CC")
  449. self.textPresuppositionResetVC?.background_disabled = NSColor(red: 71/255, green: 72/255, blue: 75/255, alpha: 1)
  450. self.textPresuppositionResetVC?.borderColor = KMAppearance.Layout.w15Color()
  451. self.textPresuppositionResetVC?.borderColor_hov = KMAppearance.Interactive.a0Color()
  452. self.textPresuppositionResetVC?.borderColor_sel = KMAppearance.Layout.w15Color()
  453. self.textPresuppositionResetVC?.background = KMAppearance.Layout.l1Color()
  454. self.textPresuppositionResetVC?.background_hov = NSColor(red: 71/255, green: 72/255, blue: 75/255, alpha: 1)
  455. self.fontBoldVC?.background_act = KMAppearance.Interactive.m1Color()
  456. self.fontBoldVC?.background_hov = NSColor(red: 71/255, green: 72/255, blue: 75/255, alpha: 1)
  457. self.fontBoldVC?.borderColor_hov = KMAppearance.Interactive.a0Color()
  458. self.fontBoldVC?.borderWidth_act = 0
  459. self.fontItalicVC?.background_act = KMAppearance.Interactive.m1Color()
  460. self.fontItalicVC?.background_hov = NSColor(red: 71/255, green: 72/255, blue: 75/255, alpha: 1)
  461. self.fontItalicVC?.borderColor_hov = KMAppearance.Interactive.a0Color()
  462. self.fontItalicVC?.borderWidth_act = 0
  463. self.fontAddVC?.ignoreDisabledImage = false
  464. self.fontAddVC?.initDefaultValue()
  465. self.fontAddVC?.background_act = KMAppearance.Interactive.m1Color()
  466. self.fontAddVC?.background_hov = NSColor(red: 71/255, green: 72/255, blue: 75/255, alpha: 1)
  467. self.fontAddVC?.borderColor_hov = KMAppearance.Interactive.a0Color()
  468. self.fontAddVC?.image_disabled = NSImage(named: "KMImageNameEditPDFFontAddDisabled")!
  469. self.fontAddVC?.background_disabled = NSColor(white: 96/255.0, alpha: 1.0)
  470. self.fontReduceVC?.ignoreDisabledImage = false
  471. self.fontReduceVC?.initDefaultValue()
  472. self.fontReduceVC?.background_act = KMAppearance.Interactive.m1Color()
  473. self.fontReduceVC?.background_hov = NSColor(red: 71/255, green: 72/255, blue: 75/255, alpha: 1)
  474. self.fontReduceVC?.borderColor_hov = KMAppearance.Interactive.a0Color()
  475. self.fontReduceVC?.image_disabled = NSImage(named: "KMImageNameEditPDFFontReduceDisabled")!
  476. self.fontReduceVC?.background_disabled = NSColor(white: 96/255.0, alpha: 1.0)
  477. self.leftAlignmentVC?.background_sel = KMAppearance.Interactive.m1Color()
  478. self.centerAlignmentVC?.background_sel = KMAppearance.Interactive.m1Color()
  479. self.rightAlignmentVC?.background_sel = KMAppearance.Interactive.m1Color()
  480. let color = NSColor(hex: "#0E1114")
  481. fontNameVC?.popViewControllerBackground = color
  482. } else {
  483. self.backgroundView.backgroundColor(NSColor.km_init(hex: "#FAFAFA"))
  484. self.propertyTitle.textColor = KMAppearance.Layout.h0Color()
  485. self.fontTitleLabel.textColor = NSColor(hex: "#616469")
  486. self.sliderItemView?.titleLabel.textColor = NSColor(hex: "#616469")
  487. self.alignmentView.alignmentLabel.textColor = NSColor(hex: "#616469")
  488. self.headerBox.borderColor = KMAppearance.Interactive.s0Color()
  489. self.headerBox.fillColor = KMAppearance.Layout.l1Color()
  490. leftAlignmentBox.fillColor = NSColor.clear
  491. leftAlignmentVC?.background_hov = KMAppearance.Layout.l1Color()
  492. leftAlignmentVC?.background_sel = KMAppearance.view_bg_dis_color()
  493. centerAlignmentBox.fillColor = NSColor.clear
  494. centerAlignmentVC?.background_hov = KMAppearance.Layout.l1Color()
  495. centerAlignmentVC?.background_sel = KMAppearance.view_bg_dis_color()
  496. rightAlignmentBox.fillColor = NSColor.clear
  497. rightAlignmentVC?.background_hov = KMAppearance.Layout.l1Color()
  498. rightAlignmentVC?.background_sel = KMAppearance.view_bg_dis_color()
  499. fontNameVC?.borderColor = KMAppearance.Interactive.s0Color()
  500. fontNameVC?.background = KMAppearance.Layout.l1Color()
  501. fontNameVC?.background_hov = KMAppearance.Layout.l1Color()
  502. fontNameVC?.background_focus = KMAppearance.Layout.l1Color()
  503. fontNameVC?.textColor = KMAppearance.Layout.h1Color()
  504. fontNameVC?.textColor_hov = KMAppearance.Layout.h1Color()
  505. fontNameVC?.textColor_focus = KMAppearance.Layout.h1Color()
  506. fontNameVC?.popViewControllerBackground = KMAppearance.Layout.bgColor()
  507. fontNameVC?.popViewControllerTextColor = KMAppearance.Layout.h0Color()
  508. fontNameVC?.popViewControllerEnterFillColor = KMAppearance.Interactive.s0Color()
  509. fontStyleVC?.borderColor = KMAppearance.Interactive.s0Color()
  510. fontStyleVC?.background = KMAppearance.Layout.l1Color()
  511. fontStyleVC?.background_hov = KMAppearance.Layout.l1Color()
  512. fontStyleVC?.background_focus = KMAppearance.Layout.l1Color()
  513. fontStyleVC?.textColor = KMAppearance.Layout.h1Color()
  514. fontStyleVC?.textColor_hov = KMAppearance.Layout.h1Color()
  515. fontStyleVC?.textColor_focus = KMAppearance.Layout.h1Color()
  516. fontStyleVC?.popViewControllerBackground = KMAppearance.Layout.bgColor()
  517. fontStyleVC?.popViewControllerTextColor = KMAppearance.Layout.h0Color()
  518. fontStyleVC?.popViewControllerEnterFillColor = KMAppearance.Interactive.s0Color()
  519. fontSizeVC?.borderColor = KMAppearance.Interactive.s0Color()
  520. fontSizeVC?.background = KMAppearance.Layout.l1Color()
  521. fontSizeVC?.background_hov = KMAppearance.Layout.l1Color()
  522. fontSizeVC?.background_focus = KMAppearance.Layout.l1Color()
  523. fontSizeVC?.textColor = KMAppearance.Layout.h1Color()
  524. fontSizeVC?.textColor_hov = KMAppearance.Layout.h1Color()
  525. fontSizeVC?.textColor_focus = KMAppearance.Layout.h1Color()
  526. fontSizeVC?.popViewControllerBackground = KMAppearance.Layout.bgColor()
  527. fontSizeVC?.popViewControllerTextColor = KMAppearance.Layout.h0Color()
  528. fontSizeVC?.popViewControllerEnterFillColor = KMAppearance.Interactive.s0Color()
  529. textPresuppositionBox.fillColor = NSColor.clear
  530. textPresuppositionVC?.borderColor = KMAppearance.Interactive.s0Color()
  531. textPresuppositionVC?.background = KMAppearance.Layout.l1Color()
  532. textPresuppositionVC?.background_hov = KMAppearance.Layout.l1Color()
  533. textPresuppositionVC?.background_focus = KMAppearance.Layout.l1Color()
  534. textPresuppositionVC?.textColor = KMAppearance.Layout.h1Color()
  535. textPresuppositionVC?.textColor_hov = KMAppearance.Layout.h1Color()
  536. textPresuppositionVC?.textColor_focus = KMAppearance.Layout.h1Color()
  537. textPresuppositionVC?.popViewControllerBackground = KMAppearance.Layout.bgColor()
  538. textPresuppositionVC?.popViewControllerTextColor = KMAppearance.Layout.h0Color()
  539. textPresuppositionVC?.popViewControllerEnterFillColor = KMAppearance.Interactive.s0Color()
  540. textPresuppositionResetVC?.borderColor = NSColor(red: 223/255, green: 225/255, blue: 229/255, alpha: 1)
  541. textPresuppositionResetVC?.borderColor_hov = NSColor.clear
  542. textPresuppositionResetVC?.borderColor_sel = KMAppearance.Layout.w15Color()
  543. textPresuppositionResetVC?.borderColor_act = KMAppearance.Layout.w15Color()
  544. textPresuppositionResetVC?.borderColor_disabled = KMAppearance.Layout.w15Color()
  545. textPresuppositionResetVC?.background = NSColor.white
  546. textPresuppositionResetVC?.background_hov = KMAppearance.view_bg_dis_color()
  547. textPresuppositionResetVC?.background_disabled = KMAppearance.view_bg_dis_color()
  548. textPresuppositionResetVC?.borderColor_disabled = KMAppearance.view_border_dis_color()
  549. textPresuppositionResetVC?.borderWidth = 1
  550. opacitVC?.borderColor = KMAppearance.Interactive.s0Color()
  551. opacitVC?.background = KMAppearance.Layout.l1Color()
  552. opacitVC?.background_hov = KMAppearance.Layout.l1Color()
  553. opacitVC?.background_focus = KMAppearance.Layout.l1Color()
  554. opacitVC?.textColor = KMAppearance.Layout.h1Color()
  555. opacitVC?.textColor_hov = KMAppearance.Layout.h1Color()
  556. opacitVC?.textColor_focus = KMAppearance.Layout.h1Color()
  557. opacitVC?.popViewControllerBackground = KMAppearance.Layout.bgColor()
  558. opacitVC?.popViewControllerTextColor = KMAppearance.Layout.h0Color()
  559. opacitVC?.popViewControllerEnterFillColor = KMAppearance.Interactive.s0Color()
  560. self.fontBoldVC?.initDefaultValue()
  561. self.fontItalicVC?.initDefaultValue()
  562. self.fontAddVC?.ignoreDisabledImage = true
  563. self.fontAddVC?.initDefaultValue()
  564. self.fontAddVC?.image = NSImage(named: "KMImageNameEditPDFFontAdd")!
  565. self.fontAddVC?.background_disabled = KMAppearance.buttonDisabledColor()
  566. self.fontReduceVC?.ignoreDisabledImage = true
  567. self.fontReduceVC?.initDefaultValue()
  568. self.fontReduceVC?.image = NSImage(named: "KMImageNameEditPDFFontReduce")!
  569. self.fontReduceVC?.background_disabled = KMAppearance.buttonDisabledColor()
  570. }
  571. }
  572. func reloadData() {
  573. if self.selectAreas.count > 0 {
  574. textsAreas = []
  575. let areas = self.selectAreas
  576. self.alignmentView.editingAreas = areas
  577. for i in 0 ... areas.count-1 {
  578. if areas[i] is CPDFEditTextArea {
  579. textsAreas.append(areas[i] as! CPDFEditTextArea)
  580. }
  581. }
  582. if textsAreas.count == 1 && textsAreas.count == areas.count {
  583. self.headerBox.isHidden = true
  584. self.fontContentView.isHidden = false
  585. self.textPresuppositionContentView.isHidden = false
  586. // 88
  587. self.imageViewHeightConstraint.constant = 0
  588. // 152
  589. self.textPresuppositionTopContstraint.constant = 50
  590. self.fontContentViewHeightConstraint.constant = 193
  591. self.alignmentTopConstraint.constant = 16+50
  592. self.fontContentViewTopConstraint.constant = 8
  593. } else if textsAreas.count > 1 && textsAreas.count == areas.count {
  594. self.headerBox.isHidden = true
  595. self.fontContentView.isHidden = false
  596. self.textPresuppositionContentView.isHidden = false
  597. self.imageViewHeightConstraint.constant = 0
  598. self.textPresuppositionTopContstraint.constant = 50
  599. self.fontContentViewHeightConstraint.constant = 193
  600. self.alignmentTopConstraint.constant = 16+50
  601. self.fontContentViewTopConstraint.constant = 8
  602. } else if textsAreas.count > 0 && textsAreas.count != areas.count { //多选图片跟文字
  603. self.headerBox.isHidden = true
  604. self.fontContentView.isHidden = true
  605. self.textPresuppositionContentView.isHidden = true
  606. self.fontContentViewHeightConstraint.constant = 0
  607. self.textPresuppositionTopContstraint.constant = 16
  608. self.imageViewHeightConstraint.constant = 0
  609. self.alignmentTopConstraint.constant = 0
  610. self.fontContentViewTopConstraint.constant = 0
  611. }
  612. self.refreshSelectAreaProperty()
  613. self.updateLanguage()
  614. }
  615. }
  616. func refreshSelectAreaProperty(needDefaultData: Bool = false) {
  617. if self.selectAreas.count == 1 {
  618. let areas = self.selectAreas.first
  619. if areas is CPDFEditTextArea {
  620. let area = areas as! CPDFEditTextArea
  621. let cFont = self.listView.editingSelectionCFont(byRangeEdit: area)
  622. var sizeString = "\(self.listView.editingSelectionFontSize(byRangeEdit: area))"
  623. var fontName: String = cFont?.familyName ?? "Helvetica"
  624. if fontName.count == 0 {
  625. fontName = "Helvetica"
  626. }
  627. var fontStyle: String = cFont?.styleName ?? "Regular"
  628. if fontStyle.count == 0 {
  629. fontStyle = "Regular"
  630. }
  631. let alignment = self.listView.currentSelectionAlignment(byRangeEdit: area)
  632. let color = self.listView.editingSelectionFontColor(byRangeEdit: area) ?? NSColor.black
  633. self.fontNameVC?.stringValue = cFont?.familyName == nil ? "--" : fontName
  634. //获取默认数据
  635. if needDefaultData {
  636. let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: .commonly)
  637. fontName = model.fontName
  638. fontStyle = model.fontStyle
  639. sizeString = model.fontSize.description
  640. }
  641. self.updateTextTextPresuppositionState()
  642. self.updateTextPresupposition(fontName: fontName, style: fontStyle, size: CGFloat(Float(sizeString)!), needChangeListView: false)
  643. self.currentColor = color
  644. self.fontColorButton.image = self.swatchWithColor(color: color, size: NSSize(width: 20, height: 20))
  645. self.alignment = alignment
  646. self.selectAlignment(alignment: alignment)
  647. let opacity = self.listView.opacity(for: areas as? CPDFEditArea)
  648. let sliderView = self.opacityBox.contentView as? KMSliderItemView
  649. sliderView?.doubleValue = Double(opacity)
  650. self.opacitVC?.stringValue = String(format: "%0.f%%", opacity*100)
  651. if let value = self.listView?.isBoldCurrentSelection(byRangeEdit: area) {
  652. self.fontBoldVC?.state = value ? .Act : .Norm
  653. }
  654. if let value = self.listView?.isItalicCurrentSelection(byRangeEdit: area) {
  655. self.fontItalicVC?.state = value ? .Act : .Norm
  656. }
  657. }
  658. } else if self.selectAreas.count > 1 {
  659. if let data = self.handdler?.editAreasFontNameIsEqual(), data {
  660. if let area = self.handdler?.editingTextAreas.first {
  661. let font = self.listView.editingSelectionCFont(byRangeEdit: area)
  662. self.fontNameVC?.stringValue = font?.familyName ?? ""
  663. }
  664. } else {
  665. self.fontNameVC?.stringValue = "--"
  666. }
  667. if let data = self.handdler?.editAreasFontStyleIsEqual(), data {
  668. if let area = self.handdler?.editingTextAreas.first {
  669. if let styleName = self.listView.editingSelectionCFont(byRangeEdit: area)?.styleName, styleName.isEmpty == false {
  670. self.fontStyleVC?.stringValue = styleName
  671. } else {
  672. let styleNames = CPDFFont.fontNames(forFamilyName: self.listView.editingSelectionCFont(with: area)?.familyName ?? "")
  673. if let styleN = styleNames.first, styleN.isEmpty == false {
  674. self.fontStyleVC?.stringValue = styleN
  675. } else {
  676. self.fontStyleVC?.stringValue = "Regular"
  677. }
  678. }
  679. }
  680. } else {
  681. self.fontStyleVC?.stringValue = "--"
  682. }
  683. if let data = self.handdler?.editAreasFontBoldIsEqual(), data {
  684. if let area = self.handdler?.editingTextAreas.first {
  685. let value = self.listView.isBoldCurrentSelection(byRangeEdit: area)
  686. self.fontBoldVC?.state = value ? .Act : .Norm
  687. } else {
  688. self.fontBoldVC?.state = .Disabled
  689. }
  690. } else {
  691. self.fontBoldVC?.state = .Disabled
  692. }
  693. if let data = self.handdler?.editAreasFontItalicIsEqual(), data {
  694. if let area = self.handdler?.editingTextAreas.first {
  695. let value = self.listView.isItalicCurrentSelection(byRangeEdit: area)
  696. self.fontItalicVC?.state = value ? .Act : .Norm
  697. } else {
  698. self.fontItalicVC?.state = .Disabled
  699. }
  700. } else {
  701. self.fontItalicVC?.state = .Disabled
  702. }
  703. if let data = self.handdler?.editAreasFontSizeIsEqual(), data {
  704. if let area = self.handdler?.editingTextAreas.first {
  705. let data = self.listView.editingSelectionFontSize(with: area)
  706. self.fontSizeVC?.stringValue = String(format: "%.0fpt", data)
  707. }
  708. self.fontAddVC?.state = .Norm
  709. self.fontReduceVC?.state = .Norm
  710. self.fontAddVC?.button.isEnabled = true
  711. self.fontReduceVC?.button.isEnabled = true
  712. } else {
  713. self.fontSizeVC?.stringValue = "--"
  714. self.fontAddVC?.state = .Disabled
  715. self.fontReduceVC?.state = .Disabled
  716. self.fontAddVC?.button.isEnabled = false
  717. self.fontReduceVC?.button.isEnabled = false
  718. }
  719. if let data = self.handdler?.editAreasTextAlignmentIsEqual(), data {
  720. } else {
  721. self.leftAlignmentVC?.state = .Disabled
  722. self.centerAlignmentVC?.state = .Disabled
  723. self.rightAlignmentVC?.state = .Disabled
  724. }
  725. if let data = self.handdler?.editAreasFontColorIsEqual(), data {
  726. if let area = self.handdler?.editingTextAreas.first {
  727. let color = self.listView?.editingSelectionFontColor(byRangeEdit: area) ?? NSColor.black
  728. self.fontColorButton.image = self.swatchWithColor(color: color, size: NSSize(width: 20, height: 20))
  729. } else {
  730. self.fontColorButton.image = NSImage(named: "KMImageNameEditPDFColorDisabled")
  731. }
  732. } else {
  733. self.fontColorButton.image = NSImage(named: "KMImageNameEditPDFColorDisabled")
  734. }
  735. }
  736. }
  737. override func mouseDown(with event: NSEvent) {
  738. }
  739. //MARK: ToolAction
  740. private func swatchWithColor(color:NSColor,size:NSSize) -> NSImage {
  741. let image = NSImage(size: size)
  742. image.lockFocus()
  743. color.drawSwatch(in: NSRect(x: 0, y: 0, width: size.width, height: size.height))
  744. image.unlockFocus()
  745. return image
  746. }
  747. private func changeAreasAlign(areas:[Any],newBounds:[String]) {
  748. var oldBounds : [String] = []
  749. for i in 0 ... areas.count-1 {
  750. let area : CPDFEditArea = areas[i] as! CPDFEditArea
  751. oldBounds.append(NSStringFromRect(area.bounds))
  752. self.listView.setBoundsEditArea(area, withBounds: NSRectFromString(newBounds[i]))
  753. }
  754. self.listView.setNeedsDisplayForVisiblePages()
  755. }
  756. }
  757. //MARK: - Action
  758. extension KMEditPDFTextPropertyViewController {
  759. @IBAction func fontColorAction(_ sender: Any) {
  760. let color = self.listView.editingSelectionFontColor(with: self.selectAreas.first as? CPDFEditTextArea)
  761. let panel = NSColorPanel.shared
  762. panel.setTarget(self)
  763. panel.setAction(#selector(fontColorChangeAction))
  764. panel.orderFront(nil)
  765. panel.showsAlpha = false
  766. if color != nil {
  767. if let cnt = self.handdler?.editingTextAreas.count, cnt <= 1 {
  768. panel.color = color ?? NSColor.black
  769. }
  770. }
  771. }
  772. @objc func fontColorChangeAction() {
  773. let color = NSColorPanel.shared.color
  774. self.currentColor = color
  775. self.fontColorButton.image = self.swatchWithColor(color: color, size: NSSize(width: 20, height: 20))
  776. let areas = self.handdler?.editingTextAreas ?? []
  777. if areas.count > 0 {
  778. for area in areas {
  779. self.listView.setEditingSelectionFontColor(color, with: area)
  780. }
  781. KMEditPDFPopToolBarWindow.shared.updateFontColor(fontColor: color)
  782. } else {
  783. KMEditPDFTextManager.manager.setCommonlyFontColor(color: self.currentColor)
  784. }
  785. }
  786. @objc func fontBoldAction(_ sender: AnyObject) {
  787. let state = self.fontBoldVC?.state ?? .None
  788. if state == .Disabled {
  789. return
  790. }
  791. var boldV = false
  792. if state == .Act {
  793. self.fontBoldVC?.state = .Norm
  794. boldV = false
  795. } else {
  796. self.fontBoldVC?.state = .Act
  797. boldV = true
  798. }
  799. let index = self.textPresuppositionVC?.indexOfSelectedItem ?? 0
  800. let type = KMEditPDFTextFontType.typeOfRawValue(value: KMEditPDFTextFontType.allValues()[index])
  801. let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: type)
  802. KMEditPDFTextManager.manager.changeTextPresupposition(fontName: model.fontName, fontStyle: model.fontStyle, fontSize: model.fontSize, type: type, bold: boldV, italic: nil)
  803. let model_com = KMEditPDFTextManager.manager.fetchUserDefaultData(type: .commonly)
  804. KMEditPDFTextManager.manager.changeTextPresupposition(fontName: model_com.fontName, fontStyle: model_com.fontStyle, fontSize: model_com.fontSize, type: .commonly, bold: boldV, italic: nil)
  805. self.handdler?.fontBoldAction()
  806. }
  807. @objc func fontItalicAction(_ sender: AnyObject) {
  808. let state = self.fontItalicVC?.state ?? .None
  809. if state == .Disabled {
  810. return
  811. }
  812. var italicV = false
  813. if state == .Act {
  814. self.fontItalicVC?.state = .Norm
  815. italicV = false
  816. } else {
  817. self.fontItalicVC?.state = .Act
  818. italicV = true
  819. }
  820. let index = self.textPresuppositionVC?.indexOfSelectedItem ?? 0
  821. let type = KMEditPDFTextFontType.typeOfRawValue(value: KMEditPDFTextFontType.allValues()[index])
  822. let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: type)
  823. KMEditPDFTextManager.manager.changeTextPresupposition(fontName: model.fontName,fontStyle: model.fontStyle, fontSize: model.fontSize, type: type, bold: nil, italic: italicV)
  824. let model_com = KMEditPDFTextManager.manager.fetchUserDefaultData(type: .commonly)
  825. KMEditPDFTextManager.manager.changeTextPresupposition(fontName: model_com.fontName, fontStyle: model_com.fontStyle, fontSize: model_com.fontSize, type: .commonly, bold: nil, italic: italicV)
  826. self.handdler?.fontItalicAction()
  827. }
  828. @objc func fontAddAction(_ sender: AnyObject) {
  829. let state = self.fontAddVC?.state ?? .None
  830. if state == .Disabled {
  831. return
  832. }
  833. let size = Float(self.fontSizeVC?.stringValue.replacingOccurrences(of: "pt", with: "") ?? "12") ?? 1
  834. self.fontSizeVC?.stringValue = String(format: "%.0fpt", size+1)
  835. self.km_comboBoxSelectionDidChange(self.fontSizeVC!)
  836. }
  837. @objc func fontReduceAction(_ sender: AnyObject) {
  838. let state = self.fontReduceVC?.state ?? .None
  839. if state == .Disabled {
  840. return
  841. }
  842. let size = Float(self.fontSizeVC?.stringValue.replacingOccurrences(of: "pt", with: "") ?? "12") ?? 1
  843. if size < 1 {
  844. return
  845. }
  846. self.fontSizeVC?.stringValue = String(format: "%.0fpt", size-1)
  847. self.km_comboBoxSelectionDidChange(self.fontSizeVC!)
  848. }
  849. @objc func leftAlignmentAction(sender: NSButton?) {
  850. self.leftAlignmentVC?.state = .Sel
  851. self.rightAlignmentVC?.state = .Norm
  852. self.centerAlignmentVC?.state = .Norm
  853. self.updateAlignment(alignment: .left)
  854. if let _ = sender {
  855. KMEditPDFPopToolBarWindow.shared.updateTextAlign(align: .left)
  856. }
  857. }
  858. @objc func centerAlignmentAction(sender: NSButton?) {
  859. self.leftAlignmentVC?.state = .Norm
  860. self.rightAlignmentVC?.state = .Norm
  861. self.centerAlignmentVC?.state = .Sel
  862. self.updateAlignment(alignment: .center)
  863. if let _ = sender {
  864. KMEditPDFPopToolBarWindow.shared.updateTextAlign(align: .center)
  865. }
  866. }
  867. @objc func rightAlignmentAction(sender: NSButton?) {
  868. self.leftAlignmentVC?.state = .Norm
  869. self.rightAlignmentVC?.state = .Sel
  870. self.centerAlignmentVC?.state = .Norm
  871. self.updateAlignment(alignment: .right)
  872. if let _ = sender {
  873. KMEditPDFPopToolBarWindow.shared.updateTextAlign(align: .right)
  874. }
  875. }
  876. func selectAlignment(alignment: NSTextAlignment) {
  877. switch alignment {
  878. case .left:
  879. self.leftAlignmentAction(sender: nil)
  880. case .right:
  881. self.rightAlignmentAction(sender: nil)
  882. case .center:
  883. self.centerAlignmentAction(sender: nil)
  884. default:
  885. self.leftAlignmentAction(sender: nil)
  886. }
  887. }
  888. @objc func resetTextPresuppositionButtonAction(sender: NSButton) {
  889. let state = self.textPresuppositionResetVC?.state ?? .None
  890. if state == .Disabled {
  891. return
  892. }
  893. var popViewDataArr: [String] = []
  894. var dataArray = [NSLocalizedString("Redefine", comment: ""), NSLocalizedString("Reset", comment: "")]
  895. for string in dataArray {
  896. popViewDataArr.append(string)
  897. }
  898. //调整保存参数
  899. let index = self.textPresuppositionVC?.indexOfSelectedItem ?? 0
  900. let type = KMEditPDFTextFontType.typeOfRawValue(value: KMEditPDFTextFontType.allValues()[index])
  901. let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: type)
  902. var disItems: [String] = dataArray
  903. if model.change || model.redefine {
  904. disItems.removeObject(NSLocalizedString("Reset", comment: ""))
  905. }
  906. if model.change {
  907. disItems.removeObject(NSLocalizedString("Redefine", comment: ""))
  908. }
  909. let vc: KMHomePopViewController = KMHomePopViewController().initWithPopViewDataArr(popViewDataArr)
  910. vc.background = KMAppearance.Layout.bgColor()
  911. vc.textColor = KMAppearance.Layout.h0Color()
  912. vc.enterFillColor = KMAppearance.Interactive.s0Color()
  913. vc.disItems = disItems
  914. let createFilePopover: NSPopover = NSPopover.init()
  915. createFilePopover.contentViewController = vc
  916. createFilePopover.animates = true
  917. createFilePopover.behavior = .semitransient
  918. createFilePopover.setValue(true, forKey: "shouldHideAnchor")
  919. createFilePopover.show(relativeTo: CGRect(x: sender.bounds.origin.x, y: -10, width: sender.bounds.size.width, height: sender.bounds.size.height), of: sender, preferredEdge: .maxY)
  920. vc.downCallback = { [unowned self](downEntered: Bool, count: String) -> Void in
  921. if downEntered {
  922. if count == NSLocalizedString("Reset", comment: "") {
  923. self.resetTextPresuppositionData()
  924. } else if count == NSLocalizedString("Redefine", comment: "") {
  925. self.reDefineTextPresuppositionData()
  926. }
  927. createFilePopover.close()
  928. }
  929. }
  930. }
  931. func updateTextTextPresuppositionState() {
  932. let areas = self.selectAreas.first
  933. if areas is CPDFEditTextArea {
  934. var size: CGFloat = (abs(self.listView.editingSelectionFontSize(byRangeEdit: areas as? CPDFEditTextArea)))
  935. let cfont = self.listView.editingSelectionCFont(byRangeEdit: areas as? CPDFEditTextArea)
  936. var fontName = cfont?.familyName ?? "Helvetica"
  937. var isBold = false
  938. if let data = self.listView?.isBoldCurrentSelection(byRangeEdit: areas as? CPDFEditTextArea) {
  939. isBold = data
  940. }
  941. var isItalic = false
  942. if let data = self.listView?.isItalicCurrentSelection(byRangeEdit: areas as? CPDFEditTextArea) {
  943. isItalic = data
  944. }
  945. let models = KMEditPDFTextManager.manager.fetchAllUserDefaultData()
  946. var index = 0
  947. for i in 0...models.count - 1 {
  948. let model = models[i]
  949. if model.fontName == fontName && model.fontStyle == cfont?.styleName && size == model.fontSize {
  950. index = i
  951. }
  952. }
  953. //刷新样式
  954. textPresuppositionVC?.addItems(withObjectValues: KMEditPDFTextManager.manager.updateTextPresuppositionFontNameArray())
  955. textPresuppositionVC?.selectItem(at: index)
  956. }
  957. }
  958. }
  959. //MARK: - Update
  960. extension KMEditPDFTextPropertyViewController {
  961. func updateAlignment(alignment: NSTextAlignment) {
  962. if self.alignment != alignment {
  963. let areas = self.handdler?.editingTextAreas ?? []
  964. if areas.count > 0 {
  965. for area in areas {
  966. self.listView.setCurrentSelectionAlignment(alignment, with: area)
  967. }
  968. } else {
  969. KMEditPDFTextManager.manager.setFontAlignment(alignment: alignment)
  970. }
  971. self.alignment = alignment
  972. }
  973. }
  974. // 更新字体预设
  975. func updateTextPresupposition(type: KMEditPDFTextFontType, needChangeListView: Bool = true) {
  976. let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: type)
  977. let fontName: String = model.fontName
  978. let size: CGFloat = model.fontSize
  979. self.updateTextPresupposition(fontName: fontName, style: model.fontStyle, size: size, needChangeListView: needChangeListView)
  980. //刷新样式
  981. textPresuppositionVC?.addItems(withObjectValues: KMEditPDFTextManager.manager.updateTextPresuppositionFontNameArray())
  982. textPresuppositionVC?.selectItem(at: textPresuppositionVC!.indexOfSelectedItem)
  983. if type == .customize || type == .commonly {
  984. self.textPresuppositionResetVC?.state = .Disabled
  985. } else {
  986. self.textPresuppositionResetVC?.state = .Norm
  987. }
  988. if needChangeListView {
  989. let areas = self.handdler?.editingTextAreas ?? []
  990. for area in areas {
  991. self.listView.setCurrentSelectionIsBold(model.bold, with: area)
  992. self.listView.setCurrentSelectionIsItalic(model.italic, with: area)
  993. }
  994. self._boldButtonStateUpdate(fontStyle: "")
  995. }
  996. }
  997. }
  998. extension KMEditPDFTextPropertyViewController: KMSelectPopButtonDelegate {
  999. func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) {
  1000. if obj == textPresuppositionVC {
  1001. let type = KMEditPDFTextFontType.typeOfRawValue(value: KMEditPDFTextFontType.allValues()[obj.indexOfSelectedItem])
  1002. self.updateTextPresupposition(type: type)
  1003. } else if obj == fontNameVC {
  1004. self.updateFontNameAndStyle(name: obj.stringValue, style: fontStyle)
  1005. let win = KMEditPDFPopToolBarWindow.shared
  1006. if win.isVisible {
  1007. (win.contentViewController as? KMEditPDFPopToolBarController)?.toolbarView?.reloadData()
  1008. }
  1009. } else if obj == fontSizeVC {
  1010. let size = CGFloat(Float((obj.stringValue.replacingOccurrences(of: "pt", with: "")))!)
  1011. self.updateFontSize(size: size)
  1012. KMEditPDFPopToolBarWindow.shared.updateFontSizeButtons(enable: true)
  1013. } else if obj == fontStyleVC {
  1014. self.updateFontNameAndStyle(name: fontName, style: obj.stringValue)
  1015. } else if obj == self.opacitVC {
  1016. let stringValue = self.opacitVC?.stringValue ?? ""
  1017. let value = (stringValue.components(separatedBy: "%").first?.stringToCGFloat() ?? 0) / 100
  1018. let view = self.opacityBox.contentView as? KMSliderItemView
  1019. view?.doubleValue = Double(value)
  1020. let areas = self.listView.editingAreas() as? [CPDFEditArea] ?? []
  1021. for area in areas {
  1022. self.listView.setOpacityEditArea(area, opacity: value)
  1023. }
  1024. }
  1025. }
  1026. func km_controlTextDidChange(_ obj: KMDesignSelect) {
  1027. if obj == self.fontSizeVC {
  1028. let format = NumberFormatter()
  1029. format.numberStyle = .decimal
  1030. var string = obj.stringValue.replacingOccurrences(of: "pt", with: "")
  1031. string = string.replacingOccurrences(of: "p", with: "")
  1032. let size = max(Float(string) ?? 1, 1)
  1033. self.fontSizeVC?.stringValue = format.string(from: NSNumber(value: size)) ?? ""
  1034. }
  1035. }
  1036. func km_controlTextDidEndEditing(_ obj: KMDesignSelect) {
  1037. if obj == self.fontSizeVC {
  1038. var string = obj.stringValue.replacingOccurrences(of: "pt", with: "")
  1039. string = string.replacingOccurrences(of: ",", with: "")
  1040. let size = Float(string) ?? 1
  1041. let sizeValue = max(size, 1)
  1042. self.fontSizeVC?.stringValue = String(format: "%.0fpt", sizeValue)
  1043. self.updateFontSize(size: size.cgFloat)
  1044. }
  1045. }
  1046. func km_cellViewWillShow(_ obj: KMDesignSelect, _ cellView: KMBox, _ index: Int) {
  1047. if obj.isEqual(to: self.textPresuppositionVC) == false {
  1048. return
  1049. }
  1050. if let label = cellView.contentView?.subviews.first as? NSTextField {
  1051. let allValues = KMEditPDFTextFontType.allValues()
  1052. let idx = allValues.count-index-1
  1053. if idx == 0 { // custom
  1054. return
  1055. }
  1056. guard let value = allValues.safe_element(for: idx) as? String else {
  1057. return
  1058. }
  1059. let type = KMEditPDFTextFontType.typeOfRawValue(value: value)
  1060. var fontSize: CGFloat = 0
  1061. if type == .h1 {
  1062. fontSize = 20
  1063. } else if type == .h2 {
  1064. fontSize = 18
  1065. } else if type == .h3 {
  1066. fontSize = 16
  1067. } else if type == .b1 {
  1068. fontSize = 14
  1069. } else if type == .b2 {
  1070. fontSize = 12
  1071. } else if type == .b3 {
  1072. fontSize = 10
  1073. }
  1074. let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: type)
  1075. let fontName: String = model.fontName
  1076. var fontN: String = fontName
  1077. if let cfont = CPDFFont.mappingFont(withFontString: fontName) {
  1078. fontN = CPDFFont.convertAppleFont(cfont) ?? fontName
  1079. }
  1080. var bold = fontName.contains("Bold")
  1081. var italic = fontName.contains("Oblique") || fontName.contains("Italic")
  1082. if bold == false {
  1083. bold = model.bold
  1084. }
  1085. if italic == false {
  1086. italic = model.italic
  1087. }
  1088. let attri = NSMutableAttributedString(attributedString: label.attributedStringValue)
  1089. if bold {
  1090. attri.addAttribute(.font, value: NSFont.boldSystemFont(ofSize: fontSize), range: NSMakeRange(0, attri.string.count))
  1091. } else {
  1092. attri.addAttribute(.font, value: NSFont.systemFont(ofSize: fontSize), range: NSMakeRange(0, attri.string.count))
  1093. }
  1094. if italic {
  1095. attri.addAttribute(.obliqueness, value: 0.3, range: NSMakeRange(0, attri.string.count))
  1096. }
  1097. label.attributedStringValue = attri
  1098. }
  1099. }
  1100. func km_SelectPopoverWillShow(_ obj: KMDesignSelect) {
  1101. }
  1102. }
  1103. //MARK: - TextPresupposition
  1104. extension KMEditPDFTextPropertyViewController {
  1105. //MARK: 基本属性调整
  1106. func updateTextPresupposition(fontName: String, style: String, size: CGFloat, needChangeListView: Bool = true) {
  1107. self.updateFontNameAndStyle(name: fontName, style: style, needChangeListView: needChangeListView, needSave: false)
  1108. self.updateFontSize(size: size, needChangeListView: needChangeListView, needSave: false)
  1109. }
  1110. func resetTextPresuppositionData() {
  1111. let index = self.textPresuppositionVC?.indexOfSelectedItem ?? 0
  1112. let type = KMEditPDFTextFontType.typeOfRawValue(value: KMEditPDFTextFontType.allValues()[index])
  1113. KMEditPDFTextManager.manager.resetTextPresupposition(type: type)
  1114. self.updateTextPresupposition(type: type)
  1115. }
  1116. func reDefineTextPresuppositionData(redefine: Bool = true) {
  1117. let fontStyle = self.fontStyle
  1118. let fontName = self.fontName + "-" + fontStyle
  1119. let fontSize = self.fontSize
  1120. let index = self.textPresuppositionVC?.indexOfSelectedItem ?? 0
  1121. let type = KMEditPDFTextFontType.typeOfRawValue(value: KMEditPDFTextFontType.allValues()[index])
  1122. KMEditPDFTextManager.manager.reDefineTextPresupposition(fontName: self.fontName,fontStyle: self.fontStyle,
  1123. fontSize: fontSize,
  1124. type: type)
  1125. self.updateTextPresupposition(type: type)
  1126. }
  1127. }
  1128. //MARK: - Private
  1129. extension KMEditPDFTextPropertyViewController {
  1130. func updateFontNameAndStyle(name: String, style: String, needChangeListView: Bool = true, needSave: Bool = true) {
  1131. var styleString = style
  1132. let fontStyleNames = CPDFFont.fontNames(forFamilyName: name)
  1133. if !fontStyleNames.contains(style) {
  1134. if fontStyleNames.isEmpty {
  1135. self.fontStyleVC?.addItems(withObjectValues: [style])
  1136. self.fontStyleVC?.selectItem(at: 0)
  1137. styleString = style
  1138. } else {
  1139. self.fontStyleVC?.addItems(withObjectValues: fontStyleNames)
  1140. self.fontStyleVC?.selectItem(at: 0)
  1141. styleString = fontStyleNames.first ?? ""
  1142. }
  1143. } else {
  1144. self.fontStyleVC?.addItems(withObjectValues: fontStyleNames)
  1145. self.fontStyleVC?.selectItem(at: fontStyleNames.firstIndex(of: style) ?? 0)
  1146. }
  1147. //数据保存返回
  1148. if self.selectAreas.count > 0 {
  1149. if needChangeListView {
  1150. let areas = self.handdler?.editingTextAreas ?? []
  1151. for area in areas {
  1152. let font = CPDFFont(familyName: name, fontStyle: styleString)
  1153. self.listView.setEditSelectionCFont(font, with: area)
  1154. }
  1155. }
  1156. } else {
  1157. if needSave {
  1158. let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: .commonly)
  1159. KMEditPDFTextManager.manager.changeTextPresupposition(fontName: name, fontStyle: styleString, fontSize: model.fontSize, type: .commonly, bold: nil, italic: nil)
  1160. }
  1161. }
  1162. self.fontName = name
  1163. self.fontStyle = styleString
  1164. if needSave {
  1165. //调整保存参数
  1166. let index = self.textPresuppositionVC?.indexOfSelectedItem ?? 0
  1167. let type = KMEditPDFTextFontType.typeOfRawValue(value: KMEditPDFTextFontType.allValues()[index])
  1168. let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: type)
  1169. KMEditPDFTextManager.manager.changeTextPresupposition(fontName: name, fontStyle: styleString, fontSize: model.fontSize, type: type, bold: nil, italic: nil)
  1170. }
  1171. //刷新样式
  1172. textPresuppositionVC?.addItems(withObjectValues: KMEditPDFTextManager.manager.updateTextPresuppositionFontNameArray())
  1173. textPresuppositionVC?.selectItem(at: textPresuppositionVC!.indexOfSelectedItem)
  1174. self._boldButtonStateUpdate(fontStyle: styleString)
  1175. }
  1176. func updateFontSize(size: CGFloat, needChangeListView: Bool = true, needSave: Bool = true) {
  1177. if fontSize != size {
  1178. let areas = self.handdler?.editingTextAreas ?? []
  1179. if areas.count > 0 {
  1180. if needChangeListView {
  1181. for area in areas {
  1182. self.listView.setEditingSelectionFontSize(size, with: area, isAutoSize: false)
  1183. }
  1184. }
  1185. } else {
  1186. if needSave {
  1187. let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: .commonly)
  1188. KMEditPDFTextManager.manager.changeTextPresupposition(fontName: model.fontName, fontStyle: model.fontStyle,fontSize: size, type: .commonly, bold: nil, italic: nil)
  1189. }
  1190. }
  1191. self.fontSize = size
  1192. if needSave {
  1193. let index = self.textPresuppositionVC?.indexOfSelectedItem ?? 0
  1194. let type = KMEditPDFTextFontType.typeOfRawValue(value: KMEditPDFTextFontType.allValues()[index])
  1195. let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: type)
  1196. KMEditPDFTextManager.manager.changeTextPresupposition(fontName: model.fontName, fontStyle: model.fontStyle, fontSize: size, type: type, bold: nil, italic: nil)
  1197. }
  1198. //刷新样式
  1199. textPresuppositionVC?.addItems(withObjectValues: KMEditPDFTextManager.manager.updateTextPresuppositionFontNameArray())
  1200. textPresuppositionVC?.selectItem(at: textPresuppositionVC!.indexOfSelectedItem)
  1201. }
  1202. }
  1203. // Bold
  1204. private func _boldButtonStateUpdate(fontStyle fStyle: String) {
  1205. if self.selectAreas.count == 1 {
  1206. let areas = self.selectAreas.first
  1207. if areas is CPDFEditTextArea {
  1208. let area = areas as! CPDFEditTextArea
  1209. if let value = self.listView?.isBoldCurrentSelection(byRangeEdit: area) {
  1210. self.fontBoldVC?.state = value ? .Act : .Norm
  1211. }
  1212. if let value = self.listView?.isItalicCurrentSelection(byRangeEdit: area) {
  1213. self.fontItalicVC?.state = value ? .Act : .Norm
  1214. }
  1215. }
  1216. } else if self.selectAreas.count > 1 {
  1217. if let data = self.handdler?.editAreasFontBoldIsEqual(), data {
  1218. if let area = self.handdler?.editingTextAreas.first {
  1219. let value = self.listView.isBoldCurrentSelection(byRangeEdit: area)
  1220. self.fontBoldVC?.state = value ? .Act : .Norm
  1221. } else {
  1222. self.fontBoldVC?.state = .Disabled
  1223. }
  1224. } else {
  1225. self.fontBoldVC?.state = .Disabled
  1226. }
  1227. if let data = self.handdler?.editAreasFontItalicIsEqual(), data {
  1228. if let area = self.handdler?.editingTextAreas.first {
  1229. let value = self.listView.isItalicCurrentSelection(byRangeEdit: area)
  1230. self.fontItalicVC?.state = value ? .Act : .Norm
  1231. } else {
  1232. self.fontItalicVC?.state = .Disabled
  1233. }
  1234. } else {
  1235. self.fontItalicVC?.state = .Disabled
  1236. }
  1237. } else {
  1238. let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: .commonly)
  1239. self.fontBoldVC?.state = model.bold ? .Act : .Norm
  1240. self.fontItalicVC?.state = model.italic ? .Act : .Norm
  1241. }
  1242. }
  1243. //MARK: 刷新预览图片
  1244. private func updatePreviewImage() {
  1245. var alignment = self.alignment
  1246. var fontSize = Float((self.fontSizeVC?.stringValue.replacingOccurrences(of: "pt", with: ""))!) ?? 1.0
  1247. var fontName = self.fontNameVC?.stringValue ?? "Sample"
  1248. let fontStyle = KMEditPDFTextManager.manager.checkFontStyle(style: self.fontStyleVC?.stringValue ?? "")
  1249. let fontCurrentColor = self.currentColor
  1250. fontName = KMEditPDFTextManager.manager.checkFontName(fontName: (fontName + "-" + fontStyle))
  1251. fontSize = max(fontSize, 8)
  1252. let editringareas = self.selectAreas
  1253. let count = editringareas.count
  1254. let editingSelectionAlignment = self.listView.editingSelectionAlignment(with: editringareas.first as? CPDFEditTextArea)
  1255. if count == 1 {
  1256. let areas = editringareas.first
  1257. if areas is CPDFEditTextArea {
  1258. alignment = editingSelectionAlignment
  1259. }
  1260. }
  1261. let image = KMEditPDFTextManager.manager.fetchTextImage(alignment: .center,
  1262. fontName: fontName,
  1263. fontSize: CGFloat(fontSize),
  1264. color: fontCurrentColor,
  1265. imageSize: self.preImageView.frame.size)
  1266. self.preImageView.image = image
  1267. }
  1268. func supportFontSize() -> [String] {
  1269. return ["8pt", "9pt", "10pt", "11pt", "12pt", "14pt", "16pt", "18pt", "20pt", "22pt", "24pt", "26pt", "28pt", "36pt", "48pt", "72pt"]
  1270. }
  1271. }