Bug 1381180 - Refactor out StrokeOptions from DrawCommands. r=dvander

This commit is contained in:
Mason Chang 2017-07-20 13:14:51 -07:00
Родитель 8b863f2d05
Коммит d085480b74
1 изменённых файлов: 34 добавлений и 44 удалений

Просмотреть файл

@ -61,6 +61,31 @@ private:
CommandType mType;
};
class StrokeOptionsCommand : public DrawingCommand
{
public:
StrokeOptionsCommand(CommandType aType,
const StrokeOptions& aStrokeOptions)
: DrawingCommand(aType)
, mStrokeOptions(aStrokeOptions)
{
// Stroke Options dashes are owned by the caller.
// Have to copy them here so they don't get freed
// between now and replay.
if (aStrokeOptions.mDashLength) {
mDashes.resize(aStrokeOptions.mDashLength);
mStrokeOptions.mDashPattern = &mDashes.front();
PodCopy(&mDashes.front(), aStrokeOptions.mDashPattern, mStrokeOptions.mDashLength);
}
}
virtual ~StrokeOptionsCommand() {}
protected:
StrokeOptions mStrokeOptions;
std::vector<Float> mDashes;
};
class StoredPattern
{
public:
@ -252,24 +277,18 @@ private:
DrawOptions mOptions;
};
class StrokeRectCommand : public DrawingCommand
class StrokeRectCommand : public StrokeOptionsCommand
{
public:
StrokeRectCommand(const Rect& aRect,
const Pattern& aPattern,
const StrokeOptions& aStrokeOptions,
const DrawOptions& aOptions)
: DrawingCommand(CommandType::STROKERECT)
: StrokeOptionsCommand(CommandType::STROKERECT, aStrokeOptions)
, mRect(aRect)
, mPattern(aPattern)
, mStrokeOptions(aStrokeOptions)
, mOptions(aOptions)
{
if (aStrokeOptions.mDashLength) {
mDashes.resize(aStrokeOptions.mDashLength);
mStrokeOptions.mDashPattern = &mDashes.front();
memcpy(&mDashes.front(), aStrokeOptions.mDashPattern, mStrokeOptions.mDashLength * sizeof(Float));
}
}
virtual void ExecuteOnDT(DrawTarget* aDT, const Matrix*) const
@ -280,12 +299,10 @@ public:
private:
Rect mRect;
StoredPattern mPattern;
StrokeOptions mStrokeOptions;
DrawOptions mOptions;
std::vector<Float> mDashes;
};
class StrokeLineCommand : public DrawingCommand
class StrokeLineCommand : public StrokeOptionsCommand
{
public:
StrokeLineCommand(const Point& aStart,
@ -293,21 +310,12 @@ public:
const Pattern& aPattern,
const StrokeOptions& aStrokeOptions,
const DrawOptions& aOptions)
: DrawingCommand(CommandType::STROKELINE)
: StrokeOptionsCommand(CommandType::STROKELINE, aStrokeOptions)
, mStart(aStart)
, mEnd(aEnd)
, mPattern(aPattern)
, mStrokeOptions(aStrokeOptions)
, mOptions(aOptions)
{
// Stroke Options dashes are owned by the caller.
// Have to copy them here so they don't get freed
// between now and replay.
if (aStrokeOptions.mDashLength) {
mDashes.resize(aStrokeOptions.mDashLength);
mStrokeOptions.mDashPattern = &mDashes.front();
memcpy(&mDashes.front(), aStrokeOptions.mDashPattern, mStrokeOptions.mDashLength * sizeof(Float));
}
}
virtual void ExecuteOnDT(DrawTarget* aDT, const Matrix*) const
@ -319,9 +327,7 @@ private:
Point mStart;
Point mEnd;
StoredPattern mPattern;
StrokeOptions mStrokeOptions;
DrawOptions mOptions;
std::vector<Float> mDashes;
};
class FillCommand : public DrawingCommand
@ -394,24 +400,19 @@ PathExtentsToMaxStrokeExtents(const StrokeOptions &aStrokeOptions,
return result;
}
class StrokeCommand : public DrawingCommand
class StrokeCommand : public StrokeOptionsCommand
{
public:
StrokeCommand(const Path* aPath,
const Pattern& aPattern,
const StrokeOptions& aStrokeOptions,
const DrawOptions& aOptions)
: DrawingCommand(CommandType::STROKE)
: StrokeOptionsCommand(CommandType::STROKE, aStrokeOptions)
, mPath(const_cast<Path*>(aPath))
, mPattern(aPattern)
, mStrokeOptions(aStrokeOptions)
, mOptions(aOptions)
{
if (aStrokeOptions.mDashLength) {
mDashes.resize(aStrokeOptions.mDashLength);
mStrokeOptions.mDashPattern = &mDashes.front();
memcpy(&mDashes.front(), aStrokeOptions.mDashPattern, mStrokeOptions.mDashLength * sizeof(Float));
}
}
virtual void ExecuteOnDT(DrawTarget* aDT, const Matrix*) const
@ -428,9 +429,7 @@ public:
private:
RefPtr<Path> mPath;
StoredPattern mPattern;
StrokeOptions mStrokeOptions;
DrawOptions mOptions;
std::vector<Float> mDashes;
};
class FillGlyphsCommand : public DrawingCommand
@ -468,7 +467,7 @@ private:
RefPtr<GlyphRenderingOptions> mRenderingOptions;
};
class StrokeGlyphsCommand : public DrawingCommand
class StrokeGlyphsCommand : public StrokeOptionsCommand
{
friend class DrawTargetCaptureImpl;
public:
@ -478,21 +477,14 @@ public:
const StrokeOptions& aStrokeOptions,
const DrawOptions& aOptions,
const GlyphRenderingOptions* aRenderingOptions)
: DrawingCommand(CommandType::STROKEGLYPHS)
: StrokeOptionsCommand(CommandType::STROKEGLYPHS, aStrokeOptions)
, mFont(aFont)
, mPattern(aPattern)
, mStrokeOptions(aStrokeOptions)
, mOptions(aOptions)
, mRenderingOptions(const_cast<GlyphRenderingOptions*>(aRenderingOptions))
{
mGlyphs.resize(aBuffer.mNumGlyphs);
memcpy(&mGlyphs.front(), aBuffer.mGlyphs, sizeof(Glyph) * aBuffer.mNumGlyphs);
if (aStrokeOptions.mDashLength) {
mDashes.resize(aStrokeOptions.mDashLength);
mStrokeOptions.mDashPattern = &mDashes.front();
PodCopy(&mDashes.front(), aStrokeOptions.mDashPattern, mStrokeOptions.mDashLength);
}
}
virtual void ExecuteOnDT(DrawTarget* aDT, const Matrix*) const
@ -507,10 +499,8 @@ private:
RefPtr<ScaledFont> mFont;
std::vector<Glyph> mGlyphs;
StoredPattern mPattern;
StrokeOptions mStrokeOptions;
DrawOptions mOptions;
RefPtr<GlyphRenderingOptions> mRenderingOptions;
std::vector<Float> mDashes;
};
class MaskCommand : public DrawingCommand