( width, height, innerWidth, innerHeight int, gravity *GravityOptions, dpr float64, allowOverflow bool, )
| 7 | ) |
| 8 | |
| 9 | func calcPosition( |
| 10 | width, height, innerWidth, innerHeight int, |
| 11 | gravity *GravityOptions, dpr float64, allowOverflow bool, |
| 12 | ) (int, int) { |
| 13 | var left, top int |
| 14 | var minX, maxX, minY, maxY int |
| 15 | |
| 16 | if gravity.Type == GravityFocusPoint { |
| 17 | pointX := imath.ScaleToEven(width, gravity.X) |
| 18 | pointY := imath.ScaleToEven(height, gravity.Y) |
| 19 | |
| 20 | left = pointX - innerWidth/2 |
| 21 | top = pointY - innerHeight/2 |
| 22 | } else { |
| 23 | var offX, offY int |
| 24 | |
| 25 | if math.Abs(gravity.X) >= 1.0 { |
| 26 | offX = imath.RoundToEven(gravity.X * dpr) |
| 27 | } else { |
| 28 | offX = imath.ScaleToEven(width, gravity.X) |
| 29 | } |
| 30 | |
| 31 | if math.Abs(gravity.Y) >= 1.0 { |
| 32 | offY = imath.RoundToEven(gravity.Y * dpr) |
| 33 | } else { |
| 34 | offY = imath.ScaleToEven(height, gravity.Y) |
| 35 | } |
| 36 | |
| 37 | left = imath.ShrinkToEven(width-innerWidth+1, 2) + offX |
| 38 | top = imath.ShrinkToEven(height-innerHeight+1, 2) + offY |
| 39 | |
| 40 | if gravity.Type == GravityNorth || gravity.Type == GravityNorthEast || gravity.Type == GravityNorthWest { |
| 41 | top = 0 + offY |
| 42 | } |
| 43 | |
| 44 | if gravity.Type == GravityEast || gravity.Type == GravityNorthEast || gravity.Type == GravitySouthEast { |
| 45 | left = width - innerWidth - offX |
| 46 | } |
| 47 | |
| 48 | if gravity.Type == GravitySouth || gravity.Type == GravitySouthEast || gravity.Type == GravitySouthWest { |
| 49 | top = height - innerHeight - offY |
| 50 | } |
| 51 | |
| 52 | if gravity.Type == GravityWest || gravity.Type == GravityNorthWest || gravity.Type == GravitySouthWest { |
| 53 | left = 0 + offX |
| 54 | } |
| 55 | } |
| 56 | |
| 57 | if allowOverflow { |
| 58 | minX, maxX = -innerWidth+1, width-1 |
| 59 | minY, maxY = -innerHeight+1, height-1 |
| 60 | } else { |
| 61 | minX, maxX = 0, width-innerWidth |
| 62 | minY, maxY = 0, height-innerHeight |
| 63 | } |
| 64 | |
| 65 | left = max(minX, min(left, maxX)) |
| 66 | top = max(minY, min(top, maxY)) |
no test coverage detected