From a56c48cda877fcd87a850ffed33a63be96c0796a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Medra=C3=B1o=20Calvo?= Date: Fri, 26 Oct 2018 12:00:00 +0000 Subject: Coalesce duplicate code --- generic/tkbltGrText.C | 53 +++++++++++++++++---------------------------------- 1 file changed, 18 insertions(+), 35 deletions(-) diff --git a/generic/tkbltGrText.C b/generic/tkbltGrText.C index 1bed069..6f42ba3 100644 --- a/generic/tkbltGrText.C +++ b/generic/tkbltGrText.C @@ -78,32 +78,13 @@ TextStyle::~TextStyle() free(ops_); } -void TextStyle::drawText(Drawable drawable, const char *text, int x, int y) -{ - TextStyleOptions* ops = (TextStyleOptions*)ops_; - - if (!text || !(*text)) - return; - - if (!gc_) - resetStyle(); - - int w1, h1; - Tk_TextLayout layout = Tk_ComputeTextLayout(ops->font, text, -1, -1, - ops->justify, 0, &w1, &h1); - Point2d rr = rotateText(x, y, w1, h1); -#if (TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION >= 6) - TkDrawAngledTextLayout(graphPtr_->display_, drawable, gc_, layout, - (int)rr.x, (int)rr.y, - ops->angle, 0, -1); -#else - Tk_DrawTextLayout(graphPtr_->display_, drawable, gc_, layout, - rr.x, rr.y, 0, -1); -#endif +void TextStyle::drawText(Drawable drawable, const char *text, double x, double y) { + drawText(drawable, text, (int)x, (int)y); } -void TextStyle::drawText(Drawable drawable, const char *text, double x, double y) { - return drawText(drawable, text, (int)x, (int)y); +void TextStyle::drawText(Drawable drawable, const char *text, int x, int y) +{ + drawTextBBox(drawable, text, x, y, NULL, NULL); } void TextStyle::drawText2(Drawable drawable, const char *text, @@ -129,19 +110,21 @@ void TextStyle::drawText2(Drawable drawable, const char *text, (int)rr.x, (int)rr.y, 0, -1); #endif - double angle = fmod(ops->angle, 360.0); - if (angle < 0.0) - angle += 360.0; + if (ww && hh) { + double angle = fmod(ops->angle, 360.0); + if (angle < 0.0) + angle += 360.0; - if (angle != 0.0) { - double rotWidth, rotHeight; - graphPtr_->getBoundingBox(w1, h1, angle, &rotWidth, &rotHeight, NULL); - w1 = (int)rotWidth; - h1 = (int)rotHeight; - } + if (angle != 0.0) { + double rotWidth, rotHeight; + graphPtr_->getBoundingBox(w1, h1, angle, &rotWidth, &rotHeight, NULL); + w1 = (int)rotWidth; + h1 = (int)rotHeight; + } - *ww = w1; - *hh = h1; + *ww = w1; + *hh = h1; + } } void TextStyle::printText(PSOutput* psPtr, const char *text, int x, int y) -- cgit v0.12 From e86c3d4ae2c1259394d504b374abeeba918d8e25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Medra=C3=B1o=20Calvo?= Date: Fri, 26 Oct 2018 12:00:00 +0000 Subject: Improve drawTextBBox name --- generic/tkbltGrAxis.C | 8 ++++---- generic/tkbltGrText.C | 4 ++-- generic/tkbltGrText.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/generic/tkbltGrAxis.C b/generic/tkbltGrAxis.C index 738acc3..be3e995 100644 --- a/generic/tkbltGrAxis.C +++ b/generic/tkbltGrAxis.C @@ -685,7 +685,7 @@ void Axis::drawLimits(Drawable drawable) ops->limitsTextStyle.anchor = TK_ANCHOR_SE; int ww, hh; - ts.drawText2(drawable, maxPtr, graphPtr_->right_, hMax, &ww, &hh); + ts.drawTextBBox(drawable, maxPtr, graphPtr_->right_, hMax, &ww, &hh); hMax -= (hh + spacing); } else { @@ -693,7 +693,7 @@ void Axis::drawLimits(Drawable drawable) ops->limitsTextStyle.anchor = TK_ANCHOR_NW; int ww, hh; - ts.drawText2(drawable, maxPtr, vMax, graphPtr_->top_, &ww, &hh); + ts.drawTextBBox(drawable, maxPtr, vMax, graphPtr_->top_, &ww, &hh); vMax += (ww + spacing); } } @@ -704,14 +704,14 @@ void Axis::drawLimits(Drawable drawable) ops->limitsTextStyle.angle = 90.0; int ww, hh; - ts.drawText2(drawable, minPtr, graphPtr_->left_, hMin, &ww, &hh); + ts.drawTextBBox(drawable, minPtr, graphPtr_->left_, hMin, &ww, &hh); hMin -= (hh + spacing); } else { ops->limitsTextStyle.angle = 0.0; int ww, hh; - ts.drawText2(drawable, minPtr, vMin, graphPtr_->bottom_, &ww, &hh); + ts.drawTextBBox(drawable, minPtr, vMin, graphPtr_->bottom_, &ww, &hh); vMin += (ww + spacing); } } diff --git a/generic/tkbltGrText.C b/generic/tkbltGrText.C index 6f42ba3..b5c3671 100644 --- a/generic/tkbltGrText.C +++ b/generic/tkbltGrText.C @@ -87,8 +87,8 @@ void TextStyle::drawText(Drawable drawable, const char *text, int x, int y) drawTextBBox(drawable, text, x, y, NULL, NULL); } -void TextStyle::drawText2(Drawable drawable, const char *text, - int x, int y, int* ww, int* hh) +void TextStyle::drawTextBBox(Drawable drawable, const char *text, + int x, int y, int* ww, int* hh) { TextStyleOptions* ops = (TextStyleOptions*)ops_; diff --git a/generic/tkbltGrText.h b/generic/tkbltGrText.h index 4337e81..4593b33 100644 --- a/generic/tkbltGrText.h +++ b/generic/tkbltGrText.h @@ -69,7 +69,7 @@ namespace Blt { void* ops() {return ops_;} void drawText(Drawable, const char*, int, int); void drawText(Drawable, const char*, double, double); - void drawText2(Drawable, const char*, int, int, int*, int*); + void drawTextBBox(Drawable, const char*, int, int, int*, int*); void printText(PSOutput*, const char*, int, int); void printText(PSOutput*, const char*, double, double); void getExtents(const char*, int*, int*); -- cgit v0.12 From 6b41ee3cff858ded8d6af891e7725211ea0aba98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Medra=C3=B1o=20Calvo?= Date: Fri, 26 Oct 2018 12:00:00 +0000 Subject: Correct memory leak A future improvement would be to cache the calculated layout information together with of the strings. Examples where this would be beneficial could be the axes tick labels or the legend labels. --- generic/tkbltGrText.C | 1 + 1 file changed, 1 insertion(+) diff --git a/generic/tkbltGrText.C b/generic/tkbltGrText.C index b5c3671..0b4e3e3 100644 --- a/generic/tkbltGrText.C +++ b/generic/tkbltGrText.C @@ -109,6 +109,7 @@ void TextStyle::drawTextBBox(Drawable drawable, const char *text, Tk_DrawTextLayout(graphPtr_->display_, drawable, gc_, layout, (int)rr.x, (int)rr.y, 0, -1); #endif + Tk_FreeTextLayout(layout); if (ww && hh) { double angle = fmod(ops->angle, 360.0); -- cgit v0.12