blob: 0b672a1c60e9ccbcc1a8a9129902c3d49889417f (
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
|
using System;
using AppKit;
namespace Xamarin.PropertyEditing.Mac
{
public abstract class UnfocusableButton : NSImageView
{
public event EventHandler OnMouseEntered;
public event EventHandler OnMouseExited;
public event EventHandler OnMouseLeftDown;
public event EventHandler OnMouseRightDown;
NSTrackingArea trackingArea;
public UnfocusableButton ()
{
Enabled = true;
ImageScaling = NSImageScale.AxesIndependently;
TranslatesAutoresizingMaskIntoConstraints = false;
PropertyEditorPanel.ThemeManager.ThemeChanged += ThemeManager_ThemeChanged;
UpdateTheme ();
}
#region Overridden Methods
protected override void Dispose (bool disposing)
{
if (disposing) {
PropertyEditorPanel.ThemeManager.ThemeChanged -= ThemeManager_ThemeChanged;
}
}
public override void MouseDown (NSEvent theEvent)
{
switch (theEvent.Type) {
case NSEventType.LeftMouseDown:
NotifyMouseLeftDown ();
break;
case NSEventType.RightMouseDown:
NotifyMouseRightDown ();
break;
}
}
public override void MouseEntered (NSEvent theEvent)
{
NotifyMouseEntered ();
}
public override void MouseExited (NSEvent theEvent)
{
NotifyMouseExited ();
}
public override void UpdateTrackingAreas ()
{
base.UpdateTrackingAreas ();
// Add tracking so our MouseEntered and MouseExited get called.
if (trackingArea == null) {
var options = NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveAlways;
trackingArea = new NSTrackingArea (this.Bounds, options, this, null);
AddTrackingArea (trackingArea);
}
}
#endregion
#region Local Methods
private void NotifyMouseEntered ()
{
OnMouseEntered?.Invoke (this, EventArgs.Empty);
}
private void NotifyMouseExited ()
{
OnMouseExited?.Invoke (this, EventArgs.Empty);
}
private void NotifyMouseLeftDown ()
{
OnMouseLeftDown?.Invoke (this, EventArgs.Empty);
}
private void NotifyMouseRightDown ()
{
OnMouseRightDown?.Invoke (this, EventArgs.Empty);
}
void ThemeManager_ThemeChanged (object sender, EventArgs e)
{
UpdateTheme ();
}
protected virtual void UpdateTheme ()
{
this.Appearance = PropertyEditorPanel.ThemeManager.CurrentAppearance;
}
#endregion
}
}
|