diff options
author | Martijn Laan <unknown> | 2024-07-03 09:44:24 +1000 |
---|---|---|
committer | Martijn Laan <unknown> | 2024-07-03 09:44:24 +1000 |
commit | ed0aed7dc463ee5c0f2b7c0989e231cce2c835b8 (patch) | |
tree | 8126eeae8b3bee2a00b9a2df89a23c4f2763cb4f /src | |
parent | 2b69fbaf70f6a05269d96b2703acfe49ef7f03a1 (diff) | |
download | scintilla-mirror-ed0aed7dc463ee5c0f2b7c0989e231cce2c835b8.tar.gz |
Feature [feature-requests:#1523]. SCI_AUTOCSETSTYLE sets autocompletion font.
Diffstat (limited to 'src')
-rw-r--r-- | src/ScintillaBase.cxx | 23 | ||||
-rw-r--r-- | src/ViewStyle.cxx | 5 | ||||
-rw-r--r-- | src/ViewStyle.h | 1 |
3 files changed, 25 insertions, 4 deletions
diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index c66a689b7..1b19802f9 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -10,6 +10,7 @@ #include <cstdint> #include <cassert> #include <cstring> +#include <cmath> #include <stdexcept> #include <string> @@ -273,8 +274,16 @@ void ScintillaBase::AutoCompleteStart(Sci::Position lenEntered, const char *list ac.options, }; + int lineHeight; + if (vs.autocStyle != StyleDefault) { + AutoSurface surfaceMeasure(this); + lineHeight = static_cast<int>(std::lround(surfaceMeasure->Height(vs.styles[vs.autocStyle].font.get()))); + } else { + lineHeight = vs.lineHeight; + } + ac.Start(wMain, idAutoComplete, sel.MainCaret(), PointMainCaret(), - lenEntered, vs.lineHeight, IsUnicodeMode(), technology, options); + lenEntered, lineHeight, IsUnicodeMode(), technology, options); const PRectangle rcClient = GetClientRectangle(); Point pt = LocationFromPosition(sel.MainCaret() - lenEntered); @@ -307,8 +316,8 @@ void ScintillaBase::AutoCompleteStart(Sci::Position lenEntered, const char *list rcac.right = rcac.left + widthLB; rcac.bottom = static_cast<XYPOSITION>(std::min(static_cast<int>(rcac.top) + heightLB, static_cast<int>(rcPopupBounds.bottom))); ac.lb->SetPositionRelative(rcac, &wMain); - ac.lb->SetFont(vs.styles[StyleDefault].font.get()); - const int aveCharWidth = static_cast<int>(vs.styles[StyleDefault].aveCharWidth); + ac.lb->SetFont(vs.styles[vs.autocStyle].font.get()); + const int aveCharWidth = static_cast<int>(vs.styles[vs.autocStyle].aveCharWidth); ac.lb->SetAverageCharWidth(aveCharWidth); ac.lb->SetDelegate(this); @@ -941,6 +950,14 @@ sptr_t ScintillaBase::WndProc(Message iMessage, uptr_t wParam, sptr_t lParam) { case Message::AutoCGetMaxWidth: return maxListWidth; + case Message::AutoCSetStyle: + vs.autocStyle = static_cast<int>(wParam); + InvalidateStyleRedraw(); + break; + + case Message::AutoCGetStyle: + return vs.autocStyle; + case Message::RegisterImage: ac.lb->RegisterImage(static_cast<int>(wParam), ConstCharPtrFromSPtr(lParam)); break; diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx index b22666cf0..f20645251 100644 --- a/src/ViewStyle.cxx +++ b/src/ViewStyle.cxx @@ -252,6 +252,8 @@ ViewStyle::ViewStyle(size_t stylesSize_) : ctrlCharPadding = 3; // +3 For a blank on front and rounded edge each side lastSegItalicsOffset = 2; + autocStyle = StyleDefault; + localeName = localeNameDefault; } @@ -792,7 +794,8 @@ FontRealised *ViewStyle::Find(const FontSpecification &fs) { void ViewStyle::FindMaxAscentDescent() noexcept { for (size_t i = 0; i < styles.size(); i++) { - if (i == StyleCallTip) + if (i == StyleCallTip || + (autocStyle != StyleDefault && i == static_cast<size_t>(autocStyle))) continue; const auto &style = styles[i]; diff --git a/src/ViewStyle.h b/src/ViewStyle.h index 19a853121..6985e3f03 100644 --- a/src/ViewStyle.h +++ b/src/ViewStyle.h @@ -179,6 +179,7 @@ public: int marginNumberPadding; // the right-side padding of the number margin int ctrlCharPadding; // the padding around control character text blobs int lastSegItalicsOffset; // the offset so as not to clip italic characters at EOLs + int autocStyle; using ElementMap = std::map<Scintilla::Element, ColourOptional>; ElementMap elementColours; |