add mouse-move event and click event position for tray

This commit is contained in:
Sean Bannigan 2017-08-26 14:04:58 -04:00 committed by Cheng Zhao
parent ee519b7552
commit 0b205019b6
7 changed files with 41 additions and 9 deletions

View file

@ -86,8 +86,8 @@ mate::WrappableBase* Tray::New(mate::Handle<NativeImage> image,
return new Tray(args->isolate(), args->GetThis(), image); return new Tray(args->isolate(), args->GetThis(), image);
} }
void Tray::OnClicked(const gfx::Rect& bounds, int modifiers) { void Tray::OnClicked(const gfx::Rect& bounds, const gfx::Point& location, int modifiers) {
EmitWithFlags("click", modifiers, bounds); EmitWithFlags("click", modifiers, bounds, location);
} }
void Tray::OnDoubleClicked(const gfx::Rect& bounds, int modifiers) { void Tray::OnDoubleClicked(const gfx::Rect& bounds, int modifiers) {
@ -130,6 +130,10 @@ void Tray::OnMouseExited(const gfx::Point& location, int modifiers) {
EmitWithFlags("mouse-leave", modifiers, location); EmitWithFlags("mouse-leave", modifiers, location);
} }
void Tray::OnMouseMoved(const gfx::Point& location, int modifiers) {
EmitWithFlags("mouse-move", modifiers, location);
}
void Tray::OnDragEntered() { void Tray::OnDragEntered() {
Emit("drag-enter"); Emit("drag-enter");
} }

View file

@ -47,7 +47,7 @@ class Tray : public mate::TrackableObject<Tray>,
~Tray() override; ~Tray() override;
// TrayIconObserver: // TrayIconObserver:
void OnClicked(const gfx::Rect& bounds, int modifiers) override; void OnClicked(const gfx::Rect& bounds, const gfx::Point& location, int modifiers) override;
void OnDoubleClicked(const gfx::Rect& bounds, int modifiers) override; void OnDoubleClicked(const gfx::Rect& bounds, int modifiers) override;
void OnRightClicked(const gfx::Rect& bounds, int modifiers) override; void OnRightClicked(const gfx::Rect& bounds, int modifiers) override;
void OnBalloonShow() override; void OnBalloonShow() override;
@ -61,6 +61,7 @@ class Tray : public mate::TrackableObject<Tray>,
void OnDragEnded() override; void OnDragEnded() override;
void OnMouseEntered(const gfx::Point& location, int modifiers) override; void OnMouseEntered(const gfx::Point& location, int modifiers) override;
void OnMouseExited(const gfx::Point& location, int modifiers) override; void OnMouseExited(const gfx::Point& location, int modifiers) override;
void OnMouseMoved(const gfx::Point& location, int modifiers) override;
void SetImage(v8::Isolate* isolate, mate::Handle<NativeImage> image); void SetImage(v8::Isolate* isolate, mate::Handle<NativeImage> image);
void SetPressedImage(v8::Isolate* isolate, mate::Handle<NativeImage> image); void SetPressedImage(v8::Isolate* isolate, mate::Handle<NativeImage> image);

View file

@ -34,9 +34,9 @@ gfx::Rect TrayIcon::GetBounds() {
return gfx::Rect(); return gfx::Rect();
} }
void TrayIcon::NotifyClicked(const gfx::Rect& bounds, int modifiers) { void TrayIcon::NotifyClicked(const gfx::Rect& bounds, const gfx::Point& location, int modifiers) {
for (TrayIconObserver& observer : observers_) for (TrayIconObserver& observer : observers_)
observer.OnClicked(bounds, modifiers); observer.OnClicked(bounds, location, modifiers);
} }
void TrayIcon::NotifyDoubleClicked(const gfx::Rect& bounds, int modifiers) { void TrayIcon::NotifyDoubleClicked(const gfx::Rect& bounds, int modifiers) {
@ -89,6 +89,11 @@ void TrayIcon::NotifyMouseExited(const gfx::Point& location, int modifiers) {
observer.OnMouseExited(location, modifiers); observer.OnMouseExited(location, modifiers);
} }
void TrayIcon::NotifyMouseMoved(const gfx::Point& location, int modifiers) {
for (TrayIconObserver& observer : observers_)
observer.OnMouseMoved(location, modifiers);
}
void TrayIcon::NotifyDragEntered() { void TrayIcon::NotifyDragEntered() {
for (TrayIconObserver& observer : observers_) for (TrayIconObserver& observer : observers_)
observer.OnDragEntered(); observer.OnDragEntered();

View file

@ -70,7 +70,7 @@ class TrayIcon {
void AddObserver(TrayIconObserver* obs) { observers_.AddObserver(obs); } void AddObserver(TrayIconObserver* obs) { observers_.AddObserver(obs); }
void RemoveObserver(TrayIconObserver* obs) { observers_.RemoveObserver(obs); } void RemoveObserver(TrayIconObserver* obs) { observers_.RemoveObserver(obs); }
void NotifyClicked(const gfx::Rect& = gfx::Rect(), int modifiers = 0); void NotifyClicked(const gfx::Rect& = gfx::Rect(), const gfx::Point& location = gfx::Point(), int modifiers = 0);
void NotifyDoubleClicked(const gfx::Rect& = gfx::Rect(), int modifiers = 0); void NotifyDoubleClicked(const gfx::Rect& = gfx::Rect(), int modifiers = 0);
void NotifyBalloonShow(); void NotifyBalloonShow();
void NotifyBalloonClicked(); void NotifyBalloonClicked();
@ -87,6 +87,8 @@ class TrayIcon {
int modifiers = 0); int modifiers = 0);
void NotifyMouseExited(const gfx::Point& location = gfx::Point(), void NotifyMouseExited(const gfx::Point& location = gfx::Point(),
int modifiers = 0); int modifiers = 0);
void NotifyMouseMoved(const gfx::Point& location = gfx::Point(),
int modifiers = 0);
protected: protected:
TrayIcon(); TrayIcon();

View file

@ -57,10 +57,10 @@ const CGFloat kVerticalTitleMargin = 2;
// Finalize setup by sizing our views // Finalize setup by sizing our views
[self updateDimensions]; [self updateDimensions];
// Add NSTrackingArea for listening to mouseEnter and mouseExit events // Add NSTrackingArea for listening to mouseEnter, mouseExit, and mouseMove events
auto trackingArea = [[[NSTrackingArea alloc] auto trackingArea = [[[NSTrackingArea alloc]
initWithRect:[self bounds] initWithRect:[self bounds]
options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways options:NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveAlways
owner:self owner:self
userInfo:nil] autorelease]; userInfo:nil] autorelease];
[self addTrackingArea:trackingArea]; [self addTrackingArea:trackingArea];
@ -249,6 +249,7 @@ const CGFloat kVerticalTitleMargin = 2;
if (event.clickCount == 1) if (event.clickCount == 1)
trayIcon_->NotifyClicked( trayIcon_->NotifyClicked(
gfx::ScreenRectFromNSRect(event.window.frame), gfx::ScreenRectFromNSRect(event.window.frame),
gfx::ScreenPointFromNSPoint([event locationInWindow]),
ui::EventFlagsFromModifiers([event modifierFlags])); ui::EventFlagsFromModifiers([event modifierFlags]));
// Double click event. // Double click event.
@ -307,6 +308,12 @@ const CGFloat kVerticalTitleMargin = 2;
ui::EventFlagsFromModifiers([event modifierFlags])); ui::EventFlagsFromModifiers([event modifierFlags]));
} }
- (void)mouseMoved:(NSEvent*)event {
trayIcon_->NotifyMouseMoved(
gfx::ScreenPointFromNSPoint([event locationInWindow]),
ui::EventFlagsFromModifiers([event modifierFlags]));
}
- (void)draggingExited:(id <NSDraggingInfo>)sender { - (void)draggingExited:(id <NSDraggingInfo>)sender {
trayIcon_->NotifyDragExited(); trayIcon_->NotifyDragExited();
} }

View file

@ -17,7 +17,7 @@ namespace atom {
class TrayIconObserver { class TrayIconObserver {
public: public:
virtual void OnClicked(const gfx::Rect& bounds, int modifiers) {} virtual void OnClicked(const gfx::Rect& bounds, const gfx::Point& location, int modifiers) {}
virtual void OnDoubleClicked(const gfx::Rect& bounds, int modifiers) {} virtual void OnDoubleClicked(const gfx::Rect& bounds, int modifiers) {}
virtual void OnBalloonShow() {} virtual void OnBalloonShow() {}
virtual void OnBalloonClicked() {} virtual void OnBalloonClicked() {}
@ -31,6 +31,7 @@ class TrayIconObserver {
virtual void OnDragEnded() {} virtual void OnDragEnded() {}
virtual void OnMouseEntered(const gfx::Point& location, int modifiers) {} virtual void OnMouseEntered(const gfx::Point& location, int modifiers) {}
virtual void OnMouseExited(const gfx::Point& location, int modifiers) {} virtual void OnMouseExited(const gfx::Point& location, int modifiers) {}
virtual void OnMouseMoved(const gfx::Point& location, int modifiers) {}
protected: protected:
virtual ~TrayIconObserver() {} virtual ~TrayIconObserver() {}

View file

@ -76,6 +76,7 @@ The `Tray` module emits the following events:
* `ctrlKey` Boolean * `ctrlKey` Boolean
* `metaKey` Boolean * `metaKey` Boolean
* `bounds` [Rectangle](structures/rectangle.md) - The bounds of tray icon * `bounds` [Rectangle](structures/rectangle.md) - The bounds of tray icon
* `position` [Point](structures/point.md) - The position of the event
Emitted when the tray icon is clicked. Emitted when the tray icon is clicked.
@ -166,6 +167,17 @@ Emitted when the mouse enters the tray icon.
Emitted when the mouse exits the tray icon. Emitted when the mouse exits the tray icon.
#### Event: 'mouse-move' _macOS_
* `event` Event
* `altKey` Boolean
* `shiftKey` Boolean
* `ctrlKey` Boolean
* `metaKey` Boolean
* `position` [Point](structures/point.md) - The position of the event
Emitted when the mouse moves in the tray icon.
### Instance Methods ### Instance Methods
The `Tray` class has the following methods: The `Tray` class has the following methods: