diff options
author | Neil Hodgson <nyamatongwe@gmail.com> | 2018-05-21 15:20:08 +1000 |
---|---|---|
committer | Neil Hodgson <nyamatongwe@gmail.com> | 2018-05-21 15:20:08 +1000 |
commit | e0e105ea1559874a5a9097461d0d7933cb5cbbb4 (patch) | |
tree | 1cc61922e17beb3d98c7b689544dbdd36cbdde23 | |
parent | 521ef7054806424c97dac5ee71b3a05ed5b9d7f4 (diff) | |
download | scintilla-mirror-e0e105ea1559874a5a9097461d0d7933cb5cbbb4.tar.gz |
Remove CGContextRef field in QuartzTextLayout as it is only used in draw method
where it can easily be provided. Retaining a CGContextRef in QuartzTextLayout
could lead to it being used after being invalidated.
-rw-r--r-- | cocoa/PlatCocoa.mm | 7 | ||||
-rw-r--r-- | cocoa/QuartzTextLayout.h | 20 |
2 files changed, 8 insertions, 19 deletions
diff --git a/cocoa/PlatCocoa.mm b/cocoa/PlatCocoa.mm index 75c386f76..1141cca44 100644 --- a/cocoa/PlatCocoa.mm +++ b/cocoa/PlatCocoa.mm @@ -127,7 +127,7 @@ SurfaceImpl::SurfaceImpl() { y = 0; gc = NULL; - textLayout.reset(new QuartzTextLayout(nullptr)); + textLayout.reset(new QuartzTextLayout()); codePage = 0; verticalDeviceResolution = 0; @@ -147,7 +147,6 @@ SurfaceImpl::~SurfaceImpl() { //-------------------------------------------------------------------------------------------------- void SurfaceImpl::Clear() { - textLayout->setContext(nullptr); if (bitmapData) { bitmapData.reset(); // We only "own" the graphics context if we are a bitmap context @@ -193,7 +192,6 @@ void SurfaceImpl::Init(SurfaceID sid, WindowID) { Release(); gc = static_cast<CGContextRef>(sid); CGContextSetLineWidth(gc, 1.0); - textLayout->setContext(gc); } //-------------------------------------------------------------------------------------------------- @@ -229,7 +227,6 @@ void SurfaceImpl::InitPixMap(int width, int height, Surface *surface_, WindowID // and we have no use for the bitmap without the context bitmapData.reset(); } - textLayout->setContext(gc); // the context retains the color space, so we can release it CGColorSpaceRelease(colorSpace); @@ -863,7 +860,7 @@ void SurfaceImpl::DrawTextTransparent(PRectangle rc, Font &font_, XYPOSITION yba CGColorRelease(color); textLayout->setText(text, encoding, *style); - textLayout->draw(rc.left, ybase); + textLayout->draw(gc, rc.left, ybase); } //-------------------------------------------------------------------------------------------------- diff --git a/cocoa/QuartzTextLayout.h b/cocoa/QuartzTextLayout.h index c33231176..a3ed910de 100644 --- a/cocoa/QuartzTextLayout.h +++ b/cocoa/QuartzTextLayout.h @@ -18,12 +18,8 @@ class QuartzTextLayout { public: - /** Create a text layout for drawing on the specified context. */ - explicit QuartzTextLayout(CGContextRef context) { - mString = NULL; - mLine = NULL; - stringLength = 0; - setContext(context); + /** Create a text layout for drawing. */ + QuartzTextLayout() : mString(NULL), mLine(NULL), stringLength(0) { } ~QuartzTextLayout() { @@ -58,11 +54,12 @@ public: CFRelease(str); } - /** Draw the text layout into the current CGContext at the specified position. + /** Draw the text layout into a CGContext at the specified position. + * @param gc The CGContext in which to draw the text. * @param x The x axis position to draw the baseline in the current CGContext. * @param y The y axis position to draw the baseline in the current CGContext. */ - void draw(float x, float y) { - if (mLine == NULL) + void draw(CGContextRef gc, float x, float y) { + if (!mLine) return; ::CGContextSetTextMatrix(gc, CGAffineTransformMakeScale(1.0, -1.0)); @@ -89,12 +86,7 @@ public: return stringLength; } - inline void setContext(CGContextRef context) { - gc = context; - } - private: - CGContextRef gc; CFAttributedStringRef mString; CTLineRef mLine; CFIndex stringLength; |