⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfbregion_x11.cxx

📁 realvnc是一个非常流行的远程控制程序
💻 CXX
字号:
//  Copyright (C) 2002-2003 RealVNC Ltd. All Rights Reserved.////  This program is free software; you can redistribute it and/or modify//  it under the terms of the GNU General Public License as published by//  the Free Software Foundation; either version 2 of the License, or//  (at your option) any later version.////  This program is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU General Public License for more details.////  You should have received a copy of the GNU General Public License//  along with this program; if not, write to the Free Software//  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,//  USA.//// If the source code for the program is not available from the place from// which you received this file, check http://www.realvnc.com/ or contact// the authors on info@realvnc.com for information on obtaining it.// Cross-platform Region class based on the X11 region implementation#include "stdhdrs.h"#include "rfbRegion_X11.h"#include <Xregion/region.h>#include <assert.h>using namespace rfb;class _RectRegion {public:  _RectRegion() {    region.rects = 0;    region.numRects = 0;    region.size = 0;  }  _RectRegion(const Rect& r) {    region.rects = &region.extents;    region.numRects = 1;    region.extents.x1 = r.tl.x;    region.extents.y1 = r.tl.y;    region.extents.x2 = r.br.x;    region.extents.y2 = r.br.y;    region.size = 1;    if (r.is_empty())      region.numRects = 0;  }  REGION region;};Region::Region() {  Xrgn = XCreateRegion();  assert(Xrgn);}Region::Region(int x1, int y1, int x2, int y2) {  Xrgn = XCreateRegion();  assert(Xrgn);  reset(Rect(x1, y1, x2, y2));}Region::Region(const Rect& r) {  Xrgn = XCreateRegion();  assert(Xrgn);  reset(r);}Region::Region(const Region& r) {  _RectRegion tmp;  Xrgn = XCreateRegion();  assert(Xrgn);  XUnionRegion(&tmp.region, r.Xrgn, Xrgn);}Region::~Region() {  XDestroyRegion(Xrgn);}rfb::Region& Region::operator=(const Region& r) {  _RectRegion tmp;  clear();  XUnionRegion(&tmp.region, r.Xrgn, Xrgn);  return *this;}void Region::clear() {  EMPTY_REGION(Xrgn);}void Region::reset(const Rect& r) {  clear();  XRectangle xrect;  xrect.x = r.tl.x;  xrect.y = r.tl.y;  xrect.width = r.width();  xrect.height = r.height();  XUnionRectWithRegion(&xrect, Xrgn, Xrgn);}void Region::translate(const Point& delta) {  XOffsetRegion(Xrgn, delta.x, delta.y);}void Region::setOrderedRects(const std::vector<Rect>& rects) {  std::vector<Rect>::const_iterator i;  for (i=rects.begin(); i != rects.end(); i++) {    _RectRegion rr(*i);    XUnionRegion(&rr.region, Xrgn, Xrgn);  }}void Region::assign_intersect(const Region& r) {  XIntersectRegion(r.Xrgn, Xrgn, Xrgn);}void Region::assign_union(const Region& r) {  XUnionRegion(r.Xrgn, Xrgn, Xrgn);}void Region::assign_subtract(const Region& r) {  XSubtractRegion(Xrgn, r.Xrgn, Xrgn);}rfb::Region Region::intersect(const Region& r) const {  Region t = *this;  t.assign_intersect(r);  return t;}rfb::Region Region::union_(const Region& r) const {  Region t = *this;  t.assign_union(r);  return t;}rfb::Region Region::subtract(const Region& r) const {  Region t = *this;  t.assign_subtract(r);  return t;}bool Region::equals(const Region& b) const {  return XEqualRegion(Xrgn, b.Xrgn);}bool Region::is_empty() const {  return XEmptyRegion(Xrgn);}bool Region::get_rects(std::vector<Rect>& rects,                       bool left2right,                       bool topdown) const {  BOX* Xrects = Xrgn->rects;  int nRects = Xrgn->numRects;  int xInc = left2right ? 1 : -1;  int yInc = topdown ? 1 : -1;  int i = topdown ? 0 : nRects-1;  while (nRects > 0) {    int firstInNextBand = i;    int nRectsInBand = 0;    while (nRects > 0 && Xrects[firstInNextBand].y1 == Xrects[i].y1) {      firstInNextBand += yInc;      nRects--;      nRectsInBand++;    }    if (xInc != yInc)      i = firstInNextBand - yInc;    while (nRectsInBand > 0) {      Rect r(Xrects[i].x1, Xrects[i].y1,             Xrects[i].x2, Xrects[i].y2);      rects.push_back(r);      i += xInc;      nRectsInBand--;    }    i = firstInNextBand;  }  return !rects.empty();}rfb::Rect Region::get_bounding_rect() const {  XRectangle r;  XClipBox(Xrgn, &r);  return Rect(r.x, r.y, r.x+r.width, r.y+r.height);}XRegion Region::replaceXrgn(XRegion newrgn) {  XRegion tmp = Xrgn;  Xrgn = newrgn;  return tmp;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -