aboutsummaryrefslogtreecommitdiff
path: root/VKPC/PlaylistTableRowView.m
blob: 5c92958595e3e11cbfeef9dd87c49621fbf70dd5 (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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//
//  PlaylistTableRowView.m
//  VKPC
//
//  Created by Eugene on 12/2/13.
//  Copyright (c) 2013-2014 Eugene Z. All rights reserved.
//  TODO иногда не реагирует на нажатия; найти и исправить
//  TODO проблемы с ретиной! исправить
//  TODO выяснить, актуальны ли предыдущие TODO

#import "PlaylistTableRowView.h"

@implementation PlaylistTableRowView {
    BOOL _trackSelected;
    BOOL _everSelected;
    NSTrackingArea *trackingArea;
}

//@dynamic _mouseInside;

- (id)initWithFrame:(NSRect)frameRect {
    if (self = [super initWithFrame:frameRect]) {
        _everSelected = NO;
    }
    return self;
}

- (void)setMouseInside:(BOOL)mouseInside {
    if (_mouseInside != mouseInside) {
        _mouseInside = mouseInside;
        if (_trackSelected) {
            [self setNeedsDisplay:YES];
            if (!_mouseInside) {
                _trackSelected = NO;
            }
        }
    }
}

- (void)ensureTrackingArea {
    if (trackingArea == nil) {
        trackingArea = [[NSTrackingArea alloc] initWithRect:NSZeroRect options:NSTrackingInVisibleRect | NSTrackingActiveAlways | NSTrackingMouseEnteredAndExited owner:self userInfo:nil];
    }
}

- (void)updateTrackingAreas {
    [super updateTrackingAreas];
    [self ensureTrackingArea];
    if (![[self trackingAreas] containsObject:trackingArea]) {
        [self addTrackingArea:trackingArea];
    }
}

- (void)mouseEntered:(NSEvent *)theEvent {
    self.mouseInside = YES;
}

- (void)mouseExited:(NSEvent *)theEvent {
    self.mouseInside = NO;
    _trackSelected = NO;
}

- (BOOL)isFlipped {
    return NO;
}

- (BOOL)allowsVibrancy {
    return YES;
}

//- (BOOL)wantsLayer {
//    return YES;
//}

// TODO what is it
- (void)setSelected:(BOOL)selected {
    // Do nothing
}

- (void)setTrackSelected:(BOOL)is {
    if (_trackSelected != is) {
        _everSelected = YES;
        _trackSelected = is;
        [self setNeedsDisplay:YES];
    }
}

- (void)drawBackgroundInRect:(NSRect)dirtyRect {
    [super drawBackgroundInRect:dirtyRect];
//    return;
    NSImage *img = VKPCGetImagesDictionary()[_trackSelected && _everSelected && _mouseInside ? VKPCImageCellPressedBg : VKPCImageCellBg];
//    NSImage *img = VKPCGetImagesDictionary()[VKPCImageCellBg];
    [img drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1];
//    NSLog(@"rowview draw");
}

- (void)drawSelectionInRect:(NSRect)dirtyRect {
    [super drawSelectionInRect:dirtyRect];
}

- (NSBackgroundStyle)interiorBackgroundStyle {
    return NSBackgroundStyleLight;
}

@end