Home | History | Annotate | Download | only in protocol
      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.
      4 
      5 #include "remoting/protocol/mouse_input_filter.h"
      6 
      7 #include "remoting/proto/event.pb.h"
      8 
      9 namespace remoting {
     10 namespace protocol {
     11 
     12 MouseInputFilter::MouseInputFilter() {
     13 }
     14 
     15 MouseInputFilter::MouseInputFilter(InputStub* input_stub)
     16     : InputFilter(input_stub) {
     17 }
     18 
     19 MouseInputFilter::~MouseInputFilter() {
     20 }
     21 
     22 void MouseInputFilter::InjectMouseEvent(const MouseEvent& event) {
     23   if (input_max_.is_empty() || output_max_.is_empty())
     24     return;
     25 
     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)));
     35   }
     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)));
     40   }
     41 
     42   InputFilter::InjectMouseEvent(out_event);
     43 }
     44 
     45 void MouseInputFilter::set_input_size(const webrtc::DesktopSize& size) {
     46   input_max_.set(size.width() - 1, size.height() - 1);
     47 }
     48 
     49 void MouseInputFilter::set_output_size(const webrtc::DesktopSize& size) {
     50   output_max_.set(size.width() - 1, size.height() - 1);
     51 }
     52 
     53 }  // namespace protocol
     54 }  // namespace remoting
     55