Skip to content

Commit 390b64e

Browse files
committed
better card config
1 parent bf99a0d commit 390b64e

File tree

2 files changed

+69
-41
lines changed

2 files changed

+69
-41
lines changed

pub/functora/cfg/card.toml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
[img]
22
dpi = 96
3-
width = 2100.0
4-
height = 1200.0
5-
padding = 10.0
3+
width = 2100
4+
height = 1200
5+
padding = 10
66

77
[font]
88
head = "./fonts/larabiefont.ttf"
@@ -13,42 +13,42 @@ note = "./fonts/rondo.ttf"
1313
[[group.item]]
1414
kind = "Head"
1515
data = "Functora"
16-
size = 50.0
16+
size = 50
1717
[[group.item]]
1818
kind = "Note"
1919
data = "Hi-end quality software development."
20-
size = 20.0
20+
size = 20
2121
[[group.item]]
2222
kind = "Note"
2323
data = "Reliable. Functional. Pure."
24-
size = 20.0
24+
size = 20
2525
[[group.item]]
2626
data = "0xe677"
2727
kind = "Icon"
28-
size = 300.0
28+
size = 300
2929
[[group.item]]
3030
data = "https://functora.github.io"
3131
kind = "Qr"
32-
size = 500.0
32+
size = 500
3333
[[group.item]]
3434
data = "https://functora.github.io"
3535
kind = "Note"
36-
size = 50.0
36+
size = 50
3737

3838
[[group]]
3939
[[group.item]]
4040
kind = "Head"
4141
data = "Converter Web"
42-
size = 50.0
42+
size = 50
4343
[[group.item]]
4444
data = "0xe636"
4545
kind = "Icon"
46-
size = 50.0
46+
size = 50
4747
[[group.item]]
4848
data = "https://functora.github.io/apps/currency-converter"
4949
kind = "Qr"
50-
size = 50.0
50+
size = 50
5151
[[group.item]]
5252
data = "https://functora.github.io/apps/currency-converter"
5353
kind = "Note"
54-
size = 50.0
54+
size = 50

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

Lines changed: 56 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -52,30 +52,34 @@ mkFont =
5252
mkCard :: Env -> CP.Image CP.PixelRGBA8
5353
mkCard env =
5454
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)
5858
white
5959
. forM_ (zip [0 ..] $ envGroup env)
6060
. uncurry
6161
$ mkGroup env (length $ envGroup env)
6262

6363
mkGroup :: Env -> Int -> Int -> Group -> R.Drawing CPT.PixelRGBA8 ()
6464
mkGroup env amt idx (Group items) =
65-
foldM_ (mkItem env offX) 0 items
65+
foldM_ (mkItem env offX) (Px 0) items
6666
where
67-
pad = env ^. #envImg . #imgPadding
67+
pad = via @Integer @Int @Rational $ env ^. #envImg . #imgPadding . #unPx
6868
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+
)
7276

7377
mkItem ::
7478
Env ->
75-
Float ->
76-
Float ->
79+
Px ->
80+
Px ->
7781
Item ->
78-
R.Drawing CPT.PixelRGBA8 Float
82+
R.Drawing CPT.PixelRGBA8 Px
7983
mkItem env offX offY item =
8084
case itemKind item of
8185
Head -> mkText env offX offY item $ env ^. #envFont . #fontHead
@@ -87,33 +91,42 @@ mkItem env offX offY item =
8791

8892
mkText ::
8993
Env ->
90-
Float ->
91-
Float ->
94+
Px ->
95+
Px ->
9296
Item ->
9397
TT.Font ->
94-
R.Drawing CPT.PixelRGBA8 Float
98+
R.Drawing CPT.PixelRGBA8 Px
9599
mkText env offX offY item font = do
96100
R.withTexture black
97101
. R.printTextAt
98102
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+
)
101111
$ from @Text @String text
102112
pure offN
103113
where
104114
text = itemData item
105115
size = itemSize item
106-
offN = offY + env ^. #envImg . #imgPadding + size
116+
offN = Px $ unPx offY + env ^. #envImg . #imgPadding . #unPx + unPx size
107117

108118
mkQr ::
109119
Env ->
110-
Float ->
111-
Float ->
120+
Px ->
121+
Px ->
112122
Item ->
113-
R.Drawing CPT.PixelRGBA8 Float
123+
R.Drawing CPT.PixelRGBA8 Px
114124
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
117130
where
118131
size = itemSize item
119132
qr =
@@ -124,7 +137,22 @@ mkQr env offX offY item = do
124137
$ itemData item
125138
img =
126139
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+
)
128156

129157
data Cfg = Cfg
130158
{ cfgImg :: Img,
@@ -145,10 +173,10 @@ data Cfg = Cfg
145173
via GenericType Cfg
146174

147175
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
152180
}
153181
deriving stock
154182
( Eq,
@@ -200,7 +228,7 @@ newtype Group = Group
200228
data Item = Item
201229
{ itemKind :: ItemKind,
202230
itemData :: Text,
203-
itemSize :: Float
231+
itemSize :: Px
204232
}
205233
deriving stock
206234
( Eq,

0 commit comments

Comments
 (0)