Name Description Size
2D.h This structure is used to send draw options that are universal to all drawing operations. 76209
AutoHelpersWin.h 1611
BaseCoord.h Do not use this class directly. Subclass it, pass that subclass as the Sub parameter, and only use that subclass. This allows methods to safely cast 'this' to 'Sub*'. 3354
BaseMargin.h Sides represents a set of physical sides. 4919
BasePoint.h Do not use this class directly. Subclass it, pass that subclass as the Sub parameter, and only use that subclass. This allows methods to safely cast 'this' to 'Sub*'. 3332
BasePoint3D.h Do not use this class directly. Subclass it, pass that subclass as the Sub parameter, and only use that subclass. This allows methods to safely cast 'this' to 'Sub*'. 3649
BasePoint4D.h Do not use this class directly. Subclass it, pass that subclass as the Sub parameter, and only use that subclass. This allows methods to safely cast 'this' to 'Sub*'. 3387
BaseRect.h Rectangles have two interpretations: a set of (zero-size) points, and a rectangular area of the plane. Most rectangle operations behave the same no matter what interpretation is being used, but some operations differ: -- Equality tests behave differently. When a rectangle represents an area, all zero-width and zero-height rectangles are equal to each other since they represent the empty area. But when a rectangle represents a set of mathematical points, zero-width and zero-height rectangles can be unequal. -- The union operation can behave differently. When rectangles represent areas, taking the union of a zero-width or zero-height rectangle with another rectangle can just ignore the empty rectangle. But when rectangles represent sets of mathematical points, we may need to extend the latter rectangle to include the points of a zero-width or zero-height rectangle. To ensure that these interpretations are explicitly disambiguated, we deny access to the == and != operators and require use of IsEqualEdges and IsEqualInterior instead. Similarly we provide separate Union and UnionEdges methods. Do not use this class directly. Subclass it, pass that subclass as the Sub parameter, and only use that subclass. 24894
BaseSize.h Do not use this class directly. Subclass it, pass that subclass as the Sub parameter, and only use that subclass. This allows methods to safely cast 'this' to 'Sub*'. 3398
BezierUtils.cpp 10386
BezierUtils.h 5493
BigEndianInts.h 1680
Blur.cpp Helper function to process each row of the box blur. It takes care of transposing the data on input or output depending on whether we intend a horizontal or vertical blur, and whether we're reading from the initial source or writing to the final destination. It allows starting or ending anywhere within the row to accomodate a skip rect. 32223
Blur.h Implementation of a triple box blur approximation of a Gaussian blur. A Gaussian blur is good for blurring because, when done independently in the horizontal and vertical directions, it matches the result that would be obtained using a different (rotated) set of axes. A triple box blur is a very close approximation of a Gaussian. This is a "service" class; the constructors set up all the information based on the values and compute the minimum size for an 8-bit alpha channel context. The callers are responsible for creating and managing the backing surface and passing the pointer to the data to the Blur() method. This class does not retain the pointer to the data outside of the Blur() call. A spread N makes each output pixel the maximum value of all source pixels within a square of side length 2N+1 centered on the output pixel. 6593
BlurLS3.cpp 20656
BlurNEON.cpp 12072
BlurSSE2.cpp 13737
BorrowedContext.h This is a helper class that let's you borrow a cairo_t from a DrawTargetCairo. This is used for drawing themed widgets. Callers should check the cr member after constructing the object to see if it succeeded. The DrawTarget should not be used while the context is borrowed. 5922
BufferEdgePad.cpp 3508
BufferEdgePad.h 691
BufferUnrotate.cpp 2485
BufferUnrotate.h 697
CGTextDrawing.h 5600
CaptureCommandList.cpp 734
CaptureCommandList.h 4093
ConicGradientEffectD2D1.cpp 11570
ConicGradientEffectD2D1.h 3556
ConvolutionFilter.cpp 7627
Coord.h 5395
CriticalSection.h 1810
DataSourceSurface.cpp 678
DataSurfaceHelpers.cpp 11349
DataSurfaceHelpers.h Create a DataSourceSurface and init the surface with the |aData|. The stride of this source surface might be different from the input data's |aDataStride|. System will try to use the optimal one. 5040
DrawCommands.h 29351
DrawEventRecorder.cpp 6318
DrawEventRecorder.h @param aUnscaledFont the UnscaledFont to increment the reference count for @return the previous reference count 8540
DrawTarget.cpp Byte offsets of channels in a native packed gfxColor or cairo image surface. 9989
DrawTargetCairo.cpp Clamp r to (0,0) (2^23,2^23) these are to be device coordinates. Returns false if the rectangle is completely out of bounds, true otherwise. This function assumes that it will be called with a rectangle being drawn into a surface with an identity transformation matrix; that is, anything above or to the left of (0,0) will be offscreen. First it checks if the rectangle is entirely beyond CAIRO_COORD_MAX; if so, it can't ever appear on the screen -- false is returned. Then it shifts any rectangles with x/y < 0 so that x and y are = 0, and adjusts the width and height appropriately. For example, a rectangle from (0,-5) with dimensions (5,10) will become a rectangle from (0,0) with dimensions (5,5). If after negative x/y adjustment to 0, either the width or height is negative, then the rectangle is completely offscreen, and nothing is drawn -- false is returned. Finally, if x+width or y+height are greater than CAIRO_COORD_MAX, the width and height are clamped such x+width or y+height are equal to CAIRO_COORD_MAX, and true is returned. 72878
DrawTargetCairo.h 9745
DrawTargetCapture.cpp 14346
DrawTargetCapture.h 8008
DrawTargetD2D1.cpp 79786
DrawTargetD2D1.h 13303
DrawTargetDual.cpp This only needs to split patterns up for SurfacePatterns. Only in that case can we be dealing with a 'dual' source (SourceSurfaceDual) and do we need to pass separate patterns into our destination DrawTargets. 7858
DrawTargetDual.h This is a special type of DrawTarget. It duplicates all drawing calls accross two drawtargets. An exception to this is when a snapshot of another dual DrawTarget is used as the source for any surface data. In this case the snapshot of the first source DrawTarget is used as a source for the call to the first destination DrawTarget (mA) and the snapshot of the second source DrawTarget is used at the source for the second destination DrawTarget (mB). This class facilitates black-background/white-background drawing for per-component alpha extraction for backends which do not support native component alpha. 7600
DrawTargetOffset.cpp 8614
DrawTargetOffset.h Not implemented 8338
DrawTargetRecording.cpp 26090
DrawTargetRecording.h Draw a surface to the draw target. Possibly doing partial drawing or applying scaling. No sampling happens outside the source. aSurface Source surface to draw aDest Destination rectangle that this drawing operation should draw to aSource Source rectangle in aSurface coordinates, this area of aSurface will be stretched to the size of aDest. aOptions General draw options that are applied to the operation aSurfOptions DrawSurface options that are applied 15260
DrawTargetSkia.cpp When constructing a temporary SkImage via GetSkImageForSurface, we may also have to construct a temporary DataSourceSurface, which must live as long as the SkImage. We attach this temporary surface to the image's pixelref, so that it can be released once the pixelref is freed. 68654
DrawTargetSkia.h 8727
DrawTargetTiled.cpp 17625
DrawTargetTiled.h Not implemented 9150
DrawTargetWrapAndRecord.cpp 28215
DrawTargetWrapAndRecord.h Ensure that the DrawTarget backend has flushed all drawing operations to this draw target. This must be called before using the backing surface of this draw target outside of GFX 2D code. 13599
ExtendInputEffectD2D1.cpp 6078
ExtendInputEffectD2D1.h 3299
Factory.cpp 41353
FilterNodeCapture.cpp 2694
FilterNodeCapture.h 3996
FilterNodeD2D1.cpp 41371
FilterNodeD2D1.h 5590
FilterNodeSoftware.cpp This class provides a way to get a pow() results in constant-time. It works by caching 129 ((1 << sCacheIndexPrecisionBits) + 1) values for bases between 0 and 1 and a fixed exponent. 125567
FilterNodeSoftware.h Can be attached to FilterNodeSoftware instances using AddInvalidationListener. FilterInvalidated is called whenever the output of the observed filter may have changed; that is, whenever cached GetOutput() results (and results derived from them) need to discarded. 30184
FilterProcessing.cpp 11111
FilterProcessing.h 11531
FilterProcessingSIMD-inl.h 57584
FilterProcessingSSE2.cpp 5672
FilterProcessingScalar.cpp 12622
Filters.h 13867
GenericRefCounted.h Common base class for GenericRefCounted and GenericAtomicRefCounted. Having this shared base class, common to both the atomic and non-atomic cases, allows to have RefPtr's that don't care about whether the objects they're managing have atomic refcounts or not. 4069
Helpers.h 1775
HelpersCairo.h 10055
HelpersD2D.h 31690
HelpersSkia.h 11211
HelpersWinFonts.h 928
ImageScaling.cpp The surface we sample from might not be even sized, if it's not we will ignore the last row/column. This means we lose some data but it keeps the code very simple. There's also no perfect answer that provides a better solution. 8022
ImageScaling.h 3079
ImageScalingSSE2.cpp The functions below use the following system for averaging 4 pixels: The first observation is that a half-adder is implemented as follows: R = S + 2C or in the case of a and b (a ^ b) + ((a & b) << 1); This can be trivially extended to three pixels by observaring that when doing (a ^ b ^ c) as the sum, the carry is simply the bitwise-or of the carries of the individual numbers, since the sum of 3 bits can only ever have a carry of one. We then observe that the average is then ((carry << 1) + sum) >> 1, or, assuming eliminating overflows and underflows, carry + (sum >> 1). We now average our existing sum with the fourth number, so we get: sum2 = (sum + d) >> 1 or (sum >> 1) + (d >> 1). We now observe that our sum has been moved into place relative to the carry, so we can now average with the carry to get the final 4 input average: avg = (sum2 + carry) >> 1; Or to reverse the proof: avg = ((sum >> 1) + carry + d >> 1) >> 1 avg = ((a + b + c) >> 1 + d >> 1) >> 1 avg = ((a + b + c + d) >> 2) An additional fact used in the SSE versions is the concept that we can trivially convert a rounded average to a truncated average: We have: f(a, b) = (a + b + 1) >> 1 And want: g(a, b) = (a + b) >> 1 Observe: ~f(~a, ~b) == ~((~a + ~b + 1) >> 1) == ~((-a - 1 + -b - 1 + 1) >> 1) == ~((-a - 1 + -b) >> 1) == ~((-(a + b) - 1) >> 1) == ~((~(a + b)) >> 1) == (a + b) >> 1 == g(a, b) 12890
InlineTranslator.cpp 4058
InlineTranslator.h 6102
IterableArena.h 5074
Logging.h 29324
LuminanceNEON.cpp Byte offsets of channels in a native packed gfxColor or cairo image surface. 3320
LuminanceNEON.h __LUMINANCENEON_H__ 770
MMIHelpers.h ============================================================================ Name : MMIHelpers.h Author : Heiher <> Version : 0.0.1 Copyright : Copyright (c) 2015 everyone. Description : The helpers for x86 SSE to Loongson MMI. ============================================================================ 8381
MacIOSurface.cpp static 20001
MacIOSurface.h 5906
Matrix.cpp Force small values to zero. We do this to avoid having sin(360deg) evaluate to a tiny but nonzero value. 5818
Matrix.h In most cases you probably want to use TransformBounds. This function just transforms the top-left and size separately and constructs a rect from those results. 76484
MatrixFwd.h 1132
NativeFontResource.cpp 1940
NativeFontResourceDWrite.cpp Important! Note the key here has to be a uint64_t that will have been generated by incrementing sNextFontFileKey. 8348
NativeFontResourceDWrite.h Creates a NativeFontResourceDWrite if data is valid. Note aFontData will be copied if required and so can be released after calling. @param aFontData the SFNT data. @param aDataLength length of data. @return Referenced NativeFontResourceDWrite or nullptr if invalid. 2015
NativeFontResourceFreeType.cpp 3352
NativeFontResourceFreeType.h 2585
NativeFontResourceGDI.cpp static 1663
NativeFontResourceGDI.h Creates a NativeFontResourceGDI if data is valid. Note aFontData will be copied if required and so can be released after calling. @param aFontData the SFNT data. @param aDataLength length of data. @return Referenced NativeFontResourceGDI or nullptr if invalid. 1663
NativeFontResourceMac.cpp static 5373
NativeFontResourceMac.h 1530
Path.cpp 17967
PathAnalysis.h 1540
PathCairo.cpp 9066
PathCapture.cpp 6876
PathCapture.h Move the current point in the path, any figure currently being drawn will be considered closed during fill operations, however when stroking the closing line segment will not be drawn. 3830
PathD2D.cpp Should never be called! 11964
PathHelpers.cpp 9951
PathHelpers.h Draws a partial arc <= 90 degrees given exact start and end points. Assumes that it is continuing from an already specified start point. 14760
PathRecording.cpp 7528
PathRecording.h Move the current point in the path, any figure currently being drawn will be considered closed during fill operations, however when stroking the closing line segment will not be drawn. 6998
PathSkia.cpp 6234
PatternHelpers.h This class is used to allow general pattern creation functions to return any type of pattern via an out-paramater without allocating a pattern instance on the free-store (an instance of this class being created on the stack before passing it in to the creation function). Without this class writing pattern creation functions would be a pain since Pattern objects are not reference counted, making lifetime management of instances created on the free-store and returned from a creation function hazardous. Besides that, in the case that ColorPattern's are expected to be common, it is particularly desirable to avoid the overhead of allocating on the free-store. 5071
Point.h 12820
Polygon.h Calculates the w = 0 intersection point for the edge defined by |aFirst| and |aSecond|. 12320
QuartzSupport.h Render the CALayer to an IOSurface. If no IOSurface is attached then an internal pixel buffer will be used. 3797 21049
Quaternion.cpp 723
Quaternion.h 3867
RadialGradientEffectD2D1.cpp 12427
RadialGradientEffectD2D1.h 3572
RecordedEvent.cpp static 5170
RecordedEvent.h 13955
RecordedEventImpl.h 119936
Rect.h 17136
RectAbsolute.h A RectAbsolute is similar to a Rect (see BaseRect.h), but represented as (x1, y1, x2, y2) instead of (x, y, width, height). Unless otherwise indicated, methods on this class correspond to methods on BaseRect. The API is currently very bare-bones; it may be extended as needed. Do not use this class directly. Subclass it, pass that subclass as the Sub parameter, and only use that subclass. 11652
SFNTData.cpp static 5863
SFNTData.h Creates an SFNTData if the header is a format that we understand and aDataLength is sufficient for the length information in the header data. Note that the data is NOT copied, so must exist the SFNTData's lifetime. @param aFontData the SFNT data. @param aDataLength length @return UniquePtr to a SFNTData or nullptr if the header is invalid. 1751
SIMD.h Consumers of this file need to #define SIMD_COMPILE_SSE2 before including it if they want access to the SSE2 functions. 34576
SSEHelpers.h Before Nehalem _mm_loadu_si128 could be very slow, this trick is a little faster. Once enough people are on architectures where _mm_loadu_si128 is fast we can migrate to it. 848
SVGTurbulenceRenderer-inl.h The turbulence calculation code is an adapted version of what appears in the SVG 1.1 specification: 13296
Scale.cpp 1491
Scale.h Scale an image using a high-quality filter. Synchronously scales an image and writes the output to the destination in 32-bit format. The destination must be pre-allocated by the caller. Returns true if scaling was successful, and false otherwise. Currently, this function is implemented using Skia. If Skia is not enabled when building, calling this function will always return false. IMPLEMTATION NOTES: This API is not currently easily hardware acceleratable. A better API might take a SourceSurface and return a SourceSurface; the Direct2D backend, for example, could simply set a status bit on a copy of the image, and use Direct2D's high-quality scaler at draw time. 1499
ScaleFactor.h This class represents a scaling factor between two different pixel unit systems. This is effectively a type-safe float, intended to be used in combination with the known-type instances of gfx::Point, gfx::Rect, etc. This class is meant to be used in cases where a single scale applies to both the x and y axes. For cases where two diferent scales apply, use ScaleFactors2D. 2908
ScaleFactors2D.h This class is like ScaleFactor, but allows different scales on the x and y axes. 5051
ScaledFontBase.cpp 7111
ScaledFontDWrite.cpp 24524
ScaledFontFontconfig.cpp 17423
ScaledFontFreeType.cpp 6761
ScaledFontMac.cpp 26744
ScaledFontWin.cpp 4072
ShadersD2D.fx 26023
ShadersD2D.h 21 654572
ShadersD2D1.h 67167
ShadersD2D1.hlsl 6338
SourceSurfaceCairo.cpp = nullptr 3990
SourceSurfaceCairo.h 2240
SourceSurfaceCapture.cpp = LuminanceType::LINEARRGB 6757
SourceSurfaceCapture.h 2510
SourceSurfaceD2D1.cpp 6715
SourceSurfaceRawData.cpp actually an object count 2796
SourceSurfaceSkia.cpp 5731
SourceSurfaceSkia.h The caller is responsible for ensuring aMappedSurface is not null. 2442
StackArray.h A handy class that will allocate data for size*T objects on the stack and otherwise allocate them on the heap. It is similar in purpose to AutoTArray 959
Swizzle.cpp Convenience macros for dispatching to various format combinations. 54448
Swizzle.h Premultiplies source and writes it to destination. Source and destination may be the same to premultiply in-place. The source format must have an alpha channel. 2715
SwizzleAVX2.cpp 3274
SwizzleNEON.cpp 18433
SwizzleSSE2.cpp 16370
SwizzleSSSE3.cpp 2219
Tools.h 6069
Triangle.h A simple triangle data structure. 1771
Types.cpp 2158
Types.h Data surface - bitmap in memory 20648
UnscaledFontFreeType.cpp 5590
UserData.h this class is basically a clone of the user data concept from cairo 3551
dw-extra.h New DirectWrite interfaces based on Win10 Fall Creators Update versions of dwrite_3.h and dcommon.h (from SDK 10.0.17061.0). This particular subset of declarations is intended to be just sufficient to compile the Gecko DirectWrite font code; it omits many other new interfaces, etc. 5312 694
gfx2d.sln 1494
gfx2d.vcxproj 6646 6577
ssse3-scaler.c This has been adapted from the ssse3 code from pixman. It's currently a mess as I want to try it out in practice before finalizing the details. 16915
ssse3-scaler.h 794
unittest 17