blob: af879f8de5cebd4012baa23108ad2d579312f490 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_UI_LIB_INPUT_READER_TOUCHPAD_H_
#define SRC_UI_LIB_INPUT_READER_TOUCHPAD_H_
#include <cstddef>
#include <hid-parser/parser.h>
#include "src/ui/lib/input_reader/device.h"
#include "src/ui/lib/input_reader/touch.h"
namespace ui_input {
// This represents a HID touchpad device. It currently converts Touch
// information into a Mouse InputReport.
class Touchpad : public Device {
public:
// |Device|
bool ParseReportDescriptor(const hid::ReportDescriptor& report_descriptor,
Device::Descriptor* device_descriptor) override;
// |Device|
bool ParseReport(const uint8_t* data, size_t len,
fuchsia::ui::input::InputReport* report) override;
// |Device|
uint8_t ReportId() const override { return touch_.ReportId(); }
private:
bool ParseTouchpadReport(const Touch::Report& touchpad, fuchsia::ui::input::InputReport* report);
Touch touch_ = {};
// These variables do conversion from touchpad information
// into mouse information. All information is from the previous seen report,
// which enables us to do relative deltas and finger tracking.
// True if any fingers are pressed on the touchpad.
bool has_touch_ = false;
// True if the tracking finger is no longer pressed, but other fingers are
// still pressed.
bool tracking_finger_was_lifted_ = false;
// Used to keep track of which finger is controlling the mouse on a touchpad
uint32_t tracking_finger_id_ = 0;
// Used for converting absolute coords from touchpad into relative deltas
int32_t mouse_abs_x_ = -1;
int32_t mouse_abs_y_ = -1;
};
} // namespace ui_input
#endif // SRC_UI_LIB_INPUT_READER_TOUCHPAD_H_