about summary refs log tree commit diff stats
path: root/src/layout
diff options
context:
space:
mode:
Diffstat (limited to 'src/layout')
-rw-r--r--src/layout/layoutunit.nim45
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.}