diff options
-rw-r--r-- | jterm.hs | 13 |
1 files changed, 7 insertions, 6 deletions
@@ -138,15 +138,16 @@ drawWin :: MVar Buffer -> Display -> Drawable -> XftColor -> XftColor -> XftColo drawWin bufVar display win bgcolour fgcolour linecolour selcolour font = do buf <- readMVar bufVar (_, _, _, n, m, _, _) <- getGeometry display win - resizePty (pty buf) (fromIntegral n `div` fromIntegral width, fromIntegral m `div` fromIntegral height) + let chwidth = fromIntegral n `div` fromIntegral width + chheight = fromIntegral m `div` fromIntegral height + resizePty (pty buf) (chwidth, chheight) bracket (createGC display win) (freeGC display) $ \gc -> do bracket (createPixmap display win n m (defaultDepthOfScreen (defaultScreenOfDisplay display))) (freePixmap display) $ \p -> do withXftDraw display p (defaultVisualOfScreen (defaultScreenOfDisplay display)) (defaultColormap display 0) $ \draw -> do xftDrawRect draw bgcolour (0 :: Int) (0 :: Int) n m -- Get rope covering window area - let winlines = fromIntegral m `div` fromIntegral height - let (pre, R.splitAtLine winlines -> (vis, _)) = R.splitAtLine (pos buf) (content buf) + let (pre, R.splitAtLine (fromIntegral chheight) -> (vis, _)) = R.splitAtLine (pos buf) (content buf) -- relative cursor position let (s, e) = cursor buf @@ -158,9 +159,9 @@ drawWin bufVar display win bgcolour fgcolour linecolour selcolour font = do Position l2 c2 = R.lengthAsPosition (presel <> sel) xftDrawRect draw linecolour (0 :: Int) (l1 * fromIntegral height + 4) n height - drawRope False draw fgcolour bgcolour 0 height (R.lines presel) - drawRope True draw fgcolour selcolour (fromIntegral c1 * width) (fromIntegral (l1 + 1) * height) (R.lines sel) - drawRope False draw fgcolour bgcolour (fromIntegral c2 * width) (fromIntegral (l2 + 1) * height) (R.lines postsel) + drawRope False draw fgcolour bgcolour 0 height (map (T.take chwidth) $ R.lines presel) + drawRope True draw fgcolour selcolour (fromIntegral c1 * width) (fromIntegral (l1 + 1) * height) (map (T.take chwidth) $ R.lines sel) + drawRope False draw fgcolour bgcolour (fromIntegral c2 * width) (fromIntegral (l2 + 1) * height) (map (T.take chwidth) $ R.lines postsel) copyArea display p win gc 0 0 n m 0 0 where drawRope :: Bool -> XftDraw -> XftColor -> XftColor -> Int -> Int -> [Text] -> IO () |