Search in sources :

Example 1 with CTSchemeColor

use of org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor in project poi by apache.

the class XSLFShape method selectPaint.

protected static PaintStyle selectPaint(CTStyleMatrixReference fillRef, final XSLFTheme theme, boolean isLineStyle, boolean hasPlaceholder) {
    if (fillRef == null)
        return null;
    // The idx attribute refers to the index of a fill style or
    // background fill style within the presentation's style matrix, defined by the fmtScheme element.
    // value of 0 or 1000 indicates no background,
    // values 1-999 refer to the index of a fill style within the fillStyleLst element
    // values 1001 and above refer to the index of a background fill style within the bgFillStyleLst element.
    int idx = (int) fillRef.getIdx();
    CTStyleMatrix matrix = theme.getXmlObject().getThemeElements().getFmtScheme();
    final XmlObject styleLst;
    int childIdx;
    if (idx >= 1 && idx <= 999) {
        childIdx = idx - 1;
        styleLst = (isLineStyle) ? matrix.getLnStyleLst() : matrix.getFillStyleLst();
    } else if (idx >= 1001) {
        childIdx = idx - 1001;
        styleLst = matrix.getBgFillStyleLst();
    } else {
        return null;
    }
    XmlCursor cur = styleLst.newCursor();
    XSLFFillProperties fp = null;
    if (cur.toChild(childIdx)) {
        fp = XSLFPropertiesDelegate.getFillDelegate(cur.getObject());
    }
    cur.dispose();
    CTSchemeColor phClr = fillRef.getSchemeClr();
    PaintStyle res = selectPaint(fp, phClr, theme.getPackagePart(), theme, hasPlaceholder);
    // see http://officeopenxml.com/prSlide-color.php - "Color Placeholders within Themes"
    if (res != null || hasPlaceholder) {
        return res;
    }
    XSLFColor col = new XSLFColor(fillRef, theme, phClr);
    return DrawPaint.createSolidPaint(col.getColorStyle());
}
Also used : CTStyleMatrix(org.openxmlformats.schemas.drawingml.x2006.main.CTStyleMatrix) CTSchemeColor(org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor) PaintStyle(org.apache.poi.sl.usermodel.PaintStyle) XmlObject(org.apache.xmlbeans.XmlObject) DrawPaint(org.apache.poi.sl.draw.DrawPaint) GradientPaint(org.apache.poi.sl.usermodel.PaintStyle.GradientPaint) TexturePaint(org.apache.poi.sl.usermodel.PaintStyle.TexturePaint) XSLFFillProperties(org.apache.poi.xslf.usermodel.XSLFPropertiesDelegate.XSLFFillProperties) XmlCursor(org.apache.xmlbeans.XmlCursor)

Example 2 with CTSchemeColor

use of org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor in project poi by apache.

the class TestXSLFSimpleShape method testDefaultProperties.

@Test
public void testDefaultProperties() throws IOException {
    XMLSlideShow ppt = XSLFTestDataSamples.openSampleDocument("shapes.pptx");
    XSLFSlide slide6 = ppt.getSlides().get(5);
    List<XSLFShape> shapes = slide6.getShapes();
    for (XSLFShape xs : shapes) {
        XSLFSimpleShape s = (XSLFSimpleShape) xs;
        // all shapes have a theme color="accent1"
        assertEquals("accent1", s.getSpStyle().getFillRef().getSchemeClr().getVal().toString());
        assertEquals(2.0, s.getLineWidth(), 0);
        assertEquals(LineCap.FLAT, s.getLineCap());
        assertEquals(new Color(79, 129, 189), s.getLineColor());
    }
    XSLFSimpleShape s0 = (XSLFSimpleShape) shapes.get(0);
    // fill is not set
    assertNull(getSpPr(s0).getSolidFill());
    //assertEquals(slide6.getTheme().getColor("accent1").getColor(), s0.getFillColor());
    assertEquals(new Color(79, 129, 189), s0.getFillColor());
    // lighter 80%
    XSLFSimpleShape s1 = (XSLFSimpleShape) shapes.get(1);
    CTSchemeColor ref1 = getSpPr(s1).getSolidFill().getSchemeClr();
    assertEquals(1, ref1.sizeOfLumModArray());
    assertEquals(1, ref1.sizeOfLumOffArray());
    assertEquals(20000, ref1.getLumModArray(0).getVal());
    assertEquals(80000, ref1.getLumOffArray(0).getVal());
    assertEquals("accent1", ref1.getVal().toString());
    assertEquals(new Color(220, 230, 242), s1.getFillColor());
    // lighter 60%
    XSLFSimpleShape s2 = (XSLFSimpleShape) shapes.get(2);
    CTSchemeColor ref2 = getSpPr(s2).getSolidFill().getSchemeClr();
    assertEquals(1, ref2.sizeOfLumModArray());
    assertEquals(1, ref2.sizeOfLumOffArray());
    assertEquals(40000, ref2.getLumModArray(0).getVal());
    assertEquals(60000, ref2.getLumOffArray(0).getVal());
    assertEquals("accent1", ref2.getVal().toString());
    assertEquals(new Color(185, 205, 229), s2.getFillColor());
    // lighter 40%
    XSLFSimpleShape s3 = (XSLFSimpleShape) shapes.get(3);
    CTSchemeColor ref3 = getSpPr(s3).getSolidFill().getSchemeClr();
    assertEquals(1, ref3.sizeOfLumModArray());
    assertEquals(1, ref3.sizeOfLumOffArray());
    assertEquals(60000, ref3.getLumModArray(0).getVal());
    assertEquals(40000, ref3.getLumOffArray(0).getVal());
    assertEquals("accent1", ref3.getVal().toString());
    assertEquals(new Color(149, 179, 215), s3.getFillColor());
    // darker 25%
    XSLFSimpleShape s4 = (XSLFSimpleShape) shapes.get(4);
    CTSchemeColor ref4 = getSpPr(s4).getSolidFill().getSchemeClr();
    assertEquals(1, ref4.sizeOfLumModArray());
    assertEquals(0, ref4.sizeOfLumOffArray());
    assertEquals(75000, ref4.getLumModArray(0).getVal());
    assertEquals("accent1", ref3.getVal().toString());
    assertEquals(new Color(55, 96, 146), s4.getFillColor());
    XSLFSimpleShape s5 = (XSLFSimpleShape) shapes.get(5);
    CTSchemeColor ref5 = getSpPr(s5).getSolidFill().getSchemeClr();
    assertEquals(1, ref5.sizeOfLumModArray());
    assertEquals(0, ref5.sizeOfLumOffArray());
    assertEquals(50000, ref5.getLumModArray(0).getVal());
    assertEquals("accent1", ref5.getVal().toString());
    assertEquals(new Color(37, 64, 97), s5.getFillColor());
    ppt.close();
}
Also used : Color(java.awt.Color) CTSchemeColor(org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor) CTSchemeColor(org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor) Test(org.junit.Test)

Example 3 with CTSchemeColor

use of org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor in project poi by apache.

the class XSLFSimpleShape method getLinePaint.

protected PaintStyle getLinePaint() {
    XSLFSheet sheet = getSheet();
    final XSLFTheme theme = sheet.getTheme();
    final boolean hasPlaceholder = getPlaceholder() != null;
    PropertyFetcher<PaintStyle> fetcher = new PropertyFetcher<PaintStyle>() {

        @Override
        public boolean fetch(XSLFShape shape) {
            CTLineProperties spPr = getLn(shape, false);
            XSLFFillProperties fp = XSLFPropertiesDelegate.getFillDelegate(spPr);
            if (fp != null && fp.isSetNoFill()) {
                setValue(null);
                return true;
            }
            PackagePart pp = shape.getSheet().getPackagePart();
            PaintStyle paint = selectPaint(fp, null, pp, theme, hasPlaceholder);
            if (paint != null) {
                setValue(paint);
                return true;
            }
            CTShapeStyle style = shape.getSpStyle();
            if (style != null) {
                fp = XSLFPropertiesDelegate.getFillDelegate(style.getLnRef());
                paint = selectPaint(fp, null, pp, theme, hasPlaceholder);
                // line color was not found, check if it is defined in the theme
                if (paint == null) {
                    paint = getThemePaint(style, pp);
                }
            }
            if (paint != null) {
                setValue(paint);
                return true;
            }
            return false;
        }

        PaintStyle getThemePaint(CTShapeStyle style, PackagePart pp) {
            // get a reference to a line style within the style matrix.
            CTStyleMatrixReference lnRef = style.getLnRef();
            if (lnRef == null) {
                return null;
            }
            int idx = (int) lnRef.getIdx();
            CTSchemeColor phClr = lnRef.getSchemeClr();
            if (idx <= 0) {
                return null;
            }
            CTLineProperties props = theme.getXmlObject().getThemeElements().getFmtScheme().getLnStyleLst().getLnArray(idx - 1);
            XSLFFillProperties fp = XSLFPropertiesDelegate.getFillDelegate(props);
            return selectPaint(fp, phClr, pp, theme, hasPlaceholder);
        }
    };
    fetchShapeProperty(fetcher);
    return fetcher.getValue();
}
Also used : CTSchemeColor(org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor) CTLineProperties(org.openxmlformats.schemas.drawingml.x2006.main.CTLineProperties) PropertyFetcher(org.apache.poi.xslf.model.PropertyFetcher) PackagePart(org.apache.poi.openxml4j.opc.PackagePart) DrawPaint(org.apache.poi.sl.draw.DrawPaint) SolidPaint(org.apache.poi.sl.usermodel.PaintStyle.SolidPaint) CTShapeStyle(org.openxmlformats.schemas.drawingml.x2006.main.CTShapeStyle) PaintStyle(org.apache.poi.sl.usermodel.PaintStyle) CTStyleMatrixReference(org.openxmlformats.schemas.drawingml.x2006.main.CTStyleMatrixReference) XSLFFillProperties(org.apache.poi.xslf.usermodel.XSLFPropertiesDelegate.XSLFFillProperties)

Example 4 with CTSchemeColor

use of org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor in project poi by apache.

the class XSLFTextRun method getFontColor.

@Override
public PaintStyle getFontColor() {
    final boolean hasPlaceholder = getParentParagraph().getParentShape().getPlaceholder() != null;
    CharacterPropertyFetcher<PaintStyle> fetcher = new CharacterPropertyFetcher<PaintStyle>(_p.getIndentLevel()) {

        public boolean fetch(CTTextCharacterProperties props) {
            if (props == null) {
                return false;
            }
            XSLFShape shape = _p.getParentShape();
            CTShapeStyle style = shape.getSpStyle();
            CTSchemeColor phClr = null;
            if (style != null && style.getFontRef() != null) {
                phClr = style.getFontRef().getSchemeClr();
            }
            XSLFFillProperties fp = XSLFPropertiesDelegate.getFillDelegate(props);
            XSLFSheet sheet = shape.getSheet();
            PackagePart pp = sheet.getPackagePart();
            XSLFTheme theme = sheet.getTheme();
            PaintStyle ps = XSLFShape.selectPaint(fp, phClr, pp, theme, hasPlaceholder);
            if (ps != null) {
                setValue(ps);
                return true;
            }
            return false;
        }
    };
    fetchCharacterProperty(fetcher);
    return fetcher.getValue();
}
Also used : CTShapeStyle(org.openxmlformats.schemas.drawingml.x2006.main.CTShapeStyle) CharacterPropertyFetcher(org.apache.poi.xslf.model.CharacterPropertyFetcher) CTTextCharacterProperties(org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties) CTSchemeColor(org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor) PaintStyle(org.apache.poi.sl.usermodel.PaintStyle) PackagePart(org.apache.poi.openxml4j.opc.PackagePart) XSLFFillProperties(org.apache.poi.xslf.usermodel.XSLFPropertiesDelegate.XSLFFillProperties)

Example 5 with CTSchemeColor

use of org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor in project poi by apache.

the class XSLFShadow method getFillStyle.

@Override
public SolidPaint getFillStyle() {
    XSLFTheme theme = getSheet().getTheme();
    CTOuterShadowEffect ct = (CTOuterShadowEffect) getXmlObject();
    if (ct == null)
        return null;
    CTSchemeColor phClr = ct.getSchemeClr();
    final XSLFColor xc = new XSLFColor(ct, theme, phClr);
    return DrawPaint.createSolidPaint(xc.getColorStyle());
}
Also used : CTSchemeColor(org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor) CTOuterShadowEffect(org.openxmlformats.schemas.drawingml.x2006.main.CTOuterShadowEffect)

Aggregations

CTSchemeColor (org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor)8 DrawPaint (org.apache.poi.sl.draw.DrawPaint)4 PaintStyle (org.apache.poi.sl.usermodel.PaintStyle)3 XSLFFillProperties (org.apache.poi.xslf.usermodel.XSLFPropertiesDelegate.XSLFFillProperties)3 CTShapeStyle (org.openxmlformats.schemas.drawingml.x2006.main.CTShapeStyle)3 Color (java.awt.Color)2 PackagePart (org.apache.poi.openxml4j.opc.PackagePart)2 GradientPaint (org.apache.poi.sl.usermodel.PaintStyle.GradientPaint)2 TexturePaint (org.apache.poi.sl.usermodel.PaintStyle.TexturePaint)2 XmlObject (org.apache.xmlbeans.XmlObject)2 CTFontReference (org.openxmlformats.schemas.drawingml.x2006.main.CTFontReference)2 CTStyleMatrixReference (org.openxmlformats.schemas.drawingml.x2006.main.CTStyleMatrixReference)2 ColorStyle (org.apache.poi.sl.usermodel.ColorStyle)1 SolidPaint (org.apache.poi.sl.usermodel.PaintStyle.SolidPaint)1 PresetColor (org.apache.poi.sl.usermodel.PresetColor)1 CharacterPropertyFetcher (org.apache.poi.xslf.model.CharacterPropertyFetcher)1 PropertyFetcher (org.apache.poi.xslf.model.PropertyFetcher)1 XmlCursor (org.apache.xmlbeans.XmlCursor)1 Test (org.junit.Test)1 CTColor (org.openxmlformats.schemas.drawingml.x2006.main.CTColor)1