blob: d83373bd6e35e879f481896ca837a8730202612e [file] [log] [blame]
/*
* Copyright 2016 The Fuchsia Authors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "FuchsiaCursor.h"
#include "FuchsiaInputHandler.h"
namespace Fuchsia {
using namespace std;
Cursor::Cursor()
: Cursor(1024, 768)
{
}
Cursor::Cursor(int maxX, int maxY)
: fMaxX(maxX)
, fMaxY(maxY)
, fX(0)
, fY(0)
, fButtons(0)
{
}
Cursor::ButtonActions Cursor::handleEvent(const MouseEvent& evt)
{
ButtonActions actions;
fX += evt.fDeltaX;
fX = std::max(fX, 0);
fX = std::min(fX, fMaxX);
fY += evt.fDeltaY;
fY = std::max(fY, 0);
fY = std::min(fY, fMaxY);
bitset<8> newButtons(evt.fButtons);
for (int i = 0; i < kBitCount; ++i) {
if (newButtons[i] != fButtons[i]) {
if (newButtons[i]) {
actions[i] = ButtonAction::kDown;
} else {
actions[i] = ButtonAction::kUp;
}
} else {
actions[i] = ButtonAction::kNoChange;
}
}
fButtons = newButtons;
return actions;
}
}