forked from mirrors/gecko-dev
		
	This patch was generated automatically by the "modeline.py" script, available here: https://github.com/amccreight/moz-source-tools/blob/master/modeline.py For every file that is modified in this patch, the changes are as follows: (1) The patch changes the file to use the exact C++ mode lines from the Mozilla coding style guide, available here: https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#Mode_Line (2) The patch deletes any blank lines between the mode line & the MPL boilerplate comment. (3) If the file previously had the mode lines and MPL boilerplate in a single contiguous C++ comment, then the patch splits them into separate C++ comments, to match the boilerplate in the coding style. MozReview-Commit-ID: 77D61xpSmIl --HG-- extra : rebase_source : c6162fa3cf539a07177a19838324bf368faa162b
		
			
				
	
	
		
			133 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* -*- 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
 | 
						|
 * 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_BASICPAINTEDLAYER_H
 | 
						|
#define GFX_BASICPAINTEDLAYER_H
 | 
						|
 | 
						|
#include "Layers.h"                     // for PaintedLayer, LayerManager, etc
 | 
						|
#include "RotatedBuffer.h"              // for RotatedBuffer, etc
 | 
						|
#include "BasicImplData.h"              // for BasicImplData
 | 
						|
#include "BasicLayers.h"                // for BasicLayerManager
 | 
						|
#include "gfxPoint.h"                   // for gfxPoint
 | 
						|
#include "mozilla/RefPtr.h"             // for RefPtr
 | 
						|
#include "mozilla/gfx/BasePoint.h"      // for BasePoint
 | 
						|
#include "mozilla/layers/ContentClient.h"  // for ContentClientBasic
 | 
						|
#include "mozilla/mozalloc.h"           // for operator delete
 | 
						|
#include "nsDebug.h"                    // for NS_ASSERTION
 | 
						|
#include "nsISupportsImpl.h"            // for MOZ_COUNT_CTOR, etc
 | 
						|
#include "nsRegion.h"                   // for nsIntRegion
 | 
						|
class gfxContext;
 | 
						|
 | 
						|
namespace mozilla {
 | 
						|
namespace layers {
 | 
						|
 | 
						|
class ReadbackProcessor;
 | 
						|
 | 
						|
class BasicPaintedLayer : public PaintedLayer, public BasicImplData {
 | 
						|
public:
 | 
						|
  typedef ContentClient::PaintState PaintState;
 | 
						|
  typedef ContentClient::ContentType ContentType;
 | 
						|
 | 
						|
  explicit BasicPaintedLayer(BasicLayerManager* aLayerManager, gfx::BackendType aBackend) :
 | 
						|
    PaintedLayer(aLayerManager, static_cast<BasicImplData*>(this)),
 | 
						|
    mContentClient(nullptr)
 | 
						|
    , mBackend(aBackend)
 | 
						|
  {
 | 
						|
    MOZ_COUNT_CTOR(BasicPaintedLayer);
 | 
						|
  }
 | 
						|
 | 
						|
protected:
 | 
						|
  virtual ~BasicPaintedLayer()
 | 
						|
  {
 | 
						|
    MOZ_COUNT_DTOR(BasicPaintedLayer);
 | 
						|
  }
 | 
						|
 | 
						|
public:
 | 
						|
  virtual void SetVisibleRegion(const LayerIntRegion& aRegion) override
 | 
						|
  {
 | 
						|
    NS_ASSERTION(BasicManager()->InConstruction(),
 | 
						|
                 "Can only set properties in construction phase");
 | 
						|
    PaintedLayer::SetVisibleRegion(aRegion);
 | 
						|
  }
 | 
						|
  virtual void InvalidateRegion(const nsIntRegion& aRegion) override
 | 
						|
  {
 | 
						|
    NS_ASSERTION(BasicManager()->InConstruction(),
 | 
						|
                 "Can only set properties in construction phase");
 | 
						|
    mInvalidRegion.Add(aRegion);
 | 
						|
    UpdateValidRegionAfterInvalidRegionChanged();
 | 
						|
  }
 | 
						|
 | 
						|
  virtual void PaintThebes(gfxContext* aContext,
 | 
						|
                           Layer* aMaskLayer,
 | 
						|
                           LayerManager::DrawPaintedLayerCallback aCallback,
 | 
						|
                           void* aCallbackData) override;
 | 
						|
 | 
						|
  virtual void Validate(LayerManager::DrawPaintedLayerCallback aCallback,
 | 
						|
                        void* aCallbackData,
 | 
						|
                        ReadbackProcessor* aReadback) override;
 | 
						|
 | 
						|
  virtual void ClearCachedResources() override
 | 
						|
  {
 | 
						|
    if (mContentClient) {
 | 
						|
      mContentClient->Clear();
 | 
						|
    }
 | 
						|
    ClearValidRegion();
 | 
						|
  }
 | 
						|
 | 
						|
  virtual void ComputeEffectiveTransforms(const gfx::Matrix4x4& aTransformToSurface) override
 | 
						|
  {
 | 
						|
    if (!BasicManager()->IsRetained()) {
 | 
						|
      // Don't do any snapping of our transform, since we're just going to
 | 
						|
      // draw straight through without intermediate buffers.
 | 
						|
      mEffectiveTransform = GetLocalTransform() * aTransformToSurface;
 | 
						|
      if (gfxPoint(0,0) != mResidualTranslation) {
 | 
						|
        mResidualTranslation = gfxPoint(0,0);
 | 
						|
        ClearValidRegion();
 | 
						|
      }
 | 
						|
      ComputeEffectiveTransformForMaskLayers(aTransformToSurface);
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    PaintedLayer::ComputeEffectiveTransforms(aTransformToSurface);
 | 
						|
  }
 | 
						|
 | 
						|
  BasicLayerManager* BasicManager()
 | 
						|
  {
 | 
						|
    return static_cast<BasicLayerManager*>(mManager);
 | 
						|
  }
 | 
						|
 | 
						|
protected:
 | 
						|
  virtual void
 | 
						|
  PaintBuffer(gfxContext* aContext,
 | 
						|
              const nsIntRegion& aRegionToDraw,
 | 
						|
              const nsIntRegion& aExtendedRegionToDraw,
 | 
						|
              const nsIntRegion& aRegionToInvalidate,
 | 
						|
              DrawRegionClip aClip,
 | 
						|
              LayerManager::DrawPaintedLayerCallback aCallback,
 | 
						|
              void* aCallbackData)
 | 
						|
  {
 | 
						|
    if (!aCallback) {
 | 
						|
      BasicManager()->SetTransactionIncomplete();
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    aCallback(this, aContext, aExtendedRegionToDraw, aExtendedRegionToDraw,
 | 
						|
              aClip, aRegionToInvalidate, aCallbackData);
 | 
						|
    // Everything that's visible has been validated. Do this instead of just
 | 
						|
    // OR-ing with aRegionToDraw, since that can lead to a very complex region
 | 
						|
    // here (OR doesn't automatically simplify to the simplest possible
 | 
						|
    // representation of a region.)
 | 
						|
    nsIntRegion tmp;
 | 
						|
    tmp.Or(mVisibleRegion.ToUnknownRegion(), aExtendedRegionToDraw);
 | 
						|
    AddToValidRegion(tmp);
 | 
						|
  }
 | 
						|
 | 
						|
  RefPtr<ContentClientBasic> mContentClient;
 | 
						|
  gfx::BackendType mBackend;
 | 
						|
};
 | 
						|
 | 
						|
} // namespace layers
 | 
						|
} // namespace mozilla
 | 
						|
 | 
						|
#endif
 |