fune/layout/svg/SVGPaintServerFrame.h
Nathan Froyd e3ebda1914 Bug 1223932 - delete guard object uses from the tree; r=jwalden
CLOSED TREE

We don't need these macros anymore, for two reasons:

1. We have static analysis to provide the same sort of checks via `MOZ_RAII`
   and friends.
2. clang now warns for the "temporary that should have been a declaration" case.

The extra requirements on class construction also show up during debug tests
as performance problems.

This change was automated by using the following sed script:

```
# Remove declarations in classes.
/MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER/d
/MOZ_GUARD_OBJECT_NOTIFIER_INIT/d

# Remove individual macros, carefully.
{
  # We don't have to worry about substrings here because the closing
  # parenthesis "anchors" the match.
  s/MOZ_GUARD_OBJECT_NOTIFIER_PARAM)/)/g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_PARAM_TO_PARENT)/)/g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL)/)/g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_IN_IMPL)/)/g;

  # Remove the longer identifier first.
  s/MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_TO_PARENT//g;
  s/MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM//g;
}

# Remove the actual include.
\@# *include "mozilla/GuardObjects.h"@d
```

and running:

```
find . -name \*.cpp -o -name \*.h | grep -v 'GuardObjects.h' |xargs sed -i -f script 2>/dev/null
mach clang-format
```

Differential Revision: https://phabricator.services.mozilla.com/D85168
2020-07-30 14:22:38 +00:00

82 lines
2.5 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 LAYOUT_SVG_SVGPAINTSERVERFRAME_H_
#define LAYOUT_SVG_SVGPAINTSERVERFRAME_H_
#include "gfxRect.h"
#include "mozilla/Attributes.h"
#include "mozilla/SVGContainerFrame.h"
#include "nsCOMPtr.h"
#include "nsIFrame.h"
#include "nsIFrame.h"
#include "nsQueryFrame.h"
class gfxContext;
class gfxPattern;
namespace mozilla {
namespace gfx {
class DrawTarget;
} // namespace gfx
/**
* RAII class used to temporarily set and remove the
* NS_FRAME_DRAWING_AS_PAINTSERVER frame state bit while a frame is being
* drawn as a paint server.
*/
class MOZ_RAII AutoSetRestorePaintServerState {
public:
explicit AutoSetRestorePaintServerState(nsIFrame* aFrame) : mFrame(aFrame) {
mFrame->AddStateBits(NS_FRAME_DRAWING_AS_PAINTSERVER);
}
~AutoSetRestorePaintServerState() {
mFrame->RemoveStateBits(NS_FRAME_DRAWING_AS_PAINTSERVER);
}
private:
nsIFrame* mFrame;
};
class SVGPaintServerFrame : public SVGContainerFrame {
protected:
using DrawTarget = gfx::DrawTarget;
SVGPaintServerFrame(ComputedStyle* aStyle, nsPresContext* aPresContext,
ClassID aID)
: SVGContainerFrame(aStyle, aPresContext, aID) {
AddStateBits(NS_FRAME_IS_NONDISPLAY);
}
public:
using imgDrawingParams = image::imgDrawingParams;
NS_DECL_ABSTRACT_FRAME(SVGPaintServerFrame)
NS_DECL_QUERYFRAME
NS_DECL_QUERYFRAME_TARGET(SVGPaintServerFrame)
/**
* Constructs a gfxPattern of the paint server rendering.
*
* @param aContextMatrix The transform matrix that is currently applied to
* the gfxContext that is being drawn to. This is needed by SVG patterns so
* that surfaces of the correct size can be created. (SVG gradients are
* vector based, so it's not used there.)
*/
virtual already_AddRefed<gfxPattern> GetPaintServerPattern(
nsIFrame* aSource, const DrawTarget* aDrawTarget,
const gfxMatrix& aContextMatrix, StyleSVGPaint nsStyleSVG::*aFillOrStroke,
float aOpacity, imgDrawingParams& aImgParams,
const gfxRect* aOverrideBounds = nullptr) = 0;
// nsIFrame methods:
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsDisplayListSet& aLists) override {}
};
} // namespace mozilla
#endif // LAYOUT_SVG_SVGPAINTSERVERFRAME_H_