Browse Source

Linux window SHM repainting fix.

tags/2021-05-28
jules 12 years ago
parent
commit
cb5ea1573b
1 changed files with 7 additions and 6 deletions
  1. +7
    -6
      modules/juce_gui_basics/native/juce_linux_Windowing.cpp

+ 7
- 6
modules/juce_gui_basics/native/juce_linux_Windowing.cpp View File

@@ -1789,7 +1789,7 @@ private:
: peer (p), lastTimeImageUsed (0) : peer (p), lastTimeImageUsed (0)
{ {
#if JUCE_USE_XSHM #if JUCE_USE_XSHM
shmCompletedDrawing = true;
shmPaintsPending = 0;
useARGBImagesForRendering = XSHMHelpers::isShmAvailable(); useARGBImagesForRendering = XSHMHelpers::isShmAvailable();
@@ -1811,7 +1811,7 @@ private:
void timerCallback() void timerCallback()
{ {
#if JUCE_USE_XSHM #if JUCE_USE_XSHM
if (! shmCompletedDrawing)
if (shmPaintsPending != 0)
return; return;
#endif #endif
@@ -1838,7 +1838,7 @@ private:
void performAnyPendingRepaintsNow() void performAnyPendingRepaintsNow()
{ {
#if JUCE_USE_XSHM #if JUCE_USE_XSHM
if (! shmCompletedDrawing)
if (shmPaintsPending != 0)
{ {
startTimer (repaintTimerPeriod); startTimer (repaintTimerPeriod);
return; return;
@@ -1888,7 +1888,7 @@ private:
for (const Rectangle<int>* i = originalRepaintRegion.begin(), * const e = originalRepaintRegion.end(); i != e; ++i) for (const Rectangle<int>* i = originalRepaintRegion.begin(), * const e = originalRepaintRegion.end(); i != e; ++i)
{ {
#if JUCE_USE_XSHM #if JUCE_USE_XSHM
shmCompletedDrawing = false;
++shmPaintsPending;
#endif #endif
static_cast<XBitmapImage*> (image.getPixelData()) static_cast<XBitmapImage*> (image.getPixelData())
@@ -1903,7 +1903,7 @@ private:
} }
#if JUCE_USE_XSHM #if JUCE_USE_XSHM
void notifyPaintCompleted() { shmCompletedDrawing = true; }
void notifyPaintCompleted() noexcept { --shmPaintsPending; }
#endif #endif
private: private:
@@ -1915,7 +1915,8 @@ private:
RectangleList regionsNeedingRepaint; RectangleList regionsNeedingRepaint;
#if JUCE_USE_XSHM #if JUCE_USE_XSHM
bool useARGBImagesForRendering, shmCompletedDrawing;
bool useARGBImagesForRendering;
int shmPaintsPending;
#endif #endif
JUCE_DECLARE_NON_COPYABLE (LinuxRepaintManager) JUCE_DECLARE_NON_COPYABLE (LinuxRepaintManager)
}; };


Loading…
Cancel
Save