Skip to content

Commit bf99a0d

Browse files
committed
functora:card config refactoring
1 parent 9f8b27f commit bf99a0d

File tree

2 files changed

+66
-50
lines changed

2 files changed

+66
-50
lines changed

pub/functora/cfg/card.toml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
[img]
12
dpi = 96
23
width = 2100.0
34
height = 1200.0
45
padding = 10.0
5-
headFont = "./fonts/larabiefont.ttf"
6-
iconFont = "./fonts/devicons.ttf"
7-
noteFont = "./fonts/rondo.ttf"
6+
7+
[font]
8+
head = "./fonts/larabiefont.ttf"
9+
icon = "./fonts/devicons.ttf"
10+
note = "./fonts/rondo.ttf"
811

912
[[group]]
1013
[[group.item]]

pub/functora/src/card/Functora/Card.hs

Lines changed: 60 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,19 @@ main = withUtf8 $ do
2626
CliTextConf txt _ -> forM txt unToml
2727
CliFileConf loc _ -> forM loc $ readFile >=> unToml
2828
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
3232
CP.writePng "./img/functora.png"
3333
$ mkCard
3434
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+
},
4242
envGroup = cfgGroup cfg
4343
}
4444

@@ -52,9 +52,9 @@ mkFont =
5252
mkCard :: Env -> CP.Image CP.PixelRGBA8
5353
mkCard env =
5454
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)
5858
white
5959
. forM_ (zip [0 ..] $ envGroup env)
6060
. uncurry
@@ -64,11 +64,11 @@ mkGroup :: Env -> Int -> Int -> Group -> R.Drawing CPT.PixelRGBA8 ()
6464
mkGroup env amt idx (Group items) =
6565
foldM_ (mkItem env offX) 0 items
6666
where
67-
pad = envPadding env
67+
pad = env ^. #envImg . #imgPadding
6868
offX =
6969
pad
7070
+ unsafeFrom @Int @Float idx
71-
* (envWidth env / unsafeFrom @Int @Float amt)
71+
* (env ^. #envImg . #imgWidth / unsafeFrom @Int @Float amt)
7272

7373
mkItem ::
7474
Env ->
@@ -78,9 +78,9 @@ mkItem ::
7878
R.Drawing CPT.PixelRGBA8 Float
7979
mkItem env offX offY item =
8080
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
8484
Qr -> mkQr env offX offY item
8585
where
8686
next = item & #itemData %~ mkHex . from @Text @String
@@ -96,17 +96,14 @@ mkText env offX offY item font = do
9696
R.withTexture black
9797
. R.printTextAt
9898
font
99-
(TT.pixelSizeInPointAtDpi size $ envDpi env)
99+
(TT.pixelSizeInPointAtDpi size $ env ^. #envImg . #imgDpi)
100100
(R.V2 offX offN)
101101
$ from @Text @String text
102102
pure offN
103103
where
104104
text = itemData item
105105
size = itemSize item
106-
offN =
107-
offY
108-
+ envPadding env
109-
+ size
106+
offN = offY + env ^. #envImg . #imgPadding + size
110107

111108
mkQr ::
112109
Env ->
@@ -116,9 +113,9 @@ mkQr ::
116113
R.Drawing CPT.PixelRGBA8 Float
117114
mkQr env offX offY item = do
118115
R.drawImage img 0 $ R.V2 offX offY
119-
pure $ offY + envPadding env + px
116+
pure $ offY + env ^. #envImg . #imgPadding + size
120117
where
121-
px = itemSize item
118+
size = itemSize item
122119
qr =
123120
fromMaybe (error "Can not generate qr!")
124121
. QR.encodeAutomatic
@@ -127,16 +124,11 @@ mkQr env offX offY item = do
127124
$ itemData item
128125
img =
129126
CPT.promoteImage
130-
$ QRJP.toImage 0 (round px `div` QR.qrImageSize qr) qr
127+
$ QRJP.toImage 0 (round size `div` QR.qrImageSize qr) qr
131128

132129
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,
140132
cfgGroup :: [Group]
141133
}
142134
deriving stock
@@ -152,23 +144,42 @@ data Cfg = Cfg
152144
)
153145
via GenericType Cfg
154146

155-
data RowOrCol
156-
= Row
157-
| Col
147+
data Img = Img
148+
{ imgDpi :: Int,
149+
imgWidth :: Float,
150+
imgHeight :: Float,
151+
imgPadding :: Float
152+
}
158153
deriving stock
159154
( Eq,
160155
Ord,
161156
Show,
162157
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
166177
)
167178
deriving
168179
( HasCodec,
169180
HasItemCodec
170181
)
171-
via GenericEnum RowOrCol
182+
via GenericType CfgFont
172183

173184
newtype Group = Group
174185
{ groupItem :: [Item]
@@ -225,17 +236,19 @@ data ItemKind
225236
via GenericEnum ItemKind
226237

227238
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,
235241
envGroup :: [Group]
236242
}
237243
deriving stock (Show, Generic)
238244

245+
data Font = Font
246+
{ fontHead :: TT.Font,
247+
fontIcon :: TT.Font,
248+
fontNote :: TT.Font
249+
}
250+
deriving stock (Show, Generic)
251+
239252
white :: CPT.PixelRGBA8
240253
white = CP.PixelRGBA8 255 255 255 255
241254

0 commit comments

Comments
 (0)