@@ -26,19 +26,19 @@ main = withUtf8 $ do
26
26
CliTextConf txt _ -> forM txt unToml
27
27
CliFileConf loc _ -> forM loc $ readFile >=> unToml
28
28
putStrLn $ inspect @ Text @ Cfg cfg
29
- headFont <- mkFont $ cfgHeadFont cfg
30
- iconFont <- mkFont $ cfgIconFont cfg
31
- noteFont <- mkFont $ cfgNoteFont cfg
29
+ headFont <- mkFont $ cfg ^. # cfgFont . # cfgFontHead
30
+ iconFont <- mkFont $ cfg ^. # cfgFont . # cfgFontIcon
31
+ noteFont <- mkFont $ cfg ^. # cfgFont . # cfgFontNote
32
32
CP. writePng " ./img/functora.png"
33
33
$ mkCard
34
34
Env
35
- { envDpi = cfgDpi cfg,
36
- envWidth = cfgWidth cfg,
37
- envHeight = cfgHeight cfg,
38
- envPadding = cfgPadding cfg ,
39
- envHeadFont = headFont ,
40
- envIconFont = iconFont,
41
- envNoteFont = noteFont ,
35
+ { envImg = cfgImg cfg,
36
+ envFont =
37
+ Font
38
+ { fontHead = headFont ,
39
+ fontIcon = iconFont ,
40
+ fontNote = noteFont
41
+ } ,
42
42
envGroup = cfgGroup cfg
43
43
}
44
44
@@ -52,9 +52,9 @@ mkFont =
52
52
mkCard :: Env -> CP. Image CP. PixelRGBA8
53
53
mkCard env =
54
54
R. renderDrawingAtDpi
55
- (round $ envWidth env)
56
- (round $ envHeight env)
57
- (envDpi env)
55
+ (round $ env ^. # envImg . # imgWidth )
56
+ (round $ env ^. # envImg . # imgHeight )
57
+ (env ^. # envImg . # imgDpi )
58
58
white
59
59
. forM_ (zip [0 .. ] $ envGroup env)
60
60
. uncurry
@@ -64,11 +64,11 @@ mkGroup :: Env -> Int -> Int -> Group -> R.Drawing CPT.PixelRGBA8 ()
64
64
mkGroup env amt idx (Group items) =
65
65
foldM_ (mkItem env offX) 0 items
66
66
where
67
- pad = envPadding env
67
+ pad = env ^. # envImg . # imgPadding
68
68
offX =
69
69
pad
70
70
+ unsafeFrom @ Int @ Float idx
71
- * (envWidth env / unsafeFrom @ Int @ Float amt)
71
+ * (env ^. # envImg . # imgWidth / unsafeFrom @ Int @ Float amt)
72
72
73
73
mkItem ::
74
74
Env ->
@@ -78,9 +78,9 @@ mkItem ::
78
78
R. Drawing CPT. PixelRGBA8 Float
79
79
mkItem env offX offY item =
80
80
case itemKind item of
81
- Head -> mkText env offX offY item $ envHeadFont env
82
- Icon -> mkText env offX offY next $ envIconFont env
83
- Note -> mkText env offX offY item $ envNoteFont env
81
+ Head -> mkText env offX offY item $ env ^. # envFont . # fontHead
82
+ Icon -> mkText env offX offY next $ env ^. # envFont . # fontIcon
83
+ Note -> mkText env offX offY item $ env ^. # envFont . # fontNote
84
84
Qr -> mkQr env offX offY item
85
85
where
86
86
next = item & # itemData %~ mkHex . from @ Text @ String
@@ -96,17 +96,14 @@ mkText env offX offY item font = do
96
96
R. withTexture black
97
97
. R. printTextAt
98
98
font
99
- (TT. pixelSizeInPointAtDpi size $ envDpi env)
99
+ (TT. pixelSizeInPointAtDpi size $ env ^. # envImg . # imgDpi )
100
100
(R. V2 offX offN)
101
101
$ from @ Text @ String text
102
102
pure offN
103
103
where
104
104
text = itemData item
105
105
size = itemSize item
106
- offN =
107
- offY
108
- + envPadding env
109
- + size
106
+ offN = offY + env ^. # envImg . # imgPadding + size
110
107
111
108
mkQr ::
112
109
Env ->
@@ -116,9 +113,9 @@ mkQr ::
116
113
R. Drawing CPT. PixelRGBA8 Float
117
114
mkQr env offX offY item = do
118
115
R. drawImage img 0 $ R. V2 offX offY
119
- pure $ offY + envPadding env + px
116
+ pure $ offY + env ^. # envImg . # imgPadding + size
120
117
where
121
- px = itemSize item
118
+ size = itemSize item
122
119
qr =
123
120
fromMaybe (error " Can not generate qr!" )
124
121
. QR. encodeAutomatic
@@ -127,16 +124,11 @@ mkQr env offX offY item = do
127
124
$ itemData item
128
125
img =
129
126
CPT. promoteImage
130
- $ QRJP. toImage 0 (round px `div` QR. qrImageSize qr) qr
127
+ $ QRJP. toImage 0 (round size `div` QR. qrImageSize qr) qr
131
128
132
129
data Cfg = Cfg
133
- { cfgDpi :: Int ,
134
- cfgWidth :: Float ,
135
- cfgHeight :: Float ,
136
- cfgPadding :: Float ,
137
- cfgHeadFont :: Text ,
138
- cfgIconFont :: Text ,
139
- cfgNoteFont :: Text ,
130
+ { cfgImg :: Img ,
131
+ cfgFont :: CfgFont ,
140
132
cfgGroup :: [Group ]
141
133
}
142
134
deriving stock
@@ -152,23 +144,42 @@ data Cfg = Cfg
152
144
)
153
145
via GenericType Cfg
154
146
155
- data RowOrCol
156
- = Row
157
- | Col
147
+ data Img = Img
148
+ { imgDpi :: Int ,
149
+ imgWidth :: Float ,
150
+ imgHeight :: Float ,
151
+ imgPadding :: Float
152
+ }
158
153
deriving stock
159
154
( Eq ,
160
155
Ord ,
161
156
Show ,
162
157
Data ,
163
- Generic ,
164
- Enum ,
165
- Bounded
158
+ Generic
159
+ )
160
+ deriving
161
+ ( HasCodec ,
162
+ HasItemCodec
163
+ )
164
+ via GenericType Img
165
+
166
+ data CfgFont = CfgFont
167
+ { cfgFontHead :: Text ,
168
+ cfgFontIcon :: Text ,
169
+ cfgFontNote :: Text
170
+ }
171
+ deriving stock
172
+ ( Eq ,
173
+ Ord ,
174
+ Show ,
175
+ Data ,
176
+ Generic
166
177
)
167
178
deriving
168
179
( HasCodec ,
169
180
HasItemCodec
170
181
)
171
- via GenericEnum RowOrCol
182
+ via GenericType CfgFont
172
183
173
184
newtype Group = Group
174
185
{ groupItem :: [Item ]
@@ -225,17 +236,19 @@ data ItemKind
225
236
via GenericEnum ItemKind
226
237
227
238
data Env = Env
228
- { envDpi :: Int ,
229
- envWidth :: Float ,
230
- envHeight :: Float ,
231
- envPadding :: Float ,
232
- envHeadFont :: TT. Font ,
233
- envIconFont :: TT. Font ,
234
- envNoteFont :: TT. Font ,
239
+ { envImg :: Img ,
240
+ envFont :: Font ,
235
241
envGroup :: [Group ]
236
242
}
237
243
deriving stock (Show , Generic )
238
244
245
+ data Font = Font
246
+ { fontHead :: TT. Font ,
247
+ fontIcon :: TT. Font ,
248
+ fontNote :: TT. Font
249
+ }
250
+ deriving stock (Show , Generic )
251
+
239
252
white :: CPT. PixelRGBA8
240
253
white = CP. PixelRGBA8 255 255 255 255
241
254
0 commit comments