diff options
Diffstat (limited to 'src/layout')
-rw-r--r-- | src/layout/layoutunit.nim | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/src/layout/layoutunit.nim b/src/layout/layoutunit.nim index 1038e5ed..86f019f0 100644 --- a/src/layout/layoutunit.nim +++ b/src/layout/layoutunit.nim @@ -2,6 +2,27 @@ type LayoutUnit* = distinct int32 +func `==`*(a, b: LayoutUnit): bool {.borrow.} +func `<`*(a, b: LayoutUnit): bool {.borrow.} +func `<=`*(a, b: LayoutUnit): bool {.borrow.} +func `+`*(a, b: LayoutUnit): LayoutUnit {.borrow.} +func `+=`*(a: var LayoutUnit, b: LayoutUnit) {.borrow.} +func `-`*(a, b: LayoutUnit): LayoutUnit {.borrow.} +func `-`*(a: LayoutUnit): LayoutUnit {.borrow.} +func `-=`*(a: var LayoutUnit, b: LayoutUnit) {.borrow.} +func `*`*(a, b: LayoutUnit): LayoutUnit {.inline.} = + LayoutUnit((int32(a) * int32(b)) shr 6) +func `*=`*(a: var LayoutUnit, b: LayoutUnit) {.inline.} = + a = a * b +func `/`*(a, b: LayoutUnit): LayoutUnit {.inline.} = + let a64 = int64(a) + let b64 = int64(b) + LayoutUnit(cast[int32](((a64 shl 12) div b64) shr 6)) +func `/=`*(a: var LayoutUnit, b: LayoutUnit) {.inline.} = + a = a / b +func `div`*(a, b: LayoutUnit): LayoutUnit {.inline.} = + a / b + func toInt*(a: LayoutUnit): int = return int32(a) shr 6 @@ -15,6 +36,10 @@ converter toLayoutUnit*(a: int): LayoutUnit = return toLayoutUnit(cast[int32](a)) converter toLayoutUnit*(a: float64): LayoutUnit = + if unlikely(a == Inf): + return LayoutUnit(high(int32)) + elif unlikely(a == -Inf): + return LayoutUnit(low(int32)) return LayoutUnit(int32(a * 64)) func toFloat64*(a: LayoutUnit): float64 = @@ -23,26 +48,6 @@ func toFloat64*(a: LayoutUnit): float64 = func `$`*(a: LayoutUnit): string = $toFloat64(a) -func `==`*(a, b: LayoutUnit): bool {.borrow.} -func `<`*(a, b: LayoutUnit): bool {.borrow.} -func `<=`*(a, b: LayoutUnit): bool {.borrow.} -func `+`*(a, b: LayoutUnit): LayoutUnit {.borrow.} -func `+=`*(a: var LayoutUnit, b: LayoutUnit) {.borrow.} -func `-`*(a, b: LayoutUnit): LayoutUnit {.borrow.} -func `-=`*(a: var LayoutUnit, b: LayoutUnit) {.borrow.} -func `*`*(a, b: LayoutUnit): LayoutUnit {.inline.} = - LayoutUnit((int32(a) * int32(b)) shr 6) -func `*=`*(a: var LayoutUnit, b: LayoutUnit) {.inline.} = - a = a * b -func `/`*(a, b: LayoutUnit): LayoutUnit {.inline.} = - let a64 = int64(a) - let b64 = int64(b) - LayoutUnit(cast[int32](((a64 shl 12) div b64) shr 6)) -func `/=`*(a: var LayoutUnit, b: LayoutUnit) {.inline.} = - a = a / b -func `div`*(a, b: LayoutUnit): LayoutUnit {.inline.} = - a / b - func min*(a, b: LayoutUnit): LayoutUnit {.borrow.} func max*(a, b: LayoutUnit): LayoutUnit {.borrow.} func clamp*(x, a, b: LayoutUnit): LayoutUnit {.borrow.} |