| Index: pdf/control.cc
|
| ===================================================================
|
| --- pdf/control.cc (revision 0)
|
| +++ pdf/control.cc (revision 0)
|
| @@ -0,0 +1,114 @@
|
| +// Copyright (c) 2012 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 "pdf/control.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "pdf/draw_utils.h"
|
| +
|
| +namespace chrome_pdf {
|
| +
|
| +Control::Control()
|
| + : id_(kInvalidControlId),
|
| + visible_(false),
|
| + owner_(NULL),
|
| + transparency_(kOpaqueAlpha) {
|
| +}
|
| +
|
| +Control::~Control() {
|
| +}
|
| +
|
| +bool Control::Create(uint32 id, const pp::Rect& rc,
|
| + bool visible, Owner* owner) {
|
| + DCHECK(owner);
|
| + if (owner_ || id == kInvalidControlId)
|
| + return false; // Already created or id is invalid.
|
| + id_ = id;
|
| + rc_ = rc;
|
| + visible_ = visible;
|
| + owner_ = owner;
|
| + return true;
|
| +}
|
| +
|
| +bool Control::HandleEvent(const pp::InputEvent& event) {
|
| + return false;
|
| +}
|
| +
|
| +void Control::PaintMultipleRects(pp::ImageData* image_data,
|
| + const std::list<pp::Rect>& rects) {
|
| + DCHECK(rects.size() > 0);
|
| + if (rects.size() == 1) {
|
| + Paint(image_data, rects.front());
|
| + return;
|
| + }
|
| +
|
| + // Some rects in the input list may overlap. To prevent double
|
| + // paining (causes problems with semi-transparent controls) we'll
|
| + // paint control into buffer image data only once and copy requested
|
| + // rectangles.
|
| + pp::ImageData buffer(owner()->GetInstance(), image_data->format(),
|
| + rect().size(), false);
|
| + pp::Rect draw_rc = pp::Rect(image_data->size()).Intersect(rect());
|
| + pp::Rect ctrl_rc = pp::Rect(rect().point() - draw_rc.point(), draw_rc.size());
|
| + CopyImage(*image_data, draw_rc, &buffer, ctrl_rc, false);
|
| +
|
| + // Temporary move control to origin (0,0) and draw it into temp buffer.
|
| + // Move to the original position afterward. Since this is going on temp
|
| + // buffer, we don't need to invalidate here.
|
| + pp::Rect temp = rect();
|
| + MoveTo(pp::Point(0, 0), false);
|
| + Paint(&buffer, ctrl_rc);
|
| + MoveTo(temp.point(), false);
|
| +
|
| + std::list<pp::Rect>::const_iterator iter;
|
| + for (iter = rects.begin(); iter != rects.end(); ++iter) {
|
| + pp::Rect draw_rc = rect().Intersect(*iter);
|
| + if (!draw_rc.IsEmpty()) {
|
| + // Copy requested rect from the buffer image.
|
| + pp::Rect src_rc = draw_rc;
|
| + src_rc.Offset(-rect().x(), -rect().y());
|
| + CopyImage(buffer, src_rc, image_data, draw_rc, false);
|
| + }
|
| + }
|
| +}
|
| +
|
| +void Control::Show(bool visible, bool invalidate) {
|
| + if (visible_ != visible) {
|
| + visible_ = visible;
|
| + if (invalidate)
|
| + owner_->Invalidate(id_, rc_);
|
| + }
|
| +}
|
| +
|
| +void Control::AdjustTransparency(uint8 transparency, bool invalidate) {
|
| + if (transparency_ != transparency) {
|
| + transparency_ = transparency;
|
| + if (invalidate && visible_)
|
| + owner_->Invalidate(id_, rc_);
|
| + }
|
| +}
|
| +
|
| +void Control::MoveBy(const pp::Point& offset, bool invalidate) {
|
| + pp::Rect old_rc = rc_;
|
| + rc_.Offset(offset);
|
| + if (invalidate && visible_) {
|
| + owner()->Invalidate(id(), old_rc);
|
| + owner()->Invalidate(id(), rect());
|
| + }
|
| +}
|
| +
|
| +void Control::SetRect(const pp::Rect& rc, bool invalidate) {
|
| + pp::Rect old_rc = rc_;
|
| + rc_ = rc;
|
| + if (invalidate && visible_) {
|
| + owner()->Invalidate(id(), old_rc);
|
| + owner()->Invalidate(id(), rect());
|
| + }
|
| +}
|
| +
|
| +void Control::MoveTo(const pp::Point& origin, bool invalidate) {
|
| + MoveBy(origin - rc_.point(), invalidate);
|
| +}
|
| +
|
| +} // namespace chrome_pdf
|
|
|
| Property changes on: pdf\control.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|