Fix background update race, speed up rendering!
This commit is contained in:
parent
906dc08d3e
commit
de1dc32b33
1 changed files with 28 additions and 18 deletions
|
@ -208,18 +208,23 @@ updatePanels dispvar = do
|
|||
let screen = defaultScreen disp
|
||||
visual = defaultVisual disp screen
|
||||
|
||||
buffer <- liftIO $ withDimension area $ Util.createXlibSurface disp pixmap visual
|
||||
xbuffer <- liftIO $ withDimension area $ Util.createXlibSurface disp pixmap visual
|
||||
|
||||
renderWith buffer $ do
|
||||
withPatternForSurface rootImage $ \pattern -> do
|
||||
save
|
||||
translate (-(fromIntegral $ rect_x area)) (-(fromIntegral $ rect_y area))
|
||||
setSource pattern
|
||||
paint
|
||||
restore
|
||||
Widget.renderWidgets layoutedWidgets $ panelScreenArea panel
|
||||
liftIO $ (withDimension area $ withSimilarSurface xbuffer ContentColor) $ \buffer -> do
|
||||
renderWith buffer $ do
|
||||
withPatternForSurface rootImage $ \pattern -> do
|
||||
save
|
||||
translate (-(fromIntegral $ rect_x area)) (-(fromIntegral $ rect_y area))
|
||||
setSource pattern
|
||||
paint
|
||||
restore
|
||||
Widget.renderWidgets layoutedWidgets $ panelScreenArea panel
|
||||
renderWith xbuffer $ do
|
||||
withPatternForSurface buffer $ \pattern -> do
|
||||
setSource pattern
|
||||
paint
|
||||
|
||||
surfaceFinish buffer
|
||||
surfaceFinish xbuffer
|
||||
|
||||
-- copy buffer to window
|
||||
liftIO $ do
|
||||
|
@ -266,14 +271,19 @@ updateRootImage disp = do
|
|||
|
||||
bg <- gets phiRootImage
|
||||
|
||||
when (pixmap /= 0) $ do
|
||||
rootSurface <- liftIO $ Util.createXlibSurface disp pixmap visual (fromIntegral rootWidth) (fromIntegral rootHeight)
|
||||
case pixmap of
|
||||
0 -> do
|
||||
renderWith bg $ do
|
||||
setSourceRGB 0 0 0
|
||||
paint
|
||||
_ -> do
|
||||
rootSurface <- liftIO $ Util.createXlibSurface disp pixmap visual (fromIntegral rootWidth) (fromIntegral rootHeight)
|
||||
|
||||
renderWith bg $ withPatternForSurface rootSurface $ \pattern -> do
|
||||
setSource pattern
|
||||
paint
|
||||
renderWith bg $ withPatternForSurface rootSurface $ \pattern -> do
|
||||
setSource pattern
|
||||
paint
|
||||
|
||||
surfaceFinish rootSurface
|
||||
surfaceFinish rootSurface
|
||||
|
||||
|
||||
createPanel :: Display -> Window -> [Widget.WidgetState] -> Rectangle -> PhiX PanelState
|
||||
|
|
Reference in a new issue