69 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package drawing
 | |
| 
 | |
| import (
 | |
| 	"math"
 | |
| 
 | |
| 	"golang.org/x/image/math/fixed"
 | |
| 
 | |
| 	"github.com/golang/freetype/raster"
 | |
| 	"github.com/golang/freetype/truetype"
 | |
| )
 | |
| 
 | |
| // PixelsToPoints returns the points for a given number of pixels at a DPI.
 | |
| func PixelsToPoints(dpi, pixels float64) (points float64) {
 | |
| 	points = (pixels * 72.0) / dpi
 | |
| 	return
 | |
| }
 | |
| 
 | |
| // PointsToPixels returns the pixels for a given number of points at a DPI.
 | |
| func PointsToPixels(dpi, points float64) (pixels float64) {
 | |
| 	pixels = (points * dpi) / 72.0
 | |
| 	return
 | |
| }
 | |
| 
 | |
| func abs(i int) int {
 | |
| 	if i < 0 {
 | |
| 		return -i
 | |
| 	}
 | |
| 	return i
 | |
| }
 | |
| 
 | |
| func distance(x1, y1, x2, y2 float64) float64 {
 | |
| 	return vectorDistance(x2-x1, y2-y1)
 | |
| }
 | |
| 
 | |
| func vectorDistance(dx, dy float64) float64 {
 | |
| 	return float64(math.Sqrt(dx*dx + dy*dy))
 | |
| }
 | |
| 
 | |
| func toFtCap(c LineCap) raster.Capper {
 | |
| 	switch c {
 | |
| 	case RoundCap:
 | |
| 		return raster.RoundCapper
 | |
| 	case ButtCap:
 | |
| 		return raster.ButtCapper
 | |
| 	case SquareCap:
 | |
| 		return raster.SquareCapper
 | |
| 	}
 | |
| 	return raster.RoundCapper
 | |
| }
 | |
| 
 | |
| func toFtJoin(j LineJoin) raster.Joiner {
 | |
| 	switch j {
 | |
| 	case RoundJoin:
 | |
| 		return raster.RoundJoiner
 | |
| 	case BevelJoin:
 | |
| 		return raster.BevelJoiner
 | |
| 	}
 | |
| 	return raster.RoundJoiner
 | |
| }
 | |
| 
 | |
| func pointToF64Point(p truetype.Point) (x, y float64) {
 | |
| 	return fUnitsToFloat64(p.X), -fUnitsToFloat64(p.Y)
 | |
| }
 | |
| 
 | |
| func fUnitsToFloat64(x fixed.Int26_6) float64 {
 | |
| 	scaled := x << 2
 | |
| 	return float64(scaled/256) + float64(scaled%256)/256.0
 | |
| }
 |