summaryrefslogtreecommitdiff
path: root/picture.go
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2020-05-17 17:36:53 +0800
committerxuri <xuri.me@gmail.com>2020-05-17 17:36:53 +0800
commit98221a332ff9c37c9b20c44e9efdbe4c22a5cf5c (patch)
treedcdffe469b8ec3d37e2739207f7316e7692341db /picture.go
parent9b7d8463d39ad5fcaae24e5a3b7da296c5e29d17 (diff)
Merge pull request #410
Diffstat (limited to 'picture.go')
-rw-r--r--picture.go53
1 files changed, 51 insertions, 2 deletions
diff --git a/picture.go b/picture.go
index 306a582..71c3b8e 100644
--- a/picture.go
+++ b/picture.go
@@ -32,6 +32,7 @@ func parseFormatPictureSet(formatSet string) (*formatPicture, error) {
FPrintsWithSheet: true,
FLocksWithSheet: false,
NoChangeAspect: false,
+ Autofit: false,
OffsetX: 0,
OffsetY: 0,
XScale: 1.0,
@@ -244,8 +245,12 @@ func (f *File) addDrawingPicture(sheet, drawingXML, cell, file string, width, he
if err != nil {
return err
}
- width = int(float64(width) * formatSet.XScale)
- height = int(float64(height) * formatSet.YScale)
+ if formatSet.Autofit {
+ width, height, col, row, err = f.drawingResize(sheet, cell, float64(width), float64(height), formatSet)
+ if err != nil {
+ return err
+ }
+ }
col--
row--
colStart, rowStart, _, _, colEnd, rowEnd, x2, y2 :=
@@ -578,3 +583,47 @@ func (f *File) drawingsWriter() {
}
}
}
+
+// drawingResize calculate the height and width after resizing.
+func (f *File) drawingResize(sheet string, cell string, width, height float64, formatSet *formatPicture) (w, h, c, r int, err error) {
+ var mergeCells []MergeCell
+ mergeCells, err = f.GetMergeCells(sheet)
+ if err != nil {
+ return
+ }
+ var rng []int
+ var inMergeCell bool
+ if c, r, err = CellNameToCoordinates(cell); err != nil {
+ return
+ }
+ cellWidth, cellHeight := f.getColWidth(sheet, c), f.getRowHeight(sheet, r)
+ for _, mergeCell := range mergeCells {
+ if inMergeCell, err = f.checkCellInArea(cell, mergeCell[0]); err != nil {
+ return
+ }
+ if inMergeCell {
+ rng, _ = areaRangeToCoordinates(mergeCell.GetStartAxis(), mergeCell.GetEndAxis())
+ sortCoordinates(rng)
+ }
+ }
+ if inMergeCell {
+ c, r = rng[0], rng[1]
+ for col := rng[0] - 1; col < rng[2]; col++ {
+ cellWidth += f.getColWidth(sheet, col)
+ }
+ for row := rng[1] - 1; row < rng[3]; row++ {
+ cellHeight += f.getRowHeight(sheet, row)
+ }
+ }
+ if float64(cellWidth) < width {
+ asp := float64(cellWidth) / width
+ width, height = float64(cellWidth), height*asp
+ }
+ if float64(cellHeight) < height {
+ asp := float64(cellHeight) / height
+ height, width = float64(cellHeight), width*asp
+ }
+ width, height = width-float64(formatSet.OffsetX), height-float64(formatSet.OffsetY)
+ w, h = int(width*formatSet.XScale), int(height*formatSet.YScale)
+ return
+}