internal ColorDetails AddSimplePatternColorspace(BaseColor color)
{
int type = ExtendedColor.GetType(color);
if (type == ExtendedColor.TYPE_PATTERN || type == ExtendedColor.TYPE_SHADING)
throw new Exception(MessageLocalization.GetComposedMessage("an.uncolored.tile.pattern.can.not.have.another.pattern.or.shading.as.color"));
switch (type) {
case ExtendedColor.TYPE_RGB:
if (patternColorspaceRGB == null) {
patternColorspaceRGB = new ColorDetails(GetColorspaceName(), body.PdfIndirectReference, null);
PdfArray array = new PdfArray(PdfName.PATTERN);
array.Add(PdfName.DEVICERGB);
AddToBody(array, patternColorspaceRGB.IndirectReference);
}
return patternColorspaceRGB;
case ExtendedColor.TYPE_CMYK:
if (patternColorspaceCMYK == null) {
patternColorspaceCMYK = new ColorDetails(GetColorspaceName(), body.PdfIndirectReference, null);
PdfArray array = new PdfArray(PdfName.PATTERN);
array.Add(PdfName.DEVICECMYK);
AddToBody(array, patternColorspaceCMYK.IndirectReference);
}
return patternColorspaceCMYK;
case ExtendedColor.TYPE_GRAY:
if (patternColorspaceGRAY == null) {
patternColorspaceGRAY = new ColorDetails(GetColorspaceName(), body.PdfIndirectReference, null);
PdfArray array = new PdfArray(PdfName.PATTERN);
array.Add(PdfName.DEVICEGRAY);
AddToBody(array, patternColorspaceGRAY.IndirectReference);
}
return patternColorspaceGRAY;
case ExtendedColor.TYPE_SEPARATION: {
ColorDetails details = AddSimple(((SpotColor)color).PdfSpotColor);
ColorDetails patternDetails;
documentSpotPatterns.TryGetValue(details, out patternDetails);
if (patternDetails == null) {
patternDetails = new ColorDetails(GetColorspaceName(), body.PdfIndirectReference, null);
PdfArray array = new PdfArray(PdfName.PATTERN);
array.Add(details.IndirectReference);
AddToBody(array, patternDetails.IndirectReference);
documentSpotPatterns[details] = patternDetails;
}
return patternDetails;
}
default:
throw new Exception(MessageLocalization.GetComposedMessage("invalid.color.type"));
}
}