Browse Source

Changes for VC6 comptibility. Fixed a typo in BitArray::toString.

tags/2021-05-28
Julian Storer 16 years ago
parent
commit
ce7def1f9d
11 changed files with 359 additions and 213 deletions
  1. +150
    -97
      juce_amalgamated.cpp
  2. +27
    -9
      juce_amalgamated.h
  3. +1
    -1
      src/containers/juce_BitArray.cpp
  4. +7
    -7
      src/containers/juce_Variant.cpp
  5. +1
    -0
      src/core/juce_StandardHeader.h
  6. +5
    -2
      src/gui/components/controls/juce_TreeView.cpp
  7. +30
    -7
      src/gui/graphics/colour/juce_PixelFormats.h
  8. +6
    -4
      src/gui/graphics/contexts/juce_EdgeTable.cpp
  9. +132
    -79
      src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp
  10. +0
    -5
      src/text/juce_String.cpp
  11. +0
    -2
      src/text/juce_String.h

+ 150
- 97
juce_amalgamated.cpp View File

@@ -3002,7 +3002,7 @@ const String BitArray::toString (const int base, const int minimumNumCharacters)
const int length = s.length(); const int length = s.length();


if (length < minimumNumCharacters) if (length < minimumNumCharacters)
s = String::repeatedString (T("0"), minimumNumCharacters - length);
s = String::repeatedString (T("0"), minimumNumCharacters - length) + s;


return isNegative() ? T("-") + s : s; return isNegative() ? T("-") + s : s;
} }
@@ -3839,12 +3839,12 @@ var::operator int() const throw()
{ {
switch (type) switch (type)
{ {
case voidType:
case objectType: break;
case voidType: break;
case intType: return value.intValue; case intType: return value.intValue;
case boolType: return value.boolValue ? 1 : 0; case boolType: return value.boolValue ? 1 : 0;
case doubleType: return (int) value.doubleValue; case doubleType: return (int) value.doubleValue;
case stringType: return value.stringValue->getIntValue(); case stringType: return value.stringValue->getIntValue();
case objectType: break;
default: jassertfalse; break; default: jassertfalse; break;
} }


@@ -3856,13 +3856,13 @@ var::operator bool() const throw()
switch (type) switch (type)
{ {
case voidType: break; case voidType: break;
case objectType: return value.objectValue != 0;
case intType: return value.intValue != 0; case intType: return value.intValue != 0;
case boolType: return value.boolValue; case boolType: return value.boolValue;
case doubleType: return value.doubleValue != 0; case doubleType: return value.doubleValue != 0;
case stringType: return value.stringValue->getIntValue() != 0 case stringType: return value.stringValue->getIntValue() != 0
|| value.stringValue->trim().equalsIgnoreCase (T("true")) || value.stringValue->trim().equalsIgnoreCase (T("true"))
|| value.stringValue->trim().equalsIgnoreCase (T("yes")); || value.stringValue->trim().equalsIgnoreCase (T("yes"));
case objectType: return value.objectValue != 0;
default: jassertfalse; break; default: jassertfalse; break;
} }


@@ -3873,12 +3873,12 @@ var::operator double() const throw()
{ {
switch (type) switch (type)
{ {
case voidType:
case objectType: break;
case voidType: break;
case intType: return value.intValue; case intType: return value.intValue;
case boolType: return value.boolValue ? 1.0 : 0.0; case boolType: return value.boolValue ? 1.0 : 0.0;
case doubleType: return value.doubleValue; case doubleType: return value.doubleValue;
case stringType: return value.stringValue->getDoubleValue(); case stringType: return value.stringValue->getDoubleValue();
case objectType: break;
default: jassertfalse; break; default: jassertfalse; break;
} }


@@ -3889,12 +3889,12 @@ const String var::toString() const throw()
{ {
switch (type) switch (type)
{ {
case voidType:
case objectType: return "Object 0x" + String::toHexString ((int) (pointer_sized_int) value.objectValue);
case voidType: return String::empty;
case intType: return String (value.intValue); case intType: return String (value.intValue);
case boolType: return value.boolValue ? T("1") : T("0"); case boolType: return value.boolValue ? T("1") : T("0");
case doubleType: return String (value.doubleValue); case doubleType: return String (value.doubleValue);
case stringType: return *(value.stringValue); case stringType: return *(value.stringValue);
case objectType: return "Object 0x" + String::toHexString ((int) (pointer_sized_int) value.objectValue);
default: jassertfalse; break; default: jassertfalse; break;
} }


@@ -11327,11 +11327,6 @@ String& String::operator<< (const short number) throw()
return *this; return *this;
} }


String& String::operator<< (const unsigned short number) throw()
{
return operator<< ((unsigned int) number);
}

String& String::operator<< (const long number) throw() String& String::operator<< (const long number) throw()
{ {
return operator<< ((int) number); return operator<< ((int) number);
@@ -54749,7 +54744,10 @@ public:


void mouseDrag (const MouseEvent& e) void mouseDrag (const MouseEvent& e)
{ {
if (isEnabled() && ! (e.mouseWasClicked() || isDragging))
if (isEnabled()
&& ! (isDragging || e.mouseWasClicked()
|| e.getDistanceFromDragStart() < 5
|| e.mods.isPopupMenu()))
{ {
isDragging = true; isDragging = true;


@@ -55499,7 +55497,7 @@ TreeViewItem* TreeView::getInsertPosition (int& x, int& y, int& insertIndex,
insertIndex = 0; insertIndex = 0;
TreeViewItem* item = getItemAt (y); TreeViewItem* item = getItemAt (y);


if (item == 0 || item->parentItem == 0)
if (item == 0)
return 0; return 0;


Rectangle itemPos (item->getItemPosition (true)); Rectangle itemPos (item->getItemPosition (true));
@@ -79035,7 +79033,8 @@ EdgeTable::EdgeTable (const Rectangle& bounds_,
{ {
table = (int*) juce_malloc ((bounds.getHeight() + 1) * lineStrideElements * sizeof (int)); table = (int*) juce_malloc ((bounds.getHeight() + 1) * lineStrideElements * sizeof (int));
int* t = table; int* t = table;
for (int i = bounds.getHeight(); --i >= 0;)
int i = 0;
for (i = bounds.getHeight(); --i >= 0;)
{ {
*t = 0; *t = 0;
t += lineStrideElements; t += lineStrideElements;
@@ -79100,7 +79099,7 @@ EdgeTable::EdgeTable (const Rectangle& bounds_,
// Convert the table from relative windings to absolute levels.. // Convert the table from relative windings to absolute levels..
int* lineStart = table; int* lineStart = table;


for (int i = bounds.getHeight(); --i >= 0;)
for (i = bounds.getHeight(); --i >= 0;)
{ {
int* line = lineStart; int* line = lineStart;
lineStart += lineStrideElements; lineStart += lineStrideElements;
@@ -79555,12 +79554,13 @@ void EdgeTable::clipToEdgeTable (const EdgeTable& other)
if (clipped.getRight() < bounds.getRight()) if (clipped.getRight() < bounds.getRight())
bounds.setRight (clipped.getRight()); bounds.setRight (clipped.getRight());


for (int i = top; --i >= 0;)
int i = 0;
for (i = top; --i >= 0;)
table [lineStrideElements * i] = 0; table [lineStrideElements * i] = 0;


const int* otherLine = other.table + other.lineStrideElements * (clipped.getY() - other.bounds.getY()); const int* otherLine = other.table + other.lineStrideElements * (clipped.getY() - other.bounds.getY());


for (int i = top; i < bottom; ++i)
for (i = top; i < bottom; ++i)
{ {
intersectWithEdgeTableLine (i, otherLine); intersectWithEdgeTableLine (i, otherLine);
otherLine += other.lineStrideElements; otherLine += other.lineStrideElements;
@@ -81960,9 +81960,9 @@ public:


switch (image.getFormat()) switch (image.getFormat())
{ {
case Image::ARGB: renderGradient <PixelARGB> (et, destData, g2, transform, lookupTable, numLookupEntries, isIdentity); break;
case Image::RGB: renderGradient <PixelRGB> (et, destData, g2, transform, lookupTable, numLookupEntries, isIdentity); break;
default: renderGradient <PixelAlpha> (et, destData, g2, transform, lookupTable, numLookupEntries, isIdentity); break;
case Image::ARGB: renderGradient (et, destData, g2, transform, lookupTable, numLookupEntries, isIdentity, (PixelARGB*) 0); break;
case Image::RGB: renderGradient (et, destData, g2, transform, lookupTable, numLookupEntries, isIdentity, (PixelRGB*) 0); break;
default: renderGradient (et, destData, g2, transform, lookupTable, numLookupEntries, isIdentity, (PixelAlpha*) 0); break;
} }


juce_free (lookupTable); juce_free (lookupTable);
@@ -81977,9 +81977,9 @@ public:


switch (image.getFormat()) switch (image.getFormat())
{ {
case Image::ARGB: renderSolidFill2 <PixelARGB> (et, destData, fillColour, replaceContents); break;
case Image::RGB: renderSolidFill2 <PixelRGB> (et, destData, fillColour, replaceContents); break;
default: renderSolidFill2 <PixelAlpha> (et, destData, fillColour, replaceContents); break;
case Image::ARGB: renderSolidFill (et, destData, fillColour, replaceContents, (PixelARGB*) 0); break;
case Image::RGB: renderSolidFill (et, destData, fillColour, replaceContents, (PixelRGB*) 0); break;
default: renderSolidFill (et, destData, fillColour, replaceContents, (PixelAlpha*) 0); break;
} }
} }
} }
@@ -82007,7 +82007,7 @@ public:


if (tiledFillClipRegion != 0) if (tiledFillClipRegion != 0)
{ {
blittedRenderImage3 <true> (sourceImage, destImage, *tiledFillClipRegion, destData, srcData, alpha, tx, ty);
blittedRenderImage (sourceImage, destImage, *tiledFillClipRegion, destData, srcData, alpha, tx, ty, true);
} }
else else
{ {
@@ -82015,7 +82015,7 @@ public:
et.clipToEdgeTable (edgeTable->edgeTable); et.clipToEdgeTable (edgeTable->edgeTable);


if (! et.isEmpty()) if (! et.isEmpty())
blittedRenderImage3 <false> (sourceImage, destImage, et, destData, srcData, alpha, tx, ty);
blittedRenderImage (sourceImage, destImage, et, destData, srcData, alpha, tx, ty, false);
} }


return; return;
@@ -82027,7 +82027,7 @@ public:


if (tiledFillClipRegion != 0) if (tiledFillClipRegion != 0)
{ {
transformedRenderImage3 <true> (sourceImage, destImage, *tiledFillClipRegion, destData, srcData, alpha, transform, betterQuality);
transformedRenderImage (sourceImage, destImage, *tiledFillClipRegion, destData, srcData, alpha, transform, betterQuality, true);
} }
else else
{ {
@@ -82038,7 +82038,7 @@ public:
et.clipToEdgeTable (edgeTable->edgeTable); et.clipToEdgeTable (edgeTable->edgeTable);


if (! et.isEmpty()) if (! et.isEmpty())
transformedRenderImage3 <false> (sourceImage, destImage, et, destData, srcData, alpha, transform, betterQuality);
transformedRenderImage (sourceImage, destImage, et, destData, srcData, alpha, transform, betterQuality, false);
} }
} }


@@ -82071,9 +82071,9 @@ public:
const int imageY = ((ty + 128) >> 8); const int imageY = ((ty + 128) >> 8);


if (image.getFormat() == Image::ARGB) if (image.getFormat() == Image::ARGB)
straightClipImage <PixelARGB> (et, srcData, imageX, imageY);
straightClipImage (et, srcData, imageX, imageY, (PixelARGB*)0);
else else
straightClipImage <PixelAlpha> (et, srcData, imageX, imageY);
straightClipImage (et, srcData, imageX, imageY, (PixelAlpha*)0);


return; return;
} }
@@ -82095,14 +82095,14 @@ public:
if (! et.isEmpty()) if (! et.isEmpty())
{ {
if (image.getFormat() == Image::ARGB) if (image.getFormat() == Image::ARGB)
transformedClipImage <PixelARGB> (et, srcData, transform, betterQuality);
transformedClipImage (et, srcData, transform, betterQuality, (PixelARGB*)0);
else else
transformedClipImage <PixelAlpha> (et, srcData, transform, betterQuality);
transformedClipImage (et, srcData, transform, betterQuality, (PixelAlpha*)0);
} }
} }


template <class SrcPixelType> template <class SrcPixelType>
void transformedClipImage (EdgeTable& et, const Image::BitmapData& srcData, const AffineTransform& transform, const bool betterQuality) throw()
void transformedClipImage (EdgeTable& et, const Image::BitmapData& srcData, const AffineTransform& transform, const bool betterQuality, const SrcPixelType *) throw()
{ {
TransformedImageFillEdgeTableRenderer <SrcPixelType, SrcPixelType, false> renderer (srcData, srcData, transform, 255, betterQuality); TransformedImageFillEdgeTableRenderer <SrcPixelType, SrcPixelType, false> renderer (srcData, srcData, transform, 255, betterQuality);


@@ -82112,7 +82112,7 @@ public:
} }


template <class SrcPixelType> template <class SrcPixelType>
void straightClipImage (EdgeTable& et, const Image::BitmapData& srcData, int imageX, int imageY) throw()
void straightClipImage (EdgeTable& et, const Image::BitmapData& srcData, int imageX, int imageY, const SrcPixelType *) throw()
{ {
Rectangle r (imageX, imageY, srcData.width, srcData.height); Rectangle r (imageX, imageY, srcData.width, srcData.height);
et.clipToRectangle (r); et.clipToRectangle (r);
@@ -82148,7 +82148,7 @@ private:


template <class DestPixelType> template <class DestPixelType>
void renderGradient (EdgeTable& et, const Image::BitmapData& destData, const ColourGradient& g, const AffineTransform& transform, void renderGradient (EdgeTable& et, const Image::BitmapData& destData, const ColourGradient& g, const AffineTransform& transform,
const PixelARGB* const lookupTable, const int numLookupEntries, const bool isIdentity) throw()
const PixelARGB* const lookupTable, const int numLookupEntries, const bool isIdentity, DestPixelType*) throw()
{ {
jassert (destData.pixelStride == sizeof (DestPixelType)); jassert (destData.pixelStride == sizeof (DestPixelType));


@@ -82172,84 +82172,137 @@ private:
} }
} }


template <class DestPixelType, bool replaceContents>
void renderSolidFill1 (EdgeTable& et, const Image::BitmapData& destData, const PixelARGB& fillColour) throw()
{
jassert (destData.pixelStride == sizeof (DestPixelType));
SolidColourEdgeTableRenderer <DestPixelType, replaceContents> renderer (destData, fillColour);
et.iterate (renderer);
}

template <class DestPixelType> template <class DestPixelType>
void renderSolidFill2 (EdgeTable& et, const Image::BitmapData& destData, const PixelARGB& fillColour, const bool replaceContents) throw()
void renderSolidFill (EdgeTable& et, const Image::BitmapData& destData, const PixelARGB& fillColour, const bool replaceContents, DestPixelType*) throw()
{ {
jassert (destData.pixelStride == sizeof (DestPixelType));
if (replaceContents) if (replaceContents)
renderSolidFill1 <DestPixelType, true> (et, destData, fillColour);
else
renderSolidFill1 <DestPixelType, false> (et, destData, fillColour);
}

template <class SrcPixelType, class DestPixelType, bool repeatPattern>
void transformedRenderImage1 (const EdgeTable& et, const Image::BitmapData& destData, const Image::BitmapData& srcData,
const int alpha, const AffineTransform& transform, const bool betterQuality) throw()
{
TransformedImageFillEdgeTableRenderer <DestPixelType, SrcPixelType, repeatPattern> renderer (destData, srcData, transform, alpha, betterQuality);
et.iterate (renderer);
}

template <class SrcPixelType, bool repeatPattern>
void transformedRenderImage2 (Image& destImage, const EdgeTable& et, const Image::BitmapData& destData, const Image::BitmapData& srcData,
const int alpha, const AffineTransform& transform, const bool betterQuality) throw()
{
switch (destImage.getFormat())
{ {
case Image::ARGB: transformedRenderImage1 <SrcPixelType, PixelARGB, repeatPattern> (et, destData, srcData, alpha, transform, betterQuality); break;
case Image::RGB: transformedRenderImage1 <SrcPixelType, PixelRGB, repeatPattern> (et, destData, srcData, alpha, transform, betterQuality); break;
default: transformedRenderImage1 <SrcPixelType, PixelAlpha, repeatPattern> (et, destData, srcData, alpha, transform, betterQuality); break;
SolidColourEdgeTableRenderer <DestPixelType, true> r (destData, fillColour);
et.iterate (r);
} }
}

template <bool repeatPattern>
void transformedRenderImage3 (const Image& srcImage, Image& destImage, const EdgeTable& et, const Image::BitmapData& destData, const Image::BitmapData& srcData,
const int alpha, const AffineTransform& transform, const bool betterQuality) throw()
{
switch (srcImage.getFormat())
else
{ {
case Image::ARGB: transformedRenderImage2 <PixelARGB, repeatPattern> (destImage, et, destData, srcData, alpha, transform, betterQuality); break;
case Image::RGB: transformedRenderImage2 <PixelRGB, repeatPattern> (destImage, et, destData, srcData, alpha, transform, betterQuality); break;
default: transformedRenderImage2 <PixelAlpha, repeatPattern> (destImage, et, destData, srcData, alpha, transform, betterQuality); break;
SolidColourEdgeTableRenderer <DestPixelType, false> r (destData, fillColour);
et.iterate (r);
} }
} }


template <class SrcPixelType, class DestPixelType, bool repeatPattern>
void blittedRenderImage1 (const EdgeTable& et, const Image::BitmapData& destData, const Image::BitmapData& srcData,
const int alpha, int x, int y) throw()
{
ImageFillEdgeTableRenderer <DestPixelType, SrcPixelType, repeatPattern> renderer (destData, srcData, alpha, x, y);
et.iterate (renderer);
}

template <class SrcPixelType, bool repeatPattern>
void blittedRenderImage2 (Image& destImage, const EdgeTable& et, const Image::BitmapData& destData,
const Image::BitmapData& srcData, const int alpha, int x, int y) throw()
void transformedRenderImage (const Image& srcImage, Image& destImage, const EdgeTable& et, const Image::BitmapData& destData, const Image::BitmapData& srcData,
const int alpha, const AffineTransform& transform, const bool betterQuality, const bool repeatPattern) throw()
{ {
switch (destImage.getFormat()) switch (destImage.getFormat())
{ {
case Image::ARGB: blittedRenderImage1 <SrcPixelType, PixelARGB, repeatPattern> (et, destData, srcData, alpha, x, y); break;
case Image::RGB: blittedRenderImage1 <SrcPixelType, PixelRGB, repeatPattern> (et, destData, srcData, alpha, x, y); break;
default: blittedRenderImage1 <SrcPixelType, PixelAlpha, repeatPattern> (et, destData, srcData, alpha, x, y); break;
case Image::ARGB:
switch (srcImage.getFormat())
{
case Image::ARGB:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelARGB, PixelARGB, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelARGB, PixelARGB, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
case Image::RGB:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelARGB, PixelRGB, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelARGB, PixelRGB, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
default:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelARGB, PixelAlpha, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelARGB, PixelAlpha, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
}
break;
case Image::RGB:
switch (srcImage.getFormat())
{
case Image::ARGB:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelRGB, PixelARGB, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelRGB, PixelARGB, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
case Image::RGB:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelRGB, PixelRGB, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelRGB, PixelRGB, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
default:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelRGB, PixelAlpha, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelRGB, PixelAlpha, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
}
break;
default:
switch (srcImage.getFormat())
{
case Image::ARGB:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelAlpha, PixelARGB, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelAlpha, PixelARGB, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
case Image::RGB:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelAlpha, PixelRGB, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelAlpha, PixelRGB, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
default:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelAlpha, PixelAlpha, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelAlpha, PixelAlpha, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
}
break;
} }
} }


template <bool repeatPattern>
void blittedRenderImage3 (const Image& srcImage, Image& destImage, const EdgeTable& et, const Image::BitmapData& destData,
const Image::BitmapData& srcData, const int alpha, int x, int y) throw()
void blittedRenderImage (const Image& srcImage, Image& destImage, const EdgeTable& et, const Image::BitmapData& destData,
const Image::BitmapData& srcData, const int alpha, int x, int y, const bool repeatPattern) throw()
{ {
switch (srcImage.getFormat())
switch (destImage.getFormat())
{ {
case Image::ARGB: blittedRenderImage2 <PixelARGB, repeatPattern> (destImage, et, destData, srcData, alpha, x, y); break;
case Image::RGB: blittedRenderImage2 <PixelRGB, repeatPattern> (destImage, et, destData, srcData, alpha, x, y); break;
default: blittedRenderImage2 <PixelAlpha, repeatPattern> (destImage, et, destData, srcData, alpha, x, y); break;
case Image::ARGB:
switch (srcImage.getFormat())
{
case Image::ARGB:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelARGB, PixelARGB, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelARGB, PixelARGB, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
case Image::RGB:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelARGB, PixelRGB, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelARGB, PixelRGB, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
default:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelARGB, PixelAlpha, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelARGB, PixelAlpha, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
}
break;
case Image::RGB:
switch (srcImage.getFormat())
{
case Image::ARGB:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelRGB, PixelARGB, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelRGB, PixelARGB, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
case Image::RGB:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelRGB, PixelRGB, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelRGB, PixelRGB, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
default:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelRGB, PixelAlpha, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelRGB, PixelAlpha, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
}
break;
default:
switch (srcImage.getFormat())
{
case Image::ARGB:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelAlpha, PixelARGB, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelAlpha, PixelARGB, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
case Image::RGB:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelAlpha, PixelRGB, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelAlpha, PixelRGB, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
default:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelAlpha, PixelAlpha, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelAlpha, PixelAlpha, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
}
break;
} }
} }
}; };


+ 27
- 9
juce_amalgamated.h View File

@@ -706,6 +706,7 @@
#endif #endif


#if JUCE_MSVC #if JUCE_MSVC
#include <malloc.h>
#pragma warning (pop) #pragma warning (pop)
#endif #endif


@@ -1562,8 +1563,6 @@ public:
/** Appends a decimal number at the end of this string. */ /** Appends a decimal number at the end of this string. */
String& operator<< (const short number) throw(); String& operator<< (const short number) throw();
/** Appends a decimal number at the end of this string. */ /** Appends a decimal number at the end of this string. */
String& operator<< (const unsigned short number) throw();
/** Appends a decimal number at the end of this string. */
String& operator<< (const int number) throw(); String& operator<< (const int number) throw();
/** Appends a decimal number at the end of this string. */ /** Appends a decimal number at the end of this string. */
String& operator<< (const unsigned int number) throw(); String& operator<< (const unsigned int number) throw();
@@ -18827,6 +18826,7 @@ private:
#endif #endif


class PixelRGB; class PixelRGB;
class PixelAlpha;


/** /**
Represents a 32-bit ARGB pixel with premultiplied alpha, and can perform compositing Represents a 32-bit ARGB pixel with premultiplied alpha, and can perform compositing
@@ -18864,8 +18864,7 @@ public:
This takes into account the opacity of the pixel being overlaid, and blends This takes into account the opacity of the pixel being overlaid, and blends
it accordingly. it accordingly.
*/ */
template <class Pixel>
forcedinline void blend (const Pixel& src) throw()
forcedinline void blend (const PixelARGB& src) throw()
{ {
uint32 sargb = src.getARGB(); uint32 sargb = src.getARGB();
const uint32 alpha = 0x100 - (sargb >> 24); const uint32 alpha = 0x100 - (sargb >> 24);
@@ -18876,6 +18875,13 @@ public:
argb = sargb; argb = sargb;
} }


/** Blends another pixel onto this one.

This takes into account the opacity of the pixel being overlaid, and blends
it accordingly.
*/
forcedinline void blend (const PixelAlpha& src) throw();

/** Blends another pixel onto this one. /** Blends another pixel onto this one.


This takes into account the opacity of the pixel being overlaid, and blends This takes into account the opacity of the pixel being overlaid, and blends
@@ -19104,11 +19110,7 @@ public:
set (src); set (src);
} }


template <class Pixel>
forcedinline void blend (const Pixel& src) throw()
{
blend (PixelARGB (src.getARGB()));
}
forcedinline void blend (const PixelAlpha& src) throw();


/** Blends another pixel onto this one, applying an extra multiplier to its opacity. /** Blends another pixel onto this one, applying an extra multiplier to its opacity.


@@ -19330,6 +19332,22 @@ private:
uint8 a : 8; uint8 a : 8;
} PACKED; } PACKED;


forcedinline void PixelRGB::blend (const PixelAlpha& src) throw()
{
blend (PixelARGB (src.getARGB()));
}

forcedinline void PixelARGB::blend (const PixelAlpha& src) throw()
{
uint32 sargb = src.getARGB();
const uint32 alpha = 0x100 - (sargb >> 24);

sargb += 0x00ff00ff & ((getRB() * alpha) >> 8);
sargb += 0xff00ff00 & (getAG() * alpha);

argb = sargb;
}

#if JUCE_MSVC #if JUCE_MSVC
#pragma pack (pop) #pragma pack (pop)
#endif #endif


+ 1
- 1
src/containers/juce_BitArray.cpp View File

@@ -875,7 +875,7 @@ const String BitArray::toString (const int base, const int minimumNumCharacters)
const int length = s.length(); const int length = s.length();
if (length < minimumNumCharacters) if (length < minimumNumCharacters)
s = String::repeatedString (T("0"), minimumNumCharacters - length);
s = String::repeatedString (T("0"), minimumNumCharacters - length) + s;
return isNegative() ? T("-") + s : s; return isNegative() ? T("-") + s : s;
} }


+ 7
- 7
src/containers/juce_Variant.cpp View File

@@ -207,12 +207,12 @@ var::operator int() const throw()
{ {
switch (type) switch (type)
{ {
case voidType:
case objectType: break;
case voidType: break;
case intType: return value.intValue; case intType: return value.intValue;
case boolType: return value.boolValue ? 1 : 0; case boolType: return value.boolValue ? 1 : 0;
case doubleType: return (int) value.doubleValue; case doubleType: return (int) value.doubleValue;
case stringType: return value.stringValue->getIntValue(); case stringType: return value.stringValue->getIntValue();
case objectType: break;
default: jassertfalse; break; default: jassertfalse; break;
} }
@@ -224,13 +224,13 @@ var::operator bool() const throw()
switch (type) switch (type)
{ {
case voidType: break; case voidType: break;
case objectType: return value.objectValue != 0;
case intType: return value.intValue != 0; case intType: return value.intValue != 0;
case boolType: return value.boolValue; case boolType: return value.boolValue;
case doubleType: return value.doubleValue != 0; case doubleType: return value.doubleValue != 0;
case stringType: return value.stringValue->getIntValue() != 0 case stringType: return value.stringValue->getIntValue() != 0
|| value.stringValue->trim().equalsIgnoreCase (T("true")) || value.stringValue->trim().equalsIgnoreCase (T("true"))
|| value.stringValue->trim().equalsIgnoreCase (T("yes")); || value.stringValue->trim().equalsIgnoreCase (T("yes"));
case objectType: return value.objectValue != 0;
default: jassertfalse; break; default: jassertfalse; break;
} }
@@ -241,12 +241,12 @@ var::operator double() const throw()
{ {
switch (type) switch (type)
{ {
case voidType:
case objectType: break;
case voidType: break;
case intType: return value.intValue; case intType: return value.intValue;
case boolType: return value.boolValue ? 1.0 : 0.0; case boolType: return value.boolValue ? 1.0 : 0.0;
case doubleType: return value.doubleValue; case doubleType: return value.doubleValue;
case stringType: return value.stringValue->getDoubleValue(); case stringType: return value.stringValue->getDoubleValue();
case objectType: break;
default: jassertfalse; break; default: jassertfalse; break;
} }
@@ -257,12 +257,12 @@ const String var::toString() const throw()
{ {
switch (type) switch (type)
{ {
case voidType:
case objectType: return "Object 0x" + String::toHexString ((int) (pointer_sized_int) value.objectValue);
case voidType: return String::empty;
case intType: return String (value.intValue); case intType: return String (value.intValue);
case boolType: return value.boolValue ? T("1") : T("0"); case boolType: return value.boolValue ? T("1") : T("0");
case doubleType: return String (value.doubleValue); case doubleType: return String (value.doubleValue);
case stringType: return *(value.stringValue); case stringType: return *(value.stringValue);
case objectType: return "Object 0x" + String::toHexString ((int) (pointer_sized_int) value.objectValue);
default: jassertfalse; break; default: jassertfalse; break;
} }


+ 1
- 0
src/core/juce_StandardHeader.h View File

@@ -95,6 +95,7 @@
#endif #endif
#if JUCE_MSVC #if JUCE_MSVC
#include <malloc.h>
#pragma warning (pop) #pragma warning (pop)
#endif #endif


+ 5
- 2
src/gui/components/controls/juce_TreeView.cpp View File

@@ -125,7 +125,10 @@ public:
void mouseDrag (const MouseEvent& e) void mouseDrag (const MouseEvent& e)
{ {
if (isEnabled() && ! (e.mouseWasClicked() || isDragging))
if (isEnabled()
&& ! (isDragging || e.mouseWasClicked()
|| e.getDistanceFromDragStart() < 5
|| e.mods.isPopupMenu()))
{ {
isDragging = true; isDragging = true;
@@ -886,7 +889,7 @@ TreeViewItem* TreeView::getInsertPosition (int& x, int& y, int& insertIndex,
insertIndex = 0; insertIndex = 0;
TreeViewItem* item = getItemAt (y); TreeViewItem* item = getItemAt (y);
if (item == 0 || item->parentItem == 0)
if (item == 0)
return 0; return 0;
Rectangle itemPos (item->getItemPosition (true)); Rectangle itemPos (item->getItemPosition (true));


+ 30
- 7
src/gui/graphics/colour/juce_PixelFormats.h View File

@@ -38,6 +38,7 @@
#endif #endif
class PixelRGB; class PixelRGB;
class PixelAlpha;
/** /**
Represents a 32-bit ARGB pixel with premultiplied alpha, and can perform compositing Represents a 32-bit ARGB pixel with premultiplied alpha, and can perform compositing
@@ -75,8 +76,7 @@ public:
This takes into account the opacity of the pixel being overlaid, and blends This takes into account the opacity of the pixel being overlaid, and blends
it accordingly. it accordingly.
*/ */
template <class Pixel>
forcedinline void blend (const Pixel& src) throw()
forcedinline void blend (const PixelARGB& src) throw()
{ {
uint32 sargb = src.getARGB(); uint32 sargb = src.getARGB();
const uint32 alpha = 0x100 - (sargb >> 24); const uint32 alpha = 0x100 - (sargb >> 24);
@@ -87,6 +87,14 @@ public:
argb = sargb; argb = sargb;
} }
/** Blends another pixel onto this one.
This takes into account the opacity of the pixel being overlaid, and blends
it accordingly.
*/
forcedinline void blend (const PixelAlpha& src) throw();
/** Blends another pixel onto this one. /** Blends another pixel onto this one.
This takes into account the opacity of the pixel being overlaid, and blends This takes into account the opacity of the pixel being overlaid, and blends
@@ -94,6 +102,7 @@ public:
*/ */
forcedinline void blend (const PixelRGB& src) throw(); forcedinline void blend (const PixelRGB& src) throw();
/** Blends another pixel onto this one, applying an extra multiplier to its opacity. /** Blends another pixel onto this one, applying an extra multiplier to its opacity.
The opacity of the pixel being overlaid is scaled by the extraAlpha factor before The opacity of the pixel being overlaid is scaled by the extraAlpha factor before
@@ -318,11 +327,7 @@ public:
set (src); set (src);
} }
template <class Pixel>
forcedinline void blend (const Pixel& src) throw()
{
blend (PixelARGB (src.getARGB()));
}
forcedinline void blend (const PixelAlpha& src) throw();
/** Blends another pixel onto this one, applying an extra multiplier to its opacity. /** Blends another pixel onto this one, applying an extra multiplier to its opacity.
@@ -546,6 +551,24 @@ private:
uint8 a : 8; uint8 a : 8;
} PACKED; } PACKED;
forcedinline void PixelRGB::blend (const PixelAlpha& src) throw()
{
blend (PixelARGB (src.getARGB()));
}
forcedinline void PixelARGB::blend (const PixelAlpha& src) throw()
{
uint32 sargb = src.getARGB();
const uint32 alpha = 0x100 - (sargb >> 24);
sargb += 0x00ff00ff & ((getRB() * alpha) >> 8);
sargb += 0xff00ff00 & (getAG() * alpha);
argb = sargb;
}
#if JUCE_MSVC #if JUCE_MSVC
#pragma pack (pop) #pragma pack (pop)
#endif #endif


+ 6
- 4
src/gui/graphics/contexts/juce_EdgeTable.cpp View File

@@ -54,7 +54,8 @@ EdgeTable::EdgeTable (const Rectangle& bounds_,
{ {
table = (int*) juce_malloc ((bounds.getHeight() + 1) * lineStrideElements * sizeof (int)); table = (int*) juce_malloc ((bounds.getHeight() + 1) * lineStrideElements * sizeof (int));
int* t = table; int* t = table;
for (int i = bounds.getHeight(); --i >= 0;)
int i = 0;
for (i = bounds.getHeight(); --i >= 0;)
{ {
*t = 0; *t = 0;
t += lineStrideElements; t += lineStrideElements;
@@ -119,7 +120,7 @@ EdgeTable::EdgeTable (const Rectangle& bounds_,
// Convert the table from relative windings to absolute levels.. // Convert the table from relative windings to absolute levels..
int* lineStart = table; int* lineStart = table;
for (int i = bounds.getHeight(); --i >= 0;)
for (i = bounds.getHeight(); --i >= 0;)
{ {
int* line = lineStart; int* line = lineStart;
lineStart += lineStrideElements; lineStart += lineStrideElements;
@@ -576,12 +577,13 @@ void EdgeTable::clipToEdgeTable (const EdgeTable& other)
if (clipped.getRight() < bounds.getRight()) if (clipped.getRight() < bounds.getRight())
bounds.setRight (clipped.getRight()); bounds.setRight (clipped.getRight());
for (int i = top; --i >= 0;)
int i = 0;
for (i = top; --i >= 0;)
table [lineStrideElements * i] = 0; table [lineStrideElements * i] = 0;
const int* otherLine = other.table + other.lineStrideElements * (clipped.getY() - other.bounds.getY()); const int* otherLine = other.table + other.lineStrideElements * (clipped.getY() - other.bounds.getY());
for (int i = top; i < bottom; ++i)
for (i = top; i < bottom; ++i)
{ {
intersectWithEdgeTableLine (i, otherLine); intersectWithEdgeTableLine (i, otherLine);
otherLine += other.lineStrideElements; otherLine += other.lineStrideElements;


+ 132
- 79
src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp View File

@@ -969,9 +969,9 @@ public:
switch (image.getFormat()) switch (image.getFormat())
{ {
case Image::ARGB: renderGradient <PixelARGB> (et, destData, g2, transform, lookupTable, numLookupEntries, isIdentity); break;
case Image::RGB: renderGradient <PixelRGB> (et, destData, g2, transform, lookupTable, numLookupEntries, isIdentity); break;
default: renderGradient <PixelAlpha> (et, destData, g2, transform, lookupTable, numLookupEntries, isIdentity); break;
case Image::ARGB: renderGradient (et, destData, g2, transform, lookupTable, numLookupEntries, isIdentity, (PixelARGB*) 0); break;
case Image::RGB: renderGradient (et, destData, g2, transform, lookupTable, numLookupEntries, isIdentity, (PixelRGB*) 0); break;
default: renderGradient (et, destData, g2, transform, lookupTable, numLookupEntries, isIdentity, (PixelAlpha*) 0); break;
} }
juce_free (lookupTable); juce_free (lookupTable);
@@ -986,9 +986,9 @@ public:
switch (image.getFormat()) switch (image.getFormat())
{ {
case Image::ARGB: renderSolidFill2 <PixelARGB> (et, destData, fillColour, replaceContents); break;
case Image::RGB: renderSolidFill2 <PixelRGB> (et, destData, fillColour, replaceContents); break;
default: renderSolidFill2 <PixelAlpha> (et, destData, fillColour, replaceContents); break;
case Image::ARGB: renderSolidFill (et, destData, fillColour, replaceContents, (PixelARGB*) 0); break;
case Image::RGB: renderSolidFill (et, destData, fillColour, replaceContents, (PixelRGB*) 0); break;
default: renderSolidFill (et, destData, fillColour, replaceContents, (PixelAlpha*) 0); break;
} }
} }
} }
@@ -1017,7 +1017,7 @@ public:
if (tiledFillClipRegion != 0) if (tiledFillClipRegion != 0)
{ {
blittedRenderImage3 <true> (sourceImage, destImage, *tiledFillClipRegion, destData, srcData, alpha, tx, ty);
blittedRenderImage (sourceImage, destImage, *tiledFillClipRegion, destData, srcData, alpha, tx, ty, true);
} }
else else
{ {
@@ -1025,7 +1025,7 @@ public:
et.clipToEdgeTable (edgeTable->edgeTable); et.clipToEdgeTable (edgeTable->edgeTable);
if (! et.isEmpty()) if (! et.isEmpty())
blittedRenderImage3 <false> (sourceImage, destImage, et, destData, srcData, alpha, tx, ty);
blittedRenderImage (sourceImage, destImage, et, destData, srcData, alpha, tx, ty, false);
} }
return; return;
@@ -1037,7 +1037,7 @@ public:
if (tiledFillClipRegion != 0) if (tiledFillClipRegion != 0)
{ {
transformedRenderImage3 <true> (sourceImage, destImage, *tiledFillClipRegion, destData, srcData, alpha, transform, betterQuality);
transformedRenderImage (sourceImage, destImage, *tiledFillClipRegion, destData, srcData, alpha, transform, betterQuality, true);
} }
else else
{ {
@@ -1048,7 +1048,7 @@ public:
et.clipToEdgeTable (edgeTable->edgeTable); et.clipToEdgeTable (edgeTable->edgeTable);
if (! et.isEmpty()) if (! et.isEmpty())
transformedRenderImage3 <false> (sourceImage, destImage, et, destData, srcData, alpha, transform, betterQuality);
transformedRenderImage (sourceImage, destImage, et, destData, srcData, alpha, transform, betterQuality, false);
} }
} }
@@ -1082,9 +1082,9 @@ public:
const int imageY = ((ty + 128) >> 8); const int imageY = ((ty + 128) >> 8);
if (image.getFormat() == Image::ARGB) if (image.getFormat() == Image::ARGB)
straightClipImage <PixelARGB> (et, srcData, imageX, imageY);
straightClipImage (et, srcData, imageX, imageY, (PixelARGB*)0);
else else
straightClipImage <PixelAlpha> (et, srcData, imageX, imageY);
straightClipImage (et, srcData, imageX, imageY, (PixelAlpha*)0);
return; return;
} }
@@ -1106,14 +1106,14 @@ public:
if (! et.isEmpty()) if (! et.isEmpty())
{ {
if (image.getFormat() == Image::ARGB) if (image.getFormat() == Image::ARGB)
transformedClipImage <PixelARGB> (et, srcData, transform, betterQuality);
transformedClipImage (et, srcData, transform, betterQuality, (PixelARGB*)0);
else else
transformedClipImage <PixelAlpha> (et, srcData, transform, betterQuality);
transformedClipImage (et, srcData, transform, betterQuality, (PixelAlpha*)0);
} }
} }
template <class SrcPixelType> template <class SrcPixelType>
void transformedClipImage (EdgeTable& et, const Image::BitmapData& srcData, const AffineTransform& transform, const bool betterQuality) throw()
void transformedClipImage (EdgeTable& et, const Image::BitmapData& srcData, const AffineTransform& transform, const bool betterQuality, const SrcPixelType *) throw()
{ {
TransformedImageFillEdgeTableRenderer <SrcPixelType, SrcPixelType, false> renderer (srcData, srcData, transform, 255, betterQuality); TransformedImageFillEdgeTableRenderer <SrcPixelType, SrcPixelType, false> renderer (srcData, srcData, transform, 255, betterQuality);
@@ -1123,7 +1123,7 @@ public:
} }
template <class SrcPixelType> template <class SrcPixelType>
void straightClipImage (EdgeTable& et, const Image::BitmapData& srcData, int imageX, int imageY) throw()
void straightClipImage (EdgeTable& et, const Image::BitmapData& srcData, int imageX, int imageY, const SrcPixelType *) throw()
{ {
Rectangle r (imageX, imageY, srcData.width, srcData.height); Rectangle r (imageX, imageY, srcData.width, srcData.height);
et.clipToRectangle (r); et.clipToRectangle (r);
@@ -1161,7 +1161,7 @@ private:
//============================================================================== //==============================================================================
template <class DestPixelType> template <class DestPixelType>
void renderGradient (EdgeTable& et, const Image::BitmapData& destData, const ColourGradient& g, const AffineTransform& transform, void renderGradient (EdgeTable& et, const Image::BitmapData& destData, const ColourGradient& g, const AffineTransform& transform,
const PixelARGB* const lookupTable, const int numLookupEntries, const bool isIdentity) throw()
const PixelARGB* const lookupTable, const int numLookupEntries, const bool isIdentity, DestPixelType*) throw()
{ {
jassert (destData.pixelStride == sizeof (DestPixelType)); jassert (destData.pixelStride == sizeof (DestPixelType));
@@ -1186,86 +1186,139 @@ private:
} }
//============================================================================== //==============================================================================
template <class DestPixelType, bool replaceContents>
void renderSolidFill1 (EdgeTable& et, const Image::BitmapData& destData, const PixelARGB& fillColour) throw()
{
jassert (destData.pixelStride == sizeof (DestPixelType));
SolidColourEdgeTableRenderer <DestPixelType, replaceContents> renderer (destData, fillColour);
et.iterate (renderer);
}
template <class DestPixelType> template <class DestPixelType>
void renderSolidFill2 (EdgeTable& et, const Image::BitmapData& destData, const PixelARGB& fillColour, const bool replaceContents) throw()
void renderSolidFill (EdgeTable& et, const Image::BitmapData& destData, const PixelARGB& fillColour, const bool replaceContents, DestPixelType*) throw()
{ {
jassert (destData.pixelStride == sizeof (DestPixelType));
if (replaceContents) if (replaceContents)
renderSolidFill1 <DestPixelType, true> (et, destData, fillColour);
else
renderSolidFill1 <DestPixelType, false> (et, destData, fillColour);
}
//==============================================================================
template <class SrcPixelType, class DestPixelType, bool repeatPattern>
void transformedRenderImage1 (const EdgeTable& et, const Image::BitmapData& destData, const Image::BitmapData& srcData,
const int alpha, const AffineTransform& transform, const bool betterQuality) throw()
{
TransformedImageFillEdgeTableRenderer <DestPixelType, SrcPixelType, repeatPattern> renderer (destData, srcData, transform, alpha, betterQuality);
et.iterate (renderer);
}
template <class SrcPixelType, bool repeatPattern>
void transformedRenderImage2 (Image& destImage, const EdgeTable& et, const Image::BitmapData& destData, const Image::BitmapData& srcData,
const int alpha, const AffineTransform& transform, const bool betterQuality) throw()
{
switch (destImage.getFormat())
{ {
case Image::ARGB: transformedRenderImage1 <SrcPixelType, PixelARGB, repeatPattern> (et, destData, srcData, alpha, transform, betterQuality); break;
case Image::RGB: transformedRenderImage1 <SrcPixelType, PixelRGB, repeatPattern> (et, destData, srcData, alpha, transform, betterQuality); break;
default: transformedRenderImage1 <SrcPixelType, PixelAlpha, repeatPattern> (et, destData, srcData, alpha, transform, betterQuality); break;
SolidColourEdgeTableRenderer <DestPixelType, true> r (destData, fillColour);
et.iterate (r);
} }
}
template <bool repeatPattern>
void transformedRenderImage3 (const Image& srcImage, Image& destImage, const EdgeTable& et, const Image::BitmapData& destData, const Image::BitmapData& srcData,
const int alpha, const AffineTransform& transform, const bool betterQuality) throw()
{
switch (srcImage.getFormat())
else
{ {
case Image::ARGB: transformedRenderImage2 <PixelARGB, repeatPattern> (destImage, et, destData, srcData, alpha, transform, betterQuality); break;
case Image::RGB: transformedRenderImage2 <PixelRGB, repeatPattern> (destImage, et, destData, srcData, alpha, transform, betterQuality); break;
default: transformedRenderImage2 <PixelAlpha, repeatPattern> (destImage, et, destData, srcData, alpha, transform, betterQuality); break;
SolidColourEdgeTableRenderer <DestPixelType, false> r (destData, fillColour);
et.iterate (r);
} }
} }
//============================================================================== //==============================================================================
template <class SrcPixelType, class DestPixelType, bool repeatPattern>
void blittedRenderImage1 (const EdgeTable& et, const Image::BitmapData& destData, const Image::BitmapData& srcData,
const int alpha, int x, int y) throw()
{
ImageFillEdgeTableRenderer <DestPixelType, SrcPixelType, repeatPattern> renderer (destData, srcData, alpha, x, y);
et.iterate (renderer);
}
template <class SrcPixelType, bool repeatPattern>
void blittedRenderImage2 (Image& destImage, const EdgeTable& et, const Image::BitmapData& destData,
const Image::BitmapData& srcData, const int alpha, int x, int y) throw()
void transformedRenderImage (const Image& srcImage, Image& destImage, const EdgeTable& et, const Image::BitmapData& destData, const Image::BitmapData& srcData,
const int alpha, const AffineTransform& transform, const bool betterQuality, const bool repeatPattern) throw()
{ {
switch (destImage.getFormat()) switch (destImage.getFormat())
{ {
case Image::ARGB: blittedRenderImage1 <SrcPixelType, PixelARGB, repeatPattern> (et, destData, srcData, alpha, x, y); break;
case Image::RGB: blittedRenderImage1 <SrcPixelType, PixelRGB, repeatPattern> (et, destData, srcData, alpha, x, y); break;
default: blittedRenderImage1 <SrcPixelType, PixelAlpha, repeatPattern> (et, destData, srcData, alpha, x, y); break;
case Image::ARGB:
switch (srcImage.getFormat())
{
case Image::ARGB:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelARGB, PixelARGB, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelARGB, PixelARGB, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
case Image::RGB:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelARGB, PixelRGB, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelARGB, PixelRGB, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
default:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelARGB, PixelAlpha, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelARGB, PixelAlpha, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
}
break;
case Image::RGB:
switch (srcImage.getFormat())
{
case Image::ARGB:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelRGB, PixelARGB, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelRGB, PixelARGB, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
case Image::RGB:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelRGB, PixelRGB, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelRGB, PixelRGB, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
default:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelRGB, PixelAlpha, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelRGB, PixelAlpha, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
}
break;
default:
switch (srcImage.getFormat())
{
case Image::ARGB:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelAlpha, PixelARGB, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelAlpha, PixelARGB, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
case Image::RGB:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelAlpha, PixelRGB, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelAlpha, PixelRGB, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
default:
if (repeatPattern) { TransformedImageFillEdgeTableRenderer <PixelAlpha, PixelAlpha, true> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
else { TransformedImageFillEdgeTableRenderer <PixelAlpha, PixelAlpha, false> r (destData, srcData, transform, alpha, betterQuality); et.iterate (r); }
break;
}
break;
} }
} }
template <bool repeatPattern>
void blittedRenderImage3 (const Image& srcImage, Image& destImage, const EdgeTable& et, const Image::BitmapData& destData,
const Image::BitmapData& srcData, const int alpha, int x, int y) throw()
//==============================================================================
void blittedRenderImage (const Image& srcImage, Image& destImage, const EdgeTable& et, const Image::BitmapData& destData,
const Image::BitmapData& srcData, const int alpha, int x, int y, const bool repeatPattern) throw()
{ {
switch (srcImage.getFormat())
switch (destImage.getFormat())
{ {
case Image::ARGB: blittedRenderImage2 <PixelARGB, repeatPattern> (destImage, et, destData, srcData, alpha, x, y); break;
case Image::RGB: blittedRenderImage2 <PixelRGB, repeatPattern> (destImage, et, destData, srcData, alpha, x, y); break;
default: blittedRenderImage2 <PixelAlpha, repeatPattern> (destImage, et, destData, srcData, alpha, x, y); break;
case Image::ARGB:
switch (srcImage.getFormat())
{
case Image::ARGB:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelARGB, PixelARGB, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelARGB, PixelARGB, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
case Image::RGB:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelARGB, PixelRGB, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelARGB, PixelRGB, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
default:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelARGB, PixelAlpha, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelARGB, PixelAlpha, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
}
break;
case Image::RGB:
switch (srcImage.getFormat())
{
case Image::ARGB:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelRGB, PixelARGB, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelRGB, PixelARGB, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
case Image::RGB:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelRGB, PixelRGB, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelRGB, PixelRGB, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
default:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelRGB, PixelAlpha, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelRGB, PixelAlpha, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
}
break;
default:
switch (srcImage.getFormat())
{
case Image::ARGB:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelAlpha, PixelARGB, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelAlpha, PixelARGB, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
case Image::RGB:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelAlpha, PixelRGB, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelAlpha, PixelRGB, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
default:
if (repeatPattern) { ImageFillEdgeTableRenderer <PixelAlpha, PixelAlpha, true> r (destData, srcData, alpha, x, y); et.iterate (r); }
else { ImageFillEdgeTableRenderer <PixelAlpha, PixelAlpha, false> r (destData, srcData, alpha, x, y); et.iterate (r); }
break;
}
break;
} }
} }
}; };


+ 0
- 5
src/text/juce_String.cpp View File

@@ -882,11 +882,6 @@ String& String::operator<< (const short number) throw()
return *this; return *this;
} }
String& String::operator<< (const unsigned short number) throw()
{
return operator<< ((unsigned int) number);
}
String& String::operator<< (const long number) throw() String& String::operator<< (const long number) throw()
{ {
return operator<< ((int) number); return operator<< ((int) number);


+ 0
- 2
src/text/juce_String.h View File

@@ -156,8 +156,6 @@ public:
/** Appends a decimal number at the end of this string. */ /** Appends a decimal number at the end of this string. */
String& operator<< (const short number) throw(); String& operator<< (const short number) throw();
/** Appends a decimal number at the end of this string. */ /** Appends a decimal number at the end of this string. */
String& operator<< (const unsigned short number) throw();
/** Appends a decimal number at the end of this string. */
String& operator<< (const int number) throw(); String& operator<< (const int number) throw();
/** Appends a decimal number at the end of this string. */ /** Appends a decimal number at the end of this string. */
String& operator<< (const unsigned int number) throw(); String& operator<< (const unsigned int number) throw();


Loading…
Cancel
Save