Enable eraser support for Wacom tablets on Skia/Win back-end

Related to #610
This commit is contained in:
David Capello 2016-04-20 22:33:10 -03:00
parent 47708a6826
commit a58cbfbc1c
12 changed files with 170 additions and 41 deletions

View File

@ -113,6 +113,7 @@ protected:
if (lmb->isPressed(msg) || rmb->isPressed(msg)) { if (lmb->isPressed(msg) || rmb->isPressed(msg)) {
MouseMessage mouseMsg( MouseMessage mouseMsg(
(msg->type() == kKeyDownMessage ? kMouseDownMessage: kMouseUpMessage), (msg->type() == kKeyDownMessage ? kMouseDownMessage: kMouseUpMessage),
PointerType::Unknown,
(lmb->isPressed(msg) ? kButtonLeft: kButtonRight), (lmb->isPressed(msg) ? kButtonLeft: kButtonRight),
msg->modifiers(), msg->modifiers(),
ui::get_mouse_position()); ui::get_mouse_position());

View File

@ -164,6 +164,7 @@ Editor::Editor(Document* document, EditorFlags flags)
, m_antsOffset(0) , m_antsOffset(0)
, m_customizationDelegate(NULL) , m_customizationDelegate(NULL)
, m_docView(NULL) , m_docView(NULL)
, m_lastPointerType(ui::PointerType::Unknown)
, m_flags(flags) , m_flags(flags)
, m_secondaryButton(false) , m_secondaryButton(false)
, m_aniSpeed(1.0) , m_aniSpeed(1.0)
@ -919,6 +920,12 @@ tools::Tool* Editor::getCurrentEditorTool()
if (m_quicktool) if (m_quicktool)
return m_quicktool; return m_quicktool;
// Eraser tip
if (m_lastPointerType == ui::PointerType::Eraser) {
tools::ToolBox* toolbox = App::instance()->getToolBox();
return toolbox->getToolById(tools::WellKnownTools::Eraser);
}
tools::Tool* tool = App::instance()->activeTool(); tools::Tool* tool = App::instance()->activeTool();
if (m_secondaryButton && if (m_secondaryButton &&
@ -1277,6 +1284,8 @@ bool Editor::onProcessMessage(Message* msg)
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg); MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
m_oldPos = mouseMsg->position(); m_oldPos = mouseMsg->position();
m_lastPointerType = mouseMsg->pointerType();
if (!m_secondaryButton && mouseMsg->right()) { if (!m_secondaryButton && mouseMsg->right()) {
m_secondaryButton = mouseMsg->right(); m_secondaryButton = mouseMsg->right();
@ -1293,6 +1302,9 @@ bool Editor::onProcessMessage(Message* msg)
case kMouseMoveMessage: case kMouseMoveMessage:
if (m_sprite) { if (m_sprite) {
EditorStatePtr holdState(m_state); EditorStatePtr holdState(m_state);
m_lastPointerType = static_cast<MouseMessage*>(msg)->pointerType();
return m_state->onMouseMove(this, static_cast<MouseMessage*>(msg)); return m_state->onMouseMove(this, static_cast<MouseMessage*>(msg));
} }
break; break;
@ -1303,6 +1315,8 @@ bool Editor::onProcessMessage(Message* msg)
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg); MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
bool result = m_state->onMouseUp(this, mouseMsg); bool result = m_state->onMouseUp(this, mouseMsg);
m_lastPointerType = mouseMsg->pointerType();
if (!hasCapture()) { if (!hasCapture()) {
m_secondaryButton = false; m_secondaryButton = false;
@ -1320,6 +1334,9 @@ bool Editor::onProcessMessage(Message* msg)
if (m_sprite) { if (m_sprite) {
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg); MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
EditorStatePtr holdState(m_state); EditorStatePtr holdState(m_state);
m_lastPointerType = mouseMsg->pointerType();
bool used = m_state->onDoubleClick(this, mouseMsg); bool used = m_state->onDoubleClick(this, mouseMsg);
if (used) if (used)
return true; return true;

View File

@ -28,6 +28,7 @@
#include "render/zoom.h" #include "render/zoom.h"
#include "ui/base.h" #include "ui/base.h"
#include "ui/cursor_type.h" #include "ui/cursor_type.h"
#include "ui/pointer_type.h"
#include "ui/timer.h" #include "ui/timer.h"
#include "ui/widget.h" #include "ui/widget.h"
@ -324,6 +325,7 @@ namespace app {
DocumentView* m_docView; DocumentView* m_docView;
gfx::Point m_oldPos; gfx::Point m_oldPos;
ui::PointerType m_lastPointerType;
EditorFlags m_flags; EditorFlags m_flags;

View File

@ -1,5 +1,5 @@
// Aseprite // Aseprite
// Copyright (C) 2001-2015 David Capello // Copyright (C) 2001-2016 David Capello
// //
// This program is free software; you can redistribute it and/or modify // This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as // it under the terms of the GNU General Public License version 2 as
@ -221,6 +221,7 @@ bool ToolBar::onProcessMessage(Message* msg)
MouseMessage* mouseMsg2 = new MouseMessage( MouseMessage* mouseMsg2 = new MouseMessage(
kMouseDownMessage, kMouseDownMessage,
mouseMsg->pointerType(),
mouseMsg->buttons(), mouseMsg->buttons(),
mouseMsg->modifiers(), mouseMsg->modifiers(),
mouseMsg->position()); mouseMsg->position());
@ -635,6 +636,7 @@ bool ToolBar::ToolStrip::onProcessMessage(Message* msg)
MouseMessage* mouseMsg2 = new MouseMessage( MouseMessage* mouseMsg2 = new MouseMessage(
kMouseDownMessage, kMouseDownMessage,
mouseMsg->pointerType(),
mouseMsg->buttons(), mouseMsg->buttons(),
mouseMsg->modifiers(), mouseMsg->modifiers(),
mouseMsg->position()); mouseMsg->position());

View File

@ -1,5 +1,5 @@
// Aseprite UI Library // Aseprite UI Library
// Copyright (C) 2001-2013, 2015 David Capello // Copyright (C) 2001-2016 David Capello
// //
// This file is released under the terms of the MIT license. // This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information. // Read LICENSE.txt for more information.
@ -481,6 +481,7 @@ bool ComboBoxEntry::onProcessMessage(Message* msg)
releaseMouse(); releaseMouse();
MouseMessage mouseMsg2(kMouseDownMessage, MouseMessage mouseMsg2(kMouseDownMessage,
mouseMsg->pointerType(),
mouseMsg->buttons(), mouseMsg->buttons(),
mouseMsg->modifiers(), mouseMsg->modifiers(),
mouseMsg->position()); mouseMsg->position());

View File

@ -1,5 +1,5 @@
// Aseprite UI Library // Aseprite UI Library
// Copyright (C) 2001-2013, 2015 David Capello // Copyright (C) 2001-2016 David Capello
// //
// This file is released under the terms of the MIT license. // This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information. // Read LICENSE.txt for more information.
@ -90,6 +90,7 @@ bool IntEntry::onProcessMessage(Message* msg)
releaseMouse(); releaseMouse();
MouseMessage mouseMsg2(kMouseDownMessage, MouseMessage mouseMsg2(kMouseDownMessage,
mouseMsg->pointerType(),
mouseMsg->buttons(), mouseMsg->buttons(),
mouseMsg->modifiers(), mouseMsg->modifiers(),
mouseMsg->position()); mouseMsg->position());

View File

@ -247,7 +247,8 @@ bool Manager::generateMessages()
} }
void Manager::generateSetCursorMessage(const gfx::Point& mousePos, void Manager::generateSetCursorMessage(const gfx::Point& mousePos,
KeyModifiers modifiers) KeyModifiers modifiers,
PointerType pointerType)
{ {
if (get_mouse_cursor() == kOutsideDisplay) if (get_mouse_cursor() == kOutsideDisplay)
return; return;
@ -257,7 +258,9 @@ void Manager::generateSetCursorMessage(const gfx::Point& mousePos,
enqueueMessage( enqueueMessage(
newMouseMessage( newMouseMessage(
kSetCursorMessage, dst, kSetCursorMessage, dst,
mousePos, _internal_get_mouse_buttons(), mousePos,
pointerType,
_internal_get_mouse_buttons(),
modifiers)); modifiers));
else else
set_mouse_cursor(kArrowCursor); set_mouse_cursor(kArrowCursor);
@ -273,6 +276,18 @@ static MouseButtons mouse_buttons_from_she_to_ui(const she::Event& sheEvent)
} }
} }
static PointerType pointer_type_from_she_event(const she::Event& sheEvent)
{
switch (sheEvent.device()) {
case she::Event::MouseDevice: return PointerType::Mouse; break;
case she::Event::MultitouchDevice: return PointerType::Multitouch; break;
case she::Event::StylusDevice: return PointerType::Pen; break;
case she::Event::EraserDevice: return PointerType::Eraser; break;
default:
return PointerType::Unknown;
}
}
void Manager::generateMessagesFromSheEvents() void Manager::generateMessagesFromSheEvents()
{ {
she::Event lastMouseMoveEvent; she::Event lastMouseMoveEvent;
@ -346,8 +361,11 @@ void Manager::generateMessagesFromSheEvents()
case she::Event::MouseMove: { case she::Event::MouseMove: {
_internal_set_mouse_position(sheEvent.position()); _internal_set_mouse_position(sheEvent.position());
handleMouseMove(sheEvent.position(), m_mouseButtons, handleMouseMove(
sheEvent.modifiers()); sheEvent.position(),
m_mouseButtons,
sheEvent.modifiers(),
pointer_type_from_she_event(sheEvent));
lastMouseMoveEvent = sheEvent; lastMouseMoveEvent = sheEvent;
break; break;
} }
@ -357,8 +375,11 @@ void Manager::generateMessagesFromSheEvents()
m_mouseButtons = (MouseButtons)((int)m_mouseButtons | (int)pressedButton); m_mouseButtons = (MouseButtons)((int)m_mouseButtons | (int)pressedButton);
_internal_set_mouse_buttons(m_mouseButtons); _internal_set_mouse_buttons(m_mouseButtons);
handleMouseDown(sheEvent.position(), pressedButton, handleMouseDown(
sheEvent.modifiers()); sheEvent.position(),
pressedButton,
sheEvent.modifiers(),
pointer_type_from_she_event(sheEvent));
break; break;
} }
@ -367,21 +388,28 @@ void Manager::generateMessagesFromSheEvents()
m_mouseButtons = (MouseButtons)((int)m_mouseButtons & ~(int)releasedButton); m_mouseButtons = (MouseButtons)((int)m_mouseButtons & ~(int)releasedButton);
_internal_set_mouse_buttons(m_mouseButtons); _internal_set_mouse_buttons(m_mouseButtons);
handleMouseUp(sheEvent.position(), releasedButton, handleMouseUp(
sheEvent.modifiers()); sheEvent.position(),
releasedButton,
sheEvent.modifiers(),
pointer_type_from_she_event(sheEvent));
break; break;
} }
case she::Event::MouseDoubleClick: { case she::Event::MouseDoubleClick: {
MouseButtons clickedButton = mouse_buttons_from_she_to_ui(sheEvent); MouseButtons clickedButton = mouse_buttons_from_she_to_ui(sheEvent);
handleMouseDoubleClick(sheEvent.position(), clickedButton, handleMouseDoubleClick(
sheEvent.modifiers()); sheEvent.position(),
clickedButton,
sheEvent.modifiers(),
pointer_type_from_she_event(sheEvent));
break; break;
} }
case she::Event::MouseWheel: { case she::Event::MouseWheel: {
handleMouseWheel(sheEvent.position(), m_mouseButtons, handleMouseWheel(sheEvent.position(), m_mouseButtons,
sheEvent.modifiers(), sheEvent.modifiers(),
pointer_type_from_she_event(sheEvent),
sheEvent.wheelDelta(), sheEvent.wheelDelta(),
sheEvent.preciseWheel()); sheEvent.preciseWheel());
break; break;
@ -403,13 +431,15 @@ void Manager::generateMessagesFromSheEvents()
if (lastMouseMoveEvent.type() != she::Event::None) { if (lastMouseMoveEvent.type() != she::Event::None) {
sheEvent = lastMouseMoveEvent; sheEvent = lastMouseMoveEvent;
generateSetCursorMessage(sheEvent.position(), generateSetCursorMessage(sheEvent.position(),
sheEvent.modifiers()); sheEvent.modifiers(),
pointer_type_from_she_event(sheEvent));
} }
} }
void Manager::handleMouseMove(const gfx::Point& mousePos, void Manager::handleMouseMove(const gfx::Point& mousePos,
MouseButtons mouseButtons, MouseButtons mouseButtons,
KeyModifiers modifiers) KeyModifiers modifiers,
PointerType pointerType)
{ {
// Get the list of widgets to send mouse messages. // Get the list of widgets to send mouse messages.
mouse_widgets_list.clear(); mouse_widgets_list.clear();
@ -436,12 +466,16 @@ void Manager::handleMouseMove(const gfx::Point& mousePos,
enqueueMessage( enqueueMessage(
newMouseMessage( newMouseMessage(
kMouseMoveMessage, dst, kMouseMoveMessage, dst,
mousePos, mouseButtons, modifiers)); mousePos,
pointerType,
mouseButtons,
modifiers));
} }
void Manager::handleMouseDown(const gfx::Point& mousePos, void Manager::handleMouseDown(const gfx::Point& mousePos,
MouseButtons mouseButtons, MouseButtons mouseButtons,
KeyModifiers modifiers) KeyModifiers modifiers,
PointerType pointerType)
{ {
handleWindowZOrder(); handleWindowZOrder();
@ -449,41 +483,53 @@ void Manager::handleMouseDown(const gfx::Point& mousePos,
newMouseMessage( newMouseMessage(
kMouseDownMessage, kMouseDownMessage,
(capture_widget ? capture_widget: mouse_widget), (capture_widget ? capture_widget: mouse_widget),
mousePos, mouseButtons, modifiers)); mousePos,
pointerType,
mouseButtons,
modifiers));
} }
void Manager::handleMouseUp(const gfx::Point& mousePos, void Manager::handleMouseUp(const gfx::Point& mousePos,
MouseButtons mouseButtons, MouseButtons mouseButtons,
KeyModifiers modifiers) KeyModifiers modifiers,
PointerType pointerType)
{ {
enqueueMessage( enqueueMessage(
newMouseMessage( newMouseMessage(
kMouseUpMessage, kMouseUpMessage,
(capture_widget ? capture_widget: mouse_widget), (capture_widget ? capture_widget: mouse_widget),
mousePos, mouseButtons, modifiers)); mousePos,
pointerType,
mouseButtons,
modifiers));
} }
void Manager::handleMouseDoubleClick(const gfx::Point& mousePos, void Manager::handleMouseDoubleClick(const gfx::Point& mousePos,
MouseButtons mouseButtons, MouseButtons mouseButtons,
KeyModifiers modifiers) KeyModifiers modifiers,
PointerType pointerType)
{ {
Widget* dst = (capture_widget ? capture_widget: mouse_widget); Widget* dst = (capture_widget ? capture_widget: mouse_widget);
if (dst) { if (dst) {
enqueueMessage( enqueueMessage(
newMouseMessage( newMouseMessage(
kDoubleClickMessage, kDoubleClickMessage,
dst, mousePos, mouseButtons, modifiers)); dst, mousePos, pointerType,
mouseButtons, modifiers));
} }
} }
void Manager::handleMouseWheel(const gfx::Point& mousePos, void Manager::handleMouseWheel(const gfx::Point& mousePos,
MouseButtons mouseButtons, KeyModifiers modifiers, MouseButtons mouseButtons,
const gfx::Point& wheelDelta, bool preciseWheel) KeyModifiers modifiers,
PointerType pointerType,
const gfx::Point& wheelDelta,
bool preciseWheel)
{ {
enqueueMessage(newMouseMessage( enqueueMessage(newMouseMessage(
kMouseWheelMessage, kMouseWheelMessage,
(capture_widget ? capture_widget: mouse_widget), (capture_widget ? capture_widget: mouse_widget),
mousePos, mouseButtons, modifiers, mousePos, pointerType, mouseButtons, modifiers,
wheelDelta, preciseWheel)); wheelDelta, preciseWheel));
} }
@ -776,7 +822,9 @@ void Manager::setMouse(Widget* widget)
Message* msg = newMouseMessage( Message* msg = newMouseMessage(
kMouseEnterMessage, NULL, kMouseEnterMessage, NULL,
get_mouse_position(), _internal_get_mouse_buttons(), get_mouse_position(),
PointerType::Unknown,
_internal_get_mouse_buttons(),
kKeyUninitializedModifier); kKeyUninitializedModifier);
for (; it != widget_parents.end(); ++it) { for (; it != widget_parents.end(); ++it) {
@ -786,7 +834,8 @@ void Manager::setMouse(Widget* widget)
enqueueMessage(msg); enqueueMessage(msg);
generateSetCursorMessage(get_mouse_position(), generateSetCursorMessage(get_mouse_position(),
kKeyUninitializedModifier); kKeyUninitializedModifier,
PointerType::Unknown);
} }
} }
} }
@ -1419,12 +1468,16 @@ Widget* Manager::findMagneticWidget(Widget* widget)
// static // static
Message* Manager::newMouseMessage( Message* Manager::newMouseMessage(
MessageType type, MessageType type,
Widget* widget, const gfx::Point& mousePos, Widget* widget,
MouseButtons buttons, KeyModifiers modifiers, const gfx::Point& mousePos,
const gfx::Point& wheelDelta, bool preciseWheel) PointerType pointerType,
MouseButtons buttons,
KeyModifiers modifiers,
const gfx::Point& wheelDelta,
bool preciseWheel)
{ {
Message* msg = new MouseMessage( Message* msg = new MouseMessage(
type, buttons, modifiers, mousePos, type, pointerType, buttons, modifiers, mousePos,
wheelDelta, preciseWheel); wheelDelta, preciseWheel);
if (widget != NULL) if (widget != NULL)

View File

@ -12,6 +12,7 @@
#include "ui/keys.h" #include "ui/keys.h"
#include "ui/message_type.h" #include "ui/message_type.h"
#include "ui/mouse_buttons.h" #include "ui/mouse_buttons.h"
#include "ui/pointer_type.h"
#include "ui/widget.h" #include "ui/widget.h"
namespace she { namespace she {
@ -115,14 +116,32 @@ namespace ui {
virtual void onNewDisplayConfiguration(); virtual void onNewDisplayConfiguration();
private: private:
void generateSetCursorMessage(const gfx::Point& mousePos, KeyModifiers modifiers); void generateSetCursorMessage(const gfx::Point& mousePos,
KeyModifiers modifiers,
PointerType pointerType);
void generateMessagesFromSheEvents(); void generateMessagesFromSheEvents();
void handleMouseMove(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers); void handleMouseMove(const gfx::Point& mousePos,
void handleMouseDown(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers); MouseButtons mouseButtons,
void handleMouseUp(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers); KeyModifiers modifiers,
void handleMouseDoubleClick(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers); PointerType pointerType);
void handleMouseWheel(const gfx::Point& mousePos, MouseButtons mouseButtons, KeyModifiers modifiers, void handleMouseDown(const gfx::Point& mousePos,
const gfx::Point& wheelDelta, bool preciseWheel); MouseButtons mouseButtons,
KeyModifiers modifiers,
PointerType pointerType);
void handleMouseUp(const gfx::Point& mousePos,
MouseButtons mouseButtons,
KeyModifiers modifiers,
PointerType pointerType);
void handleMouseDoubleClick(const gfx::Point& mousePos,
MouseButtons mouseButtons,
KeyModifiers modifiers,
PointerType pointerType);
void handleMouseWheel(const gfx::Point& mousePos,
MouseButtons mouseButtons,
KeyModifiers modifiers,
PointerType pointerType,
const gfx::Point& wheelDelta,
bool preciseWheel);
void handleTouchMagnify(const gfx::Point& mousePos, void handleTouchMagnify(const gfx::Point& mousePos,
const KeyModifiers modifiers, const KeyModifiers modifiers,
const double magnification); const double magnification);
@ -135,7 +154,9 @@ namespace ui {
static Message* newMouseMessage( static Message* newMouseMessage(
MessageType type, MessageType type,
Widget* widget, const gfx::Point& mousePos, Widget* widget, const gfx::Point& mousePos,
MouseButtons buttons, KeyModifiers modifiers, PointerType pointerType,
MouseButtons buttons,
KeyModifiers modifiers,
const gfx::Point& wheelDelta = gfx::Point(0, 0), const gfx::Point& wheelDelta = gfx::Point(0, 0),
bool preciseWheel = false); bool preciseWheel = false);
void broadcastKeyMsg(Message* msg); void broadcastKeyMsg(Message* msg);

View File

@ -14,6 +14,7 @@
#include "ui/keys.h" #include "ui/keys.h"
#include "ui/message_type.h" #include "ui/message_type.h"
#include "ui/mouse_buttons.h" #include "ui/mouse_buttons.h"
#include "ui/pointer_type.h"
#include "ui/widgets_list.h" #include "ui/widgets_list.h"
#include <string> #include <string>
@ -103,18 +104,21 @@ namespace ui {
class MouseMessage : public Message { class MouseMessage : public Message {
public: public:
MouseMessage(MessageType type, MouseMessage(MessageType type,
PointerType pointerType,
MouseButtons buttons, MouseButtons buttons,
KeyModifiers modifiers, KeyModifiers modifiers,
const gfx::Point& pos, const gfx::Point& pos,
const gfx::Point& wheelDelta = gfx::Point(0, 0), const gfx::Point& wheelDelta = gfx::Point(0, 0),
bool preciseWheel = false) bool preciseWheel = false)
: Message(type, modifiers), : Message(type, modifiers),
m_pointerType(pointerType),
m_buttons(buttons), m_buttons(buttons),
m_pos(pos), m_pos(pos),
m_wheelDelta(wheelDelta), m_wheelDelta(wheelDelta),
m_preciseWheel(preciseWheel) { m_preciseWheel(preciseWheel) {
} }
PointerType pointerType() const { return m_pointerType; }
MouseButtons buttons() const { return m_buttons; } MouseButtons buttons() const { return m_buttons; }
bool left() const { return (m_buttons & kButtonLeft) == kButtonLeft; } bool left() const { return (m_buttons & kButtonLeft) == kButtonLeft; }
bool right() const { return (m_buttons & kButtonRight) == kButtonRight; } bool right() const { return (m_buttons & kButtonRight) == kButtonRight; }
@ -125,6 +129,7 @@ namespace ui {
const gfx::Point& position() const { return m_pos; } const gfx::Point& position() const { return m_pos; }
private: private:
PointerType m_pointerType;
MouseButtons m_buttons; // Pressed buttons MouseButtons m_buttons; // Pressed buttons
gfx::Point m_pos; // Mouse position gfx::Point m_pos; // Mouse position
gfx::Point m_wheelDelta; // Wheel axis variation gfx::Point m_wheelDelta; // Wheel axis variation

23
src/ui/pointer_type.h Normal file
View File

@ -0,0 +1,23 @@
// Aseprite UI Library
// Copyright (C) 2016 David Capello
//
// This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information.
#ifndef UI_POINTER_TYPE_H_INCLUDED
#define UI_POINTER_TYPE_H_INCLUDED
#pragma once
namespace ui {
enum class PointerType {
Unknown,
Mouse,
Multitouch,
Pen,
Eraser
};
} // namespace ui
#endif

View File

@ -1,5 +1,5 @@
// Aseprite UI Library // Aseprite UI Library
// Copyright (C) 2001-2013, 2015 David Capello // Copyright (C) 2001-2016 David Capello
// //
// This file is released under the terms of the MIT license. // This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information. // Read LICENSE.txt for more information.
@ -43,14 +43,15 @@
#include "ui/overlay_manager.h" #include "ui/overlay_manager.h"
#include "ui/paint_event.h" #include "ui/paint_event.h"
#include "ui/panel.h" #include "ui/panel.h"
#include "ui/pointer_type.h"
#include "ui/popup_window.h" #include "ui/popup_window.h"
#include "ui/size_hint_event.h"
#include "ui/property.h" #include "ui/property.h"
#include "ui/register_message.h" #include "ui/register_message.h"
#include "ui/resize_event.h" #include "ui/resize_event.h"
#include "ui/save_layout_event.h" #include "ui/save_layout_event.h"
#include "ui/scroll_bar.h" #include "ui/scroll_bar.h"
#include "ui/separator.h" #include "ui/separator.h"
#include "ui/size_hint_event.h"
#include "ui/slider.h" #include "ui/slider.h"
#include "ui/splitter.h" #include "ui/splitter.h"
#include "ui/system.h" #include "ui/system.h"

View File

@ -1242,6 +1242,7 @@ bool Widget::offerCapture(ui::MouseMessage* mouseMsg, int widget_type)
MouseMessage* mouseMsg2 = new MouseMessage( MouseMessage* mouseMsg2 = new MouseMessage(
kMouseDownMessage, kMouseDownMessage,
mouseMsg->pointerType(),
mouseMsg->buttons(), mouseMsg->buttons(),
mouseMsg->modifiers(), mouseMsg->modifiers(),
mouseMsg->position()); mouseMsg->position());
@ -1328,6 +1329,7 @@ bool Widget::onProcessMessage(Message* msg)
if (kMouseDownMessage) { if (kMouseDownMessage) {
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg); MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
MouseMessage mouseMsg2(kMouseDownMessage, MouseMessage mouseMsg2(kMouseDownMessage,
mouseMsg->pointerType(),
mouseMsg->buttons(), mouseMsg->buttons(),
mouseMsg->modifiers(), mouseMsg->modifiers(),
mouseMsg->position(), mouseMsg->position(),