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"
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())
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