@@ -364,6 +364,21 @@ public: | |||||
void resize (ValueTree& v, const Point<int>& distance, const Rectangle<int>& originalPos) | void resize (ValueTree& v, const Point<int>& distance, const Rectangle<int>& originalPos) | ||||
{ | { | ||||
Rectangle<int> r (originalPos); | |||||
if ((zones & zoneL) != 0) | |||||
r.setLeft (r.getX() + distance.getX()); | |||||
if ((zones & zoneT) != 0) | |||||
r.setTop (r.getY() + distance.getY()); | |||||
if ((zones & zoneR) != 0) | |||||
r.setWidth (r.getWidth() + distance.getX()); | |||||
if ((zones & zoneB) != 0) | |||||
r.setHeight (r.getHeight() + distance.getY()); | |||||
v.setProperty (compBoundsProperty, componentBoundsToString (r), document.getUndoManager()); | |||||
} | } | ||||
private: | private: | ||||
@@ -153,12 +153,12 @@ private: | |||||
ComponentEditor& editor; | ComponentEditor& editor; | ||||
//============================================================================== | //============================================================================== | ||||
class ComponentSelectorFrame : public Component, | |||||
public ComponentListener | |||||
class ComponentResizeFrame : public Component, | |||||
public ComponentListener | |||||
{ | { | ||||
public: | public: | ||||
ComponentSelectorFrame (ComponentCanvas& canvas_, | |||||
Component* componentToAttachTo) | |||||
ComponentResizeFrame (ComponentCanvas& canvas_, | |||||
Component* componentToAttachTo) | |||||
: canvas (canvas_), | : canvas (canvas_), | ||||
component (componentToAttachTo), | component (componentToAttachTo), | ||||
borderThickness (4) | borderThickness (4) | ||||
@@ -167,7 +167,7 @@ private: | |||||
componentToAttachTo->addComponentListener (this); | componentToAttachTo->addComponentListener (this); | ||||
} | } | ||||
~ComponentSelectorFrame() | |||||
~ComponentResizeFrame() | |||||
{ | { | ||||
if (component != 0) | if (component != 0) | ||||
component->removeComponentListener (this); | component->removeComponentListener (this); | ||||
@@ -181,13 +181,13 @@ private: | |||||
void mouseEnter (const MouseEvent& e) | void mouseEnter (const MouseEvent& e) | ||||
{ | { | ||||
repaint(); | |||||
//repaint(); | |||||
updateDragZone (e.getPosition()); | updateDragZone (e.getPosition()); | ||||
} | } | ||||
void mouseExit (const MouseEvent& e) | void mouseExit (const MouseEvent& e) | ||||
{ | { | ||||
repaint(); | |||||
//repaint(); | |||||
updateDragZone (e.getPosition()); | updateDragZone (e.getPosition()); | ||||
} | } | ||||
@@ -227,8 +227,9 @@ private: | |||||
setBounds (component->getBounds().expanded (borderThickness, borderThickness)); | setBounds (component->getBounds().expanded (borderThickness, borderThickness)); | ||||
} | } | ||||
void resized() | |||||
bool hitTest (int x, int y) | |||||
{ | { | ||||
return ! getCentreArea().contains (x, y); | |||||
} | } | ||||
uint32 getTargetComponentUID() const { return component == 0 ? 0 : component->getComponentUID(); } | uint32 getTargetComponentUID() const { return component == 0 ? 0 : component->getComponentUID(); } | ||||
@@ -239,14 +240,16 @@ private: | |||||
int dragZone; | int dragZone; | ||||
const int borderThickness; | const int borderThickness; | ||||
const Rectangle<int> getCentreArea() const | |||||
{ | |||||
return Rectangle<int> (0, 0, getWidth(), getHeight()).reduced (borderThickness, borderThickness); | |||||
} | |||||
void updateDragZone (const Point<int>& p) | void updateDragZone (const Point<int>& p) | ||||
{ | { | ||||
int newZone = 0; | int newZone = 0; | ||||
Rectangle<int> r (0, 0, getWidth(), getHeight()); | |||||
r = r.reduced (borderThickness, borderThickness); | |||||
if (! r.contains (p)) | |||||
if (! getCentreArea().contains (p)) | |||||
{ | { | ||||
const int bw = jmax (borderThickness, proportionOfWidth (0.1f), jmin (10, proportionOfWidth (0.33f))); | const int bw = jmax (borderThickness, proportionOfWidth (0.1f), jmin (10, proportionOfWidth (0.33f))); | ||||
const int bh = jmax (borderThickness, proportionOfHeight (0.1f), jmin (10, proportionOfHeight (0.33f))); | const int bh = jmax (borderThickness, proportionOfHeight (0.1f), jmin (10, proportionOfHeight (0.33f))); | ||||
@@ -311,6 +314,8 @@ private: | |||||
void mouseDown (const MouseEvent& e) | void mouseDown (const MouseEvent& e) | ||||
{ | { | ||||
lasso = 0; | lasso = 0; | ||||
mouseDownCompUID = 0; | |||||
isDraggingClickedComp = false; | |||||
if (e.mods.isPopupMenu()) | if (e.mods.isPopupMenu()) | ||||
{ | { | ||||
@@ -343,7 +348,20 @@ private: | |||||
void mouseDrag (const MouseEvent& e) | void mouseDrag (const MouseEvent& e) | ||||
{ | { | ||||
if (lasso != 0) | if (lasso != 0) | ||||
{ | |||||
lasso->dragLasso (e); | lasso->dragLasso (e); | ||||
} | |||||
else if (mouseDownCompUID != 0 && (! e.mouseWasClicked()) && (! e.mods.isPopupMenu())) | |||||
{ | |||||
if (! isDraggingClickedComp) | |||||
{ | |||||
isDraggingClickedComp = true; | |||||
canvas.getSelection().addToSelectionOnMouseUp (mouseDownCompUID, e.mods, true, mouseDownResult); | |||||
canvas.getDocument().beginDrag (canvas.getSelectedComps(), e, 0); | |||||
} | |||||
canvas.getDocument().continueDrag (e); | |||||
} | |||||
} | } | ||||
void mouseUp (const MouseEvent& e) | void mouseUp (const MouseEvent& e) | ||||
@@ -356,9 +374,10 @@ private: | |||||
if (e.mouseWasClicked()) | if (e.mouseWasClicked()) | ||||
canvas.getSelection().deselectAll(); | canvas.getSelection().deselectAll(); | ||||
} | } | ||||
else | |||||
else if (! e.mods.isPopupMenu()) | |||||
{ | { | ||||
canvas.getSelection().addToSelectionOnMouseUp (mouseDownCompUID, e.mods, ! e.mouseWasClicked(), mouseDownResult); | |||||
if (! isDraggingClickedComp) | |||||
canvas.getSelection().addToSelectionOnMouseUp (mouseDownCompUID, e.mods, ! e.mouseWasClicked(), mouseDownResult); | |||||
} | } | ||||
} | } | ||||
@@ -369,7 +388,7 @@ private: | |||||
for (int i = canvas.getComponentHolder()->getNumChildComponents(); --i >= 0;) | for (int i = canvas.getComponentHolder()->getNumChildComponents(); --i >= 0;) | ||||
{ | { | ||||
Component* c = canvas.getComponentHolder()->getChildComponent(i); | Component* c = canvas.getComponentHolder()->getChildComponent(i); | ||||
if (c != this && c->getBounds().intersects (lassoArea)) | |||||
if (c->getBounds().intersects (lassoArea)) | |||||
itemsFound.add (c->getComponentUID()); | itemsFound.add (c->getComponentUID()); | ||||
} | } | ||||
} | } | ||||
@@ -378,38 +397,43 @@ private: | |||||
void changeListenerCallback (void*) | void changeListenerCallback (void*) | ||||
{ | { | ||||
updateSelectedComponentOverlays(); | |||||
updateSelectedComponentResizeFrames(); | |||||
} | |||||
void modifierKeysChanged (const ModifierKeys&) | |||||
{ | |||||
Desktop::getInstance().getMainMouseSource().triggerFakeMove(); | |||||
} | } | ||||
private: | private: | ||||
ComponentCanvas& canvas; | ComponentCanvas& canvas; | ||||
ScopedPointer <LassoComponent <ComponentDocument::SelectedItems::ItemType> > lasso; | ScopedPointer <LassoComponent <ComponentDocument::SelectedItems::ItemType> > lasso; | ||||
bool mouseDownResult; | |||||
bool mouseDownResult, isDraggingClickedComp; | |||||
uint32 mouseDownCompUID; | uint32 mouseDownCompUID; | ||||
ComponentSelectorFrame* getSelectorFrameFor (Component* c) const | |||||
ComponentResizeFrame* getSelectorFrameFor (Component* c) const | |||||
{ | { | ||||
for (int i = getNumChildComponents(); --i >= 0;) | for (int i = getNumChildComponents(); --i >= 0;) | ||||
{ | { | ||||
ComponentSelectorFrame* overlay = dynamic_cast <ComponentSelectorFrame*> (getChildComponent(i)); | |||||
if (overlay != 0 && overlay->getTargetComponentUID() == c->getComponentUID()) | |||||
return overlay; | |||||
ComponentResizeFrame* resizer = dynamic_cast <ComponentResizeFrame*> (getChildComponent(i)); | |||||
if (resizer != 0 && resizer->getTargetComponentUID() == c->getComponentUID()) | |||||
return resizer; | |||||
} | } | ||||
return 0; | return 0; | ||||
} | } | ||||
void updateSelectedComponentOverlays() | |||||
void updateSelectedComponentResizeFrames() | |||||
{ | { | ||||
ComponentDocument::SelectedItems& selection = canvas.getSelection(); | ComponentDocument::SelectedItems& selection = canvas.getSelection(); | ||||
int i; | int i; | ||||
for (i = getNumChildComponents(); --i >= 0;) | for (i = getNumChildComponents(); --i >= 0;) | ||||
{ | { | ||||
ComponentSelectorFrame* overlay = dynamic_cast <ComponentSelectorFrame*> (getChildComponent(i)); | |||||
ComponentResizeFrame* resizer = dynamic_cast <ComponentResizeFrame*> (getChildComponent(i)); | |||||
if (overlay != 0 && ! selection.isSelected (overlay->getTargetComponentUID())) | |||||
delete overlay; | |||||
if (resizer != 0 && ! selection.isSelected (resizer->getTargetComponentUID())) | |||||
delete resizer; | |||||
} | } | ||||
for (i = canvas.getComponentHolder()->getNumChildComponents(); --i >= 0;) | for (i = canvas.getComponentHolder()->getNumChildComponents(); --i >= 0;) | ||||
@@ -417,7 +441,7 @@ private: | |||||
Component* c = canvas.getComponentHolder()->getChildComponent(i); | Component* c = canvas.getComponentHolder()->getChildComponent(i); | ||||
if (c != this && selection.isSelected (c->getComponentUID()) && getSelectorFrameFor (c) == 0) | if (c != this && selection.isSelected (c->getComponentUID()) && getSelectorFrameFor (c) == 0) | ||||
addAndMakeVisible (new ComponentSelectorFrame (canvas, c)); | |||||
addAndMakeVisible (new ComponentResizeFrame (canvas, c)); | |||||
} | } | ||||
} | } | ||||
}; | }; | ||||
@@ -428,7 +452,7 @@ private: | |||||
Component* getComponentForUID (const uint32 uid) const | Component* getComponentForUID (const uint32 uid) const | ||||
{ | { | ||||
for (int i = getNumChildComponents(); --i >= 0;) | |||||
for (int i = componentHolder->getNumChildComponents(); --i >= 0;) | |||||
if (componentHolder->getChildComponent (i)->getComponentUID() == uid) | if (componentHolder->getChildComponent (i)->getComponentUID() == uid) | ||||
return componentHolder->getChildComponent (i); | return componentHolder->getChildComponent (i); | ||||
@@ -79614,7 +79614,7 @@ LowLevelGraphicsContext::~LowLevelGraphicsContext() | |||||
{ | { | ||||
} | } | ||||
Graphics::Graphics (Image& imageToDrawOnto) throw() | |||||
Graphics::Graphics (Image& imageToDrawOnto) | |||||
: context (imageToDrawOnto.createLowLevelContext()), | : context (imageToDrawOnto.createLowLevelContext()), | ||||
contextToDelete (context), | contextToDelete (context), | ||||
saveStatePending (false) | saveStatePending (false) | ||||
@@ -79627,11 +79627,11 @@ Graphics::Graphics (LowLevelGraphicsContext* const internalContext) throw() | |||||
{ | { | ||||
} | } | ||||
Graphics::~Graphics() throw() | |||||
Graphics::~Graphics() | |||||
{ | { | ||||
} | } | ||||
void Graphics::resetToDefaultState() throw() | |||||
void Graphics::resetToDefaultState() | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setFill (FillType()); | context->setFill (FillType()); | ||||
@@ -79639,61 +79639,60 @@ void Graphics::resetToDefaultState() throw() | |||||
context->setInterpolationQuality (defaultQuality); | context->setInterpolationQuality (defaultQuality); | ||||
} | } | ||||
bool Graphics::isVectorDevice() const throw() | |||||
bool Graphics::isVectorDevice() const | |||||
{ | { | ||||
return context->isVectorDevice(); | return context->isVectorDevice(); | ||||
} | } | ||||
bool Graphics::reduceClipRegion (const int x, const int y, | |||||
const int w, const int h) throw() | |||||
bool Graphics::reduceClipRegion (const int x, const int y, const int w, const int h) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
return context->clipToRectangle (Rectangle<int> (x, y, w, h)); | return context->clipToRectangle (Rectangle<int> (x, y, w, h)); | ||||
} | } | ||||
bool Graphics::reduceClipRegion (const RectangleList& clipRegion) throw() | |||||
bool Graphics::reduceClipRegion (const RectangleList& clipRegion) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
return context->clipToRectangleList (clipRegion); | return context->clipToRectangleList (clipRegion); | ||||
} | } | ||||
bool Graphics::reduceClipRegion (const Path& path, const AffineTransform& transform) throw() | |||||
bool Graphics::reduceClipRegion (const Path& path, const AffineTransform& transform) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->clipToPath (path, transform); | context->clipToPath (path, transform); | ||||
return ! context->isClipEmpty(); | return ! context->isClipEmpty(); | ||||
} | } | ||||
bool Graphics::reduceClipRegion (const Image& image, const Rectangle<int>& sourceClipRegion, const AffineTransform& transform) throw() | |||||
bool Graphics::reduceClipRegion (const Image& image, const Rectangle<int>& sourceClipRegion, const AffineTransform& transform) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->clipToImageAlpha (image, sourceClipRegion, transform); | context->clipToImageAlpha (image, sourceClipRegion, transform); | ||||
return ! context->isClipEmpty(); | return ! context->isClipEmpty(); | ||||
} | } | ||||
void Graphics::excludeClipRegion (const Rectangle<int>& rectangleToExclude) throw() | |||||
void Graphics::excludeClipRegion (const Rectangle<int>& rectangleToExclude) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->excludeClipRectangle (rectangleToExclude); | context->excludeClipRectangle (rectangleToExclude); | ||||
} | } | ||||
bool Graphics::isClipEmpty() const throw() | |||||
bool Graphics::isClipEmpty() const | |||||
{ | { | ||||
return context->isClipEmpty(); | return context->isClipEmpty(); | ||||
} | } | ||||
const Rectangle<int> Graphics::getClipBounds() const throw() | |||||
const Rectangle<int> Graphics::getClipBounds() const | |||||
{ | { | ||||
return context->getClipBounds(); | return context->getClipBounds(); | ||||
} | } | ||||
void Graphics::saveState() throw() | |||||
void Graphics::saveState() | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
saveStatePending = true; | saveStatePending = true; | ||||
} | } | ||||
void Graphics::restoreState() throw() | |||||
void Graphics::restoreState() | |||||
{ | { | ||||
if (saveStatePending) | if (saveStatePending) | ||||
saveStatePending = false; | saveStatePending = false; | ||||
@@ -79701,7 +79700,7 @@ void Graphics::restoreState() throw() | |||||
context->restoreState(); | context->restoreState(); | ||||
} | } | ||||
void Graphics::saveStateIfPending() throw() | |||||
void Graphics::saveStateIfPending() | |||||
{ | { | ||||
if (saveStatePending) | if (saveStatePending) | ||||
{ | { | ||||
@@ -79710,61 +79709,54 @@ void Graphics::saveStateIfPending() throw() | |||||
} | } | ||||
} | } | ||||
void Graphics::setOrigin (const int newOriginX, | |||||
const int newOriginY) throw() | |||||
void Graphics::setOrigin (const int newOriginX, const int newOriginY) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setOrigin (newOriginX, newOriginY); | context->setOrigin (newOriginX, newOriginY); | ||||
} | } | ||||
bool Graphics::clipRegionIntersects (const int x, const int y, | |||||
const int w, const int h) const throw() | |||||
bool Graphics::clipRegionIntersects (const int x, const int y, const int w, const int h) const | |||||
{ | { | ||||
return context->clipRegionIntersects (Rectangle<int> (x, y, w, h)); | return context->clipRegionIntersects (Rectangle<int> (x, y, w, h)); | ||||
} | } | ||||
void Graphics::setColour (const Colour& newColour) throw() | |||||
void Graphics::setColour (const Colour& newColour) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setFill (FillType (newColour)); | |||||
context->setFill (newColour); | |||||
} | } | ||||
void Graphics::setOpacity (const float newOpacity) throw() | |||||
void Graphics::setOpacity (const float newOpacity) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setOpacity (newOpacity); | context->setOpacity (newOpacity); | ||||
} | } | ||||
void Graphics::setGradientFill (const ColourGradient& gradient) throw() | |||||
void Graphics::setGradientFill (const ColourGradient& gradient) | |||||
{ | { | ||||
saveStateIfPending(); | |||||
context->setFill (FillType (gradient)); | |||||
setFillType (gradient); | |||||
} | } | ||||
void Graphics::setTiledImageFill (const Image& imageToUse, | |||||
const int anchorX, | |||||
const int anchorY, | |||||
const float opacity) throw() | |||||
void Graphics::setTiledImageFill (const Image& imageToUse, const int anchorX, const int anchorY, const float opacity) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setFill (FillType (imageToUse, AffineTransform::translation ((float) anchorX, (float) anchorY))); | context->setFill (FillType (imageToUse, AffineTransform::translation ((float) anchorX, (float) anchorY))); | ||||
context->setOpacity (opacity); | context->setOpacity (opacity); | ||||
} | } | ||||
void Graphics::setFillType (const FillType& newFill) throw() | |||||
void Graphics::setFillType (const FillType& newFill) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setFill (newFill); | context->setFill (newFill); | ||||
} | } | ||||
void Graphics::setFont (const Font& newFont) throw() | |||||
void Graphics::setFont (const Font& newFont) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setFont (newFont); | context->setFont (newFont); | ||||
} | } | ||||
void Graphics::setFont (const float newFontHeight, | |||||
const int newFontStyleFlags) throw() | |||||
void Graphics::setFont (const float newFontHeight, const int newFontStyleFlags) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
Font f (context->getFont()); | Font f (context->getFont()); | ||||
@@ -79772,9 +79764,7 @@ void Graphics::setFont (const float newFontHeight, | |||||
context->setFont (f); | context->setFont (f); | ||||
} | } | ||||
void Graphics::drawSingleLineText (const String& text, | |||||
const int startX, | |||||
const int baselineY) const throw() | |||||
void Graphics::drawSingleLineText (const String& text, const int startX, const int baselineY) const | |||||
{ | { | ||||
if (text.isNotEmpty() | if (text.isNotEmpty() | ||||
&& startX < context->getClipBounds().getRight()) | && startX < context->getClipBounds().getRight()) | ||||
@@ -79785,8 +79775,7 @@ void Graphics::drawSingleLineText (const String& text, | |||||
} | } | ||||
} | } | ||||
void Graphics::drawTextAsPath (const String& text, | |||||
const AffineTransform& transform) const throw() | |||||
void Graphics::drawTextAsPath (const String& text, const AffineTransform& transform) const | |||||
{ | { | ||||
if (text.isNotEmpty()) | if (text.isNotEmpty()) | ||||
{ | { | ||||
@@ -79796,10 +79785,7 @@ void Graphics::drawTextAsPath (const String& text, | |||||
} | } | ||||
} | } | ||||
void Graphics::drawMultiLineText (const String& text, | |||||
const int startX, | |||||
const int baselineY, | |||||
const int maximumLineWidth) const throw() | |||||
void Graphics::drawMultiLineText (const String& text, const int startX, const int baselineY, const int maximumLineWidth) const | |||||
{ | { | ||||
if (text.isNotEmpty() | if (text.isNotEmpty() | ||||
&& startX < context->getClipBounds().getRight()) | && startX < context->getClipBounds().getRight()) | ||||
@@ -79813,37 +79799,30 @@ void Graphics::drawMultiLineText (const String& text, | |||||
} | } | ||||
void Graphics::drawText (const String& text, | void Graphics::drawText (const String& text, | ||||
const int x, | |||||
const int y, | |||||
const int width, | |||||
const int height, | |||||
const int x, const int y, const int width, const int height, | |||||
const Justification& justificationType, | const Justification& justificationType, | ||||
const bool useEllipsesIfTooBig) const throw() | |||||
const bool useEllipsesIfTooBig) const | |||||
{ | { | ||||
if (text.isNotEmpty() && context->clipRegionIntersects (Rectangle<int> (x, y, width, height))) | if (text.isNotEmpty() && context->clipRegionIntersects (Rectangle<int> (x, y, width, height))) | ||||
{ | { | ||||
GlyphArrangement arr; | GlyphArrangement arr; | ||||
arr.addCurtailedLineOfText (context->getFont(), text, | arr.addCurtailedLineOfText (context->getFont(), text, | ||||
0.0f, 0.0f, (float)width, | |||||
0.0f, 0.0f, (float) width, | |||||
useEllipsesIfTooBig); | useEllipsesIfTooBig); | ||||
arr.justifyGlyphs (0, arr.getNumGlyphs(), | arr.justifyGlyphs (0, arr.getNumGlyphs(), | ||||
(float) x, (float) y, | |||||
(float) width, (float) height, | |||||
(float) x, (float) y, (float) width, (float) height, | |||||
justificationType); | justificationType); | ||||
arr.draw (*this); | arr.draw (*this); | ||||
} | } | ||||
} | } | ||||
void Graphics::drawFittedText (const String& text, | void Graphics::drawFittedText (const String& text, | ||||
const int x, | |||||
const int y, | |||||
const int width, | |||||
const int height, | |||||
const int x, const int y, const int width, const int height, | |||||
const Justification& justification, | const Justification& justification, | ||||
const int maximumNumberOfLines, | const int maximumNumberOfLines, | ||||
const float minimumHorizontalScale) const throw() | |||||
const float minimumHorizontalScale) const | |||||
{ | { | ||||
if (text.isNotEmpty() | if (text.isNotEmpty() | ||||
&& width > 0 && height > 0 | && width > 0 && height > 0 | ||||
@@ -79852,8 +79831,7 @@ void Graphics::drawFittedText (const String& text, | |||||
GlyphArrangement arr; | GlyphArrangement arr; | ||||
arr.addFittedText (context->getFont(), text, | arr.addFittedText (context->getFont(), text, | ||||
(float) x, (float) y, | |||||
(float) width, (float) height, | |||||
(float) x, (float) y, (float) width, (float) height, | |||||
justification, | justification, | ||||
maximumNumberOfLines, | maximumNumberOfLines, | ||||
minimumHorizontalScale); | minimumHorizontalScale); | ||||
@@ -79862,10 +79840,7 @@ void Graphics::drawFittedText (const String& text, | |||||
} | } | ||||
} | } | ||||
void Graphics::fillRect (int x, | |||||
int y, | |||||
int width, | |||||
int height) const throw() | |||||
void Graphics::fillRect (int x, int y, int width, int height) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -79873,15 +79848,12 @@ void Graphics::fillRect (int x, | |||||
context->fillRect (Rectangle<int> (x, y, width, height), false); | context->fillRect (Rectangle<int> (x, y, width, height), false); | ||||
} | } | ||||
void Graphics::fillRect (const Rectangle<int>& r) const throw() | |||||
void Graphics::fillRect (const Rectangle<int>& r) const | |||||
{ | { | ||||
context->fillRect (r, false); | context->fillRect (r, false); | ||||
} | } | ||||
void Graphics::fillRect (const float x, | |||||
const float y, | |||||
const float width, | |||||
const float height) const throw() | |||||
void Graphics::fillRect (const float x, const float y, const float width, const float height) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -79891,31 +79863,30 @@ void Graphics::fillRect (const float x, | |||||
fillPath (p); | fillPath (p); | ||||
} | } | ||||
void Graphics::setPixel (int x, int y) const throw() | |||||
void Graphics::setPixel (int x, int y) const | |||||
{ | { | ||||
context->fillRect (Rectangle<int> (x, y, 1, 1), false); | context->fillRect (Rectangle<int> (x, y, 1, 1), false); | ||||
} | } | ||||
void Graphics::fillAll() const throw() | |||||
void Graphics::fillAll() const | |||||
{ | { | ||||
fillRect (context->getClipBounds()); | fillRect (context->getClipBounds()); | ||||
} | } | ||||
void Graphics::fillAll (const Colour& colourToUse) const throw() | |||||
void Graphics::fillAll (const Colour& colourToUse) const | |||||
{ | { | ||||
if (! colourToUse.isTransparent()) | if (! colourToUse.isTransparent()) | ||||
{ | { | ||||
const Rectangle<int> clip (context->getClipBounds()); | const Rectangle<int> clip (context->getClipBounds()); | ||||
context->saveState(); | context->saveState(); | ||||
context->setFill (FillType (colourToUse)); | |||||
context->setFill (colourToUse); | |||||
context->fillRect (clip, false); | context->fillRect (clip, false); | ||||
context->restoreState(); | context->restoreState(); | ||||
} | } | ||||
} | } | ||||
void Graphics::fillPath (const Path& path, | |||||
const AffineTransform& transform) const throw() | |||||
void Graphics::fillPath (const Path& path, const AffineTransform& transform) const | |||||
{ | { | ||||
if ((! context->isClipEmpty()) && ! path.isEmpty()) | if ((! context->isClipEmpty()) && ! path.isEmpty()) | ||||
context->fillPath (path, transform); | context->fillPath (path, transform); | ||||
@@ -79923,18 +79894,15 @@ void Graphics::fillPath (const Path& path, | |||||
void Graphics::strokePath (const Path& path, | void Graphics::strokePath (const Path& path, | ||||
const PathStrokeType& strokeType, | const PathStrokeType& strokeType, | ||||
const AffineTransform& transform) const throw() | |||||
const AffineTransform& transform) const | |||||
{ | { | ||||
Path stroke; | Path stroke; | ||||
strokeType.createStrokedPath (stroke, path, transform); | strokeType.createStrokedPath (stroke, path, transform); | ||||
fillPath (stroke); | fillPath (stroke); | ||||
} | } | ||||
void Graphics::drawRect (const int x, | |||||
const int y, | |||||
const int width, | |||||
const int height, | |||||
const int lineThickness) const throw() | |||||
void Graphics::drawRect (const int x, const int y, const int width, const int height, | |||||
const int lineThickness) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -79945,11 +79913,7 @@ void Graphics::drawRect (const int x, | |||||
context->fillRect (Rectangle<int> (x, y + height - lineThickness, width, lineThickness), false); | context->fillRect (Rectangle<int> (x, y + height - lineThickness, width, lineThickness), false); | ||||
} | } | ||||
void Graphics::drawRect (const float x, | |||||
const float y, | |||||
const float width, | |||||
const float height, | |||||
const float lineThickness) const throw() | |||||
void Graphics::drawRect (const float x, const float y, const float width, const float height, const float lineThickness) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -79962,23 +79926,14 @@ void Graphics::drawRect (const float x, | |||||
fillPath (p); | fillPath (p); | ||||
} | } | ||||
void Graphics::drawRect (const Rectangle<int>& r, | |||||
const int lineThickness) const throw() | |||||
void Graphics::drawRect (const Rectangle<int>& r, const int lineThickness) const | |||||
{ | { | ||||
drawRect (r.getX(), r.getY(), | |||||
r.getWidth(), r.getHeight(), | |||||
lineThickness); | |||||
drawRect (r.getX(), r.getY(), r.getWidth(), r.getHeight(), lineThickness); | |||||
} | } | ||||
void Graphics::drawBevel (const int x, | |||||
const int y, | |||||
const int width, | |||||
const int height, | |||||
const int bevelThickness, | |||||
const Colour& topLeftColour, | |||||
const Colour& bottomRightColour, | |||||
const bool useGradient, | |||||
const bool sharpEdgeOnOutside) const throw() | |||||
void Graphics::drawBevel (const int x, const int y, const int width, const int height, | |||||
const int bevelThickness, const Colour& topLeftColour, const Colour& bottomRightColour, | |||||
const bool useGradient, const bool sharpEdgeOnOutside) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -79995,13 +79950,13 @@ void Graphics::drawBevel (const int x, | |||||
const float op = useGradient ? ramp * (sharpEdgeOnOutside ? bevelThickness - i : i) | const float op = useGradient ? ramp * (sharpEdgeOnOutside ? bevelThickness - i : i) | ||||
: oldOpacity; | : oldOpacity; | ||||
context->setFill (FillType (topLeftColour.withMultipliedAlpha (op))); | |||||
context->setFill (topLeftColour.withMultipliedAlpha (op)); | |||||
context->fillRect (Rectangle<int> (x + i, y + i, width - i * 2, 1), false); | context->fillRect (Rectangle<int> (x + i, y + i, width - i * 2, 1), false); | ||||
context->setFill (FillType (topLeftColour.withMultipliedAlpha (op * 0.75f))); | |||||
context->setFill (topLeftColour.withMultipliedAlpha (op * 0.75f)); | |||||
context->fillRect (Rectangle<int> (x + i, y + i + 1, 1, height - i * 2 - 2), false); | context->fillRect (Rectangle<int> (x + i, y + i + 1, 1, height - i * 2 - 2), false); | ||||
context->setFill (FillType (bottomRightColour.withMultipliedAlpha (op))); | |||||
context->setFill (bottomRightColour.withMultipliedAlpha (op)); | |||||
context->fillRect (Rectangle<int> (x + i, y + height - i - 1, width - i * 2, 1), false); | context->fillRect (Rectangle<int> (x + i, y + height - i - 1, width - i * 2, 1), false); | ||||
context->setFill (FillType (bottomRightColour.withMultipliedAlpha (op * 0.75f))); | |||||
context->setFill (bottomRightColour.withMultipliedAlpha (op * 0.75f)); | |||||
context->fillRect (Rectangle<int> (x + width - i - 1, y + i + 1, 1, height - i * 2 - 2), false); | context->fillRect (Rectangle<int> (x + width - i - 1, y + i + 1, 1, height - i * 2 - 2), false); | ||||
} | } | ||||
@@ -80009,10 +79964,7 @@ void Graphics::drawBevel (const int x, | |||||
} | } | ||||
} | } | ||||
void Graphics::fillEllipse (const float x, | |||||
const float y, | |||||
const float width, | |||||
const float height) const throw() | |||||
void Graphics::fillEllipse (const float x, const float y, const float width, const float height) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -80022,11 +79974,8 @@ void Graphics::fillEllipse (const float x, | |||||
fillPath (p); | fillPath (p); | ||||
} | } | ||||
void Graphics::drawEllipse (const float x, | |||||
const float y, | |||||
const float width, | |||||
const float height, | |||||
const float lineThickness) const throw() | |||||
void Graphics::drawEllipse (const float x, const float y, const float width, const float height, | |||||
const float lineThickness) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -80036,11 +79985,7 @@ void Graphics::drawEllipse (const float x, | |||||
strokePath (p, PathStrokeType (lineThickness)); | strokePath (p, PathStrokeType (lineThickness)); | ||||
} | } | ||||
void Graphics::fillRoundedRectangle (const float x, | |||||
const float y, | |||||
const float width, | |||||
const float height, | |||||
const float cornerSize) const throw() | |||||
void Graphics::fillRoundedRectangle (const float x, const float y, const float width, const float height, const float cornerSize) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -80050,22 +79995,13 @@ void Graphics::fillRoundedRectangle (const float x, | |||||
fillPath (p); | fillPath (p); | ||||
} | } | ||||
void Graphics::fillRoundedRectangle (const Rectangle<int>& r, | |||||
const float cornerSize) const throw() | |||||
void Graphics::fillRoundedRectangle (const Rectangle<float>& r, const float cornerSize) const | |||||
{ | { | ||||
fillRoundedRectangle ((float) r.getX(), | |||||
(float) r.getY(), | |||||
(float) r.getWidth(), | |||||
(float) r.getHeight(), | |||||
cornerSize); | |||||
fillRoundedRectangle (r.getX(), r.getY(), r.getWidth(), r.getHeight(), cornerSize); | |||||
} | } | ||||
void Graphics::drawRoundedRectangle (const float x, | |||||
const float y, | |||||
const float width, | |||||
const float height, | |||||
const float cornerSize, | |||||
const float lineThickness) const throw() | |||||
void Graphics::drawRoundedRectangle (const float x, const float y, const float width, const float height, | |||||
const float cornerSize, const float lineThickness) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -80075,24 +80011,13 @@ void Graphics::drawRoundedRectangle (const float x, | |||||
strokePath (p, PathStrokeType (lineThickness)); | strokePath (p, PathStrokeType (lineThickness)); | ||||
} | } | ||||
void Graphics::drawRoundedRectangle (const Rectangle<int>& r, | |||||
const float cornerSize, | |||||
const float lineThickness) const throw() | |||||
void Graphics::drawRoundedRectangle (const Rectangle<float>& r, const float cornerSize, const float lineThickness) const | |||||
{ | { | ||||
drawRoundedRectangle ((float) r.getX(), | |||||
(float) r.getY(), | |||||
(float) r.getWidth(), | |||||
(float) r.getHeight(), | |||||
cornerSize, lineThickness); | |||||
drawRoundedRectangle (r.getX(), r.getY(), r.getWidth(), r.getHeight(), cornerSize, lineThickness); | |||||
} | } | ||||
void Graphics::drawArrow (const float startX, | |||||
const float startY, | |||||
const float endX, | |||||
const float endY, | |||||
const float lineThickness, | |||||
const float arrowheadWidth, | |||||
const float arrowheadLength) const throw() | |||||
void Graphics::drawArrow (const float startX, const float startY, const float endX, const float endY, | |||||
const float lineThickness, const float arrowheadWidth, const float arrowheadLength) const | |||||
{ | { | ||||
Path p; | Path p; | ||||
p.addArrow (startX, startY, endX, endY, | p.addArrow (startX, startY, endX, endY, | ||||
@@ -80100,12 +80025,9 @@ void Graphics::drawArrow (const float startX, | |||||
fillPath (p); | fillPath (p); | ||||
} | } | ||||
void Graphics::fillCheckerBoard (int x, int y, | |||||
int width, int height, | |||||
const int checkWidth, | |||||
const int checkHeight, | |||||
const Colour& colour1, | |||||
const Colour& colour2) const throw() | |||||
void Graphics::fillCheckerBoard (int x, int y, int width, int height, | |||||
const int checkWidth, const int checkHeight, | |||||
const Colour& colour1, const Colour& colour2) const | |||||
{ | { | ||||
jassert (checkWidth > 0 && checkHeight > 0); // can't be zero or less! | jassert (checkWidth > 0 && checkHeight > 0); // can't be zero or less! | ||||
@@ -80115,7 +80037,7 @@ void Graphics::fillCheckerBoard (int x, int y, | |||||
if (colour1 == colour2) | if (colour1 == colour2) | ||||
{ | { | ||||
context->setFill (FillType (colour1)); | |||||
context->setFill (colour1); | |||||
context->fillRect (Rectangle<int> (x, y, width, height), false); | context->fillRect (Rectangle<int> (x, y, width, height), false); | ||||
} | } | ||||
else | else | ||||
@@ -80132,7 +80054,7 @@ void Graphics::fillCheckerBoard (int x, int y, | |||||
for (int xx = x; xx < right; xx += checkWidth) | for (int xx = x; xx < right; xx += checkWidth) | ||||
{ | { | ||||
context->setFill (FillType (((cx++ & 1) == 0) ? colour1 : colour2)); | |||||
context->setFill (((cx++ & 1) == 0) ? colour1 : colour2); | |||||
context->fillRect (Rectangle<int> (xx, y, jmin (checkWidth, right - xx), jmin (checkHeight, bottom - y)), | context->fillRect (Rectangle<int> (xx, y, jmin (checkWidth, right - xx), jmin (checkHeight, bottom - y)), | ||||
false); | false); | ||||
} | } | ||||
@@ -80146,50 +80068,45 @@ void Graphics::fillCheckerBoard (int x, int y, | |||||
} | } | ||||
} | } | ||||
void Graphics::drawVerticalLine (const int x, float top, float bottom) const throw() | |||||
void Graphics::drawVerticalLine (const int x, float top, float bottom) const | |||||
{ | { | ||||
context->drawVerticalLine (x, top, bottom); | context->drawVerticalLine (x, top, bottom); | ||||
} | } | ||||
void Graphics::drawHorizontalLine (const int y, float left, float right) const throw() | |||||
void Graphics::drawHorizontalLine (const int y, float left, float right) const | |||||
{ | { | ||||
context->drawHorizontalLine (y, left, right); | context->drawHorizontalLine (y, left, right); | ||||
} | } | ||||
void Graphics::drawLine (float x1, float y1, float x2, float y2) const throw() | |||||
void Graphics::drawLine (float x1, float y1, float x2, float y2) const | |||||
{ | { | ||||
context->drawLine (x1, y1, x2, y2); | context->drawLine (x1, y1, x2, y2); | ||||
} | } | ||||
void Graphics::drawLine (const float startX, | |||||
const float startY, | |||||
const float endX, | |||||
const float endY, | |||||
const float lineThickness) const throw() | |||||
void Graphics::drawLine (const float startX, const float startY, | |||||
const float endX, const float endY, | |||||
const float lineThickness) const | |||||
{ | { | ||||
Path p; | Path p; | ||||
p.addLineSegment (startX, startY, endX, endY, lineThickness); | p.addLineSegment (startX, startY, endX, endY, lineThickness); | ||||
fillPath (p); | fillPath (p); | ||||
} | } | ||||
void Graphics::drawLine (const Line& line) const throw() | |||||
void Graphics::drawLine (const Line& line) const | |||||
{ | { | ||||
drawLine (line.getStartX(), line.getStartY(), line.getEndX(), line.getEndY()); | drawLine (line.getStartX(), line.getStartY(), line.getEndX(), line.getEndY()); | ||||
} | } | ||||
void Graphics::drawLine (const Line& line, | |||||
const float lineThickness) const throw() | |||||
void Graphics::drawLine (const Line& line, const float lineThickness) const | |||||
{ | { | ||||
drawLine (line.getStartX(), line.getStartY(), line.getEndX(), line.getEndY(), lineThickness); | drawLine (line.getStartX(), line.getStartY(), line.getEndX(), line.getEndY(), lineThickness); | ||||
} | } | ||||
void Graphics::drawDashedLine (const float startX, | |||||
const float startY, | |||||
const float endX, | |||||
const float endY, | |||||
void Graphics::drawDashedLine (const float startX, const float startY, | |||||
const float endX, const float endY, | |||||
const float* const dashLengths, | const float* const dashLengths, | ||||
const int numDashLengths, | const int numDashLengths, | ||||
const float lineThickness) const throw() | |||||
const float lineThickness) const | |||||
{ | { | ||||
const double dx = endX - startX; | const double dx = endX - startX; | ||||
const double dy = endY - startY; | const double dy = endY - startY; | ||||
@@ -80226,16 +80143,15 @@ void Graphics::drawDashedLine (const float startX, | |||||
} | } | ||||
} | } | ||||
void Graphics::setImageResamplingQuality (const Graphics::ResamplingQuality newQuality) throw() | |||||
void Graphics::setImageResamplingQuality (const Graphics::ResamplingQuality newQuality) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setInterpolationQuality (newQuality); | context->setInterpolationQuality (newQuality); | ||||
} | } | ||||
void Graphics::drawImageAt (const Image* const imageToDraw, | void Graphics::drawImageAt (const Image* const imageToDraw, | ||||
const int topLeftX, | |||||
const int topLeftY, | |||||
const bool fillAlphaChannelWithCurrentBrush) const throw() | |||||
const int topLeftX, const int topLeftY, | |||||
const bool fillAlphaChannelWithCurrentBrush) const | |||||
{ | { | ||||
if (imageToDraw != 0) | if (imageToDraw != 0) | ||||
{ | { | ||||
@@ -80250,12 +80166,10 @@ void Graphics::drawImageAt (const Image* const imageToDraw, | |||||
} | } | ||||
void Graphics::drawImageWithin (const Image* const imageToDraw, | void Graphics::drawImageWithin (const Image* const imageToDraw, | ||||
const int destX, | |||||
const int destY, | |||||
const int destW, | |||||
const int destH, | |||||
const int destX, const int destY, | |||||
const int destW, const int destH, | |||||
const RectanglePlacement& placementWithinTarget, | const RectanglePlacement& placementWithinTarget, | ||||
const bool fillAlphaChannelWithCurrentBrush) const throw() | |||||
const bool fillAlphaChannelWithCurrentBrush) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (destX, destY, destW, destH)); | jassert (areCoordsSensibleNumbers (destX, destY, destW, destH)); | ||||
@@ -80289,7 +80203,7 @@ void Graphics::drawImageWithin (const Image* const imageToDraw, | |||||
void Graphics::drawImage (const Image* const imageToDraw, | void Graphics::drawImage (const Image* const imageToDraw, | ||||
int dx, int dy, int dw, int dh, | int dx, int dy, int dw, int dh, | ||||
int sx, int sy, int sw, int sh, | int sx, int sy, int sw, int sh, | ||||
const bool fillAlphaChannelWithCurrentBrush) const throw() | |||||
const bool fillAlphaChannelWithCurrentBrush) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (dx, dy, dw, dh)); | jassert (areCoordsSensibleNumbers (dx, dy, dw, dh)); | ||||
@@ -80307,7 +80221,7 @@ void Graphics::drawImage (const Image* const imageToDraw, | |||||
void Graphics::drawImageTransformed (const Image* const imageToDraw, | void Graphics::drawImageTransformed (const Image* const imageToDraw, | ||||
const Rectangle<int>& imageSubRegion, | const Rectangle<int>& imageSubRegion, | ||||
const AffineTransform& transform, | const AffineTransform& transform, | ||||
const bool fillAlphaChannelWithCurrentBrush) const throw() | |||||
const bool fillAlphaChannelWithCurrentBrush) const | |||||
{ | { | ||||
if (imageToDraw != 0 && ! context->isClipEmpty()) | if (imageToDraw != 0 && ! context->isClipEmpty()) | ||||
{ | { | ||||
@@ -83105,8 +83019,8 @@ END_JUCE_NAMESPACE | |||||
BEGIN_JUCE_NAMESPACE | BEGIN_JUCE_NAMESPACE | ||||
DrawablePath::DrawablePath() | DrawablePath::DrawablePath() | ||||
: mainFill (FillType (Colours::black)), | |||||
strokeFill (FillType (Colours::transparentBlack)), | |||||
: mainFill (Colours::black), | |||||
strokeFill (Colours::transparentBlack), | |||||
strokeType (0.0f) | strokeType (0.0f) | ||||
{ | { | ||||
} | } | ||||
@@ -83205,8 +83119,8 @@ static const FillType readFillTypeFromTree (const ValueTree& v) | |||||
if (type.equalsIgnoreCase ("solid")) | if (type.equalsIgnoreCase ("solid")) | ||||
{ | { | ||||
const String colour (v ["colour"].toString()); | const String colour (v ["colour"].toString()); | ||||
return FillType (Colour (colour.isEmpty() ? (uint32) 0xff000000 | |||||
: (uint32) colour.getHexValue32())); | |||||
return Colour (colour.isEmpty() ? (uint32) 0xff000000 | |||||
: (uint32) colour.getHexValue32()); | |||||
} | } | ||||
else if (type.equalsIgnoreCase ("gradient")) | else if (type.equalsIgnoreCase ("gradient")) | ||||
{ | { | ||||
@@ -83224,7 +83138,7 @@ static const FillType readFillTypeFromTree (const ValueTree& v) | |||||
g.addColour (colours[i * 2].getDoubleValue(), | g.addColour (colours[i * 2].getDoubleValue(), | ||||
Colour ((uint32) colours[i * 2 + 1].getHexValue32())); | Colour ((uint32) colours[i * 2 + 1].getHexValue32())); | ||||
return FillType (g); | |||||
return g; | |||||
} | } | ||||
jassertfalse | jassertfalse | ||||
@@ -83977,7 +83891,7 @@ private: | |||||
DrawablePath* dp = new DrawablePath(); | DrawablePath* dp = new DrawablePath(); | ||||
dp->setName (xml.getStringAttribute ("id")); | dp->setName (xml.getStringAttribute ("id")); | ||||
dp->setFill (FillType (Colours::transparentBlack)); | |||||
dp->setFill (Colours::transparentBlack); | |||||
path.applyTransform (transform); | path.applyTransform (transform); | ||||
dp->setPath (path); | dp->setPath (path); | ||||
@@ -9945,6 +9945,16 @@ public: | |||||
{ | { | ||||
} | } | ||||
Rectangle (const Point<ValueType>& corner1, const Point<ValueType>& corner2) throw() | |||||
: x (jmin (corner1.getX(), corner2.getX())), | |||||
y (jmin (corner1.getY(), corner2.getY())), | |||||
w (corner1.getX() - corner2.getX()), | |||||
h (corner1.getY() - corner2.getY()) | |||||
{ | |||||
if (w < 0) w = -w; | |||||
if (h < 0) h = -h; | |||||
} | |||||
Rectangle& operator= (const Rectangle& other) throw() | Rectangle& operator= (const Rectangle& other) throw() | ||||
{ | { | ||||
x = other.x; y = other.y; | x = other.x; y = other.y; | ||||
@@ -11911,140 +11921,126 @@ class JUCE_API Graphics | |||||
{ | { | ||||
public: | public: | ||||
explicit Graphics (Image& imageToDrawOnto) throw(); | |||||
explicit Graphics (Image& imageToDrawOnto); | |||||
~Graphics() throw(); | |||||
~Graphics(); | |||||
void setColour (const Colour& newColour) throw(); | |||||
void setColour (const Colour& newColour); | |||||
void setOpacity (const float newOpacity) throw(); | |||||
void setOpacity (const float newOpacity); | |||||
void setGradientFill (const ColourGradient& gradient) throw(); | |||||
void setGradientFill (const ColourGradient& gradient); | |||||
void setTiledImageFill (const Image& imageToUse, | void setTiledImageFill (const Image& imageToUse, | ||||
int anchorX, | |||||
int anchorY, | |||||
float opacity) throw(); | |||||
int anchorX, int anchorY, | |||||
float opacity); | |||||
void setFillType (const FillType& newFill) throw(); | |||||
void setFillType (const FillType& newFill); | |||||
void setFont (const Font& newFont) throw(); | |||||
void setFont (const Font& newFont); | |||||
void setFont (float newFontHeight, | |||||
int fontStyleFlags = Font::plain) throw(); | |||||
void setFont (float newFontHeight, int fontStyleFlags = Font::plain); | |||||
void drawSingleLineText (const String& text, | void drawSingleLineText (const String& text, | ||||
int startX, int baselineY) const throw(); | |||||
int startX, int baselineY) const; | |||||
void drawMultiLineText (const String& text, | void drawMultiLineText (const String& text, | ||||
int startX, int baselineY, | int startX, int baselineY, | ||||
int maximumLineWidth) const throw(); | |||||
int maximumLineWidth) const; | |||||
void drawTextAsPath (const String& text, | void drawTextAsPath (const String& text, | ||||
const AffineTransform& transform) const throw(); | |||||
const AffineTransform& transform) const; | |||||
void drawText (const String& text, | void drawText (const String& text, | ||||
int x, int y, int width, int height, | int x, int y, int width, int height, | ||||
const Justification& justificationType, | const Justification& justificationType, | ||||
bool useEllipsesIfTooBig) const throw(); | |||||
bool useEllipsesIfTooBig) const; | |||||
void drawFittedText (const String& text, | void drawFittedText (const String& text, | ||||
int x, int y, int width, int height, | int x, int y, int width, int height, | ||||
const Justification& justificationFlags, | const Justification& justificationFlags, | ||||
int maximumNumberOfLines, | int maximumNumberOfLines, | ||||
float minimumHorizontalScale = 0.7f) const throw(); | |||||
float minimumHorizontalScale = 0.7f) const; | |||||
void fillAll() const throw(); | |||||
void fillAll() const; | |||||
void fillAll (const Colour& colourToUse) const throw(); | |||||
void fillAll (const Colour& colourToUse) const; | |||||
void fillRect (int x, int y, int width, int height) const throw(); | |||||
void fillRect (int x, int y, int width, int height) const; | |||||
void fillRect (const Rectangle<int>& rectangle) const throw(); | |||||
void fillRect (const Rectangle<int>& rectangle) const; | |||||
void fillRect (float x, float y, float width, float height) const throw(); | |||||
void fillRect (float x, float y, float width, float height) const; | |||||
void fillRoundedRectangle (float x, float y, float width, float height, | void fillRoundedRectangle (float x, float y, float width, float height, | ||||
float cornerSize) const throw(); | |||||
float cornerSize) const; | |||||
void fillRoundedRectangle (const Rectangle<int>& rectangle, | |||||
float cornerSize) const throw(); | |||||
void fillRoundedRectangle (const Rectangle<float>& rectangle, | |||||
float cornerSize) const; | |||||
void fillCheckerBoard (int x, int y, int width, int height, | void fillCheckerBoard (int x, int y, int width, int height, | ||||
int checkWidth, int checkHeight, | int checkWidth, int checkHeight, | ||||
const Colour& colour1, const Colour& colour2) const throw(); | |||||
const Colour& colour1, const Colour& colour2) const; | |||||
void drawRect (int x, int y, int width, int height, | void drawRect (int x, int y, int width, int height, | ||||
int lineThickness = 1) const throw(); | |||||
int lineThickness = 1) const; | |||||
void drawRect (float x, float y, float width, float height, | void drawRect (float x, float y, float width, float height, | ||||
float lineThickness = 1.0f) const throw(); | |||||
float lineThickness = 1.0f) const; | |||||
void drawRect (const Rectangle<int>& rectangle, | void drawRect (const Rectangle<int>& rectangle, | ||||
int lineThickness = 1) const throw(); | |||||
int lineThickness = 1) const; | |||||
void drawRoundedRectangle (float x, float y, float width, float height, | void drawRoundedRectangle (float x, float y, float width, float height, | ||||
float cornerSize, float lineThickness) const throw(); | |||||
float cornerSize, float lineThickness) const; | |||||
void drawRoundedRectangle (const Rectangle<int>& rectangle, | |||||
float cornerSize, float lineThickness) const throw(); | |||||
void drawRoundedRectangle (const Rectangle<float>& rectangle, | |||||
float cornerSize, float lineThickness) const; | |||||
void drawBevel (int x, int y, int width, int height, | void drawBevel (int x, int y, int width, int height, | ||||
int bevelThickness, | int bevelThickness, | ||||
const Colour& topLeftColour = Colours::white, | const Colour& topLeftColour = Colours::white, | ||||
const Colour& bottomRightColour = Colours::black, | const Colour& bottomRightColour = Colours::black, | ||||
bool useGradient = true, | bool useGradient = true, | ||||
bool sharpEdgeOnOutside = true) const throw(); | |||||
bool sharpEdgeOnOutside = true) const; | |||||
void setPixel (int x, int y) const throw(); | |||||
void setPixel (int x, int y) const; | |||||
void fillEllipse (float x, float y, float width, float height) const throw(); | |||||
void fillEllipse (float x, float y, float width, float height) const; | |||||
void drawEllipse (float x, float y, float width, float height, | void drawEllipse (float x, float y, float width, float height, | ||||
float lineThickness) const throw(); | |||||
float lineThickness) const; | |||||
void drawLine (float startX, | |||||
float startY, | |||||
float endX, | |||||
float endY) const throw(); | |||||
void drawLine (float startX, float startY, float endX, float endY) const; | |||||
void drawLine (float startX, | |||||
float startY, | |||||
float endX, | |||||
float endY, | |||||
float lineThickness) const throw(); | |||||
void drawLine (float startX, float startY, float endX, float endY, | |||||
float lineThickness) const; | |||||
void drawLine (const Line& line) const throw(); | |||||
void drawLine (const Line& line) const; | |||||
void drawLine (const Line& line, | |||||
float lineThickness) const throw(); | |||||
void drawLine (const Line& line, float lineThickness) const; | |||||
void drawDashedLine (float startX, | |||||
float startY, | |||||
float endX, | |||||
float endY, | |||||
const float* dashLengths, | |||||
int numDashLengths, | |||||
float lineThickness = 1.0f) const throw(); | |||||
void drawDashedLine (float startX, float startY, | |||||
float endX, float endY, | |||||
const float* dashLengths, int numDashLengths, | |||||
float lineThickness = 1.0f) const; | |||||
void drawVerticalLine (int x, float top, float bottom) const throw(); | |||||
void drawVerticalLine (int x, float top, float bottom) const; | |||||
void drawHorizontalLine (int y, float left, float right) const throw(); | |||||
void drawHorizontalLine (int y, float left, float right) const; | |||||
void fillPath (const Path& path, | void fillPath (const Path& path, | ||||
const AffineTransform& transform = AffineTransform::identity) const throw(); | |||||
const AffineTransform& transform = AffineTransform::identity) const; | |||||
void strokePath (const Path& path, | void strokePath (const Path& path, | ||||
const PathStrokeType& strokeType, | const PathStrokeType& strokeType, | ||||
const AffineTransform& transform = AffineTransform::identity) const throw(); | |||||
const AffineTransform& transform = AffineTransform::identity) const; | |||||
void drawArrow (float startX, | |||||
float startY, | |||||
float endX, | |||||
float endY, | |||||
void drawArrow (float startX, float startY, | |||||
float endX, float endY, | |||||
float lineThickness, | float lineThickness, | ||||
float arrowheadWidth, | float arrowheadWidth, | ||||
float arrowheadLength) const throw(); | |||||
float arrowheadLength) const; | |||||
enum ResamplingQuality | enum ResamplingQuality | ||||
{ | { | ||||
@@ -12053,59 +12049,52 @@ public: | |||||
highResamplingQuality = 2 /**< Uses bicubic interpolation for upsampling and area-averaging for downsampling. */ | highResamplingQuality = 2 /**< Uses bicubic interpolation for upsampling and area-averaging for downsampling. */ | ||||
}; | }; | ||||
void setImageResamplingQuality (const ResamplingQuality newQuality) throw(); | |||||
void setImageResamplingQuality (const ResamplingQuality newQuality); | |||||
void drawImageAt (const Image* const imageToDraw, | |||||
int topLeftX, int topLeftY, | |||||
bool fillAlphaChannelWithCurrentBrush = false) const throw(); | |||||
void drawImageAt (const Image* const imageToDraw, int topLeftX, int topLeftY, | |||||
bool fillAlphaChannelWithCurrentBrush = false) const; | |||||
void drawImage (const Image* const imageToDraw, | void drawImage (const Image* const imageToDraw, | ||||
int destX, | |||||
int destY, | |||||
int destWidth, | |||||
int destHeight, | |||||
int sourceX, | |||||
int sourceY, | |||||
int sourceWidth, | |||||
int sourceHeight, | |||||
bool fillAlphaChannelWithCurrentBrush = false) const throw(); | |||||
int destX, int destY, int destWidth, int destHeight, | |||||
int sourceX, int sourceY, int sourceWidth, int sourceHeight, | |||||
bool fillAlphaChannelWithCurrentBrush = false) const; | |||||
void drawImageTransformed (const Image* imageToDraw, | void drawImageTransformed (const Image* imageToDraw, | ||||
const Rectangle<int>& imageSubRegion, | const Rectangle<int>& imageSubRegion, | ||||
const AffineTransform& transform, | const AffineTransform& transform, | ||||
bool fillAlphaChannelWithCurrentBrush = false) const throw(); | |||||
bool fillAlphaChannelWithCurrentBrush = false) const; | |||||
void drawImageWithin (const Image* imageToDraw, | void drawImageWithin (const Image* imageToDraw, | ||||
int destX, int destY, int destWidth, int destHeight, | int destX, int destY, int destWidth, int destHeight, | ||||
const RectanglePlacement& placementWithinTarget, | const RectanglePlacement& placementWithinTarget, | ||||
bool fillAlphaChannelWithCurrentBrush = false) const throw(); | |||||
bool fillAlphaChannelWithCurrentBrush = false) const; | |||||
const Rectangle<int> getClipBounds() const throw(); | |||||
const Rectangle<int> getClipBounds() const; | |||||
bool clipRegionIntersects (int x, int y, int width, int height) const throw(); | |||||
bool clipRegionIntersects (int x, int y, int width, int height) const; | |||||
bool reduceClipRegion (int x, int y, int width, int height) throw(); | |||||
bool reduceClipRegion (int x, int y, int width, int height); | |||||
bool reduceClipRegion (const RectangleList& clipRegion) throw(); | |||||
bool reduceClipRegion (const RectangleList& clipRegion); | |||||
bool reduceClipRegion (const Path& path, const AffineTransform& transform = AffineTransform::identity) throw(); | |||||
bool reduceClipRegion (const Path& path, const AffineTransform& transform = AffineTransform::identity); | |||||
bool reduceClipRegion (const Image& image, const Rectangle<int>& sourceClipRegion, | bool reduceClipRegion (const Image& image, const Rectangle<int>& sourceClipRegion, | ||||
const AffineTransform& transform) throw(); | |||||
const AffineTransform& transform); | |||||
void excludeClipRegion (const Rectangle<int>& rectangleToExclude) throw(); | |||||
void excludeClipRegion (const Rectangle<int>& rectangleToExclude); | |||||
bool isClipEmpty() const throw(); | |||||
bool isClipEmpty() const; | |||||
void saveState() throw(); | |||||
void saveState(); | |||||
void restoreState() throw(); | |||||
void restoreState(); | |||||
void setOrigin (int newOriginX, int newOriginY) throw(); | |||||
void setOrigin (int newOriginX, int newOriginY); | |||||
void resetToDefaultState() throw(); | |||||
void resetToDefaultState(); | |||||
bool isVectorDevice() const throw(); | |||||
bool isVectorDevice() const; | |||||
juce_UseDebuggingNewOperator | juce_UseDebuggingNewOperator | ||||
@@ -12119,7 +12108,7 @@ private: | |||||
ScopedPointer <LowLevelGraphicsContext> contextToDelete; | ScopedPointer <LowLevelGraphicsContext> contextToDelete; | ||||
bool saveStatePending; | bool saveStatePending; | ||||
void saveStateIfPending() throw(); | |||||
void saveStateIfPending(); | |||||
Graphics (const Graphics&); | Graphics (const Graphics&); | ||||
Graphics& operator= (const Graphics& other); | Graphics& operator= (const Graphics& other); | ||||
@@ -25630,10 +25619,7 @@ public: | |||||
{ | { | ||||
if (source != 0) | if (source != 0) | ||||
{ | { | ||||
const int x1 = e.getMouseDownX(); | |||||
const int y1 = e.getMouseDownY(); | |||||
setBounds (jmin (x1, e.x), jmin (y1, e.y), abs (e.x - x1), abs (e.y - y1)); | |||||
setBounds (Rectangle<int> (e.getMouseDownPosition(), e.getPosition())); | |||||
setVisible (true); | setVisible (true); | ||||
Array <SelectableItemType> itemsInLasso; | Array <SelectableItemType> itemsInLasso; | ||||
@@ -159,10 +159,7 @@ public: | |||||
{ | { | ||||
if (source != 0) | if (source != 0) | ||||
{ | { | ||||
const int x1 = e.getMouseDownX(); | |||||
const int y1 = e.getMouseDownY(); | |||||
setBounds (jmin (x1, e.x), jmin (y1, e.y), abs (e.x - x1), abs (e.y - y1)); | |||||
setBounds (Rectangle<int> (e.getMouseDownPosition(), e.getPosition())); | |||||
setVisible (true); | setVisible (true); | ||||
Array <SelectableItemType> itemsInLasso; | Array <SelectableItemType> itemsInLasso; | ||||
@@ -56,7 +56,7 @@ LowLevelGraphicsContext::~LowLevelGraphicsContext() | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
Graphics::Graphics (Image& imageToDrawOnto) throw() | |||||
Graphics::Graphics (Image& imageToDrawOnto) | |||||
: context (imageToDrawOnto.createLowLevelContext()), | : context (imageToDrawOnto.createLowLevelContext()), | ||||
contextToDelete (context), | contextToDelete (context), | ||||
saveStatePending (false) | saveStatePending (false) | ||||
@@ -69,12 +69,12 @@ Graphics::Graphics (LowLevelGraphicsContext* const internalContext) throw() | |||||
{ | { | ||||
} | } | ||||
Graphics::~Graphics() throw() | |||||
Graphics::~Graphics() | |||||
{ | { | ||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
void Graphics::resetToDefaultState() throw() | |||||
void Graphics::resetToDefaultState() | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setFill (FillType()); | context->setFill (FillType()); | ||||
@@ -82,61 +82,60 @@ void Graphics::resetToDefaultState() throw() | |||||
context->setInterpolationQuality (defaultQuality); | context->setInterpolationQuality (defaultQuality); | ||||
} | } | ||||
bool Graphics::isVectorDevice() const throw() | |||||
bool Graphics::isVectorDevice() const | |||||
{ | { | ||||
return context->isVectorDevice(); | return context->isVectorDevice(); | ||||
} | } | ||||
bool Graphics::reduceClipRegion (const int x, const int y, | |||||
const int w, const int h) throw() | |||||
bool Graphics::reduceClipRegion (const int x, const int y, const int w, const int h) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
return context->clipToRectangle (Rectangle<int> (x, y, w, h)); | return context->clipToRectangle (Rectangle<int> (x, y, w, h)); | ||||
} | } | ||||
bool Graphics::reduceClipRegion (const RectangleList& clipRegion) throw() | |||||
bool Graphics::reduceClipRegion (const RectangleList& clipRegion) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
return context->clipToRectangleList (clipRegion); | return context->clipToRectangleList (clipRegion); | ||||
} | } | ||||
bool Graphics::reduceClipRegion (const Path& path, const AffineTransform& transform) throw() | |||||
bool Graphics::reduceClipRegion (const Path& path, const AffineTransform& transform) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->clipToPath (path, transform); | context->clipToPath (path, transform); | ||||
return ! context->isClipEmpty(); | return ! context->isClipEmpty(); | ||||
} | } | ||||
bool Graphics::reduceClipRegion (const Image& image, const Rectangle<int>& sourceClipRegion, const AffineTransform& transform) throw() | |||||
bool Graphics::reduceClipRegion (const Image& image, const Rectangle<int>& sourceClipRegion, const AffineTransform& transform) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->clipToImageAlpha (image, sourceClipRegion, transform); | context->clipToImageAlpha (image, sourceClipRegion, transform); | ||||
return ! context->isClipEmpty(); | return ! context->isClipEmpty(); | ||||
} | } | ||||
void Graphics::excludeClipRegion (const Rectangle<int>& rectangleToExclude) throw() | |||||
void Graphics::excludeClipRegion (const Rectangle<int>& rectangleToExclude) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->excludeClipRectangle (rectangleToExclude); | context->excludeClipRectangle (rectangleToExclude); | ||||
} | } | ||||
bool Graphics::isClipEmpty() const throw() | |||||
bool Graphics::isClipEmpty() const | |||||
{ | { | ||||
return context->isClipEmpty(); | return context->isClipEmpty(); | ||||
} | } | ||||
const Rectangle<int> Graphics::getClipBounds() const throw() | |||||
const Rectangle<int> Graphics::getClipBounds() const | |||||
{ | { | ||||
return context->getClipBounds(); | return context->getClipBounds(); | ||||
} | } | ||||
void Graphics::saveState() throw() | |||||
void Graphics::saveState() | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
saveStatePending = true; | saveStatePending = true; | ||||
} | } | ||||
void Graphics::restoreState() throw() | |||||
void Graphics::restoreState() | |||||
{ | { | ||||
if (saveStatePending) | if (saveStatePending) | ||||
saveStatePending = false; | saveStatePending = false; | ||||
@@ -144,7 +143,7 @@ void Graphics::restoreState() throw() | |||||
context->restoreState(); | context->restoreState(); | ||||
} | } | ||||
void Graphics::saveStateIfPending() throw() | |||||
void Graphics::saveStateIfPending() | |||||
{ | { | ||||
if (saveStatePending) | if (saveStatePending) | ||||
{ | { | ||||
@@ -153,63 +152,56 @@ void Graphics::saveStateIfPending() throw() | |||||
} | } | ||||
} | } | ||||
void Graphics::setOrigin (const int newOriginX, | |||||
const int newOriginY) throw() | |||||
void Graphics::setOrigin (const int newOriginX, const int newOriginY) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setOrigin (newOriginX, newOriginY); | context->setOrigin (newOriginX, newOriginY); | ||||
} | } | ||||
bool Graphics::clipRegionIntersects (const int x, const int y, | |||||
const int w, const int h) const throw() | |||||
bool Graphics::clipRegionIntersects (const int x, const int y, const int w, const int h) const | |||||
{ | { | ||||
return context->clipRegionIntersects (Rectangle<int> (x, y, w, h)); | return context->clipRegionIntersects (Rectangle<int> (x, y, w, h)); | ||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
void Graphics::setColour (const Colour& newColour) throw() | |||||
void Graphics::setColour (const Colour& newColour) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setFill (FillType (newColour)); | |||||
context->setFill (newColour); | |||||
} | } | ||||
void Graphics::setOpacity (const float newOpacity) throw() | |||||
void Graphics::setOpacity (const float newOpacity) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setOpacity (newOpacity); | context->setOpacity (newOpacity); | ||||
} | } | ||||
void Graphics::setGradientFill (const ColourGradient& gradient) throw() | |||||
void Graphics::setGradientFill (const ColourGradient& gradient) | |||||
{ | { | ||||
saveStateIfPending(); | |||||
context->setFill (FillType (gradient)); | |||||
setFillType (gradient); | |||||
} | } | ||||
void Graphics::setTiledImageFill (const Image& imageToUse, | |||||
const int anchorX, | |||||
const int anchorY, | |||||
const float opacity) throw() | |||||
void Graphics::setTiledImageFill (const Image& imageToUse, const int anchorX, const int anchorY, const float opacity) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setFill (FillType (imageToUse, AffineTransform::translation ((float) anchorX, (float) anchorY))); | context->setFill (FillType (imageToUse, AffineTransform::translation ((float) anchorX, (float) anchorY))); | ||||
context->setOpacity (opacity); | context->setOpacity (opacity); | ||||
} | } | ||||
void Graphics::setFillType (const FillType& newFill) throw() | |||||
void Graphics::setFillType (const FillType& newFill) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setFill (newFill); | context->setFill (newFill); | ||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
void Graphics::setFont (const Font& newFont) throw() | |||||
void Graphics::setFont (const Font& newFont) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setFont (newFont); | context->setFont (newFont); | ||||
} | } | ||||
void Graphics::setFont (const float newFontHeight, | |||||
const int newFontStyleFlags) throw() | |||||
void Graphics::setFont (const float newFontHeight, const int newFontStyleFlags) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
Font f (context->getFont()); | Font f (context->getFont()); | ||||
@@ -218,9 +210,7 @@ void Graphics::setFont (const float newFontHeight, | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
void Graphics::drawSingleLineText (const String& text, | |||||
const int startX, | |||||
const int baselineY) const throw() | |||||
void Graphics::drawSingleLineText (const String& text, const int startX, const int baselineY) const | |||||
{ | { | ||||
if (text.isNotEmpty() | if (text.isNotEmpty() | ||||
&& startX < context->getClipBounds().getRight()) | && startX < context->getClipBounds().getRight()) | ||||
@@ -231,8 +221,7 @@ void Graphics::drawSingleLineText (const String& text, | |||||
} | } | ||||
} | } | ||||
void Graphics::drawTextAsPath (const String& text, | |||||
const AffineTransform& transform) const throw() | |||||
void Graphics::drawTextAsPath (const String& text, const AffineTransform& transform) const | |||||
{ | { | ||||
if (text.isNotEmpty()) | if (text.isNotEmpty()) | ||||
{ | { | ||||
@@ -242,10 +231,7 @@ void Graphics::drawTextAsPath (const String& text, | |||||
} | } | ||||
} | } | ||||
void Graphics::drawMultiLineText (const String& text, | |||||
const int startX, | |||||
const int baselineY, | |||||
const int maximumLineWidth) const throw() | |||||
void Graphics::drawMultiLineText (const String& text, const int startX, const int baselineY, const int maximumLineWidth) const | |||||
{ | { | ||||
if (text.isNotEmpty() | if (text.isNotEmpty() | ||||
&& startX < context->getClipBounds().getRight()) | && startX < context->getClipBounds().getRight()) | ||||
@@ -259,37 +245,30 @@ void Graphics::drawMultiLineText (const String& text, | |||||
} | } | ||||
void Graphics::drawText (const String& text, | void Graphics::drawText (const String& text, | ||||
const int x, | |||||
const int y, | |||||
const int width, | |||||
const int height, | |||||
const int x, const int y, const int width, const int height, | |||||
const Justification& justificationType, | const Justification& justificationType, | ||||
const bool useEllipsesIfTooBig) const throw() | |||||
const bool useEllipsesIfTooBig) const | |||||
{ | { | ||||
if (text.isNotEmpty() && context->clipRegionIntersects (Rectangle<int> (x, y, width, height))) | if (text.isNotEmpty() && context->clipRegionIntersects (Rectangle<int> (x, y, width, height))) | ||||
{ | { | ||||
GlyphArrangement arr; | GlyphArrangement arr; | ||||
arr.addCurtailedLineOfText (context->getFont(), text, | arr.addCurtailedLineOfText (context->getFont(), text, | ||||
0.0f, 0.0f, (float)width, | |||||
0.0f, 0.0f, (float) width, | |||||
useEllipsesIfTooBig); | useEllipsesIfTooBig); | ||||
arr.justifyGlyphs (0, arr.getNumGlyphs(), | arr.justifyGlyphs (0, arr.getNumGlyphs(), | ||||
(float) x, (float) y, | |||||
(float) width, (float) height, | |||||
(float) x, (float) y, (float) width, (float) height, | |||||
justificationType); | justificationType); | ||||
arr.draw (*this); | arr.draw (*this); | ||||
} | } | ||||
} | } | ||||
void Graphics::drawFittedText (const String& text, | void Graphics::drawFittedText (const String& text, | ||||
const int x, | |||||
const int y, | |||||
const int width, | |||||
const int height, | |||||
const int x, const int y, const int width, const int height, | |||||
const Justification& justification, | const Justification& justification, | ||||
const int maximumNumberOfLines, | const int maximumNumberOfLines, | ||||
const float minimumHorizontalScale) const throw() | |||||
const float minimumHorizontalScale) const | |||||
{ | { | ||||
if (text.isNotEmpty() | if (text.isNotEmpty() | ||||
&& width > 0 && height > 0 | && width > 0 && height > 0 | ||||
@@ -298,8 +277,7 @@ void Graphics::drawFittedText (const String& text, | |||||
GlyphArrangement arr; | GlyphArrangement arr; | ||||
arr.addFittedText (context->getFont(), text, | arr.addFittedText (context->getFont(), text, | ||||
(float) x, (float) y, | |||||
(float) width, (float) height, | |||||
(float) x, (float) y, (float) width, (float) height, | |||||
justification, | justification, | ||||
maximumNumberOfLines, | maximumNumberOfLines, | ||||
minimumHorizontalScale); | minimumHorizontalScale); | ||||
@@ -309,10 +287,7 @@ void Graphics::drawFittedText (const String& text, | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
void Graphics::fillRect (int x, | |||||
int y, | |||||
int width, | |||||
int height) const throw() | |||||
void Graphics::fillRect (int x, int y, int width, int height) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -320,15 +295,12 @@ void Graphics::fillRect (int x, | |||||
context->fillRect (Rectangle<int> (x, y, width, height), false); | context->fillRect (Rectangle<int> (x, y, width, height), false); | ||||
} | } | ||||
void Graphics::fillRect (const Rectangle<int>& r) const throw() | |||||
void Graphics::fillRect (const Rectangle<int>& r) const | |||||
{ | { | ||||
context->fillRect (r, false); | context->fillRect (r, false); | ||||
} | } | ||||
void Graphics::fillRect (const float x, | |||||
const float y, | |||||
const float width, | |||||
const float height) const throw() | |||||
void Graphics::fillRect (const float x, const float y, const float width, const float height) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -338,24 +310,24 @@ void Graphics::fillRect (const float x, | |||||
fillPath (p); | fillPath (p); | ||||
} | } | ||||
void Graphics::setPixel (int x, int y) const throw() | |||||
void Graphics::setPixel (int x, int y) const | |||||
{ | { | ||||
context->fillRect (Rectangle<int> (x, y, 1, 1), false); | context->fillRect (Rectangle<int> (x, y, 1, 1), false); | ||||
} | } | ||||
void Graphics::fillAll() const throw() | |||||
void Graphics::fillAll() const | |||||
{ | { | ||||
fillRect (context->getClipBounds()); | fillRect (context->getClipBounds()); | ||||
} | } | ||||
void Graphics::fillAll (const Colour& colourToUse) const throw() | |||||
void Graphics::fillAll (const Colour& colourToUse) const | |||||
{ | { | ||||
if (! colourToUse.isTransparent()) | if (! colourToUse.isTransparent()) | ||||
{ | { | ||||
const Rectangle<int> clip (context->getClipBounds()); | const Rectangle<int> clip (context->getClipBounds()); | ||||
context->saveState(); | context->saveState(); | ||||
context->setFill (FillType (colourToUse)); | |||||
context->setFill (colourToUse); | |||||
context->fillRect (clip, false); | context->fillRect (clip, false); | ||||
context->restoreState(); | context->restoreState(); | ||||
} | } | ||||
@@ -363,8 +335,7 @@ void Graphics::fillAll (const Colour& colourToUse) const throw() | |||||
//============================================================================== | //============================================================================== | ||||
void Graphics::fillPath (const Path& path, | |||||
const AffineTransform& transform) const throw() | |||||
void Graphics::fillPath (const Path& path, const AffineTransform& transform) const | |||||
{ | { | ||||
if ((! context->isClipEmpty()) && ! path.isEmpty()) | if ((! context->isClipEmpty()) && ! path.isEmpty()) | ||||
context->fillPath (path, transform); | context->fillPath (path, transform); | ||||
@@ -372,7 +343,7 @@ void Graphics::fillPath (const Path& path, | |||||
void Graphics::strokePath (const Path& path, | void Graphics::strokePath (const Path& path, | ||||
const PathStrokeType& strokeType, | const PathStrokeType& strokeType, | ||||
const AffineTransform& transform) const throw() | |||||
const AffineTransform& transform) const | |||||
{ | { | ||||
Path stroke; | Path stroke; | ||||
strokeType.createStrokedPath (stroke, path, transform); | strokeType.createStrokedPath (stroke, path, transform); | ||||
@@ -380,11 +351,8 @@ void Graphics::strokePath (const Path& path, | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
void Graphics::drawRect (const int x, | |||||
const int y, | |||||
const int width, | |||||
const int height, | |||||
const int lineThickness) const throw() | |||||
void Graphics::drawRect (const int x, const int y, const int width, const int height, | |||||
const int lineThickness) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -395,11 +363,7 @@ void Graphics::drawRect (const int x, | |||||
context->fillRect (Rectangle<int> (x, y + height - lineThickness, width, lineThickness), false); | context->fillRect (Rectangle<int> (x, y + height - lineThickness, width, lineThickness), false); | ||||
} | } | ||||
void Graphics::drawRect (const float x, | |||||
const float y, | |||||
const float width, | |||||
const float height, | |||||
const float lineThickness) const throw() | |||||
void Graphics::drawRect (const float x, const float y, const float width, const float height, const float lineThickness) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -412,23 +376,14 @@ void Graphics::drawRect (const float x, | |||||
fillPath (p); | fillPath (p); | ||||
} | } | ||||
void Graphics::drawRect (const Rectangle<int>& r, | |||||
const int lineThickness) const throw() | |||||
void Graphics::drawRect (const Rectangle<int>& r, const int lineThickness) const | |||||
{ | { | ||||
drawRect (r.getX(), r.getY(), | |||||
r.getWidth(), r.getHeight(), | |||||
lineThickness); | |||||
drawRect (r.getX(), r.getY(), r.getWidth(), r.getHeight(), lineThickness); | |||||
} | } | ||||
void Graphics::drawBevel (const int x, | |||||
const int y, | |||||
const int width, | |||||
const int height, | |||||
const int bevelThickness, | |||||
const Colour& topLeftColour, | |||||
const Colour& bottomRightColour, | |||||
const bool useGradient, | |||||
const bool sharpEdgeOnOutside) const throw() | |||||
void Graphics::drawBevel (const int x, const int y, const int width, const int height, | |||||
const int bevelThickness, const Colour& topLeftColour, const Colour& bottomRightColour, | |||||
const bool useGradient, const bool sharpEdgeOnOutside) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -445,13 +400,13 @@ void Graphics::drawBevel (const int x, | |||||
const float op = useGradient ? ramp * (sharpEdgeOnOutside ? bevelThickness - i : i) | const float op = useGradient ? ramp * (sharpEdgeOnOutside ? bevelThickness - i : i) | ||||
: oldOpacity; | : oldOpacity; | ||||
context->setFill (FillType (topLeftColour.withMultipliedAlpha (op))); | |||||
context->setFill (topLeftColour.withMultipliedAlpha (op)); | |||||
context->fillRect (Rectangle<int> (x + i, y + i, width - i * 2, 1), false); | context->fillRect (Rectangle<int> (x + i, y + i, width - i * 2, 1), false); | ||||
context->setFill (FillType (topLeftColour.withMultipliedAlpha (op * 0.75f))); | |||||
context->setFill (topLeftColour.withMultipliedAlpha (op * 0.75f)); | |||||
context->fillRect (Rectangle<int> (x + i, y + i + 1, 1, height - i * 2 - 2), false); | context->fillRect (Rectangle<int> (x + i, y + i + 1, 1, height - i * 2 - 2), false); | ||||
context->setFill (FillType (bottomRightColour.withMultipliedAlpha (op))); | |||||
context->setFill (bottomRightColour.withMultipliedAlpha (op)); | |||||
context->fillRect (Rectangle<int> (x + i, y + height - i - 1, width - i * 2, 1), false); | context->fillRect (Rectangle<int> (x + i, y + height - i - 1, width - i * 2, 1), false); | ||||
context->setFill (FillType (bottomRightColour.withMultipliedAlpha (op * 0.75f))); | |||||
context->setFill (bottomRightColour.withMultipliedAlpha (op * 0.75f)); | |||||
context->fillRect (Rectangle<int> (x + width - i - 1, y + i + 1, 1, height - i * 2 - 2), false); | context->fillRect (Rectangle<int> (x + width - i - 1, y + i + 1, 1, height - i * 2 - 2), false); | ||||
} | } | ||||
@@ -460,10 +415,7 @@ void Graphics::drawBevel (const int x, | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
void Graphics::fillEllipse (const float x, | |||||
const float y, | |||||
const float width, | |||||
const float height) const throw() | |||||
void Graphics::fillEllipse (const float x, const float y, const float width, const float height) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -473,11 +425,8 @@ void Graphics::fillEllipse (const float x, | |||||
fillPath (p); | fillPath (p); | ||||
} | } | ||||
void Graphics::drawEllipse (const float x, | |||||
const float y, | |||||
const float width, | |||||
const float height, | |||||
const float lineThickness) const throw() | |||||
void Graphics::drawEllipse (const float x, const float y, const float width, const float height, | |||||
const float lineThickness) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -487,11 +436,7 @@ void Graphics::drawEllipse (const float x, | |||||
strokePath (p, PathStrokeType (lineThickness)); | strokePath (p, PathStrokeType (lineThickness)); | ||||
} | } | ||||
void Graphics::fillRoundedRectangle (const float x, | |||||
const float y, | |||||
const float width, | |||||
const float height, | |||||
const float cornerSize) const throw() | |||||
void Graphics::fillRoundedRectangle (const float x, const float y, const float width, const float height, const float cornerSize) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -501,22 +446,13 @@ void Graphics::fillRoundedRectangle (const float x, | |||||
fillPath (p); | fillPath (p); | ||||
} | } | ||||
void Graphics::fillRoundedRectangle (const Rectangle<int>& r, | |||||
const float cornerSize) const throw() | |||||
void Graphics::fillRoundedRectangle (const Rectangle<float>& r, const float cornerSize) const | |||||
{ | { | ||||
fillRoundedRectangle ((float) r.getX(), | |||||
(float) r.getY(), | |||||
(float) r.getWidth(), | |||||
(float) r.getHeight(), | |||||
cornerSize); | |||||
fillRoundedRectangle (r.getX(), r.getY(), r.getWidth(), r.getHeight(), cornerSize); | |||||
} | } | ||||
void Graphics::drawRoundedRectangle (const float x, | |||||
const float y, | |||||
const float width, | |||||
const float height, | |||||
const float cornerSize, | |||||
const float lineThickness) const throw() | |||||
void Graphics::drawRoundedRectangle (const float x, const float y, const float width, const float height, | |||||
const float cornerSize, const float lineThickness) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (x, y, width, height)); | jassert (areCoordsSensibleNumbers (x, y, width, height)); | ||||
@@ -526,25 +462,13 @@ void Graphics::drawRoundedRectangle (const float x, | |||||
strokePath (p, PathStrokeType (lineThickness)); | strokePath (p, PathStrokeType (lineThickness)); | ||||
} | } | ||||
void Graphics::drawRoundedRectangle (const Rectangle<int>& r, | |||||
const float cornerSize, | |||||
const float lineThickness) const throw() | |||||
void Graphics::drawRoundedRectangle (const Rectangle<float>& r, const float cornerSize, const float lineThickness) const | |||||
{ | { | ||||
drawRoundedRectangle ((float) r.getX(), | |||||
(float) r.getY(), | |||||
(float) r.getWidth(), | |||||
(float) r.getHeight(), | |||||
cornerSize, lineThickness); | |||||
drawRoundedRectangle (r.getX(), r.getY(), r.getWidth(), r.getHeight(), cornerSize, lineThickness); | |||||
} | } | ||||
void Graphics::drawArrow (const float startX, | |||||
const float startY, | |||||
const float endX, | |||||
const float endY, | |||||
const float lineThickness, | |||||
const float arrowheadWidth, | |||||
const float arrowheadLength) const throw() | |||||
void Graphics::drawArrow (const float startX, const float startY, const float endX, const float endY, | |||||
const float lineThickness, const float arrowheadWidth, const float arrowheadLength) const | |||||
{ | { | ||||
Path p; | Path p; | ||||
p.addArrow (startX, startY, endX, endY, | p.addArrow (startX, startY, endX, endY, | ||||
@@ -552,12 +476,9 @@ void Graphics::drawArrow (const float startX, | |||||
fillPath (p); | fillPath (p); | ||||
} | } | ||||
void Graphics::fillCheckerBoard (int x, int y, | |||||
int width, int height, | |||||
const int checkWidth, | |||||
const int checkHeight, | |||||
const Colour& colour1, | |||||
const Colour& colour2) const throw() | |||||
void Graphics::fillCheckerBoard (int x, int y, int width, int height, | |||||
const int checkWidth, const int checkHeight, | |||||
const Colour& colour1, const Colour& colour2) const | |||||
{ | { | ||||
jassert (checkWidth > 0 && checkHeight > 0); // can't be zero or less! | jassert (checkWidth > 0 && checkHeight > 0); // can't be zero or less! | ||||
@@ -567,7 +488,7 @@ void Graphics::fillCheckerBoard (int x, int y, | |||||
if (colour1 == colour2) | if (colour1 == colour2) | ||||
{ | { | ||||
context->setFill (FillType (colour1)); | |||||
context->setFill (colour1); | |||||
context->fillRect (Rectangle<int> (x, y, width, height), false); | context->fillRect (Rectangle<int> (x, y, width, height), false); | ||||
} | } | ||||
else | else | ||||
@@ -584,7 +505,7 @@ void Graphics::fillCheckerBoard (int x, int y, | |||||
for (int xx = x; xx < right; xx += checkWidth) | for (int xx = x; xx < right; xx += checkWidth) | ||||
{ | { | ||||
context->setFill (FillType (((cx++ & 1) == 0) ? colour1 : colour2)); | |||||
context->setFill (((cx++ & 1) == 0) ? colour1 : colour2); | |||||
context->fillRect (Rectangle<int> (xx, y, jmin (checkWidth, right - xx), jmin (checkHeight, bottom - y)), | context->fillRect (Rectangle<int> (xx, y, jmin (checkWidth, right - xx), jmin (checkHeight, bottom - y)), | ||||
false); | false); | ||||
} | } | ||||
@@ -599,50 +520,45 @@ void Graphics::fillCheckerBoard (int x, int y, | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
void Graphics::drawVerticalLine (const int x, float top, float bottom) const throw() | |||||
void Graphics::drawVerticalLine (const int x, float top, float bottom) const | |||||
{ | { | ||||
context->drawVerticalLine (x, top, bottom); | context->drawVerticalLine (x, top, bottom); | ||||
} | } | ||||
void Graphics::drawHorizontalLine (const int y, float left, float right) const throw() | |||||
void Graphics::drawHorizontalLine (const int y, float left, float right) const | |||||
{ | { | ||||
context->drawHorizontalLine (y, left, right); | context->drawHorizontalLine (y, left, right); | ||||
} | } | ||||
void Graphics::drawLine (float x1, float y1, float x2, float y2) const throw() | |||||
void Graphics::drawLine (float x1, float y1, float x2, float y2) const | |||||
{ | { | ||||
context->drawLine (x1, y1, x2, y2); | context->drawLine (x1, y1, x2, y2); | ||||
} | } | ||||
void Graphics::drawLine (const float startX, | |||||
const float startY, | |||||
const float endX, | |||||
const float endY, | |||||
const float lineThickness) const throw() | |||||
void Graphics::drawLine (const float startX, const float startY, | |||||
const float endX, const float endY, | |||||
const float lineThickness) const | |||||
{ | { | ||||
Path p; | Path p; | ||||
p.addLineSegment (startX, startY, endX, endY, lineThickness); | p.addLineSegment (startX, startY, endX, endY, lineThickness); | ||||
fillPath (p); | fillPath (p); | ||||
} | } | ||||
void Graphics::drawLine (const Line& line) const throw() | |||||
void Graphics::drawLine (const Line& line) const | |||||
{ | { | ||||
drawLine (line.getStartX(), line.getStartY(), line.getEndX(), line.getEndY()); | drawLine (line.getStartX(), line.getStartY(), line.getEndX(), line.getEndY()); | ||||
} | } | ||||
void Graphics::drawLine (const Line& line, | |||||
const float lineThickness) const throw() | |||||
void Graphics::drawLine (const Line& line, const float lineThickness) const | |||||
{ | { | ||||
drawLine (line.getStartX(), line.getStartY(), line.getEndX(), line.getEndY(), lineThickness); | drawLine (line.getStartX(), line.getStartY(), line.getEndX(), line.getEndY(), lineThickness); | ||||
} | } | ||||
void Graphics::drawDashedLine (const float startX, | |||||
const float startY, | |||||
const float endX, | |||||
const float endY, | |||||
void Graphics::drawDashedLine (const float startX, const float startY, | |||||
const float endX, const float endY, | |||||
const float* const dashLengths, | const float* const dashLengths, | ||||
const int numDashLengths, | const int numDashLengths, | ||||
const float lineThickness) const throw() | |||||
const float lineThickness) const | |||||
{ | { | ||||
const double dx = endX - startX; | const double dx = endX - startX; | ||||
const double dy = endY - startY; | const double dy = endY - startY; | ||||
@@ -680,7 +596,7 @@ void Graphics::drawDashedLine (const float startX, | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
void Graphics::setImageResamplingQuality (const Graphics::ResamplingQuality newQuality) throw() | |||||
void Graphics::setImageResamplingQuality (const Graphics::ResamplingQuality newQuality) | |||||
{ | { | ||||
saveStateIfPending(); | saveStateIfPending(); | ||||
context->setInterpolationQuality (newQuality); | context->setInterpolationQuality (newQuality); | ||||
@@ -688,9 +604,8 @@ void Graphics::setImageResamplingQuality (const Graphics::ResamplingQuality newQ | |||||
//============================================================================== | //============================================================================== | ||||
void Graphics::drawImageAt (const Image* const imageToDraw, | void Graphics::drawImageAt (const Image* const imageToDraw, | ||||
const int topLeftX, | |||||
const int topLeftY, | |||||
const bool fillAlphaChannelWithCurrentBrush) const throw() | |||||
const int topLeftX, const int topLeftY, | |||||
const bool fillAlphaChannelWithCurrentBrush) const | |||||
{ | { | ||||
if (imageToDraw != 0) | if (imageToDraw != 0) | ||||
{ | { | ||||
@@ -705,12 +620,10 @@ void Graphics::drawImageAt (const Image* const imageToDraw, | |||||
} | } | ||||
void Graphics::drawImageWithin (const Image* const imageToDraw, | void Graphics::drawImageWithin (const Image* const imageToDraw, | ||||
const int destX, | |||||
const int destY, | |||||
const int destW, | |||||
const int destH, | |||||
const int destX, const int destY, | |||||
const int destW, const int destH, | |||||
const RectanglePlacement& placementWithinTarget, | const RectanglePlacement& placementWithinTarget, | ||||
const bool fillAlphaChannelWithCurrentBrush) const throw() | |||||
const bool fillAlphaChannelWithCurrentBrush) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (destX, destY, destW, destH)); | jassert (areCoordsSensibleNumbers (destX, destY, destW, destH)); | ||||
@@ -744,7 +657,7 @@ void Graphics::drawImageWithin (const Image* const imageToDraw, | |||||
void Graphics::drawImage (const Image* const imageToDraw, | void Graphics::drawImage (const Image* const imageToDraw, | ||||
int dx, int dy, int dw, int dh, | int dx, int dy, int dw, int dh, | ||||
int sx, int sy, int sw, int sh, | int sx, int sy, int sw, int sh, | ||||
const bool fillAlphaChannelWithCurrentBrush) const throw() | |||||
const bool fillAlphaChannelWithCurrentBrush) const | |||||
{ | { | ||||
// passing in a silly number can cause maths problems in rendering! | // passing in a silly number can cause maths problems in rendering! | ||||
jassert (areCoordsSensibleNumbers (dx, dy, dw, dh)); | jassert (areCoordsSensibleNumbers (dx, dy, dw, dh)); | ||||
@@ -762,7 +675,7 @@ void Graphics::drawImage (const Image* const imageToDraw, | |||||
void Graphics::drawImageTransformed (const Image* const imageToDraw, | void Graphics::drawImageTransformed (const Image* const imageToDraw, | ||||
const Rectangle<int>& imageSubRegion, | const Rectangle<int>& imageSubRegion, | ||||
const AffineTransform& transform, | const AffineTransform& transform, | ||||
const bool fillAlphaChannelWithCurrentBrush) const throw() | |||||
const bool fillAlphaChannelWithCurrentBrush) const | |||||
{ | { | ||||
if (imageToDraw != 0 && ! context->isClipEmpty()) | if (imageToDraw != 0 && ! context->isClipEmpty()) | ||||
{ | { | ||||
@@ -64,10 +64,10 @@ public: | |||||
Obviously you shouldn't delete the image before this context is deleted. | Obviously you shouldn't delete the image before this context is deleted. | ||||
*/ | */ | ||||
explicit Graphics (Image& imageToDrawOnto) throw(); | |||||
explicit Graphics (Image& imageToDrawOnto); | |||||
/** Destructor. */ | /** Destructor. */ | ||||
~Graphics() throw(); | |||||
~Graphics(); | |||||
//============================================================================== | //============================================================================== | ||||
/** Changes the current drawing colour. | /** Changes the current drawing colour. | ||||
@@ -80,7 +80,7 @@ public: | |||||
@see setOpacity | @see setOpacity | ||||
*/ | */ | ||||
void setColour (const Colour& newColour) throw(); | |||||
void setColour (const Colour& newColour); | |||||
/** Changes the opacity to use with the current colour. | /** Changes the opacity to use with the current colour. | ||||
@@ -91,25 +91,24 @@ public: | |||||
A value of 0.0 is completely transparent, 1.0 is completely opaque. | A value of 0.0 is completely transparent, 1.0 is completely opaque. | ||||
*/ | */ | ||||
void setOpacity (const float newOpacity) throw(); | |||||
void setOpacity (const float newOpacity); | |||||
/** Sets the context to use a gradient for its fill pattern. | /** Sets the context to use a gradient for its fill pattern. | ||||
*/ | */ | ||||
void setGradientFill (const ColourGradient& gradient) throw(); | |||||
void setGradientFill (const ColourGradient& gradient); | |||||
/** Sets the context to use a tiled image pattern for filling. | /** Sets the context to use a tiled image pattern for filling. | ||||
Make sure that you don't delete this image while it's still being used by | Make sure that you don't delete this image while it's still being used by | ||||
this context! | this context! | ||||
*/ | */ | ||||
void setTiledImageFill (const Image& imageToUse, | void setTiledImageFill (const Image& imageToUse, | ||||
int anchorX, | |||||
int anchorY, | |||||
float opacity) throw(); | |||||
int anchorX, int anchorY, | |||||
float opacity); | |||||
/** Changes the current fill settings. | /** Changes the current fill settings. | ||||
@see setColour, setGradientFill, setTiledImageFill | @see setColour, setGradientFill, setTiledImageFill | ||||
*/ | */ | ||||
void setFillType (const FillType& newFill) throw(); | |||||
void setFillType (const FillType& newFill); | |||||
//============================================================================== | //============================================================================== | ||||
/** Changes the font to use for subsequent text-drawing functions. | /** Changes the font to use for subsequent text-drawing functions. | ||||
@@ -119,7 +118,7 @@ public: | |||||
@see drawSingleLineText, drawMultiLineText, drawTextAsPath, drawText, drawFittedText | @see drawSingleLineText, drawMultiLineText, drawTextAsPath, drawText, drawFittedText | ||||
*/ | */ | ||||
void setFont (const Font& newFont) throw(); | |||||
void setFont (const Font& newFont); | |||||
/** Changes the size and style of the currently-selected font. | /** Changes the size and style of the currently-selected font. | ||||
@@ -128,8 +127,7 @@ public: | |||||
@see Font | @see Font | ||||
*/ | */ | ||||
void setFont (float newFontHeight, | |||||
int fontStyleFlags = Font::plain) throw(); | |||||
void setFont (float newFontHeight, int fontStyleFlags = Font::plain); | |||||
/** Draws a one-line text string. | /** Draws a one-line text string. | ||||
@@ -142,7 +140,7 @@ public: | |||||
@see drawMultiLineText, drawText, drawFittedText, GlyphArrangement::addLineOfText | @see drawMultiLineText, drawText, drawFittedText, GlyphArrangement::addLineOfText | ||||
*/ | */ | ||||
void drawSingleLineText (const String& text, | void drawSingleLineText (const String& text, | ||||
int startX, int baselineY) const throw(); | |||||
int startX, int baselineY) const; | |||||
/** Draws text across multiple lines. | /** Draws text across multiple lines. | ||||
@@ -154,7 +152,7 @@ public: | |||||
*/ | */ | ||||
void drawMultiLineText (const String& text, | void drawMultiLineText (const String& text, | ||||
int startX, int baselineY, | int startX, int baselineY, | ||||
int maximumLineWidth) const throw(); | |||||
int maximumLineWidth) const; | |||||
/** Renders a string of text as a vector path. | /** Renders a string of text as a vector path. | ||||
@@ -165,7 +163,7 @@ public: | |||||
@see setFont | @see setFont | ||||
*/ | */ | ||||
void drawTextAsPath (const String& text, | void drawTextAsPath (const String& text, | ||||
const AffineTransform& transform) const throw(); | |||||
const AffineTransform& transform) const; | |||||
/** Draws a line of text within a specified rectangle. | /** Draws a line of text within a specified rectangle. | ||||
@@ -179,7 +177,7 @@ public: | |||||
void drawText (const String& text, | void drawText (const String& text, | ||||
int x, int y, int width, int height, | int x, int y, int width, int height, | ||||
const Justification& justificationType, | const Justification& justificationType, | ||||
bool useEllipsesIfTooBig) const throw(); | |||||
bool useEllipsesIfTooBig) const; | |||||
/** Tries to draw a text string inside a given space. | /** Tries to draw a text string inside a given space. | ||||
@@ -204,7 +202,7 @@ public: | |||||
int x, int y, int width, int height, | int x, int y, int width, int height, | ||||
const Justification& justificationFlags, | const Justification& justificationFlags, | ||||
int maximumNumberOfLines, | int maximumNumberOfLines, | ||||
float minimumHorizontalScale = 0.7f) const throw(); | |||||
float minimumHorizontalScale = 0.7f) const; | |||||
//============================================================================== | //============================================================================== | ||||
/** Fills the context's entire clip region with the current colour or brush. | /** Fills the context's entire clip region with the current colour or brush. | ||||
@@ -212,51 +210,51 @@ public: | |||||
(See also the fillAll (const Colour&) method which is a quick way of filling | (See also the fillAll (const Colour&) method which is a quick way of filling | ||||
it with a given colour). | it with a given colour). | ||||
*/ | */ | ||||
void fillAll() const throw(); | |||||
void fillAll() const; | |||||
/** Fills the context's entire clip region with a given colour. | /** Fills the context's entire clip region with a given colour. | ||||
This leaves the context's current colour and brush unchanged, it just | This leaves the context's current colour and brush unchanged, it just | ||||
uses the specified colour temporarily. | uses the specified colour temporarily. | ||||
*/ | */ | ||||
void fillAll (const Colour& colourToUse) const throw(); | |||||
void fillAll (const Colour& colourToUse) const; | |||||
//============================================================================== | //============================================================================== | ||||
/** Fills a rectangle with the current colour or brush. | /** Fills a rectangle with the current colour or brush. | ||||
@see drawRect, fillRoundedRectangle | @see drawRect, fillRoundedRectangle | ||||
*/ | */ | ||||
void fillRect (int x, int y, int width, int height) const throw(); | |||||
void fillRect (int x, int y, int width, int height) const; | |||||
/** Fills a rectangle with the current colour or brush. */ | /** Fills a rectangle with the current colour or brush. */ | ||||
void fillRect (const Rectangle<int>& rectangle) const throw(); | |||||
void fillRect (const Rectangle<int>& rectangle) const; | |||||
/** Fills a rectangle with the current colour or brush. | /** Fills a rectangle with the current colour or brush. | ||||
This uses sub-pixel positioning so is slower than the fillRect method which | This uses sub-pixel positioning so is slower than the fillRect method which | ||||
takes integer co-ordinates. | takes integer co-ordinates. | ||||
*/ | */ | ||||
void fillRect (float x, float y, float width, float height) const throw(); | |||||
void fillRect (float x, float y, float width, float height) const; | |||||
/** Uses the current colour or brush to fill a rectangle with rounded corners. | /** Uses the current colour or brush to fill a rectangle with rounded corners. | ||||
@see drawRoundedRectangle, Path::addRoundedRectangle | @see drawRoundedRectangle, Path::addRoundedRectangle | ||||
*/ | */ | ||||
void fillRoundedRectangle (float x, float y, float width, float height, | void fillRoundedRectangle (float x, float y, float width, float height, | ||||
float cornerSize) const throw(); | |||||
float cornerSize) const; | |||||
/** Uses the current colour or brush to fill a rectangle with rounded corners. | /** Uses the current colour or brush to fill a rectangle with rounded corners. | ||||
@see drawRoundedRectangle, Path::addRoundedRectangle | @see drawRoundedRectangle, Path::addRoundedRectangle | ||||
*/ | */ | ||||
void fillRoundedRectangle (const Rectangle<int>& rectangle, | |||||
float cornerSize) const throw(); | |||||
void fillRoundedRectangle (const Rectangle<float>& rectangle, | |||||
float cornerSize) const; | |||||
/** Fills a rectangle with a checkerboard pattern, alternating between two colours. | /** Fills a rectangle with a checkerboard pattern, alternating between two colours. | ||||
*/ | */ | ||||
void fillCheckerBoard (int x, int y, int width, int height, | void fillCheckerBoard (int x, int y, int width, int height, | ||||
int checkWidth, int checkHeight, | int checkWidth, int checkHeight, | ||||
const Colour& colour1, const Colour& colour2) const throw(); | |||||
const Colour& colour1, const Colour& colour2) const; | |||||
/** Draws four lines to form a rectangular outline, using the current colour or brush. | /** Draws four lines to form a rectangular outline, using the current colour or brush. | ||||
@@ -266,7 +264,7 @@ public: | |||||
@see fillRect | @see fillRect | ||||
*/ | */ | ||||
void drawRect (int x, int y, int width, int height, | void drawRect (int x, int y, int width, int height, | ||||
int lineThickness = 1) const throw(); | |||||
int lineThickness = 1) const; | |||||
/** Draws four lines to form a rectangular outline, using the current colour or brush. | /** Draws four lines to form a rectangular outline, using the current colour or brush. | ||||
@@ -276,7 +274,7 @@ public: | |||||
@see fillRect | @see fillRect | ||||
*/ | */ | ||||
void drawRect (float x, float y, float width, float height, | void drawRect (float x, float y, float width, float height, | ||||
float lineThickness = 1.0f) const throw(); | |||||
float lineThickness = 1.0f) const; | |||||
/** Draws four lines to form a rectangular outline, using the current colour or brush. | /** Draws four lines to form a rectangular outline, using the current colour or brush. | ||||
@@ -286,21 +284,21 @@ public: | |||||
@see fillRect | @see fillRect | ||||
*/ | */ | ||||
void drawRect (const Rectangle<int>& rectangle, | void drawRect (const Rectangle<int>& rectangle, | ||||
int lineThickness = 1) const throw(); | |||||
int lineThickness = 1) const; | |||||
/** Uses the current colour or brush to draw the outline of a rectangle with rounded corners. | /** Uses the current colour or brush to draw the outline of a rectangle with rounded corners. | ||||
@see fillRoundedRectangle, Path::addRoundedRectangle | @see fillRoundedRectangle, Path::addRoundedRectangle | ||||
*/ | */ | ||||
void drawRoundedRectangle (float x, float y, float width, float height, | void drawRoundedRectangle (float x, float y, float width, float height, | ||||
float cornerSize, float lineThickness) const throw(); | |||||
float cornerSize, float lineThickness) const; | |||||
/** Uses the current colour or brush to draw the outline of a rectangle with rounded corners. | /** Uses the current colour or brush to draw the outline of a rectangle with rounded corners. | ||||
@see fillRoundedRectangle, Path::addRoundedRectangle | @see fillRoundedRectangle, Path::addRoundedRectangle | ||||
*/ | */ | ||||
void drawRoundedRectangle (const Rectangle<int>& rectangle, | |||||
float cornerSize, float lineThickness) const throw(); | |||||
void drawRoundedRectangle (const Rectangle<float>& rectangle, | |||||
float cornerSize, float lineThickness) const; | |||||
/** Draws a 3D raised (or indented) bevel using two colours. | /** Draws a 3D raised (or indented) bevel using two colours. | ||||
@@ -321,11 +319,11 @@ public: | |||||
const Colour& topLeftColour = Colours::white, | const Colour& topLeftColour = Colours::white, | ||||
const Colour& bottomRightColour = Colours::black, | const Colour& bottomRightColour = Colours::black, | ||||
bool useGradient = true, | bool useGradient = true, | ||||
bool sharpEdgeOnOutside = true) const throw(); | |||||
bool sharpEdgeOnOutside = true) const; | |||||
/** Draws a pixel using the current colour or brush. | /** Draws a pixel using the current colour or brush. | ||||
*/ | */ | ||||
void setPixel (int x, int y) const throw(); | |||||
void setPixel (int x, int y) const; | |||||
//============================================================================== | //============================================================================== | ||||
/** Fills an ellipse with the current colour or brush. | /** Fills an ellipse with the current colour or brush. | ||||
@@ -334,47 +332,40 @@ public: | |||||
@see drawEllipse, Path::addEllipse | @see drawEllipse, Path::addEllipse | ||||
*/ | */ | ||||
void fillEllipse (float x, float y, float width, float height) const throw(); | |||||
void fillEllipse (float x, float y, float width, float height) const; | |||||
/** Draws an elliptical stroke using the current colour or brush. | /** Draws an elliptical stroke using the current colour or brush. | ||||
@see fillEllipse, Path::addEllipse | @see fillEllipse, Path::addEllipse | ||||
*/ | */ | ||||
void drawEllipse (float x, float y, float width, float height, | void drawEllipse (float x, float y, float width, float height, | ||||
float lineThickness) const throw(); | |||||
float lineThickness) const; | |||||
//============================================================================== | //============================================================================== | ||||
/** Draws a line between two points. | /** Draws a line between two points. | ||||
The line is 1 pixel wide and drawn with the current colour or brush. | The line is 1 pixel wide and drawn with the current colour or brush. | ||||
*/ | */ | ||||
void drawLine (float startX, | |||||
float startY, | |||||
float endX, | |||||
float endY) const throw(); | |||||
void drawLine (float startX, float startY, float endX, float endY) const; | |||||
/** Draws a line between two points with a given thickness. | /** Draws a line between two points with a given thickness. | ||||
@see Path::addLineSegment | @see Path::addLineSegment | ||||
*/ | */ | ||||
void drawLine (float startX, | |||||
float startY, | |||||
float endX, | |||||
float endY, | |||||
float lineThickness) const throw(); | |||||
void drawLine (float startX, float startY, float endX, float endY, | |||||
float lineThickness) const; | |||||
/** Draws a line between two points. | /** Draws a line between two points. | ||||
The line is 1 pixel wide and drawn with the current colour or brush. | The line is 1 pixel wide and drawn with the current colour or brush. | ||||
*/ | */ | ||||
void drawLine (const Line& line) const throw(); | |||||
void drawLine (const Line& line) const; | |||||
/** Draws a line between two points with a given thickness. | /** Draws a line between two points with a given thickness. | ||||
@see Path::addLineSegment | @see Path::addLineSegment | ||||
*/ | */ | ||||
void drawLine (const Line& line, | |||||
float lineThickness) const throw(); | |||||
void drawLine (const Line& line, float lineThickness) const; | |||||
/** Draws a dashed line using a custom set of dash-lengths. | /** Draws a dashed line using a custom set of dash-lengths. | ||||
@@ -389,39 +380,36 @@ public: | |||||
@param lineThickness the thickness of the line to draw | @param lineThickness the thickness of the line to draw | ||||
@see PathStrokeType::createDashedStroke | @see PathStrokeType::createDashedStroke | ||||
*/ | */ | ||||
void drawDashedLine (float startX, | |||||
float startY, | |||||
float endX, | |||||
float endY, | |||||
const float* dashLengths, | |||||
int numDashLengths, | |||||
float lineThickness = 1.0f) const throw(); | |||||
void drawDashedLine (float startX, float startY, | |||||
float endX, float endY, | |||||
const float* dashLengths, int numDashLengths, | |||||
float lineThickness = 1.0f) const; | |||||
/** Draws a vertical line of pixels at a given x position. | /** Draws a vertical line of pixels at a given x position. | ||||
The x position is an integer, but the top and bottom of the line can be sub-pixel | The x position is an integer, but the top and bottom of the line can be sub-pixel | ||||
positions, and these will be anti-aliased if necessary. | positions, and these will be anti-aliased if necessary. | ||||
*/ | */ | ||||
void drawVerticalLine (int x, float top, float bottom) const throw(); | |||||
void drawVerticalLine (int x, float top, float bottom) const; | |||||
/** Draws a horizontal line of pixels at a given y position. | /** Draws a horizontal line of pixels at a given y position. | ||||
The y position is an integer, but the left and right ends of the line can be sub-pixel | The y position is an integer, but the left and right ends of the line can be sub-pixel | ||||
positions, and these will be anti-aliased if necessary. | positions, and these will be anti-aliased if necessary. | ||||
*/ | */ | ||||
void drawHorizontalLine (int y, float left, float right) const throw(); | |||||
void drawHorizontalLine (int y, float left, float right) const; | |||||
//============================================================================== | //============================================================================== | ||||
/** Fills a path using the currently selected colour or brush. | /** Fills a path using the currently selected colour or brush. | ||||
*/ | */ | ||||
void fillPath (const Path& path, | void fillPath (const Path& path, | ||||
const AffineTransform& transform = AffineTransform::identity) const throw(); | |||||
const AffineTransform& transform = AffineTransform::identity) const; | |||||
/** Draws a path's outline using the currently selected colour or brush. | /** Draws a path's outline using the currently selected colour or brush. | ||||
*/ | */ | ||||
void strokePath (const Path& path, | void strokePath (const Path& path, | ||||
const PathStrokeType& strokeType, | const PathStrokeType& strokeType, | ||||
const AffineTransform& transform = AffineTransform::identity) const throw(); | |||||
const AffineTransform& transform = AffineTransform::identity) const; | |||||
/** Draws a line with an arrowhead. | /** Draws a line with an arrowhead. | ||||
@@ -433,13 +421,11 @@ public: | |||||
@param arrowheadWidth the width of the arrow head (perpendicular to the line) | @param arrowheadWidth the width of the arrow head (perpendicular to the line) | ||||
@param arrowheadLength the length of the arrow head (along the length of the line) | @param arrowheadLength the length of the arrow head (along the length of the line) | ||||
*/ | */ | ||||
void drawArrow (float startX, | |||||
float startY, | |||||
float endX, | |||||
float endY, | |||||
void drawArrow (float startX, float startY, | |||||
float endX, float endY, | |||||
float lineThickness, | float lineThickness, | ||||
float arrowheadWidth, | float arrowheadWidth, | ||||
float arrowheadLength) const throw(); | |||||
float arrowheadLength) const; | |||||
//============================================================================== | //============================================================================== | ||||
@@ -460,7 +446,7 @@ public: | |||||
@see Graphics::drawImage, Graphics::drawImageTransformed, Graphics::drawImageWithin | @see Graphics::drawImage, Graphics::drawImageTransformed, Graphics::drawImageWithin | ||||
*/ | */ | ||||
void setImageResamplingQuality (const ResamplingQuality newQuality) throw(); | |||||
void setImageResamplingQuality (const ResamplingQuality newQuality); | |||||
/** Draws an image. | /** Draws an image. | ||||
@@ -473,9 +459,8 @@ public: | |||||
don't want it to be drawn semi-transparently, be sure to call setOpacity (1.0f) | don't want it to be drawn semi-transparently, be sure to call setOpacity (1.0f) | ||||
(or setColour() with an opaque colour) before drawing images. | (or setColour() with an opaque colour) before drawing images. | ||||
*/ | */ | ||||
void drawImageAt (const Image* const imageToDraw, | |||||
int topLeftX, int topLeftY, | |||||
bool fillAlphaChannelWithCurrentBrush = false) const throw(); | |||||
void drawImageAt (const Image* const imageToDraw, int topLeftX, int topLeftY, | |||||
bool fillAlphaChannelWithCurrentBrush = false) const; | |||||
/** Draws part of an image, rescaling it to fit in a given target region. | /** Draws part of an image, rescaling it to fit in a given target region. | ||||
@@ -503,15 +488,9 @@ public: | |||||
@see setImageResamplingQuality, drawImageAt, drawImageWithin, fillAlphaMap | @see setImageResamplingQuality, drawImageAt, drawImageWithin, fillAlphaMap | ||||
*/ | */ | ||||
void drawImage (const Image* const imageToDraw, | void drawImage (const Image* const imageToDraw, | ||||
int destX, | |||||
int destY, | |||||
int destWidth, | |||||
int destHeight, | |||||
int sourceX, | |||||
int sourceY, | |||||
int sourceWidth, | |||||
int sourceHeight, | |||||
bool fillAlphaChannelWithCurrentBrush = false) const throw(); | |||||
int destX, int destY, int destWidth, int destHeight, | |||||
int sourceX, int sourceY, int sourceWidth, int sourceHeight, | |||||
bool fillAlphaChannelWithCurrentBrush = false) const; | |||||
/** Draws part of an image, having applied an affine transform to it. | /** Draws part of an image, having applied an affine transform to it. | ||||
@@ -537,7 +516,7 @@ public: | |||||
void drawImageTransformed (const Image* imageToDraw, | void drawImageTransformed (const Image* imageToDraw, | ||||
const Rectangle<int>& imageSubRegion, | const Rectangle<int>& imageSubRegion, | ||||
const AffineTransform& transform, | const AffineTransform& transform, | ||||
bool fillAlphaChannelWithCurrentBrush = false) const throw(); | |||||
bool fillAlphaChannelWithCurrentBrush = false) const; | |||||
/** Draws an image to fit within a designated rectangle. | /** Draws an image to fit within a designated rectangle. | ||||
@@ -563,7 +542,7 @@ public: | |||||
void drawImageWithin (const Image* imageToDraw, | void drawImageWithin (const Image* imageToDraw, | ||||
int destX, int destY, int destWidth, int destHeight, | int destX, int destY, int destWidth, int destHeight, | ||||
const RectanglePlacement& placementWithinTarget, | const RectanglePlacement& placementWithinTarget, | ||||
bool fillAlphaChannelWithCurrentBrush = false) const throw(); | |||||
bool fillAlphaChannelWithCurrentBrush = false) const; | |||||
//============================================================================== | //============================================================================== | ||||
@@ -571,7 +550,7 @@ public: | |||||
@see getClipRegion, clipRegionIntersects | @see getClipRegion, clipRegionIntersects | ||||
*/ | */ | ||||
const Rectangle<int> getClipBounds() const throw(); | |||||
const Rectangle<int> getClipBounds() const; | |||||
/** Checks whether a rectangle overlaps the context's clipping region. | /** Checks whether a rectangle overlaps the context's clipping region. | ||||
@@ -579,28 +558,28 @@ public: | |||||
method can be used to optimise a component's paint() method, by letting it | method can be used to optimise a component's paint() method, by letting it | ||||
avoid drawing complex objects that aren't within the region being repainted. | avoid drawing complex objects that aren't within the region being repainted. | ||||
*/ | */ | ||||
bool clipRegionIntersects (int x, int y, int width, int height) const throw(); | |||||
bool clipRegionIntersects (int x, int y, int width, int height) const; | |||||
/** Intersects the current clipping region with another region. | /** Intersects the current clipping region with another region. | ||||
@returns true if the resulting clipping region is non-zero in size | @returns true if the resulting clipping region is non-zero in size | ||||
@see setOrigin, clipRegionIntersects | @see setOrigin, clipRegionIntersects | ||||
*/ | */ | ||||
bool reduceClipRegion (int x, int y, int width, int height) throw(); | |||||
bool reduceClipRegion (int x, int y, int width, int height); | |||||
/** Intersects the current clipping region with a rectangle list region. | /** Intersects the current clipping region with a rectangle list region. | ||||
@returns true if the resulting clipping region is non-zero in size | @returns true if the resulting clipping region is non-zero in size | ||||
@see setOrigin, clipRegionIntersects | @see setOrigin, clipRegionIntersects | ||||
*/ | */ | ||||
bool reduceClipRegion (const RectangleList& clipRegion) throw(); | |||||
bool reduceClipRegion (const RectangleList& clipRegion); | |||||
/** Intersects the current clipping region with a path. | /** Intersects the current clipping region with a path. | ||||
@returns true if the resulting clipping region is non-zero in size | @returns true if the resulting clipping region is non-zero in size | ||||
@see reduceClipRegion | @see reduceClipRegion | ||||
*/ | */ | ||||
bool reduceClipRegion (const Path& path, const AffineTransform& transform = AffineTransform::identity) throw(); | |||||
bool reduceClipRegion (const Path& path, const AffineTransform& transform = AffineTransform::identity); | |||||
/** Intersects the current clipping region with an image's alpha-channel. | /** Intersects the current clipping region with an image's alpha-channel. | ||||
@@ -617,23 +596,23 @@ public: | |||||
@see reduceClipRegion | @see reduceClipRegion | ||||
*/ | */ | ||||
bool reduceClipRegion (const Image& image, const Rectangle<int>& sourceClipRegion, | bool reduceClipRegion (const Image& image, const Rectangle<int>& sourceClipRegion, | ||||
const AffineTransform& transform) throw(); | |||||
const AffineTransform& transform); | |||||
/** Excludes a rectangle to stop it being drawn into. */ | /** Excludes a rectangle to stop it being drawn into. */ | ||||
void excludeClipRegion (const Rectangle<int>& rectangleToExclude) throw(); | |||||
void excludeClipRegion (const Rectangle<int>& rectangleToExclude); | |||||
/** Returns true if no drawing can be done because the clip region is zero. */ | /** Returns true if no drawing can be done because the clip region is zero. */ | ||||
bool isClipEmpty() const throw(); | |||||
bool isClipEmpty() const; | |||||
/** Saves the current graphics state on an internal stack. | /** Saves the current graphics state on an internal stack. | ||||
To restore the state, use restoreState(). | To restore the state, use restoreState(). | ||||
*/ | */ | ||||
void saveState() throw(); | |||||
void saveState(); | |||||
/** Restores a graphics state that was previously saved with saveState(). | /** Restores a graphics state that was previously saved with saveState(). | ||||
*/ | */ | ||||
void restoreState() throw(); | |||||
void restoreState(); | |||||
/** Moves the position of the context's origin. | /** Moves the position of the context's origin. | ||||
@@ -645,21 +624,19 @@ public: | |||||
@see reduceClipRegion | @see reduceClipRegion | ||||
*/ | */ | ||||
void setOrigin (int newOriginX, int newOriginY) throw(); | |||||
void setOrigin (int newOriginX, int newOriginY); | |||||
/** Resets the current colour, brush, and font to default settings. */ | /** Resets the current colour, brush, and font to default settings. */ | ||||
void resetToDefaultState() throw(); | |||||
void resetToDefaultState(); | |||||
/** Returns true if this context is drawing to a vector-based device, such as a printer. */ | /** Returns true if this context is drawing to a vector-based device, such as a printer. */ | ||||
bool isVectorDevice() const throw(); | |||||
bool isVectorDevice() const; | |||||
//============================================================================== | //============================================================================== | ||||
juce_UseDebuggingNewOperator | juce_UseDebuggingNewOperator | ||||
/** Create a graphics that uses a given low-level renderer. | /** Create a graphics that uses a given low-level renderer. | ||||
For internal use only. | For internal use only. | ||||
NB. The context will NOT be deleted by this object when it is deleted. | NB. The context will NOT be deleted by this object when it is deleted. | ||||
*/ | */ | ||||
Graphics (LowLevelGraphicsContext* const internalContext) throw(); | Graphics (LowLevelGraphicsContext* const internalContext) throw(); | ||||
@@ -673,7 +650,7 @@ private: | |||||
ScopedPointer <LowLevelGraphicsContext> contextToDelete; | ScopedPointer <LowLevelGraphicsContext> contextToDelete; | ||||
bool saveStatePending; | bool saveStatePending; | ||||
void saveStateIfPending() throw(); | |||||
void saveStateIfPending(); | |||||
Graphics (const Graphics&); | Graphics (const Graphics&); | ||||
Graphics& operator= (const Graphics& other); | Graphics& operator= (const Graphics& other); | ||||
@@ -33,8 +33,8 @@ BEGIN_JUCE_NAMESPACE | |||||
//============================================================================== | //============================================================================== | ||||
DrawablePath::DrawablePath() | DrawablePath::DrawablePath() | ||||
: mainFill (FillType (Colours::black)), | |||||
strokeFill (FillType (Colours::transparentBlack)), | |||||
: mainFill (Colours::black), | |||||
strokeFill (Colours::transparentBlack), | |||||
strokeType (0.0f) | strokeType (0.0f) | ||||
{ | { | ||||
} | } | ||||
@@ -136,8 +136,8 @@ static const FillType readFillTypeFromTree (const ValueTree& v) | |||||
if (type.equalsIgnoreCase ("solid")) | if (type.equalsIgnoreCase ("solid")) | ||||
{ | { | ||||
const String colour (v ["colour"].toString()); | const String colour (v ["colour"].toString()); | ||||
return FillType (Colour (colour.isEmpty() ? (uint32) 0xff000000 | |||||
: (uint32) colour.getHexValue32())); | |||||
return Colour (colour.isEmpty() ? (uint32) 0xff000000 | |||||
: (uint32) colour.getHexValue32()); | |||||
} | } | ||||
else if (type.equalsIgnoreCase ("gradient")) | else if (type.equalsIgnoreCase ("gradient")) | ||||
{ | { | ||||
@@ -155,7 +155,7 @@ static const FillType readFillTypeFromTree (const ValueTree& v) | |||||
g.addColour (colours[i * 2].getDoubleValue(), | g.addColour (colours[i * 2].getDoubleValue(), | ||||
Colour ((uint32) colours[i * 2 + 1].getHexValue32())); | Colour ((uint32) colours[i * 2 + 1].getHexValue32())); | ||||
return FillType (g); | |||||
return g; | |||||
} | } | ||||
jassertfalse | jassertfalse | ||||
@@ -610,7 +610,7 @@ private: | |||||
DrawablePath* dp = new DrawablePath(); | DrawablePath* dp = new DrawablePath(); | ||||
dp->setName (xml.getStringAttribute ("id")); | dp->setName (xml.getStringAttribute ("id")); | ||||
dp->setFill (FillType (Colours::transparentBlack)); | |||||
dp->setFill (Colours::transparentBlack); | |||||
path.applyTransform (transform); | path.applyTransform (transform); | ||||
dp->setPath (path); | dp->setPath (path); | ||||
@@ -72,6 +72,17 @@ public: | |||||
{ | { | ||||
} | } | ||||
/** Creates a Rectangle from the positions of two opposite corners. */ | |||||
Rectangle (const Point<ValueType>& corner1, const Point<ValueType>& corner2) throw() | |||||
: x (jmin (corner1.getX(), corner2.getX())), | |||||
y (jmin (corner1.getY(), corner2.getY())), | |||||
w (corner1.getX() - corner2.getX()), | |||||
h (corner1.getY() - corner2.getY()) | |||||
{ | |||||
if (w < 0) w = -w; | |||||
if (h < 0) h = -h; | |||||
} | |||||
Rectangle& operator= (const Rectangle& other) throw() | Rectangle& operator= (const Rectangle& other) throw() | ||||
{ | { | ||||
x = other.x; y = other.y; | x = other.x; y = other.y; | ||||