diff options
-rw-r--r-- | src/CallTip.cxx | 16 | ||||
-rw-r--r-- | src/CallTip.h | 4 | ||||
-rw-r--r-- | src/ScintillaBase.cxx | 12 |
3 files changed, 9 insertions, 23 deletions
diff --git a/src/CallTip.cxx b/src/CallTip.cxx index 9fb1b535c..0596214bf 100644 --- a/src/CallTip.cxx +++ b/src/CallTip.cxx @@ -272,24 +272,14 @@ void CallTip::MouseClick(Point pt) noexcept { } PRectangle CallTip::CallTipStart(Sci::Position pos, Point pt, int textHeight, const char *defn, - const char *faceName, int size, - int codePage_, CharacterSet characterSet, - Technology technology, - const char *localeName, - const Window &wParent) { + int codePage_, Surface *surfaceMeasure, std::shared_ptr<Font> font_) { clickPlace = 0; val = defn; codePage = codePage_; - std::unique_ptr<Surface> surfaceMeasure = Surface::Allocate(technology); - surfaceMeasure->Init(wParent.GetID()); - surfaceMeasure->SetMode(SurfaceMode(codePage, false)); highlight = Chunk(); inCallTipMode = true; posStartCallTip = pos; - const XYPOSITION deviceHeight = static_cast<XYPOSITION>(surfaceMeasure->DeviceHeightFont(size)); - const FontParameters fp(faceName, deviceHeight / FontSizeMultiplier, FontWeight::Normal, - false, FontQuality::QualityDefault, technology, characterSet, localeName); - font = Font::Allocate(fp); + font = font_; // Look for multiple lines in the text // Only support \n here - simply means container must avoid \r! const int numLines = 1 + static_cast<int>(std::count(val.begin(), val.end(), '\n')); @@ -300,7 +290,7 @@ PRectangle CallTip::CallTipStart(Sci::Position pos, Point pt, int textHeight, co #if !PLAT_CURSES widthArrow = lineHeight * 9 / 10; #endif - const int width = PaintContents(surfaceMeasure.get(), false) + insetX; + const int width = PaintContents(surfaceMeasure, false) + insetX; // The returned // rectangle is aligned to the right edge of the last arrow encountered in diff --git a/src/CallTip.h b/src/CallTip.h index dc1071baa..3f0e4f801 100644 --- a/src/CallTip.h +++ b/src/CallTip.h @@ -71,9 +71,7 @@ public: /// Setup the calltip and return a rectangle of the area required. PRectangle CallTipStart(Sci::Position pos, Point pt, int textHeight, const char *defn, - const char *faceName, int size, int codePage_, - Scintilla::CharacterSet characterSet, Scintilla::Technology technology, const char *localeName, - const Window &wParent); + int codePage_, Surface *surfaceMeasure, std::shared_ptr<Font> font_); void CallTipCancel() noexcept; diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index 566a55a3c..979a8b07f 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -465,22 +465,20 @@ void ScintillaBase::CallTipShow(Point pt, const char *defn) { // StyleDefault for the face name, size and character set. Also use it // for the foreground and background colour. const int ctStyle = ct.UseStyleCallTip() ? StyleCallTip : StyleDefault; + const Style &style = vs.styles[ctStyle]; if (ct.UseStyleCallTip()) { - ct.SetForeBack(vs.styles[StyleCallTip].fore, vs.styles[StyleCallTip].back); + ct.SetForeBack(style.fore, style.back); } if (wMargin.Created()) { pt = pt + GetVisibleOriginInMain(); } + AutoSurface surfaceMeasure(this); PRectangle rc = ct.CallTipStart(sel.MainCaret(), pt, vs.lineHeight, defn, - vs.styles[ctStyle].fontName, - vs.styles[ctStyle].sizeZoomed, CodePage(), - vs.styles[ctStyle].characterSet, - vs.technology, - vs.localeName.c_str(), - wMain); + surfaceMeasure, + style.font); // If the call-tip window would be out of the client // space const PRectangle rcClient = GetClientRectangle(); |