KMPDFThumbnialPageView.swift 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. //
  2. // KMPDFThumbnialPageView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by tangchao on 2022/11/24.
  6. //
  7. import Cocoa
  8. class KMPDFThumbnialPageView: NSView {
  9. private var pendingWordItem: DispatchWorkItem?
  10. var page: CPDFPage? {
  11. didSet {
  12. self.pageImageIv.image = NSImage()
  13. self.performTask()
  14. }
  15. }
  16. var pageImageIv = NSImageView()
  17. var isThumb = false
  18. override init(frame frameRect: NSRect) {
  19. super.init(frame: frameRect)
  20. self.setup();
  21. }
  22. required init?(coder: NSCoder) {
  23. super.init(coder: coder)
  24. }
  25. func setup() {
  26. self.wantsLayer = true
  27. self.layer?.backgroundColor = NSColor.white.cgColor
  28. self.shadow = NSShadow()
  29. self.layer?.shadowColor = NSColor.black.cgColor
  30. self.layer?.shadowOpacity = 0.2
  31. self.layer?.shadowRadius = 3.0
  32. self.layer?.shadowOffset = CGSize(width: 0, height: -3)
  33. pageImageIv.wantsLayer = true;
  34. self.addSubview(self.pageImageIv)
  35. self.pageImageIv.autoresizingMask = [.width, .height];
  36. self.pageImageIv.frame = self.bounds
  37. }
  38. func performTask() {
  39. pendingWordItem?.cancel()
  40. let newWorkItem = DispatchWorkItem {
  41. self.updateThumbnial()
  42. }
  43. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.01, execute:newWorkItem)
  44. pendingWordItem = newWorkItem
  45. }
  46. func updateThumbnial(needReset: Bool = false) {
  47. print(self.bounds.size);
  48. self.page?.thumbnail(of: self.bounds.size, needReset: needReset, completion: { [unowned self] image in
  49. self.pageImageIv.image = image
  50. })
  51. }
  52. }