Как нарисовать NSPopupButtonCell выделенное изображение - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть NSPopupButton внутри NSToolbar, у которого есть borderder = false, у которого есть некоторая смесь цвета при выделении. Если я использую bordered = true, изображение рисуется с хорошим темным наложением.

Я пытаюсь добиться рисования выделенного состояния так же, как это происходит в bordered=true

PS: NSButtonCell с bordered = false работает из коробки.

Я могу добиться такого поведения, имея bordered = true и переопределяя drawBezel и ничего не делая там, но я хочу знать

То, что я пробовал:

  • подсветкаBy
  • interiorBackgroundStyle
  • setCellAttribute

-

class ToolbarPopUpButtonCell : NSPopUpButtonCell {

  override var isHighlighted: Bool {
      get { return true }
      set { super.isHighlighted = newValue }
  }   

  override func drawImage(withFrame cellFrame: NSRect, in controlView: NSView) {
      super.drawImage(withFrame: cellFrame, in: controlView)
  }


  //used in case bordered = true so we do nothing
  override func drawBezel(withFrame frame: NSRect, in controlView: NSView) {

  }

  //doesn't work
  override var interiorBackgroundStyle: NSView.BackgroundStyle
      {
      return .raised
  }
}

  class ToolbarPopUpButton: NSPopUpButton {

  override func awakeFromNib() {
      cell?.setCellAttribute(.cellLightsByBackground, to: 1)
  }

  override var intrinsicContentSize: NSSize {
      return NSMakeSize(32 + 5, 32)
  }
}

Обратите внимание на изображение справа, которое работает для bordered = false (NSButtonCell)

enter image description here

1 Ответ

0 голосов
/ 23 апреля 2020

Единственный хак, который я нашел, это нарисовать ячейку подстановки. Все еще ищу лучшее решение.

- (void)drawImageWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
    NSImage *image = [self image];
    NSButtonCell *swapCell = [[NSButtonCell alloc] initImageCell:image];
    [swapCell setHighlighted:[self isHighlighted]];
    [swapCell drawImage:image withFrame:cellFrame inView:controlView];
}
...