[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Discuss-gnuradio] Patch to fix crash on Mac OS X, when calling MemoryDC
From: |
Elvis Dowson |
Subject: |
[Discuss-gnuradio] Patch to fix crash on Mac OS X, when calling MemoryDC.GetMultiLineTextExtent with no associated bitmap |
Date: |
Tue, 21 Sep 2010 13:17:18 +0400 |
Hi,
Here is a patch to fix an issue with gr-wxgui running on Mac OS X,
where calls to MemoryDC.GetMultiLineTextExtent fails if there is no bitmap
associated with the MemoryDC, prior to calls to GetMultiLineTextExtent.
The workaround is to create a 1x1 bitmap, get the text extent, and then delete
the old bitmap and create a new bitmap with the newly computed text extent.
It doesn't seem like a good solution from a performance stand-point, but the
wxWidgets guys say that its the only way to do this. It doesn't crash on Linux,
but on Mac OS X.
Here is the link to the issue tracker: http://trac.wxwidgets.org/ticket/12486
diff --git a/gr-wxgui/src/python/plotter/gltext.py
b/gr-wxgui/src/python/plotter/gltext.py
index 1b3c047..65d6da0 100644
--- a/gr-wxgui/src/python/plotter/gltext.py
+++ b/gr-wxgui/src/python/plotter/gltext.py
@@ -146,8 +146,12 @@ class TextElement(object):
DRAWBACK of the whole conversion thing is a really long time for
creating the
texture. If you see any optimizations that could save time PLEASE
CREATE A PATCH!!!
"""
- # get a memory dc
- dc = wx.MemoryDC()
+ # get a memory dc
+ # Remark: We need to ensure that a bitmap is associated with the
MemoryDC before
+ # making calls to GetMultiLineTextExtent or GetTextExtent.
+ dc = wx.MemoryDC()
+ bmp = wx.EmptyBitmap(1,1)
+ dc.SelectObject(bmp)
# set our font
dc.SetFont(self._font)
@@ -157,11 +161,18 @@ class TextElement(object):
# sucker gains compared to sizes not of the power of 2. It's
like
# 500ms --> 0.5ms (on my ATI-GPU powered Notebook). On Sams
nvidia
# machine there don't seem to occur any losses...bad drivers?
- ow, oh = dc.GetMultiLineTextExtent(self._text)[:2]
+ ow, oh = dc.GetMultiLineTextExtent(self._text)[:2]
+
+ # Delete the temporary 1x1 bitmap.
+ del bmp
+
+ # Compute the width and height of the display text
w, h = self._getUpper2Base(ow), self._getUpper2Base(oh)
self._text_size = wx.Size(ow,oh)
- self._texture_size = wx.Size(w,h)
+ self._texture_size = wx.Size(w,h)
+
+ # Create a new bitmap with the computed width and height of the display
text.
bmp = wx.EmptyBitmap(w,h)
Best regards,
Elvis
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Discuss-gnuradio] Patch to fix crash on Mac OS X, when calling MemoryDC.GetMultiLineTextExtent with no associated bitmap,
Elvis Dowson <=