summaryrefslogtreecommitdiffstats
path: root/remoting/host/capturer_fake_ascii.cc
diff options
context:
space:
mode:
authorgarykac@google.com <garykac@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-07 19:58:23 +0000
committergarykac@google.com <garykac@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-07 19:58:23 +0000
commitcb3b1f93130040a150e7fcc57cd4d5a75569685a (patch)
treeff93665e3c1478c61663d1107cd42dc25b31448d /remoting/host/capturer_fake_ascii.cc
parentb0110e822ac2b2db56d1b1542aad06da573cd544 (diff)
downloadchromium_src-cb3b1f93130040a150e7fcc57cd4d5a75569685a.zip
chromium_src-cb3b1f93130040a150e7fcc57cd4d5a75569685a.tar.gz
chromium_src-cb3b1f93130040a150e7fcc57cd4d5a75569685a.tar.bz2
Copy the (early prototype of) remoting in Chrome into the public tree.
At the moment, this is a semi-functional demo. BUG=none TEST=build/run all unittests on linux Review URL: http://codereview.chromium.org/2690003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49087 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/host/capturer_fake_ascii.cc')
-rw-r--r--remoting/host/capturer_fake_ascii.cc88
1 files changed, 88 insertions, 0 deletions
diff --git a/remoting/host/capturer_fake_ascii.cc b/remoting/host/capturer_fake_ascii.cc
new file mode 100644
index 0000000..7ab7e6b
--- /dev/null
+++ b/remoting/host/capturer_fake_ascii.cc
@@ -0,0 +1,88 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "remoting/host/capturer_fake_ascii.h"
+
+#include "gfx/rect.h"
+
+namespace remoting {
+
+static const int kWidth = 32;
+static const int kHeight = 20;
+static const int kBytesPerPixel = 1;
+
+CapturerFakeAscii::CapturerFakeAscii() {
+ // Dimensions of screen.
+ width_ = kWidth;
+ height_ = kHeight;
+ pixel_format_ = chromotocol_pb::PixelFormatAscii;
+ bytes_per_pixel_ = kBytesPerPixel;
+ bytes_per_row_ = width_ * bytes_per_pixel_;
+
+ // Create memory for the buffers.
+ int buffer_size = height_ * bytes_per_row_;
+ for (int i = 0; i < kNumBuffers; i++) {
+ buffers_[i].reset(new uint8[buffer_size]);
+ }
+}
+
+CapturerFakeAscii::~CapturerFakeAscii() {
+}
+
+void CapturerFakeAscii::CaptureFullScreen(Task* done_task) {
+ dirty_rects_.clear();
+
+ GenerateImage();
+
+ // Return a single dirty rect that includes the entire screen.
+ dirty_rects_.push_back(gfx::Rect(width_, height_));
+
+ FinishCapture(done_task);
+}
+
+void CapturerFakeAscii::CaptureDirtyRects(Task* done_task) {
+ dirty_rects_.clear();
+
+ GenerateImage();
+ // TODO(garykac): Diff old/new screen.
+ // Currently, this just marks the entire screen as dirty.
+ dirty_rects_.push_back(gfx::Rect(width_, height_));
+
+ FinishCapture(done_task);
+}
+
+void CapturerFakeAscii::CaptureRect(const gfx::Rect& rect, Task* done_task) {
+ dirty_rects_.clear();
+
+ GenerateImage();
+ dirty_rects_.push_back(rect);
+
+ FinishCapture(done_task);
+}
+
+void CapturerFakeAscii::GetData(const uint8* planes[]) const {
+ planes[0] = buffers_[current_buffer_].get();
+ planes[1] = planes[2] = NULL;
+}
+
+void CapturerFakeAscii::GetDataStride(int strides[]) const {
+ // Only the first plane has data.
+ strides[0] = bytes_per_row_;
+ strides[1] = strides[2] = 0;
+}
+
+void CapturerFakeAscii::GenerateImage() {
+ for (int y = 0; y < height_; ++y) {
+ uint8* row = buffers_[current_buffer_].get() + bytes_per_row_ * y;
+ for (int x = 0; x < bytes_per_row_; ++x) {
+ if (y == 0 || x == 0 || x == (width_ - 1) || y == (height_ - 1)) {
+ row[x] = '*';
+ } else {
+ row[x] = ' ';
+ }
+ }
+ }
+}
+
+} // namespace remoting