mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-14 00:14:18 +00:00
Changed case of examples folder name.
This commit is contained in:
parent
46547bf8d6
commit
a626425764
2262 changed files with 0 additions and 0 deletions
|
|
@ -0,0 +1,182 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
static inline void blurDataTriplets (uint8* d, int num, const int delta) noexcept
|
||||
{
|
||||
uint32 last = d[0];
|
||||
d[0] = (uint8) ((d[0] + d[delta] + 1) / 3);
|
||||
d += delta;
|
||||
|
||||
num -= 2;
|
||||
|
||||
do
|
||||
{
|
||||
const uint32 newLast = d[0];
|
||||
d[0] = (uint8) ((last + d[0] + d[delta] + 1) / 3);
|
||||
d += delta;
|
||||
last = newLast;
|
||||
}
|
||||
while (--num > 0);
|
||||
|
||||
d[0] = (uint8) ((last + d[0] + 1) / 3);
|
||||
}
|
||||
|
||||
static void blurSingleChannelImage (uint8* const data, const int width, const int height,
|
||||
const int lineStride, const int repetitions) noexcept
|
||||
{
|
||||
jassert (width > 2 && height > 2);
|
||||
|
||||
for (int y = 0; y < height; ++y)
|
||||
for (int i = repetitions; --i >= 0;)
|
||||
blurDataTriplets (data + lineStride * y, width, 1);
|
||||
|
||||
for (int x = 0; x < width; ++x)
|
||||
for (int i = repetitions; --i >= 0;)
|
||||
blurDataTriplets (data + x, height, lineStride);
|
||||
}
|
||||
|
||||
static void blurSingleChannelImage (Image& image, int radius)
|
||||
{
|
||||
const Image::BitmapData bm (image, Image::BitmapData::readWrite);
|
||||
blurSingleChannelImage (bm.data, bm.width, bm.height, bm.lineStride, 2 * radius);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
DropShadow::DropShadow() noexcept
|
||||
: colour (0x90000000), radius (4)
|
||||
{
|
||||
}
|
||||
|
||||
DropShadow::DropShadow (Colour shadowColour, const int r, Point<int> o) noexcept
|
||||
: colour (shadowColour), radius (r), offset (o)
|
||||
{
|
||||
jassert (radius > 0);
|
||||
}
|
||||
|
||||
void DropShadow::drawForImage (Graphics& g, const Image& srcImage) const
|
||||
{
|
||||
jassert (radius > 0);
|
||||
|
||||
if (srcImage.isValid())
|
||||
{
|
||||
Image shadowImage (srcImage.convertedToFormat (Image::SingleChannel));
|
||||
shadowImage.duplicateIfShared();
|
||||
|
||||
blurSingleChannelImage (shadowImage, radius);
|
||||
|
||||
g.setColour (colour);
|
||||
g.drawImageAt (shadowImage, offset.x, offset.y, true);
|
||||
}
|
||||
}
|
||||
|
||||
void DropShadow::drawForPath (Graphics& g, const Path& path) const
|
||||
{
|
||||
jassert (radius > 0);
|
||||
|
||||
const Rectangle<int> area ((path.getBounds().getSmallestIntegerContainer() + offset)
|
||||
.expanded (radius + 1)
|
||||
.getIntersection (g.getClipBounds().expanded (radius + 1)));
|
||||
|
||||
if (area.getWidth() > 2 && area.getHeight() > 2)
|
||||
{
|
||||
Image renderedPath (Image::SingleChannel, area.getWidth(), area.getHeight(), true);
|
||||
|
||||
{
|
||||
Graphics g2 (renderedPath);
|
||||
g2.setColour (Colours::white);
|
||||
g2.fillPath (path, AffineTransform::translation ((float) (offset.x - area.getX()),
|
||||
(float) (offset.y - area.getY())));
|
||||
}
|
||||
|
||||
blurSingleChannelImage (renderedPath, radius);
|
||||
|
||||
g.setColour (colour);
|
||||
g.drawImageAt (renderedPath, area.getX(), area.getY(), true);
|
||||
}
|
||||
}
|
||||
|
||||
static void drawShadowSection (Graphics& g, ColourGradient& cg, const Rectangle<int>& area,
|
||||
bool isCorner, float centreX, float centreY, float edgeX, float edgeY)
|
||||
{
|
||||
cg.point1 = area.getRelativePoint (centreX, centreY).toFloat();
|
||||
cg.point2 = area.getRelativePoint (edgeX, edgeY).toFloat();
|
||||
cg.isRadial = isCorner;
|
||||
|
||||
g.setGradientFill (cg);
|
||||
g.fillRect (area);
|
||||
}
|
||||
|
||||
void DropShadow::drawForRectangle (Graphics& g, const Rectangle<int>& targetArea) const
|
||||
{
|
||||
ColourGradient cg (colour, 0, 0, colour.withAlpha (0.0f), 0, 0, false);
|
||||
|
||||
for (float i = 0.05f; i < 1.0f; i += 0.1f)
|
||||
cg.addColour (1.0 - i, colour.withMultipliedAlpha (i * i));
|
||||
|
||||
const int radiusInset = (radius + 1) / 2;
|
||||
const int expandedRadius = radius + radiusInset;
|
||||
|
||||
const Rectangle<int> area (targetArea.reduced (radiusInset) + offset);
|
||||
|
||||
Rectangle<int> r (area.expanded (expandedRadius));
|
||||
Rectangle<int> top (r.removeFromTop (expandedRadius));
|
||||
Rectangle<int> bottom (r.removeFromBottom (expandedRadius));
|
||||
|
||||
drawShadowSection (g, cg, top.removeFromLeft (expandedRadius), true, 1.0f, 1.0f, 0, 1.0f);
|
||||
drawShadowSection (g, cg, top.removeFromRight (expandedRadius), true, 0, 1.0f, 1.0f, 1.0f);
|
||||
drawShadowSection (g, cg, top, false, 0, 1.0f, 0, 0);
|
||||
|
||||
drawShadowSection (g, cg, bottom.removeFromLeft (expandedRadius), true, 1.0f, 0, 0, 0);
|
||||
drawShadowSection (g, cg, bottom.removeFromRight (expandedRadius), true, 0, 0, 1.0f, 0);
|
||||
drawShadowSection (g, cg, bottom, false, 0, 0, 0, 1.0f);
|
||||
|
||||
drawShadowSection (g, cg, r.removeFromLeft (expandedRadius), false, 1.0f, 0, 0, 0);
|
||||
drawShadowSection (g, cg, r.removeFromRight (expandedRadius), false, 0, 0, 1.0f, 0);
|
||||
|
||||
g.setColour (colour);
|
||||
g.fillRect (area);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
DropShadowEffect::DropShadowEffect() {}
|
||||
DropShadowEffect::~DropShadowEffect() {}
|
||||
|
||||
void DropShadowEffect::setShadowProperties (const DropShadow& newShadow)
|
||||
{
|
||||
shadow = newShadow;
|
||||
}
|
||||
|
||||
void DropShadowEffect::applyEffect (Image& image, Graphics& g, float scaleFactor, float alpha)
|
||||
{
|
||||
DropShadow s (shadow);
|
||||
s.radius = roundToInt (s.radius * scaleFactor);
|
||||
s.colour = s.colour.withMultipliedAlpha (alpha);
|
||||
s.offset.x = roundToInt (s.offset.x * scaleFactor);
|
||||
s.offset.y = roundToInt (s.offset.y * scaleFactor);
|
||||
|
||||
s.drawForImage (g, image);
|
||||
|
||||
g.setOpacity (alpha);
|
||||
g.drawImageAt (image, 0, 0);
|
||||
}
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef JUCE_DROPSHADOWEFFECT_H_INCLUDED
|
||||
#define JUCE_DROPSHADOWEFFECT_H_INCLUDED
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/**
|
||||
Defines a drop-shadow effect.
|
||||
*/
|
||||
struct JUCE_API DropShadow
|
||||
{
|
||||
/** Creates a default drop-shadow effect. */
|
||||
DropShadow() noexcept;
|
||||
|
||||
/** Creates a drop-shadow object with the given parameters. */
|
||||
DropShadow (Colour shadowColour, int radius, Point<int> offset) noexcept;
|
||||
|
||||
/** Renders a drop-shadow based on the alpha-channel of the given image. */
|
||||
void drawForImage (Graphics& g, const Image& srcImage) const;
|
||||
|
||||
/** Renders a drop-shadow based on the shape of a path. */
|
||||
void drawForPath (Graphics& g, const Path& path) const;
|
||||
|
||||
/** Renders a drop-shadow for a rectangle.
|
||||
Note that for speed, this approximates the shadow using gradients.
|
||||
*/
|
||||
void drawForRectangle (Graphics& g, const Rectangle<int>& area) const;
|
||||
|
||||
/** The colour with which to render the shadow.
|
||||
In most cases you'll probably want to leave this as black with an alpha
|
||||
value of around 0.5
|
||||
*/
|
||||
Colour colour;
|
||||
|
||||
/** The approximate spread of the shadow. */
|
||||
int radius;
|
||||
|
||||
/** The offset of the shadow. */
|
||||
Point<int> offset;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
/**
|
||||
An effect filter that adds a drop-shadow behind the image's content.
|
||||
|
||||
(This will only work on images/components that aren't opaque, of course).
|
||||
|
||||
When added to a component, this effect will draw a soft-edged
|
||||
shadow based on what gets drawn inside it. The shadow will also
|
||||
be applied to the component's children.
|
||||
|
||||
For speed, this doesn't use a proper gaussian blur, but cheats by
|
||||
using a simple bilinear filter. If you need a really high-quality
|
||||
shadow, check out ImageConvolutionKernel::createGaussianBlur()
|
||||
|
||||
@see Component::setComponentEffect
|
||||
*/
|
||||
class JUCE_API DropShadowEffect : public ImageEffectFilter
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
/** Creates a default drop-shadow effect.
|
||||
To customise the shadow's appearance, use the setShadowProperties() method.
|
||||
*/
|
||||
DropShadowEffect();
|
||||
|
||||
/** Destructor. */
|
||||
~DropShadowEffect();
|
||||
|
||||
//==============================================================================
|
||||
/** Sets up parameters affecting the shadow's appearance. */
|
||||
void setShadowProperties (const DropShadow& newShadow);
|
||||
|
||||
//==============================================================================
|
||||
/** @internal */
|
||||
void applyEffect (Image& sourceImage, Graphics& destContext, float scaleFactor, float alpha);
|
||||
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
DropShadow shadow;
|
||||
|
||||
JUCE_LEAK_DETECTOR (DropShadowEffect)
|
||||
};
|
||||
|
||||
|
||||
#endif // JUCE_DROPSHADOWEFFECT_H_INCLUDED
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
GlowEffect::GlowEffect()
|
||||
: radius (2.0f),
|
||||
colour (Colours::white)
|
||||
{
|
||||
}
|
||||
|
||||
GlowEffect::~GlowEffect()
|
||||
{
|
||||
}
|
||||
|
||||
void GlowEffect::setGlowProperties (const float newRadius,
|
||||
Colour newColour)
|
||||
{
|
||||
radius = newRadius;
|
||||
colour = newColour;
|
||||
}
|
||||
|
||||
void GlowEffect::applyEffect (Image& image, Graphics& g, float scaleFactor, float alpha)
|
||||
{
|
||||
Image temp (image.getFormat(), image.getWidth(), image.getHeight(), true);
|
||||
|
||||
ImageConvolutionKernel blurKernel (roundToInt (radius * scaleFactor * 2.0f));
|
||||
|
||||
blurKernel.createGaussianBlur (radius);
|
||||
blurKernel.rescaleAllValues (radius);
|
||||
|
||||
blurKernel.applyToImage (temp, image, image.getBounds());
|
||||
|
||||
g.setColour (colour.withMultipliedAlpha (alpha));
|
||||
g.drawImageAt (temp, 0, 0, true);
|
||||
|
||||
g.setOpacity (alpha);
|
||||
g.drawImageAt (image, 0, 0, false);
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef JUCE_GLOWEFFECT_H_INCLUDED
|
||||
#define JUCE_GLOWEFFECT_H_INCLUDED
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/**
|
||||
A component effect that adds a coloured blur around the component's contents.
|
||||
|
||||
(This will only work on non-opaque components).
|
||||
|
||||
@see Component::setComponentEffect, DropShadowEffect
|
||||
*/
|
||||
class JUCE_API GlowEffect : public ImageEffectFilter
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
/** Creates a default 'glow' effect.
|
||||
|
||||
To customise its appearance, use the setGlowProperties() method.
|
||||
*/
|
||||
GlowEffect();
|
||||
|
||||
/** Destructor. */
|
||||
~GlowEffect();
|
||||
|
||||
//==============================================================================
|
||||
/** Sets the glow's radius and colour.
|
||||
|
||||
The radius is how large the blur should be, and the colour is
|
||||
used to render it (for a less intense glow, lower the colour's
|
||||
opacity).
|
||||
*/
|
||||
void setGlowProperties (float newRadius,
|
||||
Colour newColour);
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/** @internal */
|
||||
void applyEffect (Image& sourceImage, Graphics& destContext, float scaleFactor, float alpha);
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
float radius;
|
||||
Colour colour;
|
||||
|
||||
JUCE_LEAK_DETECTOR (GlowEffect)
|
||||
};
|
||||
|
||||
|
||||
#endif // JUCE_GLOWEFFECT_H_INCLUDED
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef JUCE_IMAGEEFFECTFILTER_H_INCLUDED
|
||||
#define JUCE_IMAGEEFFECTFILTER_H_INCLUDED
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/**
|
||||
A graphical effect filter that can be applied to components.
|
||||
|
||||
An ImageEffectFilter can be applied to the image that a component
|
||||
paints before it hits the screen.
|
||||
|
||||
This is used for adding effects like shadows, blurs, etc.
|
||||
|
||||
@see Component::setComponentEffect
|
||||
*/
|
||||
class JUCE_API ImageEffectFilter
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
/** Overridden to render the effect.
|
||||
|
||||
The implementation of this method must use the image that is passed in
|
||||
as its source, and should render its output to the graphics context passed in.
|
||||
|
||||
@param sourceImage the image that the source component has just rendered with
|
||||
its paint() method. The image may or may not have an alpha
|
||||
channel, depending on whether the component is opaque.
|
||||
@param destContext the graphics context to use to draw the resultant image.
|
||||
@param scaleFactor a scale factor that has been applied to the image - e.g. if
|
||||
this is 2, then the image is actually scaled-up to twice the
|
||||
original resolution
|
||||
@param alpha the alpha with which to draw the resultant image to the
|
||||
target context
|
||||
*/
|
||||
virtual void applyEffect (Image& sourceImage,
|
||||
Graphics& destContext,
|
||||
float scaleFactor,
|
||||
float alpha) = 0;
|
||||
|
||||
/** Destructor. */
|
||||
virtual ~ImageEffectFilter() {}
|
||||
|
||||
};
|
||||
|
||||
#endif // JUCE_IMAGEEFFECTFILTER_H_INCLUDED
|
||||
Loading…
Add table
Add a link
Reference in a new issue