| 
							- /*
 -   ==============================================================================
 - 
 -    This file is part of the JUCE library - "Jules' Utility Class Extensions"
 -    Copyright 2004-11 by Raw Material Software Ltd.
 - 
 -   ------------------------------------------------------------------------------
 - 
 -    JUCE can be redistributed and/or modified under the terms of the GNU General
 -    Public License (Version 2), as published by the Free Software Foundation.
 -    A copy of the license is included in the JUCE distribution, or can be found
 -    online at www.gnu.org/licenses.
 - 
 -    JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
 -    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 -    A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 - 
 -   ------------------------------------------------------------------------------
 - 
 -    To release a closed-source product which uses JUCE, commercial licenses are
 -    available: visit www.rawmaterialsoftware.com/juce for more information.
 - 
 -   ==============================================================================
 - */
 - 
 - LowLevelGraphicsSoftwareRenderer::LowLevelGraphicsSoftwareRenderer (const Image& image)
 -     : savedState (new RenderingHelpers::SoftwareRendererSavedState (image, image.getBounds()))
 - {
 - }
 - 
 - LowLevelGraphicsSoftwareRenderer::LowLevelGraphicsSoftwareRenderer (const Image& image, const Point<int>& origin,
 -                                                                     const RectangleList& initialClip)
 -     : savedState (new RenderingHelpers::SoftwareRendererSavedState (image, initialClip, origin.x, origin.y))
 - {
 - }
 - 
 - LowLevelGraphicsSoftwareRenderer::~LowLevelGraphicsSoftwareRenderer() {}
 - 
 - //==============================================================================
 - bool LowLevelGraphicsSoftwareRenderer::isVectorDevice() const                         { return false; }
 - 
 - void LowLevelGraphicsSoftwareRenderer::setOrigin (int x, int y)                       { savedState->transform.setOrigin (x, y); }
 - void LowLevelGraphicsSoftwareRenderer::addTransform (const AffineTransform& t)        { savedState->transform.addTransform (t); }
 - float LowLevelGraphicsSoftwareRenderer::getScaleFactor()                              { return savedState->transform.getScaleFactor(); }
 - 
 - Rectangle<int> LowLevelGraphicsSoftwareRenderer::getClipBounds() const                { return savedState->getClipBounds(); }
 - bool LowLevelGraphicsSoftwareRenderer::isClipEmpty() const                            { return savedState->clip == nullptr; }
 - 
 - bool LowLevelGraphicsSoftwareRenderer::clipToRectangle (const Rectangle<int>& r)      { return savedState->clipToRectangle (r); }
 - bool LowLevelGraphicsSoftwareRenderer::clipToRectangleList (const RectangleList& r)   { return savedState->clipToRectangleList (r); }
 - void LowLevelGraphicsSoftwareRenderer::excludeClipRectangle (const Rectangle<int>& r) { savedState->excludeClipRectangle (r); }
 - 
 - void LowLevelGraphicsSoftwareRenderer::clipToPath (const Path& path, const AffineTransform& transform)
 - {
 -     savedState->clipToPath (path, transform);
 - }
 - 
 - void LowLevelGraphicsSoftwareRenderer::clipToImageAlpha (const Image& sourceImage, const AffineTransform& transform)
 - {
 -     savedState->clipToImageAlpha (sourceImage, transform);
 - }
 - 
 - bool LowLevelGraphicsSoftwareRenderer::clipRegionIntersects (const Rectangle<int>& r)
 - {
 -     return savedState->clipRegionIntersects (r);
 - }
 - 
 - //==============================================================================
 - void LowLevelGraphicsSoftwareRenderer::saveState()                              { savedState.save(); }
 - void LowLevelGraphicsSoftwareRenderer::restoreState()                           { savedState.restore(); }
 - 
 - void LowLevelGraphicsSoftwareRenderer::beginTransparencyLayer (float opacity)   { savedState.beginTransparencyLayer (opacity); }
 - void LowLevelGraphicsSoftwareRenderer::endTransparencyLayer()                   { savedState.endTransparencyLayer(); }
 - 
 - //==============================================================================
 - void LowLevelGraphicsSoftwareRenderer::setFill (const FillType& fillType)
 - {
 -     savedState->fillType = fillType;
 - }
 - 
 - void LowLevelGraphicsSoftwareRenderer::setOpacity (float newOpacity)
 - {
 -     savedState->fillType.setOpacity (newOpacity);
 - }
 - 
 - void LowLevelGraphicsSoftwareRenderer::setInterpolationQuality (Graphics::ResamplingQuality quality)
 - {
 -     savedState->interpolationQuality = quality;
 - }
 - 
 - //==============================================================================
 - void LowLevelGraphicsSoftwareRenderer::fillRect (const Rectangle<int>& r, const bool replaceExistingContents)
 - {
 -     savedState->fillRect (r, replaceExistingContents);
 - }
 - 
 - void LowLevelGraphicsSoftwareRenderer::fillPath (const Path& path, const AffineTransform& transform)
 - {
 -     savedState->fillPath (path, transform);
 - }
 - 
 - void LowLevelGraphicsSoftwareRenderer::drawImage (const Image& sourceImage, const AffineTransform& transform)
 - {
 -     savedState->renderImage (sourceImage, transform, nullptr);
 - }
 - 
 - void LowLevelGraphicsSoftwareRenderer::drawLine (const Line <float>& line)
 - {
 -     Path p;
 -     p.addLineSegment (line, 1.0f);
 -     fillPath (p, AffineTransform::identity);
 - }
 - 
 - void LowLevelGraphicsSoftwareRenderer::drawVerticalLine (const int x, const float top, const float bottom)
 - {
 -     if (bottom > top)
 -         savedState->fillRect (Rectangle<float> ((float) x, top, 1.0f, bottom - top));
 - }
 - 
 - void LowLevelGraphicsSoftwareRenderer::drawHorizontalLine (const int y, const float left, const float right)
 - {
 -     if (right > left)
 -         savedState->fillRect (Rectangle<float> (left, (float) y, right - left, 1.0f));
 - }
 - 
 - void LowLevelGraphicsSoftwareRenderer::drawGlyph (int glyphNumber, const AffineTransform& transform)
 - {
 -     const Font& f = savedState->font;
 - 
 -     if (transform.isOnlyTranslation() && savedState->transform.isOnlyTranslated)
 -     {
 -         using namespace RenderingHelpers;
 - 
 -         GlyphCache <CachedGlyphEdgeTable <SoftwareRendererSavedState>, SoftwareRendererSavedState>::getInstance()
 -             .drawGlyph (*savedState, f, glyphNumber,
 -                         transform.getTranslationX(),
 -                         transform.getTranslationY());
 -     }
 -     else
 -     {
 -         const float fontHeight = f.getHeight();
 -         savedState->drawGlyph (f, glyphNumber,
 -                                AffineTransform::scale (fontHeight * f.getHorizontalScale(), fontHeight)
 -                                                .followedBy (transform));
 -     }
 - }
 - 
 - void LowLevelGraphicsSoftwareRenderer::setFont (const Font& newFont)    { savedState->font = newFont; }
 - const Font& LowLevelGraphicsSoftwareRenderer::getFont()                 { return savedState->font; }
 
 
  |