aboutsummaryrefslogtreecommitdiff
path: root/src/Chelleport/OCR.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Chelleport/OCR.hs')
-rw-r--r--src/Chelleport/OCR.hs18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/Chelleport/OCR.hs b/src/Chelleport/OCR.hs
index f6bc5b9..ef9dc9e 100644
--- a/src/Chelleport/OCR.hs
+++ b/src/Chelleport/OCR.hs
@@ -1,6 +1,7 @@
module Chelleport.OCR (MonadOCR (..)) where
import Chelleport.Types
+import Control.Concurrent (threadDelay)
import Control.Monad.IO.Class (MonadIO (liftIO))
import Control.Monad.RWS (MonadReader (ask))
import qualified Data.ByteString as BS
@@ -9,7 +10,6 @@ import Foreign.C (CInt, CString, newCString)
import GHC.IO.Handle.FD (withFile)
import GHC.IO.IOMode (IOMode (WriteMode))
import qualified Graphics.X11 as X11
-import qualified SDL
import System.Directory (removeFile)
import System.IO (hPutStrLn)
import System.IO.Temp (emptySystemTempFile)
@@ -18,16 +18,20 @@ foreign import ccall unsafe "libchelleport.h findWordCoordinates"
c_getAllWordCoordinates :: CString -> Ptr CInt -> IO (Ptr OCRMatch)
class (Monad m) => MonadOCR m where
- getWordsOnScreen :: m [OCRMatch]
+ captureScreenshot :: (CInt, CInt) -> (CInt, CInt) -> m FilePath
+ getWordsInImage :: FilePath -> m [OCRMatch]
instance (MonadIO m) => MonadOCR (AppM m) where
- getWordsOnScreen = do
+ captureScreenshot (x, y) (width, height) = do
ctx <- ask
- SDL.V2 width height <- SDL.get . SDL.windowSize . ctxWindow $ ctx
- SDL.V2 x y <- SDL.getWindowAbsolutePosition . ctxWindow $ ctx
liftIO $ do
- imgFilePath <- liftIO $ createTemporaryScreenshot ctx (x, y) (width, height)
- findWordCoordinates imgFilePath <* removeFile imgFilePath
+ threadDelay 20_000
+ path <- createTemporaryScreenshot ctx (x, y) (width, height)
+ threadDelay 20_000
+ pure path
+
+ getWordsInImage filePath = do
+ liftIO $ findWordCoordinates filePath <* removeFile filePath
findWordCoordinates :: String -> IO [OCRMatch]
findWordCoordinates imgPath = alloca $ \sizePtr -> do