#58217 - XSLF: support alpha channel on solid colors (fill, line, text)

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1745101 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Andreas Beeker 2016-05-22 23:58:07 +00:00
parent dae1a761fd
commit 592f22882f
6 changed files with 175 additions and 84 deletions

View File

@ -36,58 +36,60 @@ public enum PresetColor {
// default colors for theme-depending colors taken from ... (last post): // default colors for theme-depending colors taken from ... (last post):
// https://social.technet.microsoft.com/Forums/windows/en-US/ac76cc56-6ff2-4778-b260-8141d7170a3b/windows-7-highlight-text-color-or-selected-text-color-in-aero // https://social.technet.microsoft.com/Forums/windows/en-US/ac76cc56-6ff2-4778-b260-8141d7170a3b/windows-7-highlight-text-color-or-selected-text-color-in-aero
// see ST_SystemColorVal for system color names
/** The system-defined color of the active window's border. */ /** The system-defined color of the active window's border. */
ActiveBorder (0xffb4b4b4, 1, null), ActiveBorder (0xffb4b4b4, 1, "activeBorder"),
/** The system-defined color of the background of the active window's title bar. */ /** The system-defined color of the background of the active window's title bar. */
ActiveCaption (0xff99b4d1, 2, null), ActiveCaption (0xff99b4d1, 2, "activeCaption"),
/** The system-defined color of the text in the active window's title bar. */ /** The system-defined color of the text in the active window's title bar. */
ActiveCaptionText (0xff000000, 3, null), ActiveCaptionText (0xff000000, 3, "captionText"),
/** The application workspace is the area in a multiple-document view that is not being occupied by documents. */ /** The application workspace is the area in a multiple-document view that is not being occupied by documents. */
AppWorkspace (0xffababab, 4, null), AppWorkspace (0xffababab, 4, "appWorkspace"),
/** The system-defined face color of a 3-D element. */ /** The system-defined face color of a 3-D element. */
Control (0xfff0f0f0, 5, null), Control (0xfff0f0f0, 5, "btnFace"),
/** The system-defined shadow color of a 3-D element. The shadow color is applied to parts of a 3-D element that face away from the light source. */ /** The system-defined shadow color of a 3-D element. The shadow color is applied to parts of a 3-D element that face away from the light source. */
ControlDark (0xff696969, 6, null), ControlDark (0xff696969, 6, "btnShadow"),
/** The system-defined color that is the dark shadow color of a 3-D element. The dark shadow color is applied to the parts of a 3-D element that are the darkest color. */ /** The system-defined color that is the dark shadow color of a 3-D element. The dark shadow color is applied to the parts of a 3-D element that are the darkest color. */
ControlDarkDark (0xff000000, 7, null), ControlDarkDark (0xff000000, 7, "3dDkShadow"),
/** The system-defined color that is the light color of a 3-D element. The light color is applied to parts of a 3-D element that face the light source. */ /** The system-defined color that is the light color of a 3-D element. The light color is applied to parts of a 3-D element that face the light source. */
ControlLight (0xffe3e3e3, 8, null), ControlLight (0xffe3e3e3, 8, "btnHighlight"),
/** The system-defined highlight color of a 3-D element. The highlight color is applied to the parts of a 3-D element that are the lightest color. */ /** The system-defined highlight color of a 3-D element. The highlight color is applied to the parts of a 3-D element that are the lightest color. */
ControlLightLight (0xffe3e3e3, 9, null), ControlLightLight (0xffe3e3e3, 9, "3dLight"),
/** The system-defined color of text in a 3-D element. */ /** The system-defined color of text in a 3-D element. */
ControlText (0xff000000, 10, null), ControlText (0xff000000, 10, "btnText"),
/** The system-defined color of the desktop. */ /** The system-defined color of the desktop. */
Desktop (0xff000000, 11, null), Desktop (0xff000000, 11, "background"),
/** The system-defined color of dimmed text. Items in a list that are disabled are displayed in dimmed text. */ /** The system-defined color of dimmed text. Items in a list that are disabled are displayed in dimmed text. */
GrayText (0xff6d6d6d, 12, null), GrayText (0xff6d6d6d, 12, "grayText"),
/** The system-defined color of the background of selected items. This includes selected menu items as well as selected text. */ /** The system-defined color of the background of selected items. This includes selected menu items as well as selected text. */
Highlight (0xff3399ff, 13, null), Highlight (0xff3399ff, 13, "highlight"),
/** The system-defined color of the text of selected items. */ /** The system-defined color of the text of selected items. */
HighlightText (0xffffffff, 14, null), HighlightText (0xffffffff, 14, "highlightText"),
/** The system-defined color used to designate a hot-tracked item. Single-clicking a hot-tracked item executes the item. */ /** The system-defined color used to designate a hot-tracked item. Single-clicking a hot-tracked item executes the item. */
HotTrack (0xff0066cc, 15, null), HotTrack (0xff0066cc, 15, "hotLight"),
/** The system-defined color of an inactive window's border. */ /** The system-defined color of an inactive window's border. */
InactiveBorder (0xfff4f7fc, 16, null), InactiveBorder (0xfff4f7fc, 16, "inactiveBorder"),
/** The system-defined color of the background of an inactive window's title bar. */ /** The system-defined color of the background of an inactive window's title bar. */
InactiveCaption (0xffbfcddb, 17, null), InactiveCaption (0xffbfcddb, 17, "inactiveCaption"),
/** The system-defined color of the text in an inactive window's title bar. */ /** The system-defined color of the text in an inactive window's title bar. */
InactiveCaptionText (0xff000000, 18, null), InactiveCaptionText (0xff000000, 18, "inactiveCaptionText"),
/** The system-defined color of the background of a ToolTip. */ /** The system-defined color of the background of a ToolTip. */
Info (0xffffffe1, 19, null), Info (0xffffffe1, 19, "infoBk"),
/** The system-defined color of the text of a ToolTip. */ /** The system-defined color of the text of a ToolTip. */
InfoText (0xff000000, 20, null), InfoText (0xff000000, 20, "infoText"),
/** The system-defined color of a menu's background. */ /** The system-defined color of a menu's background. */
Menu (0xfff0f0f0, 21, null), Menu (0xfff0f0f0, 21, "menu"),
/** The system-defined color of a menu's text. */ /** The system-defined color of a menu's text. */
MenuText (0xff000000, 22, null), MenuText (0xff000000, 22, "menuText"),
/** The system-defined color of the background of a scroll bar. */ /** The system-defined color of the background of a scroll bar. */
ScrollBar (0xffc8c8c8, 23, null), ScrollBar (0xffc8c8c8, 23, "scrollBar"),
/** The system-defined color of the background in the client area of a window. */ /** The system-defined color of the background in the client area of a window. */
Window (0xffffffff, 24, null), Window (0xffffffff, 24, "window"),
/** The system-defined color of a window frame. */ /** The system-defined color of a window frame. */
WindowFrame (0xff646464, 25, null), WindowFrame (0xff646464, 25, "windowFrame"),
/** The system-defined color of the text in the client area of a window. */ /** The system-defined color of the text in the client area of a window. */
WindowText (0xff000000, 26, null), WindowText (0xff000000, 26, "windowText"),
Transparent (0x00ffffff, 27, null), Transparent (0x00ffffff, 27, null),
AliceBlue (0xfff0f8ff, 28, "aliceBlue"), AliceBlue (0xfff0f8ff, 28, "aliceBlue"),
AntiqueWhite (0xfffaebd7, 29, "antiqueWhite"), AntiqueWhite (0xfffaebd7, 29, "antiqueWhite"),
@ -236,13 +238,13 @@ public enum PresetColor {
/** The system-defined color that is the shadow color of a 3-D element. This color is applied to parts of a 3-D element that face away from the light source. */ /** The system-defined color that is the shadow color of a 3-D element. This color is applied to parts of a 3-D element that face away from the light source. */
ButtonShadow (0xffa0a0a0, 170, null), ButtonShadow (0xffa0a0a0, 170, null),
/** The system-defined color of the lightest color in the color gradient of an active window's title bar. */ /** The system-defined color of the lightest color in the color gradient of an active window's title bar. */
GradientActiveCaption (0xffb9d1ea, 171, null), GradientActiveCaption (0xffb9d1ea, 171, "gradientActiveCaption"),
/** The system-defined color of the lightest color in the color gradient of an inactive window's title bar. */ /** The system-defined color of the lightest color in the color gradient of an inactive window's title bar. */
GradientInactiveCaption (0xffd7e4f2, 172, null), GradientInactiveCaption (0xffd7e4f2, 172, "gradientInactiveCaption"),
/** The system-defined color of the background of a menu bar. */ /** The system-defined color of the background of a menu bar. */
MenuBar (0xfff0f0f0, 173, null), MenuBar (0xfff0f0f0, 173, "menuBar"),
/** The system-defined color used to highlight menu items when the menu appears as a flat menu. */ /** The system-defined color used to highlight menu items when the menu appears as a flat menu. */
MenuHighlight (0xff3399ff, 174, null) MenuHighlight (0xff3399ff, 174, "menuHighlight")
; ;
public Color color; public Color color;

View File

@ -25,6 +25,8 @@ import org.apache.poi.sl.usermodel.ColorStyle;
import org.apache.poi.sl.usermodel.PresetColor; import org.apache.poi.sl.usermodel.PresetColor;
import org.apache.poi.util.Beta; import org.apache.poi.util.Beta;
import org.apache.poi.util.Internal; import org.apache.poi.util.Internal;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.drawingml.x2006.main.CTColor; import org.openxmlformats.schemas.drawingml.x2006.main.CTColor;
import org.openxmlformats.schemas.drawingml.x2006.main.CTHslColor; import org.openxmlformats.schemas.drawingml.x2006.main.CTHslColor;
@ -32,17 +34,18 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetColor;
import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor; import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor;
import org.openxmlformats.schemas.drawingml.x2006.main.CTScRgbColor; import org.openxmlformats.schemas.drawingml.x2006.main.CTScRgbColor;
import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor; import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor;
import org.openxmlformats.schemas.drawingml.x2006.main.CTSolidColorFillProperties;
import org.openxmlformats.schemas.drawingml.x2006.main.CTSystemColor; import org.openxmlformats.schemas.drawingml.x2006.main.CTSystemColor;
import org.w3c.dom.Node; import org.w3c.dom.Node;
/** /**
* Encapsulates logic to read color definitions from DrawingML and convert them to java.awt.Color * Encapsulates logic to read color definitions from DrawingML and convert them to java.awt.Color
*
* @author Yegor Kozlov
*/ */
@Beta @Beta
@Internal @Internal
public class XSLFColor { public class XSLFColor {
private static POILogger LOGGER = POILogFactory.getLogger(XSLFColor.class);
private XmlObject _xmlObject; private XmlObject _xmlObject;
private Color _color; private Color _color;
private CTSchemeColor _phClr; private CTSchemeColor _phClr;
@ -156,11 +159,15 @@ public class XSLFColor {
byte[] val = sys.getLastClr(); byte[] val = sys.getLastClr();
color = new Color(0xFF & val[0], 0xFF & val[1], 0xFF & val[2]); color = new Color(0xFF & val[0], 0xFF & val[1], 0xFF & val[2]);
} else { } else {
// YK: color is a string like "menuText" or "windowText", we return black for such cases
@SuppressWarnings("unused")
String colorName = sys.getVal().toString(); String colorName = sys.getVal().toString();
PresetColor pc = PresetColor.valueOfOoxmlId(colorName);
if (pc != null) {
color = pc.color;
}
if (color == null) {
color = Color.black; color = Color.black;
} }
}
} else { } else {
throw new IllegalArgumentException("Unexpected color choice: " + ch.getClass()); throw new IllegalArgumentException("Unexpected color choice: " + ch.getClass());
} }
@ -168,6 +175,60 @@ public class XSLFColor {
return color; return color;
} }
/**
* Sets the solid color
*
* @param color solid color
*/
@Internal
protected void setColor(Color color) {
if (!(_xmlObject instanceof CTSolidColorFillProperties)) {
LOGGER.log(POILogger.ERROR, "XSLFColor.setColor currently only supports CTSolidColorFillProperties");
return;
}
CTSolidColorFillProperties fill = (CTSolidColorFillProperties)_xmlObject;
if (fill.isSetSrgbClr()) {
fill.unsetSrgbClr();
}
CTSRgbColor rgb = fill.addNewSrgbClr();
float[] rgbaf = color.getRGBComponents(null);
int r = color.getRed(), g = color.getGreen(), b = color.getBlue();
if (rgbaf[0]*255f == r && rgbaf[1]*255f == g && rgbaf[2]*255f == b) {
rgb.setVal(new byte[]{(byte)r, (byte)g, (byte)b });
} else {
rgb.addNewRed().setVal((int)(100000 * rgbaf[0]));
rgb.addNewGreen().setVal((int)(100000 * rgbaf[1]));
rgb.addNewBlue().setVal((int)(100000 * rgbaf[2]));
}
// alpha (%)
if (rgbaf.length == 4 && rgbaf[3] < 1f) {
rgb.addNewAlpha().setVal((int)(100000 * rgbaf[3]));
}
if (fill.isSetHslClr()) {
fill.unsetHslClr();
}
if (fill.isSetPrstClr()) {
fill.unsetPrstClr();
}
if (fill.isSetSchemeClr()) {
fill.unsetSchemeClr();
}
if (fill.isSetScrgbClr()) {
fill.unsetScrgbClr();
}
if (fill.isSetSysClr()) {
fill.unsetSysClr();
}
}
private int getRawValue(String elem) { private int getRawValue(String elem) {
String query = "declare namespace a='http://schemas.openxmlformats.org/drawingml/2006/main' $this//a:" + elem; String query = "declare namespace a='http://schemas.openxmlformats.org/drawingml/2006/main' $this//a:" + elem;

View File

@ -59,7 +59,6 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTPoint2D;
import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;
import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetGeometry2D; import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetGeometry2D;
import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetLineDashProperties; import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetLineDashProperties;
import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor;
import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor; import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor;
import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties; import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties;
import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeStyle; import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeStyle;
@ -218,25 +217,31 @@ public abstract class XSLFSimpleShape extends XSLFShape
*/ */
public void setLineColor(Color color) { public void setLineColor(Color color) {
CTShapeProperties spPr = getSpPr(); CTShapeProperties spPr = getSpPr();
CTLineProperties ln = spPr.getLn();
if (color == null) { if (color == null) {
if (spPr.isSetLn() && spPr.getLn().isSetSolidFill()) if (ln == null) {
spPr.getLn().unsetSolidFill(); return;
}
if (ln.isSetSolidFill()) {
ln.unsetSolidFill();
}
if (!ln.isSetNoFill()) {
ln.addNewNoFill();
}
} else { } else {
CTLineProperties ln = spPr.isSetLn() ? spPr.getLn() : spPr if (ln == null) {
.addNewLn(); ln = spPr.addNewLn();
}
if (ln.isSetNoFill()) {
ln.unsetNoFill();
}
CTSRgbColor rgb = CTSRgbColor.Factory.newInstance(); CTSolidColorFillProperties fill = ln.isSetSolidFill() ? ln.getSolidFill() : ln.addNewSolidFill();
rgb.setVal(new byte[]{(byte) color.getRed(),
(byte) color.getGreen(), (byte) color.getBlue()});
CTSolidColorFillProperties fill = ln.isSetSolidFill() ? ln XSLFColor col = new XSLFColor(fill, getSheet().getTheme(), fill.getSchemeClr());
.getSolidFill() : ln.addNewSolidFill(); col.setColor(color);
fill.setSrgbClr(rgb);
if(fill.isSetHslClr()) fill.unsetHslClr();
if(fill.isSetPrstClr()) fill.unsetPrstClr();
if(fill.isSetSchemeClr()) fill.unsetSchemeClr();
if(fill.isSetScrgbClr()) fill.unsetScrgbClr();
if(fill.isSetSysClr()) fill.unsetSysClr();
} }
} }
@ -548,25 +553,22 @@ public abstract class XSLFSimpleShape extends XSLFShape
public void setFillColor(Color color) { public void setFillColor(Color color) {
CTShapeProperties spPr = getSpPr(); CTShapeProperties spPr = getSpPr();
if (color == null) { if (color == null) {
if (spPr.isSetSolidFill()) spPr.unsetSolidFill(); if (spPr.isSetSolidFill()) {
spPr.unsetSolidFill();
}
if (!spPr.isSetNoFill()) spPr.addNewNoFill(); if (!spPr.isSetNoFill()) {
spPr.addNewNoFill();
}
} else { } else {
if (spPr.isSetNoFill()) spPr.unsetNoFill(); if (spPr.isSetNoFill()) {
spPr.unsetNoFill();
}
CTSolidColorFillProperties fill = spPr.isSetSolidFill() ? spPr CTSolidColorFillProperties fill = spPr.isSetSolidFill() ? spPr.getSolidFill() : spPr.addNewSolidFill();
.getSolidFill() : spPr.addNewSolidFill();
CTSRgbColor rgb = CTSRgbColor.Factory.newInstance(); XSLFColor col = new XSLFColor(fill, getSheet().getTheme(), fill.getSchemeClr());
rgb.setVal(new byte[]{(byte) color.getRed(), col.setColor(color);
(byte) color.getGreen(), (byte) color.getBlue()});
fill.setSrgbClr(rgb);
if(fill.isSetHslClr()) fill.unsetHslClr();
if(fill.isSetPrstClr()) fill.unsetPrstClr();
if(fill.isSetSchemeClr()) fill.unsetSchemeClr();
if(fill.isSetScrgbClr()) fill.unsetScrgbClr();
if(fill.isSetSysClr()) fill.unsetSysClr();
} }
} }

View File

@ -96,19 +96,13 @@ public class XSLFTextRun implements TextRun {
throw new IllegalArgumentException("Currently only SolidPaint is supported!"); throw new IllegalArgumentException("Currently only SolidPaint is supported!");
} }
SolidPaint sp = (SolidPaint)color; SolidPaint sp = (SolidPaint)color;
Color c = DrawPaint.applyColorTransform(sp.getSolidColor());
CTTextCharacterProperties rPr = getRPr(); CTTextCharacterProperties rPr = getRPr();
CTSolidColorFillProperties fill = rPr.isSetSolidFill() ? rPr.getSolidFill() : rPr.addNewSolidFill(); CTSolidColorFillProperties fill = rPr.isSetSolidFill() ? rPr.getSolidFill() : rPr.addNewSolidFill();
CTSRgbColor clr = fill.isSetSrgbClr() ? fill.getSrgbClr() : fill.addNewSrgbClr();
Color c = DrawPaint.applyColorTransform(sp.getSolidColor());
clr.setVal(new byte[]{(byte)c.getRed(), (byte)c.getGreen(), (byte)c.getBlue()});
if(fill.isSetHslClr()) fill.unsetHslClr();
if(fill.isSetPrstClr()) fill.unsetPrstClr();
if(fill.isSetSchemeClr()) fill.unsetSchemeClr();
if(fill.isSetScrgbClr()) fill.unsetScrgbClr();
if(fill.isSetSysClr()) fill.unsetSysClr();
XSLFColor col = new XSLFColor(fill, getParentParagraph().getParentShape().getSheet().getTheme(), fill.getSchemeClr());
col.setColor(c);
} }
@Override @Override

View File

@ -16,9 +16,9 @@
==================================================================== */ ==================================================================== */
package org.apache.poi.xslf; package org.apache.poi.xslf;
import static junit.framework.TestCase.assertEquals;
import static org.apache.poi.POITestCase.assertContains; import static org.apache.poi.POITestCase.assertContains;
import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
@ -40,11 +40,14 @@ import javax.imageio.ImageIO;
import org.apache.poi.POIDataSamples; import org.apache.poi.POIDataSamples;
import org.apache.poi.POIXMLDocumentPart; import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.POIXMLDocumentPart.RelationPart; import org.apache.poi.POIXMLDocumentPart.RelationPart;
import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint;
import org.apache.poi.sl.usermodel.PictureData; import org.apache.poi.sl.usermodel.PictureData;
import org.apache.poi.sl.usermodel.PictureData.PictureType; import org.apache.poi.sl.usermodel.PictureData.PictureType;
import org.apache.poi.sl.usermodel.ShapeType;
import org.apache.poi.xslf.usermodel.DrawingParagraph; import org.apache.poi.xslf.usermodel.DrawingParagraph;
import org.apache.poi.xslf.usermodel.DrawingTextBody; import org.apache.poi.xslf.usermodel.DrawingTextBody;
import org.apache.poi.xslf.usermodel.XMLSlideShow; import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFAutoShape;
import org.apache.poi.xslf.usermodel.XSLFHyperlink; import org.apache.poi.xslf.usermodel.XSLFHyperlink;
import org.apache.poi.xslf.usermodel.XSLFPictureData; import org.apache.poi.xslf.usermodel.XSLFPictureData;
import org.apache.poi.xslf.usermodel.XSLFPictureShape; import org.apache.poi.xslf.usermodel.XSLFPictureShape;
@ -472,4 +475,28 @@ public class TestXSLFBugs {
ppt2.close(); ppt2.close();
} }
@Test
public void bug58217() throws IOException {
XMLSlideShow ppt1 = new XMLSlideShow();
XSLFSlide sl = ppt1.createSlide();
XSLFAutoShape as = sl.createAutoShape();
as.setShapeType(ShapeType.STAR_10);
as.setAnchor(new Rectangle2D.Double(100,100,300,300));
as.setFillColor(new Color(1f,1f,0f,0.1f));
as.setLineColor(new Color(1f,1f,0f,0.4f));
as.setText("Alpha");
as.getTextParagraphs().get(0).getTextRuns().get(0).setFontColor(new Color(1f,1f,0f,0.6f));
XMLSlideShow ppt2 = XSLFTestDataSamples.writeOutAndReadBack(ppt1);
ppt1.close();
sl = ppt2.getSlides().get(0);
as = (XSLFAutoShape)sl.getShapes().get(0);
SolidPaint ps = (SolidPaint)as.getFillStyle().getPaint();
assertEquals(10000, ps.getSolidColor().getAlpha());
ps = (SolidPaint)as.getStrokeStyle().getPaint();
assertEquals(40000, ps.getSolidColor().getAlpha());
ps = (SolidPaint)as.getTextParagraphs().get(0).getTextRuns().get(0).getFontColor();
assertEquals(60000, ps.getSolidColor().getAlpha());
ppt2.close();
}
} }

View File

@ -17,7 +17,7 @@
package org.apache.poi.xslf.usermodel; package org.apache.poi.xslf.usermodel;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue;
import java.awt.Color; import java.awt.Color;
import java.io.IOException; import java.io.IOException;
@ -154,9 +154,14 @@ public class TestXSLFColor {
for(PresetColor pc : PresetColor.values()) { for(PresetColor pc : PresetColor.values()) {
if (pc.ooxmlId == null) continue; if (pc.ooxmlId == null) continue;
xml = CTColor.Factory.newInstance(); xml = CTColor.Factory.newInstance();
STPresetColorVal.Enum val = STPresetColorVal.Enum.forString(pc.ooxmlId); STPresetColorVal.Enum preVal = STPresetColorVal.Enum.forString(pc.ooxmlId);
assertNotNull(pc.ooxmlId, val); STSystemColorVal.Enum sysVal = STSystemColorVal.Enum.forString(pc.ooxmlId);
xml.addNewPrstClr().setVal(val); assertTrue(pc.ooxmlId, preVal != null || sysVal != null);
if (preVal != null) {
xml.addNewPrstClr().setVal(preVal);
} else {
xml.addNewSysClr().setVal(sysVal);
}
color = new XSLFColor(xml, null, null); color = new XSLFColor(xml, null, null);
assertEquals(pc.color, color.getColor()); assertEquals(pc.color, color.getColor());
} }
@ -166,7 +171,7 @@ public class TestXSLFColor {
public void testSys() { public void testSys() {
CTColor xml = CTColor.Factory.newInstance(); CTColor xml = CTColor.Factory.newInstance();
CTSystemColor sys = xml.addNewSysClr(); CTSystemColor sys = xml.addNewSysClr();
sys.setVal(STSystemColorVal.GRAY_TEXT); sys.setVal(STSystemColorVal.CAPTION_TEXT);
XSLFColor color = new XSLFColor(xml, null, null); XSLFColor color = new XSLFColor(xml, null, null);
assertEquals(Color.black, color.getColor()); assertEquals(Color.black, color.getColor());