blob: 6375997ef64034ae87beb34a06734e08458485c9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
module Chelleport.Draw where
import Chelleport.Context (DrawContext (ctxFont, ctxRenderer, ctxWindow))
import Data.Text (Text)
import Data.Word (Word8)
import Foreign.C (CInt)
import qualified SDL
import qualified SDL.Font as TTF
colorWhite :: SDL.V4 Word8
colorWhite = SDL.V4 255 255 255 255
colorLightGray :: SDL.V4 Word8
colorLightGray = SDL.V4 100 100 100 255
colorGridLines :: SDL.V4 Word8
colorGridLines = SDL.V4 127 29 29 150
colorAxisLines :: SDL.V4 Word8
colorAxisLines = SDL.V4 239 68 68 255
colorBackground :: SDL.V4 Word8
colorBackground = SDL.V4 15 12 25 0
renderText :: DrawContext -> SDL.V2 CInt -> SDL.V4 Word8 -> Text -> IO (CInt, CInt)
renderText ctx position color text = do
surface <- TTF.blended (ctxFont ctx) color text
texture <- SDL.createTextureFromSurface (ctxRenderer ctx) surface
SDL.freeSurface surface
-- Get text dimensions
textureInfo <- SDL.queryTexture texture
let textWidth = SDL.textureWidth textureInfo
let textHeight = SDL.textureHeight textureInfo
-- Render the texture
SDL.copy (ctxRenderer ctx) texture Nothing $
Just (SDL.Rectangle (SDL.P position) (SDL.V2 textWidth textHeight))
SDL.destroyTexture texture
pure (textWidth, textHeight)
drawHorizontalLine :: DrawContext -> CInt -> IO ()
drawHorizontalLine ctx x = do
(SDL.V2 width _height) <- SDL.get $ SDL.windowSize $ ctxWindow ctx
SDL.drawLine (ctxRenderer ctx) (SDL.P $ SDL.V2 0 x) (SDL.P $ SDL.V2 width x)
drawVerticalLine :: DrawContext -> CInt -> IO ()
drawVerticalLine ctx x = do
(SDL.V2 _width height) <- SDL.get $ SDL.windowSize $ ctxWindow ctx
SDL.drawLine (ctxRenderer ctx) (SDL.P $ SDL.V2 x 0) (SDL.P $ SDL.V2 x height)
|