MD Downloads: prevent search text from overlapping with the cancel search (X)
[chromium-blink-merge.git] / remoting / protocol / mouse_input_filter.cc
blobf3943416a07f8cc818297bfab93e0a5abf93c911
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "remoting/protocol/mouse_input_filter.h"
7 #include "remoting/proto/event.pb.h"
9 namespace remoting {
10 namespace protocol {
12 MouseInputFilter::MouseInputFilter() {
15 MouseInputFilter::MouseInputFilter(InputStub* input_stub)
16 : InputFilter(input_stub) {
19 MouseInputFilter::~MouseInputFilter() {
22 void MouseInputFilter::InjectMouseEvent(const MouseEvent& event) {
23 if (input_max_.is_empty() || output_max_.is_empty())
24 return;
26 // We scale based on the maximum input & output coordinates, rather than the
27 // input and output sizes, so that it's possible to reach the edge of the
28 // output when up-scaling. We also take care to round up or down correctly,
29 // which is important when down-scaling.
30 MouseEvent out_event(event);
31 if (out_event.has_x()) {
32 int x = out_event.x() * output_max_.width();
33 x = (x + input_max_.width() / 2) / input_max_.width();
34 out_event.set_x(std::max(0, std::min(output_max_.width(), x)));
36 if (out_event.has_y()) {
37 int y = out_event.y() * output_max_.height();
38 y = (y + input_max_.height() / 2) / input_max_.height();
39 out_event.set_y(std::max(0, std::min(output_max_.height(), y)));
42 InputFilter::InjectMouseEvent(out_event);
45 void MouseInputFilter::set_input_size(const webrtc::DesktopSize& size) {
46 input_max_.set(size.width() - 1, size.height() - 1);
49 void MouseInputFilter::set_output_size(const webrtc::DesktopSize& size) {
50 output_max_.set(size.width() - 1, size.height() - 1);
53 } // namespace protocol
54 } // namespace remoting