Clover icon

Magnolia Imaging Module 3.4.2-SUPPORT-10161

  1. Project Clover database Tue Jul 16 2019 23:33:19 EEST
  2. Package info.magnolia.imaging.operations.cropresize

File Size.java

 

Coverage histogram

../../../../../img/srcFileCovDistChart10.png
0% of files have more coverage

Code metrics

10
28
4
1
104
53
12
0.43
7
4
3
8.7% of code in this file is excluded from these metrics.

Classes

Class Line # Actions
Size 44 28 8.7% 12 2
0.9523809695.2%
 

Contributing tests

This file is covered by 29 tests. .

Source view

1    /**
2    * This file Copyright (c) 2009-2018 Magnolia International
3    * Ltd. (http://www.magnolia-cms.com). All rights reserved.
4    *
5    *
6    * This file is dual-licensed under both the Magnolia
7    * Network Agreement and the GNU General Public License.
8    * You may elect to use one or the other of these licenses.
9    *
10    * This file is distributed in the hope that it will be
11    * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12    * implied warranty of MERCHANTABILITY or FITNESS FOR A
13    * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14    * Redistribution, except as permitted by whichever of the GPL
15    * or MNA you select, is prohibited.
16    *
17    * 1. For the GPL license (GPL), you can redistribute and/or
18    * modify this file under the terms of the GNU General
19    * Public License, Version 3, as published by the Free Software
20    * Foundation. You should have received a copy of the GNU
21    * General Public License, Version 3 along with this program;
22    * if not, write to the Free Software Foundation, Inc., 51
23    * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24    *
25    * 2. For the Magnolia Network Agreement (MNA), this file
26    * and the accompanying materials are made available under the
27    * terms of the MNA which accompanies this distribution, and
28    * is available at http://www.magnolia-cms.com/mna.html
29    *
30    * Any modifications to this file must keep this entire header
31    * intact.
32    *
33    */
34    package info.magnolia.imaging.operations.cropresize;
35   
36    import java.io.Serializable;
37   
38    /**
39    * A simple immutable bean holding two integers representing a Size, width and height.
40    * Similar to java.awt.Dimension, without all the toolkit and environment
41    * dependencies.
42    * Provides factory methods to calculate sizes based on ratios, source dimensions, crop coordinates.
43    */
 
44    public class Size implements Serializable {
45    private final int width;
46    private final int height;
47   
 
48  44 toggle public Size(int width, int height) {
49  44 this.width = width;
50  44 this.height = height;
51    }
52   
 
53    toggle public int getWidth() {
54    return width;
55    }
56   
 
57    toggle public int getHeight() {
58    return height;
59    }
60   
 
61  32 toggle public static Size conformToCropRatio(final Coords cropCoords, final int targetWidth, final int targetHeight) {
62  32 final int effectiveTargetWidth, effectiveTargetHeight;
63  32 if (targetWidth <= 0 && targetHeight <= 0) {
64  3 effectiveTargetWidth = cropCoords.getWidth();
65  3 effectiveTargetHeight = cropCoords.getHeight();
66  29 } else if (targetWidth <= 0) {
67  3 double ratio = (double) targetHeight / (double) cropCoords.getHeight();
68  3 effectiveTargetWidth = (int) (cropCoords.getWidth() * ratio);
69  3 effectiveTargetHeight = targetHeight;
70  26 } else if (targetHeight <= 0) {
71  3 double ratio = (double) targetWidth / (double) cropCoords.getWidth();
72  3 effectiveTargetHeight = (int) (cropCoords.getHeight() * ratio);
73  3 effectiveTargetWidth = targetWidth;
74    } else {
75  23 effectiveTargetWidth = targetWidth;
76  23 effectiveTargetHeight = targetHeight;
77    }
78   
79  32 return new Size(effectiveTargetWidth, effectiveTargetHeight);
80    }
81   
 
82  0 toggle public static Size maxSizeComplyingWithSourceRatio(final int sourceWidth, final int sourceHeight, final int maxWidth, final int maxHeight) {
83  0 return maxSizeComplyingWithSourceRatio(sourceWidth, sourceHeight, maxWidth, maxHeight, true);
84    }
85   
 
86  12 toggle public static Size maxSizeComplyingWithSourceRatio(final int sourceWidth, final int sourceHeight, final int maxWidth, final int maxHeight, final boolean expand) {
87  12 final double sourceRatio = (double) sourceWidth / (double) sourceHeight;
88   
89  12 final int tentativeWidth = maxWidth;
90  12 final int tentativeHeight = (int) (tentativeWidth / sourceRatio);
91  12 if (!expand && sourceWidth <= maxWidth && sourceHeight <= maxHeight) {
92  1 return new Size(sourceWidth, sourceHeight);
93    }
94  11 if (tentativeHeight <= maxHeight) {
95    // first attempt was good enough
96  6 return new Size(tentativeWidth, tentativeHeight);
97    } else {
98    // nope, we need to resize the other way
99  5 final int effectiveHeight = maxHeight;
100  5 final int effectiveWidth = (int) (effectiveHeight * sourceRatio);
101  5 return new Size(effectiveWidth, effectiveHeight);
102    }
103    }
104    }