Adam Barth e3bf0fa3c1 Include child scenes when uploading to Mozart
Previously we just dropped child scenes on the floor. Now we upload them
to Mozart. However, we just draw them on top of all the other content
and don't apply any clips or blends.
2016-02-03 14:16:09 -08:00

72 lines
2.0 KiB
C++

// Copyright 2015 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.
#ifndef FLOW_LAYERS_LAYER_H_
#define FLOW_LAYERS_LAYER_H_
#include <memory>
#include <vector>
#include "base/logging.h"
#include "base/macros.h"
#include "flow/paint_context.h"
#include "mojo/services/gfx/composition/interfaces/scenes.mojom.h"
#include "skia/ext/refptr.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkColor.h"
#include "third_party/skia/include/core/SkColorFilter.h"
#include "third_party/skia/include/core/SkMatrix.h"
#include "third_party/skia/include/core/SkPath.h"
#include "third_party/skia/include/core/SkPicture.h"
#include "third_party/skia/include/core/SkRect.h"
#include "third_party/skia/include/core/SkRRect.h"
#include "third_party/skia/include/core/SkXfermode.h"
namespace flow {
class ContainerLayer;
class Layer {
public:
Layer();
virtual ~Layer();
struct PrerollContext {
PaintContext::ScopedFrame& frame;
SkRect child_paint_bounds;
};
virtual void Preroll(PrerollContext* context, const SkMatrix& matrix);
virtual void Paint(PaintContext::ScopedFrame& frame) = 0;
virtual void UpdateScene(mojo::gfx::composition::SceneUpdate* update,
mojo::gfx::composition::Node* container);
ContainerLayer* parent() const { return parent_; }
void set_parent(ContainerLayer* parent) { parent_ = parent; }
const bool has_paint_bounds() const { return has_paint_bounds_; }
const SkRect& paint_bounds() const {
DCHECK(has_paint_bounds_);
return paint_bounds_;
}
void set_paint_bounds(const SkRect& paint_bounds) {
has_paint_bounds_ = true;
paint_bounds_ = paint_bounds;
}
private:
ContainerLayer* parent_;
bool has_paint_bounds_; // if false, paint_bounds_ is not valid
SkRect paint_bounds_;
DISALLOW_COPY_AND_ASSIGN(Layer);
};
} // namespace flow
#endif // FLOW_LAYERS_LAYER_H_