Same as https://webrtc-codereview.appspot.com/19519004. The issue in http://chromegw.corp.google.com/i/internal.chromium.webrtc.fyi/builders/Linux... is solved by this change http://src.chromium.org/viewvc/chrome/trunk/src/third_party/libjingle/libjing... (tested locally). BUG=3380 R=andrew@webrtc.org Review URL: https://webrtc-codereview.appspot.com/17619005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@6218 4adac7df-926f-26a2-2b94-8c16560cd09d
146 lines
4.3 KiB
C++
146 lines
4.3 KiB
C++
/*
|
|
* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_DESKTOP_GEOMETRY_H_
|
|
#define WEBRTC_MODULES_DESKTOP_CAPTURE_DESKTOP_GEOMETRY_H_
|
|
|
|
#include "webrtc/base/constructormagic.h"
|
|
#include "webrtc/typedefs.h"
|
|
|
|
namespace webrtc {
|
|
|
|
// A vector in the 2D integer space. E.g. can be used to represent screen DPI.
|
|
class DesktopVector {
|
|
public:
|
|
DesktopVector() : x_(0), y_(0) {}
|
|
DesktopVector(int32_t x, int32_t y) : x_(x), y_(y) {}
|
|
|
|
int32_t x() const { return x_; }
|
|
int32_t y() const { return y_; }
|
|
bool is_zero() const { return x_ == 0 && y_ == 0; }
|
|
|
|
bool equals(const DesktopVector& other) const {
|
|
return x_ == other.x_ && y_ == other.y_;
|
|
}
|
|
|
|
void set(int32_t x, int32_t y) {
|
|
x_ = x;
|
|
y_ = y;
|
|
}
|
|
|
|
DesktopVector add(const DesktopVector& other) const {
|
|
return DesktopVector(x() + other.x(), y() + other.y());
|
|
}
|
|
DesktopVector subtract(const DesktopVector& other) const {
|
|
return DesktopVector(x() - other.x(), y() - other.y());
|
|
}
|
|
|
|
private:
|
|
int32_t x_;
|
|
int32_t y_;
|
|
};
|
|
|
|
// Type used to represent screen/window size.
|
|
class DesktopSize {
|
|
public:
|
|
DesktopSize() : width_(0), height_(0) {}
|
|
DesktopSize(int32_t width, int32_t height)
|
|
: width_(width), height_(height) {
|
|
}
|
|
|
|
int32_t width() const { return width_; }
|
|
int32_t height() const { return height_; }
|
|
|
|
bool is_empty() const { return width_ <= 0 || height_ <= 0; }
|
|
|
|
bool equals(const DesktopSize& other) const {
|
|
return width_ == other.width_ && height_ == other.height_;
|
|
}
|
|
|
|
void set(int32_t width, int32_t height) {
|
|
width_ = width;
|
|
height_ = height;
|
|
}
|
|
|
|
private:
|
|
int32_t width_;
|
|
int32_t height_;
|
|
};
|
|
|
|
// Represents a rectangle on the screen.
|
|
class DesktopRect {
|
|
public:
|
|
static DesktopRect MakeSize(const DesktopSize& size) {
|
|
return DesktopRect(0, 0, size.width(), size.height());
|
|
}
|
|
static DesktopRect MakeWH(int32_t width, int32_t height) {
|
|
return DesktopRect(0, 0, width, height);
|
|
}
|
|
static DesktopRect MakeXYWH(int32_t x, int32_t y,
|
|
int32_t width, int32_t height) {
|
|
return DesktopRect(x, y, x + width, y + height);
|
|
}
|
|
static DesktopRect MakeLTRB(int32_t left, int32_t top,
|
|
int32_t right, int32_t bottom) {
|
|
return DesktopRect(left, top, right, bottom);
|
|
}
|
|
static DesktopRect MakeOriginSize(const DesktopVector& origin,
|
|
const DesktopSize& size) {
|
|
return MakeXYWH(origin.x(), origin.y(), size.width(), size.height());
|
|
}
|
|
|
|
DesktopRect() : left_(0), top_(0), right_(0), bottom_(0) {}
|
|
|
|
int32_t left() const { return left_; }
|
|
int32_t top() const { return top_; }
|
|
int32_t right() const { return right_; }
|
|
int32_t bottom() const { return bottom_; }
|
|
int32_t width() const { return right_ - left_; }
|
|
int32_t height() const { return bottom_ - top_; }
|
|
|
|
DesktopVector top_left() const { return DesktopVector(left_, top_); }
|
|
DesktopSize size() const { return DesktopSize(width(), height()); }
|
|
|
|
bool is_empty() const { return left_ >= right_ || top_ >= bottom_; }
|
|
|
|
bool equals(const DesktopRect& other) const {
|
|
return left_ == other.left_ && top_ == other.top_ &&
|
|
right_ == other.right_ && bottom_ == other.bottom_;
|
|
}
|
|
|
|
// Returns true if |point| lies within the rectangle boundaries.
|
|
bool Contains(const DesktopVector& point) const;
|
|
|
|
// Returns true if |rect| lies within the boundaries of this rectangle.
|
|
bool ContainsRect(const DesktopRect& rect) const;
|
|
|
|
// Finds intersection with |rect|.
|
|
void IntersectWith(const DesktopRect& rect);
|
|
|
|
// Adds (dx, dy) to the position of the rectangle.
|
|
void Translate(int32_t dx, int32_t dy);
|
|
void Translate(DesktopVector d) { Translate(d.x(), d.y()); };
|
|
|
|
private:
|
|
DesktopRect(int32_t left, int32_t top, int32_t right, int32_t bottom)
|
|
: left_(left), top_(top), right_(right), bottom_(bottom) {
|
|
}
|
|
|
|
int32_t left_;
|
|
int32_t top_;
|
|
int32_t right_;
|
|
int32_t bottom_;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_MODULES_DESKTOP_CAPTURE_DESKTOP_GEOMETRY_H_
|
|
|