ASF Bugzilla – Attachment 28056 Details for
Bug 46288
Red crosses (X) instead of images in created Slideshows
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch to correct the refcount handling for Fill pictures
patch.diff (text/plain), 5.35 KB, created by
Jim Talbut
on 2011-12-08 21:11:50 UTC
(
hide
)
Description:
Patch to correct the refcount handling for Fill pictures
Filename:
MIME Type:
Creator:
Jim Talbut
Created:
2011-12-08 21:11:50 UTC
Size:
5.35 KB
patch
obsolete
>Index: src/scratchpad/src/org/apache/poi/hslf/model/Shape.java >=================================================================== >--- src/scratchpad/src/org/apache/poi/hslf/model/Shape.java (revision 1211309) >+++ src/scratchpad/src/org/apache/poi/hslf/model/Shape.java (working copy) >@@ -342,7 +342,9 @@ > * @param sh - owning shape > */ > protected void afterInsert(Sheet sh){ >- >+ if(_fill != null) { >+ _fill.afterInsert(sh); >+ } > } > > /** >Index: src/scratchpad/src/org/apache/poi/hslf/model/Fill.java >=================================================================== >--- src/scratchpad/src/org/apache/poi/hslf/model/Fill.java (revision 1211309) >+++ src/scratchpad/src/org/apache/poi/hslf/model/Fill.java (working copy) >@@ -23,6 +23,7 @@ > import org.apache.poi.hslf.usermodel.SlideShow; > import org.apache.poi.util.POILogger; > import org.apache.poi.util.POILogFactory; >+import java.util.List; > > import java.awt.*; > >@@ -117,6 +118,36 @@ > } > > /** >+ */ >+ protected void afterInsert(Sheet sh){ >+ EscherOptRecord opt = (EscherOptRecord)Shape.getEscherChild(shape.getSpContainer(), EscherOptRecord.RECORD_ID); >+ EscherSimpleProperty p = (EscherSimpleProperty)Shape.getEscherProperty(opt, EscherProperties.FILL__PATTERNTEXTURE); >+ if(p != null) { >+ int idx = p.getPropertyValue(); >+ EscherBSERecord bse = getEscherBSERecord(idx); >+ bse.setRef(bse.getRef() + 1); >+ } >+ } >+ >+ protected EscherBSERecord getEscherBSERecord(int idx){ >+ Sheet sheet = shape.getSheet(); >+ if(sheet == null) { >+ logger.log(POILogger.DEBUG, "Fill has not yet been assigned to a sheet"); >+ return null; >+ } >+ SlideShow ppt = sheet.getSlideShow(); >+ Document doc = ppt.getDocumentRecord(); >+ EscherContainerRecord dggContainer = doc.getPPDrawingGroup().getDggContainer(); >+ EscherContainerRecord bstore = (EscherContainerRecord)Shape.getEscherChild(dggContainer, EscherContainerRecord.BSTORE_CONTAINER); >+ if(bstore == null) { >+ logger.log(POILogger.DEBUG, "EscherContainerRecord.BSTORE_CONTAINER was not found "); >+ return null; >+ } >+ List lst = bstore.getChildRecords(); >+ return (EscherBSERecord)lst.get(idx-1); >+ } >+ >+ /** > * Sets fill type. > * Must be one of the <code>FILL_*</code> constants defined in this class. > * >@@ -233,6 +264,12 @@ > public void setPictureData(int idx){ > EscherOptRecord opt = (EscherOptRecord)Shape.getEscherChild(shape.getSpContainer(), EscherOptRecord.RECORD_ID); > Shape.setEscherProperty(opt, (short)(EscherProperties.FILL__PATTERNTEXTURE + 0x4000), idx); >+ if( idx != 0 ) { >+ if( shape.getSheet() != null ) { >+ EscherBSERecord bse = getEscherBSERecord(idx); >+ bse.setRef(bse.getRef() + 1); >+ } >+ } > } > > } >Index: src/scratchpad/testcases/org/apache/poi/hslf/model/TestBackground.java >=================================================================== >--- src/scratchpad/testcases/org/apache/poi/hslf/model/TestBackground.java (revision 1211309) >+++ src/scratchpad/testcases/org/apache/poi/hslf/model/TestBackground.java (working copy) >@@ -21,11 +21,15 @@ > > import java.io.*; > import java.awt.*; >+import java.util.List; > >+import org.apache.poi.ddf.*; >+import org.apache.poi.hslf.record.Document; > import org.apache.poi.hslf.usermodel.SlideShow; > import org.apache.poi.hslf.HSLFSlideShow; > import org.apache.poi.POIDataSamples; > >+ > /** > * Test <code>Fill</code> object. > * >@@ -163,6 +167,7 @@ > > fill = slides[0].getBackground().getFill(); > assertEquals(Fill.FILL_PICTURE, fill.getFillType()); >+ assertEquals(3, getFillPictureRefCount(slides[0].getBackground(), fill)); > shape = slides[0].getShapes()[0]; > assertEquals(Fill.FILL_SOLID, shape.getFill().getFillType()); > >@@ -173,8 +178,10 @@ > > fill = slides[2].getBackground().getFill(); > assertEquals(Fill.FILL_TEXTURE, fill.getFillType()); >+ assertEquals(3, getFillPictureRefCount(slides[2].getBackground(), fill)); > shape = slides[2].getShapes()[0]; > assertEquals(Fill.FILL_PICTURE, shape.getFill().getFillType()); >+ assertEquals(1, getFillPictureRefCount(shape, fill)); > > fill = slides[3].getBackground().getFill(); > assertEquals(Fill.FILL_SHADE_CENTER, fill.getFillType()); >@@ -183,4 +190,21 @@ > > } > >+ private int getFillPictureRefCount(Shape shape, Fill fill) { >+ EscherOptRecord opt = (EscherOptRecord)Shape.getEscherChild(shape.getSpContainer(), EscherOptRecord.RECORD_ID); >+ EscherSimpleProperty p = (EscherSimpleProperty)Shape.getEscherProperty(opt, EscherProperties.FILL__PATTERNTEXTURE); >+ if(p != null) { >+ int idx = p.getPropertyValue(); >+ >+ Sheet sheet = shape.getSheet(); >+ SlideShow ppt = sheet.getSlideShow(); >+ Document doc = ppt.getDocumentRecord(); >+ EscherContainerRecord dggContainer = doc.getPPDrawingGroup().getDggContainer(); >+ EscherContainerRecord bstore = (EscherContainerRecord)Shape.getEscherChild(dggContainer, EscherContainerRecord.BSTORE_CONTAINER); >+ List lst = bstore.getChildRecords(); >+ return ((EscherBSERecord)lst.get(idx-1)).getRef(); >+ } >+ return 0; >+ } >+ > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 46288
: 28056