summaryrefslogtreecommitdiff
path: root/mut/dmenu-mac/src/VerticalAlignedTextFieldCell.swift
blob: a40a4ec102da95546b6e194d736b7102d565e4af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
 * Copyright (c) 2016 Jose Pereira <onaips@gmail.com>.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, version 3.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

import Cocoa

class VerticalAlignedTextFieldCell: NSTextFieldCell {
    var editingOrSelecting: Bool = false

    override func drawingRect(forBounds theRect: NSRect) -> NSRect {
        var newRect = super.drawingRect(forBounds: theRect)
        if !editingOrSelecting {
            let textSize = self.cellSize(forBounds: theRect)
            let heightDelta = newRect.size.height - textSize.height
            if heightDelta > 0 {
                newRect.size.height -= heightDelta
                newRect.origin.y += (heightDelta / 2)
            }
        }
        return newRect
    }

    override func select(withFrame aRect: NSRect, in controlView: NSView,
                         editor textObj: NSText, delegate anObject: Any?,
                         start selStart: Int, length selLength: Int) {
        let aRect = self.drawingRect(forBounds: aRect)

        editingOrSelecting = true
        super.select(withFrame: aRect,
                     in: controlView,
                     editor: textObj,
                     delegate: anObject,
                     start: selStart,
                     length: selLength)

        editingOrSelecting = false
    }

    override func edit(withFrame aRect: NSRect, in controlView: NSView,
                       editor textObj: NSText, delegate anObject: Any?,
                       event theEvent: NSEvent?) {
        let aRect = self.drawingRect(forBounds: aRect)
        editingOrSelecting = true
        self.edit(withFrame: aRect,
                  in: controlView,
                  editor: textObj,
                  delegate: anObject,
                  event: theEvent)
        editingOrSelecting = false
    }
}