diff options
-rw-r--r-- | cocoa/PlatCocoa.h | 1 | ||||
-rw-r--r-- | cocoa/PlatCocoa.mm | 14 | ||||
-rwxr-xr-x | gtk/PlatGTK.cxx | 14 | ||||
-rw-r--r-- | include/Scintilla.h | 1 | ||||
-rw-r--r-- | include/Scintilla.iface | 1 | ||||
-rw-r--r-- | qt/ScintillaEditBase/PlatQt.cpp | 13 | ||||
-rw-r--r-- | qt/ScintillaEditBase/PlatQt.h | 1 | ||||
-rw-r--r-- | src/Editor.cxx | 5 | ||||
-rw-r--r-- | src/Platform.h | 1 | ||||
-rw-r--r-- | win32/PlatWin.cxx | 19 | ||||
-rw-r--r-- | win32/deps.mak | 2 | ||||
-rw-r--r-- | win32/nmdeps.mak | 2 |
12 files changed, 72 insertions, 2 deletions
diff --git a/cocoa/PlatCocoa.h b/cocoa/PlatCocoa.h index 0117fcc15..18d339536 100644 --- a/cocoa/PlatCocoa.h +++ b/cocoa/PlatCocoa.h @@ -79,6 +79,7 @@ public: CGContextRef GetContext() { return gc; } void Release() noexcept override; + int Supports(int feature) noexcept override; bool Initialised() override; void PenColour(ColourDesired fore) override; diff --git a/cocoa/PlatCocoa.mm b/cocoa/PlatCocoa.mm index 2f8778d11..33c24397f 100644 --- a/cocoa/PlatCocoa.mm +++ b/cocoa/PlatCocoa.mm @@ -319,6 +319,10 @@ void GetPositions(CTLineRef line, std::vector<CGFloat> &positions) { positions.begin(), std::plus<CGFloat>()); } +const int SupportsCocoa[] = { + SC_SUPPORTS_LINE_DRAWS_FINAL, +}; + } //----------------- SurfaceImpl -------------------------------------------------------------------- @@ -452,6 +456,16 @@ void SurfaceImpl::InitPixMap(int width, int height, Surface *surface_, WindowID //-------------------------------------------------------------------------------------------------- +int SurfaceImpl::Supports(int feature) noexcept { + for (const int f : SupportsCocoa) { + if (f == feature) + return 1; + } + return 0; +} + +//-------------------------------------------------------------------------------------------------- + void SurfaceImpl::PenColour(ColourDesired fore) { if (gc) { ColourDesired colour(fore.AsInteger()); diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx index 6aed67ba5..19b25294b 100755 --- a/gtk/PlatGTK.cxx +++ b/gtk/PlatGTK.cxx @@ -151,6 +151,7 @@ public: void Clear() noexcept; void Release() noexcept override; + int Supports(int feature) noexcept override; bool Initialised() override; void PenColour(ColourDesired fore) override; int LogPixelsY() override; @@ -190,6 +191,11 @@ public: void SetDBCSMode(int codePage) override; void SetBidiR2L(bool bidiR2L_) override; }; + +const int SupportsGTK[] = { + SC_SUPPORTS_LINE_DRAWS_FINAL, +}; + } const char *CharacterSetID(int characterSet) noexcept { @@ -367,6 +373,14 @@ void SurfaceImpl::InitPixMap(int width, int height, Surface *surface_, WindowID et = surfImpl->et; } +int SurfaceImpl::Supports(int feature) noexcept { + for (const int f : SupportsGTK) { + if (f == feature) + return 1; + } + return 0; +} + void SurfaceImpl::PenColour(ColourDesired fore) { if (context) { const ColourDesired cdFore(fore.AsInteger()); diff --git a/include/Scintilla.h b/include/Scintilla.h index 0e61d0bbc..d586e8fe8 100644 --- a/include/Scintilla.h +++ b/include/Scintilla.h @@ -1018,6 +1018,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, #define SCI_EOLANNOTATIONGETVISIBLE 2746 #define SCI_EOLANNOTATIONSETSTYLEOFFSET 2747 #define SCI_EOLANNOTATIONGETSTYLEOFFSET 2748 +#define SC_SUPPORTS_LINE_DRAWS_FINAL 0 #define SCI_SUPPORTSFEATURE 2750 #define SCI_STARTRECORD 3001 #define SCI_STOPRECORD 3002 diff --git a/include/Scintilla.iface b/include/Scintilla.iface index 1fca9bf32..44d00500b 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -2876,6 +2876,7 @@ set void EOLAnnotationSetStyleOffset=2747(int style,) get int EOLAnnotationGetStyleOffset=2748(,) enu Supports=SC_SUPPORTS_ +val SC_SUPPORTS_LINE_DRAWS_FINAL=0 # Get whether a feature is supported get int SupportsFeature=2750(Supports feature,) diff --git a/qt/ScintillaEditBase/PlatQt.cpp b/qt/ScintillaEditBase/PlatQt.cpp index 52cb54bf7..b7d0e3a53 100644 --- a/qt/ScintillaEditBase/PlatQt.cpp +++ b/qt/ScintillaEditBase/PlatQt.cpp @@ -133,6 +133,10 @@ public: namespace { +const int SupportsQt[] = { + SC_SUPPORTS_LINE_DRAWS_FINAL, +}; + const FontAndCharacterSet *AsFontAndCharacterSet(const Font *f) { return dynamic_cast<const FontAndCharacterSet *>(f); } @@ -205,6 +209,15 @@ void SurfaceImpl::Release() noexcept Clear(); } +int SurfaceImpl::Supports(int feature) noexcept +{ + for (const int f : SupportsQt) { + if (f == feature) + return 1; + } + return 0; +} + bool SurfaceImpl::Initialised() { return device != nullptr; diff --git a/qt/ScintillaEditBase/PlatQt.h b/qt/ScintillaEditBase/PlatQt.h index 844418343..ae0994b32 100644 --- a/qt/ScintillaEditBase/PlatQt.h +++ b/qt/ScintillaEditBase/PlatQt.h @@ -90,6 +90,7 @@ public: Surface *surface, WindowID wid) override; void Release() noexcept override; + int Supports(int feature) noexcept override; bool Initialised() override; void PenColour(ColourDesired fore) override; int LogPixelsY() override; diff --git a/src/Editor.cxx b/src/Editor.cxx index 2001eafaf..5877239f0 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -5190,8 +5190,9 @@ void Editor::QueueIdleWork(WorkItems items, Sci::Position upTo) { workNeeded.Need(items, upTo); } -int Editor::SupportsFeature(int /* feature */) { - return 0; +int Editor::SupportsFeature(int feature) { + AutoSurface surface(this); + return surface->Supports(feature); } bool Editor::PaintContains(PRectangle rc) { diff --git a/src/Platform.h b/src/Platform.h index f65a4e1db..8075f0ec6 100644 --- a/src/Platform.h +++ b/src/Platform.h @@ -180,6 +180,7 @@ public: virtual void InitPixMap(int width, int height, Surface *surface_, WindowID wid)=0; virtual void Release() noexcept=0; + virtual int Supports(int feature) noexcept=0; virtual bool Initialised()=0; virtual void PenColour(ColourDesired fore)=0; virtual int LogPixelsY()=0; diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx index f7520ad9a..452bb49bc 100644 --- a/win32/PlatWin.cxx +++ b/win32/PlatWin.cxx @@ -48,6 +48,7 @@ #include "Debugging.h" #include "Geometry.h" #include "Platform.h" +#include "Scintilla.h" #include "XPM.h" #include "UniConversion.h" #include "DBCS.h" @@ -477,6 +478,7 @@ public: void InitPixMap(int width, int height, Surface *surface_, WindowID wid) override; void Release() noexcept override; + int Supports(int feature) noexcept override; bool Initialised() override; void PenColour(ColourDesired fore) override; int LogPixelsY() override; @@ -559,6 +561,10 @@ void SurfaceGDI::Release() noexcept { Clear(); } +int SurfaceGDI::Supports(int /* feature */) noexcept { + return 0; +} + bool SurfaceGDI::Initialised() { return hdc != 0; } @@ -1108,6 +1114,10 @@ constexpr D2D1_RECT_F RectangleFromPRectangle(PRectangle rc) noexcept { return { rc.left, rc.top, rc.right, rc.bottom }; } +const int SupportsD2D[] = { + SC_SUPPORTS_LINE_DRAWS_FINAL, +}; + } class BlobInline; @@ -1152,6 +1162,7 @@ public: void InitPixMap(int width, int height, Surface *surface_, WindowID wid) override; void Release() noexcept override; + int Supports(int feature) noexcept override; bool Initialised() override; HRESULT FlushDrawing(); @@ -1248,6 +1259,14 @@ void SurfaceD2D::SetScale(WindowID wid) noexcept { logPixelsY = DpiForWindow(wid); } +int SurfaceD2D::Supports(int feature) noexcept { + for (const int f : SupportsD2D) { + if (f == feature) + return 1; + } + return 0; +} + bool SurfaceD2D::Initialised() { return pRenderTarget != nullptr; } diff --git a/win32/deps.mak b/win32/deps.mak index af07609e1..3939a81fd 100644 --- a/win32/deps.mak +++ b/win32/deps.mak @@ -8,6 +8,8 @@ PlatWin.o: \ ../src/Debugging.h \ ../src/Geometry.h \ ../src/Platform.h \ + ../include/Scintilla.h \ + ../include/Sci_Position.h \ ../src/XPM.h \ ../src/UniConversion.h \ ../src/DBCS.h \ diff --git a/win32/nmdeps.mak b/win32/nmdeps.mak index d9ba665f5..1e72661fc 100644 --- a/win32/nmdeps.mak +++ b/win32/nmdeps.mak @@ -8,6 +8,8 @@ $(DIR_O)/PlatWin.obj: \ ../src/Debugging.h \ ../src/Geometry.h \ ../src/Platform.h \ + ../include/Scintilla.h \ + ../include/Sci_Position.h \ ../src/XPM.h \ ../src/UniConversion.h \ ../src/DBCS.h \ |