void JucerFillType::fillInGeneratedCode (GeneratedCode& code, String& paintMethodCode) const { String s; switch (mode) { case solidColour: s << "g.setColour (" << colourToCode (colour) << ");\n"; break; case linearGradient: case radialGradient: { String x1, y1, w, h, x2, y2; positionToCode (gradPos1, code.document->getComponentLayout(), x1, y1, w, h); positionToCode (gradPos2, code.document->getComponentLayout(), x2, y2, w, h); s << "g.setGradientFill (ColourGradient ("; const String indent (String::repeatedString (T(" "), s.length())); s << colourToCode (gradCol1) << ",\n" << indent << castToFloat (x1) << ", " << castToFloat (y1) << ",\n" << indent << colourToCode (gradCol2) << ",\n" << indent << castToFloat (x2) << ", " << castToFloat (y2) << ",\n" << indent << boolToString (mode == radialGradient) << "));\n"; break; } case imageBrush: { const String imageVariable ("cachedImage_" + imageResourceName + "_" + String (code.getUniqueSuffix())); code.addImageResourceLoader (imageVariable, imageResourceName); String x, y, w, h; positionToCode (imageAnchor, code.document->getComponentLayout(), x, y, w, h); s << "g.setTiledImageFill (*"; const String indent (String::repeatedString (T(" "), s.length())); s << imageVariable << ",\n" << indent << x << ", " << y << ",\n" << indent << valueToFloat (imageOpacity) << ");\n"; break; } default: jassertfalse break; } paintMethodCode += s; }
void PaintElementPath::fillInGeneratedCode (GeneratedCode& code, String& paintMethodCode) { if (fillType.isInvisible() && (strokeType.isInvisible() || ! isStrokePresent)) return; const String pathVariable ("internalPath" + String (code.getUniqueSuffix())); const ComponentLayout* layout = code.document->getComponentLayout(); code.privateMemberDeclarations << "Path " << pathVariable << ";\n"; String r; bool somePointsAreRelative = false; if (! nonZeroWinding) r << pathVariable << ".setUsingNonZeroWinding (false);\n"; for (int i = 0; i < points.size(); ++i) { const PathPoint* const p = points.getUnchecked(i); switch (p->type) { case Path::Iterator::startNewSubPath: r << pathVariable << ".startNewSubPath (" << positionToPairOfValues (p->pos[0], layout) << ");\n"; somePointsAreRelative = somePointsAreRelative || ! p->pos[0].rect.isPositionAbsolute(); break; case Path::Iterator::lineTo: r << pathVariable << ".lineTo (" << positionToPairOfValues (p->pos[0], layout) << ");\n"; somePointsAreRelative = somePointsAreRelative || ! p->pos[0].rect.isPositionAbsolute(); break; case Path::Iterator::quadraticTo: r << pathVariable << ".quadraticTo (" << positionToPairOfValues (p->pos[0], layout) << ", " << positionToPairOfValues (p->pos[1], layout) << ");\n"; somePointsAreRelative = somePointsAreRelative || ! p->pos[0].rect.isPositionAbsolute(); somePointsAreRelative = somePointsAreRelative || ! p->pos[1].rect.isPositionAbsolute(); break; case Path::Iterator::cubicTo: r << pathVariable << ".cubicTo (" << positionToPairOfValues (p->pos[0], layout) << ", " << positionToPairOfValues (p->pos[1], layout) << ", " << positionToPairOfValues (p->pos[2], layout) << ");\n"; somePointsAreRelative = somePointsAreRelative || ! p->pos[0].rect.isPositionAbsolute(); somePointsAreRelative = somePointsAreRelative || ! p->pos[1].rect.isPositionAbsolute(); somePointsAreRelative = somePointsAreRelative || ! p->pos[2].rect.isPositionAbsolute(); break; case Path::Iterator::closePath: r << pathVariable << ".closeSubPath();\n"; break; default: jassertfalse; break; } } r << '\n'; if (somePointsAreRelative) code.getCallbackCode (String::empty, "void", "resized()", false) << pathVariable << ".clear();\n" << r; else code.constructorCode << r; if (! fillType.isInvisible()) { fillType.fillInGeneratedCode (code, paintMethodCode); paintMethodCode << "g.fillPath (" << pathVariable << ");\n"; } if (isStrokePresent && ! strokeType.isInvisible()) { String s; strokeType.fill.fillInGeneratedCode (code, s); s << "g.strokePath (" << pathVariable << ", " << strokeType.getPathStrokeCode() << ");\n"; paintMethodCode += s; } paintMethodCode += "\n"; }