aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ScintillaBase.cxx23
-rw-r--r--src/ViewStyle.cxx5
-rw-r--r--src/ViewStyle.h1
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;