#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:
parent
dae1a761fd
commit
592f22882f
@ -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;
|
||||||
|
@ -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,10 +159,14 @@ 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();
|
||||||
color = Color.black;
|
PresetColor pc = PresetColor.valueOfOoxmlId(colorName);
|
||||||
|
if (pc != null) {
|
||||||
|
color = pc.color;
|
||||||
|
}
|
||||||
|
if (color == null) {
|
||||||
|
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;
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
CTSolidColorFillProperties fill = ln.isSetSolidFill() ? ln.getSolidFill() : ln.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()});
|
|
||||||
|
|
||||||
CTSolidColorFillProperties fill = ln.isSetSolidFill() ? ln
|
|
||||||
.getSolidFill() : ln.addNewSolidFill();
|
|
||||||
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();
|
|
||||||
|
XSLFColor col = new XSLFColor(fill, getSheet().getTheme(), fill.getSchemeClr());
|
||||||
CTSRgbColor rgb = CTSRgbColor.Factory.newInstance();
|
col.setColor(color);
|
||||||
rgb.setVal(new byte[]{(byte) color.getRed(),
|
|
||||||
(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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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());
|
XSLFColor col = new XSLFColor(fill, getParentParagraph().getParentShape().getSheet().getTheme(), fill.getSchemeClr());
|
||||||
clr.setVal(new byte[]{(byte)c.getRed(), (byte)c.getGreen(), (byte)c.getBlue()});
|
col.setColor(c);
|
||||||
|
|
||||||
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();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user