@@ -52,30 +52,34 @@ mkFont =
52
52
mkCard :: Env -> CP. Image CP. PixelRGBA8
53
53
mkCard env =
54
54
R. renderDrawingAtDpi
55
- (round $ env ^. # envImg . # imgWidth)
56
- (round $ env ^. # envImg . # imgHeight)
57
- (env ^. # envImg . # imgDpi)
55
+ (env ^. # envImg . # imgWidth . # unPx )
56
+ (env ^. # envImg . # imgHeight . # unPx )
57
+ (env ^. # envImg . # imgDpi . # unPx )
58
58
white
59
59
. forM_ (zip [0 .. ] $ envGroup env)
60
60
. uncurry
61
61
$ mkGroup env (length $ envGroup env)
62
62
63
63
mkGroup :: Env -> Int -> Int -> Group -> R. Drawing CPT. PixelRGBA8 ()
64
64
mkGroup env amt idx (Group items) =
65
- foldM_ (mkItem env offX) 0 items
65
+ foldM_ (mkItem env offX) ( Px 0 ) items
66
66
where
67
- pad = env ^. # envImg . # imgPadding
67
+ pad = via @ Integer @ Int @ Rational $ env ^. # envImg . # imgPadding . # unPx
68
68
offX =
69
- pad
70
- + unsafeFrom @ Int @ Float idx
71
- * (env ^. # envImg . # imgWidth / unsafeFrom @ Int @ Float amt)
69
+ Px
70
+ . round
71
+ $ pad
72
+ + via @ Integer @ Int @ Rational idx
73
+ * ( via @ Integer @ Int @ Rational (env ^. # envImg . # imgWidth . # unPx)
74
+ / via @ Integer @ Int @ Rational amt
75
+ )
72
76
73
77
mkItem ::
74
78
Env ->
75
- Float ->
76
- Float ->
79
+ Px ->
80
+ Px ->
77
81
Item ->
78
- R. Drawing CPT. PixelRGBA8 Float
82
+ R. Drawing CPT. PixelRGBA8 Px
79
83
mkItem env offX offY item =
80
84
case itemKind item of
81
85
Head -> mkText env offX offY item $ env ^. # envFont . # fontHead
@@ -87,33 +91,42 @@ mkItem env offX offY item =
87
91
88
92
mkText ::
89
93
Env ->
90
- Float ->
91
- Float ->
94
+ Px ->
95
+ Px ->
92
96
Item ->
93
97
TT. Font ->
94
- R. Drawing CPT. PixelRGBA8 Float
98
+ R. Drawing CPT. PixelRGBA8 Px
95
99
mkText env offX offY item font = do
96
100
R. withTexture black
97
101
. R. printTextAt
98
102
font
99
- (TT. pixelSizeInPointAtDpi size $ env ^. # envImg . # imgDpi)
100
- (R. V2 offX offN)
103
+ ( TT. pixelSizeInPointAtDpi
104
+ (unsafeFrom @ Int @ Float $ unPx size)
105
+ (env ^. # envImg . # imgDpi . # unPx)
106
+ )
107
+ ( R. V2
108
+ (unsafeFrom @ Int @ Float $ unPx offX)
109
+ (unsafeFrom @ Int @ Float $ unPx offN)
110
+ )
101
111
$ from @ Text @ String text
102
112
pure offN
103
113
where
104
114
text = itemData item
105
115
size = itemSize item
106
- offN = offY + env ^. # envImg . # imgPadding + size
116
+ offN = Px $ unPx offY + env ^. # envImg . # imgPadding . # unPx + unPx size
107
117
108
118
mkQr ::
109
119
Env ->
110
- Float ->
111
- Float ->
120
+ Px ->
121
+ Px ->
112
122
Item ->
113
- R. Drawing CPT. PixelRGBA8 Float
123
+ R. Drawing CPT. PixelRGBA8 Px
114
124
mkQr env offX offY item = do
115
- R. drawImage img 0 $ R. V2 offX offY
116
- pure $ offY + env ^. # envImg . # imgPadding + size
125
+ R. drawImage img 0
126
+ $ R. V2
127
+ (unsafeFrom @ Int @ Float $ unPx offX)
128
+ (unsafeFrom @ Int @ Float $ unPx offY)
129
+ pure . Px $ unPx offY + env ^. # envImg . # imgPadding . # unPx + unPx size
117
130
where
118
131
size = itemSize item
119
132
qr =
@@ -124,7 +137,22 @@ mkQr env offX offY item = do
124
137
$ itemData item
125
138
img =
126
139
CPT. promoteImage
127
- $ QRJP. toImage 0 (round size `div` QR. qrImageSize qr) qr
140
+ $ QRJP. toImage 0 (unPx size `div` QR. qrImageSize qr) qr
141
+
142
+ newtype Px = Px
143
+ { unPx :: Int
144
+ }
145
+ deriving stock
146
+ ( Eq ,
147
+ Ord ,
148
+ Show ,
149
+ Data ,
150
+ Generic
151
+ )
152
+ deriving newtype
153
+ ( HasCodec ,
154
+ HasItemCodec
155
+ )
128
156
129
157
data Cfg = Cfg
130
158
{ cfgImg :: Img ,
@@ -145,10 +173,10 @@ data Cfg = Cfg
145
173
via GenericType Cfg
146
174
147
175
data Img = Img
148
- { imgDpi :: Int ,
149
- imgWidth :: Float ,
150
- imgHeight :: Float ,
151
- imgPadding :: Float
176
+ { imgDpi :: Px ,
177
+ imgWidth :: Px ,
178
+ imgHeight :: Px ,
179
+ imgPadding :: Px
152
180
}
153
181
deriving stock
154
182
( Eq ,
@@ -200,7 +228,7 @@ newtype Group = Group
200
228
data Item = Item
201
229
{ itemKind :: ItemKind ,
202
230
itemData :: Text ,
203
- itemSize :: Float
231
+ itemSize :: Px
204
232
}
205
233
deriving stock
206
234
( Eq ,
0 commit comments