mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-13 00:04:19 +00:00
This commit is contained in:
parent
2f7be7bcbe
commit
d7a429759b
7 changed files with 85 additions and 7 deletions
|
|
@ -431,10 +431,11 @@ public:
|
|||
*/
|
||||
enum ColourIds
|
||||
{
|
||||
backgroundColourId = 0x1002800, /**< The background colour to fill the list with.
|
||||
Make this transparent if you don't want the background to be filled. */
|
||||
outlineColourId = 0x1002810 /**< An optional colour to use to draw a border around the list.
|
||||
Make this transparent to not have an outline. */
|
||||
backgroundColourId = 0x1002800, /**< The background colour to fill the list with.
|
||||
Make this transparent if you don't want the background to be filled. */
|
||||
outlineColourId = 0x1002810, /**< An optional colour to use to draw a border around the list.
|
||||
Make this transparent to not have an outline. */
|
||||
textColourId = 0x1002820 /**< The preferred colour to use for drawing text in the listbox. */
|
||||
};
|
||||
|
||||
/** Sets the thickness of a border that will be drawn around the box.
|
||||
|
|
|
|||
|
|
@ -1281,9 +1281,10 @@ void Slider::mouseWheelMove (const MouseEvent&, float wheelIncrementX, float whe
|
|||
const double currentPos = valueToProportionOfLength (currentValue);
|
||||
const double newValue = proportionOfLengthToValue (jlimit (0.0, 1.0, currentPos + proportionDelta));
|
||||
|
||||
double delta = jmax (fabs (newValue - currentValue), interval);
|
||||
double delta = (newValue != currentValue)
|
||||
? jmax (fabs (newValue - currentValue), interval) : 0;
|
||||
|
||||
if (proportionDelta < 0)
|
||||
if (currentValue > newValue)
|
||||
delta = -delta;
|
||||
|
||||
sendDragStart();
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ LookAndFeel::LookAndFeel()
|
|||
|
||||
ListBox::backgroundColourId, 0xffffffff,
|
||||
ListBox::outlineColourId, standardOutlineColour,
|
||||
ListBox::textColourId, 0xff000000,
|
||||
|
||||
Slider::backgroundColourId, 0x00000000,
|
||||
Slider::thumbColourId, textButtonColour,
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ public:
|
|||
enabled, true, true, false);
|
||||
|
||||
g.setFont (height * 0.6f);
|
||||
g.setColour (Colours::black.withAlpha (enabled ? 1.0f : 0.6f));
|
||||
g.setColour (findColour (ListBox::textColourId, true).withMultipliedAlpha (enabled ? 1.0f : 0.6f));
|
||||
g.drawText (item, x, 0, width - x - 2, height, Justification::centredLeft, true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,6 +42,20 @@ BEGIN_JUCE_NAMESPACE
|
|||
|
||||
static const Graphics::ResamplingQuality defaultQuality = Graphics::mediumResamplingQuality;
|
||||
|
||||
//==============================================================================
|
||||
#define MINIMUM_COORD -0x3fffffff
|
||||
#define MAXIMUM_COORD 0x3fffffff
|
||||
|
||||
#define ASSERT_COORDS_ARE_SENSIBLE_NUMBERS(x, y, w, h) \
|
||||
jassert ((int) x >= MINIMUM_COORD \
|
||||
&& (int) x <= MAXIMUM_COORD \
|
||||
&& (int) y >= MINIMUM_COORD \
|
||||
&& (int) y <= MAXIMUM_COORD \
|
||||
&& (int) w >= 0 \
|
||||
&& (int) w < MAXIMUM_COORD \
|
||||
&& (int) h >= 0 \
|
||||
&& (int) h < MAXIMUM_COORD);
|
||||
|
||||
|
||||
//==============================================================================
|
||||
LowLevelGraphicsContext::LowLevelGraphicsContext()
|
||||
|
|
@ -345,6 +359,9 @@ void Graphics::fillRect (int x,
|
|||
int width,
|
||||
int height) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
|
||||
SolidColourBrush colourBrush (state->colour);
|
||||
(state->brush != 0 ? *(state->brush) : (Brush&) colourBrush).paintRectangle (*context, x, y, width, height);
|
||||
}
|
||||
|
|
@ -362,6 +379,9 @@ void Graphics::fillRect (const float x,
|
|||
const float width,
|
||||
const float height) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
|
||||
Path p;
|
||||
p.addRectangle (x, y, width, height);
|
||||
fillPath (p);
|
||||
|
|
@ -423,6 +443,9 @@ void Graphics::drawRect (const int x,
|
|||
const int height,
|
||||
const int lineThickness) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
|
||||
SolidColourBrush colourBrush (state->colour);
|
||||
Brush& b = (state->brush != 0 ? *(state->brush) : (Brush&) colourBrush);
|
||||
|
||||
|
|
@ -441,6 +464,9 @@ void Graphics::drawBevel (const int x,
|
|||
const Colour& bottomRightColour,
|
||||
const bool useGradient) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
|
||||
if (clipRegionIntersects (x, y, width, height))
|
||||
{
|
||||
const float oldOpacity = state->colour.getFloatAlpha();
|
||||
|
|
@ -465,6 +491,9 @@ void Graphics::fillEllipse (const float x,
|
|||
const float width,
|
||||
const float height) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
|
||||
Path p;
|
||||
p.addEllipse (x, y, width, height);
|
||||
fillPath (p);
|
||||
|
|
@ -476,6 +505,9 @@ void Graphics::drawEllipse (const float x,
|
|||
const float height,
|
||||
const float lineThickness) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
|
||||
Path p;
|
||||
p.addEllipse (x, y, width, height);
|
||||
strokePath (p, PathStrokeType (lineThickness));
|
||||
|
|
@ -487,6 +519,9 @@ void Graphics::fillRoundedRectangle (const float x,
|
|||
const float height,
|
||||
const float cornerSize) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
|
||||
Path p;
|
||||
p.addRoundedRectangle (x, y, width, height, cornerSize);
|
||||
fillPath (p);
|
||||
|
|
@ -499,6 +534,9 @@ void Graphics::drawRoundedRectangle (const float x,
|
|||
const float cornerSize,
|
||||
const float lineThickness) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
|
||||
Path p;
|
||||
p.addRoundedRectangle (x, y, width, height, cornerSize);
|
||||
strokePath (p, PathStrokeType (lineThickness));
|
||||
|
|
@ -680,6 +718,9 @@ void Graphics::drawImageWithin (const Image* const imageToDraw,
|
|||
const RectanglePlacement& placementWithinTarget,
|
||||
const bool fillAlphaChannelWithCurrentBrush) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (destX, destY, destW, destH);
|
||||
|
||||
if (imageToDraw != 0)
|
||||
{
|
||||
const int imageW = imageToDraw->getWidth();
|
||||
|
|
@ -711,6 +752,10 @@ void Graphics::drawImage (const Image* const imageToDraw,
|
|||
int sx, int sy, int sw, int sh,
|
||||
const bool fillAlphaChannelWithCurrentBrush) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (dx, dy, dw, dh);
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (sx, sy, sw, sh);
|
||||
|
||||
if (imageToDraw == 0 || ! context->clipRegionIntersects (dx, dy, dw, dh))
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -49,6 +49,19 @@ BEGIN_JUCE_NAMESPACE
|
|||
#pragma warning (disable: 4714)
|
||||
#endif
|
||||
|
||||
#define MINIMUM_COORD -0x3fffffff
|
||||
#define MAXIMUM_COORD 0x3fffffff
|
||||
|
||||
#define ASSERT_COORDS_ARE_SENSIBLE_NUMBERS(x, y, w, h) \
|
||||
jassert ((int) x >= MINIMUM_COORD \
|
||||
&& (int) x <= MAXIMUM_COORD \
|
||||
&& (int) y >= MINIMUM_COORD \
|
||||
&& (int) y <= MAXIMUM_COORD \
|
||||
&& (int) w >= 0 \
|
||||
&& (int) w < MAXIMUM_COORD \
|
||||
&& (int) h >= 0 \
|
||||
&& (int) h < MAXIMUM_COORD);
|
||||
|
||||
//==============================================================================
|
||||
static void replaceRectRGB (uint8* pixels, const int w, int h, const int stride, const Colour& colour) throw()
|
||||
{
|
||||
|
|
@ -1177,6 +1190,9 @@ bool LowLevelGraphicsSoftwareRenderer::getPathBounds (int clipX, int clipY, int
|
|||
w = roundDoubleToInt (tw) + 2;
|
||||
h = roundDoubleToInt (th) + 2;
|
||||
|
||||
// seems like this operation is using some crazy out-of-range numbers..
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, w, h);
|
||||
|
||||
return Rectangle::intersectRectangles (x, y, w, h, clipX, clipY, clipW, clipH);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,9 @@ BEGIN_JUCE_NAMESPACE
|
|||
#include "juce_Line.h"
|
||||
#include "../../../../juce_core/io/streams/juce_MemoryInputStream.h"
|
||||
|
||||
// tests that some co-ords aren't NaNs
|
||||
#define CHECK_COORDS_ARE_VALID(x, y) \
|
||||
jassert (x == x && y == y);
|
||||
|
||||
//==============================================================================
|
||||
static const float lineMarker = 100001.0f;
|
||||
|
|
@ -197,6 +200,8 @@ void Path::getBoundsTransformed (const AffineTransform& transform,
|
|||
void Path::startNewSubPath (const float x,
|
||||
const float y) throw()
|
||||
{
|
||||
CHECK_COORDS_ARE_VALID (x, y);
|
||||
|
||||
if (numElements == 0)
|
||||
{
|
||||
pathXMin = pathXMax = x;
|
||||
|
|
@ -219,6 +224,8 @@ void Path::startNewSubPath (const float x,
|
|||
|
||||
void Path::lineTo (const float x, const float y) throw()
|
||||
{
|
||||
CHECK_COORDS_ARE_VALID (x, y);
|
||||
|
||||
if (numElements == 0)
|
||||
startNewSubPath (0, 0);
|
||||
|
||||
|
|
@ -237,6 +244,9 @@ void Path::lineTo (const float x, const float y) throw()
|
|||
void Path::quadraticTo (const float x1, const float y1,
|
||||
const float x2, const float y2) throw()
|
||||
{
|
||||
CHECK_COORDS_ARE_VALID (x1, y1);
|
||||
CHECK_COORDS_ARE_VALID (x2, y2);
|
||||
|
||||
if (numElements == 0)
|
||||
startNewSubPath (0, 0);
|
||||
|
||||
|
|
@ -258,6 +268,10 @@ void Path::cubicTo (const float x1, const float y1,
|
|||
const float x2, const float y2,
|
||||
const float x3, const float y3) throw()
|
||||
{
|
||||
CHECK_COORDS_ARE_VALID (x1, y1);
|
||||
CHECK_COORDS_ARE_VALID (x2, y2);
|
||||
CHECK_COORDS_ARE_VALID (x3, y3);
|
||||
|
||||
if (numElements == 0)
|
||||
startNewSubPath (0, 0);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue