2017-10-28 02:10:06 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
2012-08-29 09:47:18 +04:00
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
#ifndef GFX_LAYER_TREE_INVALIDATION_H
|
|
|
|
#define GFX_LAYER_TREE_INVALIDATION_H
|
|
|
|
|
2013-08-12 03:17:23 +04:00
|
|
|
#include "nsRegion.h" // for nsIntRegion
|
2014-08-25 19:09:39 +04:00
|
|
|
#include "mozilla/UniquePtr.h" // for UniquePtr
|
2015-04-21 18:04:57 +03:00
|
|
|
#include "mozilla/gfx/Point.h"
|
2012-08-29 09:47:18 +04:00
|
|
|
|
|
|
|
namespace mozilla {
|
|
|
|
namespace layers {
|
|
|
|
|
|
|
|
class Layer;
|
|
|
|
class ContainerLayer;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Callback for ContainerLayer invalidations.
|
|
|
|
*
|
|
|
|
* @param aContainer ContainerLayer being invalidated.
|
|
|
|
* @param aRegion Invalidated region in the ContainerLayer's coordinate
|
2017-08-04 07:22:49 +03:00
|
|
|
* space. If null, then the entire region must be invalidated.
|
2012-08-29 09:47:18 +04:00
|
|
|
*/
|
|
|
|
typedef void (*NotifySubDocInvalidationFunc)(ContainerLayer* aLayer,
|
2017-08-04 07:22:49 +03:00
|
|
|
const nsIntRegion* aRegion);
|
2012-08-29 09:47:18 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* A set of cached layer properties (including those of child layers),
|
|
|
|
* used for comparing differences in layer trees.
|
|
|
|
*/
|
|
|
|
struct LayerProperties {
|
2016-09-07 22:21:20 +03:00
|
|
|
protected:
|
|
|
|
LayerProperties() {}
|
|
|
|
|
|
|
|
LayerProperties(const LayerProperties& a) = delete;
|
|
|
|
LayerProperties& operator=(const LayerProperties& a) = delete;
|
|
|
|
|
|
|
|
public:
|
2012-08-29 09:47:18 +04:00
|
|
|
virtual ~LayerProperties() {}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Copies the current layer tree properties into
|
|
|
|
* a new LayerProperties object.
|
|
|
|
*
|
|
|
|
* @param Layer tree to copy, or nullptr if we have no
|
|
|
|
* initial layer tree.
|
|
|
|
*/
|
2014-08-25 19:09:39 +04:00
|
|
|
static UniquePtr<LayerProperties> CloneFrom(Layer* aRoot);
|
2012-08-29 09:47:18 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Clear all invalidation status from this layer tree.
|
|
|
|
*/
|
|
|
|
static void ClearInvalidations(Layer* aRoot);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compares a set of existing layer tree properties to the current layer
|
|
|
|
* tree and generates the changed rectangle.
|
|
|
|
*
|
|
|
|
* @param aRoot Root layer of the layer tree to compare against.
|
2017-08-04 07:22:48 +03:00
|
|
|
* @param aOutRegion Outparam that will contain the painted area changed by
|
|
|
|
* the layer tree changes.
|
2012-08-29 09:47:18 +04:00
|
|
|
* @param aCallback If specified, callback to call when ContainerLayers
|
|
|
|
* are invalidated.
|
2017-08-04 07:22:48 +03:00
|
|
|
* @return True on success, false if a calculation overflowed and the entire
|
|
|
|
* layer tree area should be considered invalidated.
|
2012-08-29 09:47:18 +04:00
|
|
|
*/
|
2017-08-04 07:22:48 +03:00
|
|
|
virtual bool ComputeDifferences(Layer* aRoot, nsIntRegion& aOutRegion,
|
|
|
|
NotifySubDocInvalidationFunc aCallback) = 0;
|
2015-04-21 18:04:57 +03:00
|
|
|
|
|
|
|
virtual void MoveBy(const gfx::IntPoint& aOffset) = 0;
|
2012-08-29 09:47:18 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace layers
|
|
|
|
} // namespace mozilla
|
|
|
|
|
|
|
|
#endif /* GFX_LAYER_TREE_INVALIDATON_H */
|