LMMS
Loading...
Searching...
No Matches
juce::EdgeTable Class Reference

#include <juce_EdgeTable.h>

Classes

struct  LineItem

Public Member Functions

 EdgeTable (Rectangle< int > clipLimits, const Path &pathToAdd, const AffineTransform &transform)
 EdgeTable (Rectangle< int > rectangleToAdd)
 EdgeTable (Rectangle< float > rectangleToAdd)
 EdgeTable (const RectangleList< int > &rectanglesToAdd)
 EdgeTable (const RectangleList< float > &rectanglesToAdd)
 EdgeTable (const EdgeTable &)
EdgeTableoperator= (const EdgeTable &)
 ~EdgeTable ()
void clipToRectangle (Rectangle< int > r)
void excludeRectangle (Rectangle< int > r)
void clipToEdgeTable (const EdgeTable &)
void clipLineToMask (int x, int y, const uint8 *mask, int maskStride, int numPixels)
bool isEmpty () noexcept
const Rectangle< int > & getMaximumBounds () const noexcept
void translate (float dx, int dy) noexcept
void multiplyLevels (float factor)
void optimiseTable ()
template<class EdgeTableIterationCallback>
void iterate (EdgeTableIterationCallback &iterationCallback) const noexcept

Private Member Functions

void allocate ()
void clearLineSizes () noexcept
void addEdgePoint (int x, int y, int winding)
void addEdgePointPair (int x1, int x2, int y, int winding)
void remapTableForNumEdges (int newNumEdgesPerLine)
void remapWithExtraSpace (int numPointsNeeded)
void intersectWithEdgeTableLine (int y, const int *otherLine)
void clipEdgeTableLineToRange (int *line, int x1, int x2) noexcept
void sanitiseLevels (bool useNonZeroWinding) noexcept

Static Private Member Functions

static void copyEdgeTableData (int *dest, int destLineStride, const int *src, int srcLineStride, int numLines) noexcept

Private Attributes

HeapBlock< inttable
Rectangle< intbounds
int maxEdgesPerLine
int lineStrideElements
bool needToCheckEmptiness = true

Static Private Attributes

static constexpr auto defaultEdgesPerLine = 32
static constexpr auto scale = 256

Detailed Description

A table of horizontal scan-line segments - used for rasterising Paths.

See also
Path, Graphics

@tags{Graphics}

Constructor & Destructor Documentation

◆ EdgeTable() [1/6]

juce::EdgeTable::EdgeTable ( Rectangle< int > clipLimits,
const Path & pathToAdd,
const AffineTransform & transform )

Creates an edge table containing a path.

A table is created with a fixed vertical range, and only sections of the path which lie within this range will be added to the table.

Parameters
clipLimitsonly the region of the path that lies within this area will be added
pathToAddthe path to add to the table
transforma transform to apply to the path being added

◆ EdgeTable() [2/6]

juce::EdgeTable::EdgeTable ( Rectangle< int > rectangleToAdd)
explicit

Creates an edge table containing a rectangle.

◆ EdgeTable() [3/6]

juce::EdgeTable::EdgeTable ( Rectangle< float > rectangleToAdd)
explicit

Creates an edge table containing a rectangle.

◆ EdgeTable() [4/6]

juce::EdgeTable::EdgeTable ( const RectangleList< int > & rectanglesToAdd)
explicit

Creates an edge table containing a rectangle list.

◆ EdgeTable() [5/6]

juce::EdgeTable::EdgeTable ( const RectangleList< float > & rectanglesToAdd)
explicit

Creates an edge table containing a rectangle list.

◆ EdgeTable() [6/6]

juce::EdgeTable::EdgeTable ( const EdgeTable & other)

Creates a copy of another edge table.

◆ ~EdgeTable()

juce::EdgeTable::~EdgeTable ( )

Destructor.

Member Function Documentation

◆ addEdgePoint()

void juce::EdgeTable::addEdgePoint ( int x,
int y,
int winding )
private

◆ addEdgePointPair()

void juce::EdgeTable::addEdgePointPair ( int x1,
int x2,
int y,
int winding )
private

◆ allocate()

void juce::EdgeTable::allocate ( )
private

◆ clearLineSizes()

void juce::EdgeTable::clearLineSizes ( )
privatenoexcept

◆ clipEdgeTableLineToRange()

void juce::EdgeTable::clipEdgeTableLineToRange ( int * line,
int x1,
int x2 )
privatenoexcept

◆ clipLineToMask()

void juce::EdgeTable::clipLineToMask ( int x,
int y,
const uint8 * mask,
int maskStride,
int numPixels )

◆ clipToEdgeTable()

void juce::EdgeTable::clipToEdgeTable ( const EdgeTable & other)

◆ clipToRectangle()

void juce::EdgeTable::clipToRectangle ( Rectangle< int > r)

◆ copyEdgeTableData()

void juce::EdgeTable::copyEdgeTableData ( int * dest,
int destLineStride,
const int * src,
int srcLineStride,
int numLines )
staticprivatenoexcept

◆ excludeRectangle()

void juce::EdgeTable::excludeRectangle ( Rectangle< int > r)

◆ getMaximumBounds()

const Rectangle< int > & juce::EdgeTable::getMaximumBounds ( ) const
inlinenoexcept

◆ intersectWithEdgeTableLine()

void juce::EdgeTable::intersectWithEdgeTableLine ( int y,
const int * otherLine )
private

◆ isEmpty()

bool juce::EdgeTable::isEmpty ( )
noexcept

◆ iterate()

template<class EdgeTableIterationCallback>
void juce::EdgeTable::iterate ( EdgeTableIterationCallback & iterationCallback) const
inlinenoexcept

Iterates the lines in the table, for rendering.

This function will iterate each line in the table, and call a user-defined class to render each pixel or continuous line of pixels that the table contains.

Parameters
iterationCallbackthis templated class must contain the following methods:
inline void setEdgeTableYPos (int y);
inline void handleEdgeTablePixel (int x, int alphaLevel) const;
inline void handleEdgeTablePixelFull (int x) const;
inline void handleEdgeTableLine (int x, int width, int alphaLevel) const;
inline void handleEdgeTableLineFull (int x, int width) const;
int y
Definition inflate.c:1588
unsigned x[BMAX+1]
Definition inflate.c:1586
static int width
Definition pugl.h:1593
(these don't necessarily have to be 'const', but it might help it go faster)

◆ multiplyLevels()

void juce::EdgeTable::multiplyLevels ( float factor)

Scales all the alpha-levels in the table by the given multiplier.

◆ operator=()

EdgeTable & juce::EdgeTable::operator= ( const EdgeTable & other)

Copies from another edge table.

◆ optimiseTable()

void juce::EdgeTable::optimiseTable ( )

Reduces the amount of space the table has allocated.

This will shrink the table down to use as little memory as possible - useful for read-only tables that get stored and re-used for rendering.

◆ remapTableForNumEdges()

void juce::EdgeTable::remapTableForNumEdges ( int newNumEdgesPerLine)
private

◆ remapWithExtraSpace()

void juce::EdgeTable::remapWithExtraSpace ( int numPointsNeeded)
inlineprivate

◆ sanitiseLevels()

void juce::EdgeTable::sanitiseLevels ( bool useNonZeroWinding)
privatenoexcept

◆ translate()

void juce::EdgeTable::translate ( float dx,
int dy )
noexcept

Member Data Documentation

◆ bounds

Rectangle<int> juce::EdgeTable::bounds
private

◆ defaultEdgesPerLine

auto juce::EdgeTable::defaultEdgesPerLine = 32
staticconstexprprivate

◆ lineStrideElements

int juce::EdgeTable::lineStrideElements
private

◆ maxEdgesPerLine

int juce::EdgeTable::maxEdgesPerLine
private

◆ needToCheckEmptiness

bool juce::EdgeTable::needToCheckEmptiness = true
private

◆ scale

auto juce::EdgeTable::scale = 256
staticconstexprprivate

◆ table

HeapBlock<int> juce::EdgeTable::table
private

The documentation for this class was generated from the following files: