diff options
| author | Neil <nyamatongwe@gmail.com> | 2021-03-16 20:33:48 +1100 |
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2021-03-16 20:33:48 +1100 |
| commit | 4ac2ffc2fe88b80ad44fe495ff71912bceb4375a (patch) | |
| tree | b13d81af15e4760b2c324b46e71488042d82125b /include | |
| parent | 6b8e88d2181b8dae0f0902bbdbb758ff584ded86 (diff) | |
| download | scintilla-mirror-4ac2ffc2fe88b80ad44fe495ff71912bceb4375a.tar.gz | |
Moved Platform.h to src as it is private to Scintilla.
Diffstat (limited to 'include')
| -rw-r--r-- | include/Platform.h | 579 |
1 files changed, 0 insertions, 579 deletions
diff --git a/include/Platform.h b/include/Platform.h deleted file mode 100644 index 628611132..000000000 --- a/include/Platform.h +++ /dev/null @@ -1,579 +0,0 @@ -// Scintilla source code edit control -/** @file Platform.h - ** Interface to platform facilities. Also includes some basic utilities. - ** Implemented in PlatGTK.cxx for GTK+/Linux, PlatWin.cxx for Windows, and PlatWX.cxx for wxWindows. - **/ -// Copyright 1998-2009 by Neil Hodgson <neilh@scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef PLATFORM_H -#define PLATFORM_H - -// PLAT_GTK = GTK+ on Linux or Win32 -// PLAT_GTK_WIN32 is defined additionally when running PLAT_GTK under Win32 -// PLAT_WIN = Win32 API on Win32 OS -// PLAT_WX is wxWindows on any supported platform -// PLAT_TK = Tcl/TK on Linux or Win32 - -#define PLAT_GTK 0 -#define PLAT_GTK_WIN32 0 -#define PLAT_GTK_MACOSX 0 -#define PLAT_MACOSX 0 -#define PLAT_WIN 0 -#define PLAT_WX 0 -#define PLAT_QT 0 -#define PLAT_FOX 0 -#define PLAT_CURSES 0 -#define PLAT_TK 0 -#define PLAT_HAIKU 0 - -#if defined(FOX) -#undef PLAT_FOX -#define PLAT_FOX 1 - -#elif defined(__WX__) -#undef PLAT_WX -#define PLAT_WX 1 - -#elif defined(CURSES) -#undef PLAT_CURSES -#define PLAT_CURSES 1 - -#elif defined(__HAIKU__) -#undef PLAT_HAIKU -#define PLAT_HAIKU 1 - -#elif defined(SCINTILLA_QT) -#undef PLAT_QT -#define PLAT_QT 1 - -#elif defined(TK) -#undef PLAT_TK -#define PLAT_TK 1 - -#elif defined(GTK) -#undef PLAT_GTK -#define PLAT_GTK 1 - -#if defined(__WIN32__) || defined(_MSC_VER) -#undef PLAT_GTK_WIN32 -#define PLAT_GTK_WIN32 1 -#endif - -#if defined(__APPLE__) -#undef PLAT_GTK_MACOSX -#define PLAT_GTK_MACOSX 1 -#endif - -#elif defined(__APPLE__) - -#undef PLAT_MACOSX -#define PLAT_MACOSX 1 - -#else -#undef PLAT_WIN -#define PLAT_WIN 1 - -#endif - -namespace Scintilla { - -typedef float XYPOSITION; -typedef double XYACCUMULATOR; - -// Underlying the implementation of the platform classes are platform specific types. -// Sometimes these need to be passed around by client code so they are defined here - -typedef void *FontID; -typedef void *SurfaceID; -typedef void *WindowID; -typedef void *MenuID; -typedef void *TickerID; -typedef void *Function; -typedef void *IdlerID; - -/** - * A geometric point class. - * Point is similar to the Win32 POINT and GTK+ GdkPoint types. - */ -class Point { -public: - XYPOSITION x; - XYPOSITION y; - - constexpr explicit Point(XYPOSITION x_=0, XYPOSITION y_=0) noexcept : x(x_), y(y_) { - } - - static constexpr Point FromInts(int x_, int y_) noexcept { - return Point(static_cast<XYPOSITION>(x_), static_cast<XYPOSITION>(y_)); - } - - constexpr bool operator!=(Point other) const noexcept { - return (x != other.x) || (y != other.y); - } - - constexpr Point operator+(Point other) const noexcept { - return Point(x + other.x, y + other.y); - } - - constexpr Point operator-(Point other) const noexcept { - return Point(x - other.x, y - other.y); - } - - // Other automatically defined methods (assignment, copy constructor, destructor) are fine -}; - -/** - * A geometric rectangle class. - * PRectangle is similar to Win32 RECT. - * PRectangles contain their top and left sides, but not their right and bottom sides. - */ -class PRectangle { -public: - XYPOSITION left; - XYPOSITION top; - XYPOSITION right; - XYPOSITION bottom; - - constexpr explicit PRectangle(XYPOSITION left_=0, XYPOSITION top_=0, XYPOSITION right_=0, XYPOSITION bottom_ = 0) noexcept : - left(left_), top(top_), right(right_), bottom(bottom_) { - } - - static constexpr PRectangle FromInts(int left_, int top_, int right_, int bottom_) noexcept { - return PRectangle(static_cast<XYPOSITION>(left_), static_cast<XYPOSITION>(top_), - static_cast<XYPOSITION>(right_), static_cast<XYPOSITION>(bottom_)); - } - - // Other automatically defined methods (assignment, copy constructor, destructor) are fine - - constexpr bool operator==(const PRectangle &rc) const noexcept { - return (rc.left == left) && (rc.right == right) && - (rc.top == top) && (rc.bottom == bottom); - } - constexpr bool Contains(Point pt) const noexcept { - return (pt.x >= left) && (pt.x <= right) && - (pt.y >= top) && (pt.y <= bottom); - } - constexpr bool ContainsWholePixel(Point pt) const noexcept { - // Does the rectangle contain all of the pixel to left/below the point - return (pt.x >= left) && ((pt.x+1) <= right) && - (pt.y >= top) && ((pt.y+1) <= bottom); - } - constexpr bool Contains(PRectangle rc) const noexcept { - return (rc.left >= left) && (rc.right <= right) && - (rc.top >= top) && (rc.bottom <= bottom); - } - constexpr bool Intersects(PRectangle other) const noexcept { - return (right > other.left) && (left < other.right) && - (bottom > other.top) && (top < other.bottom); - } - void Move(XYPOSITION xDelta, XYPOSITION yDelta) noexcept { - left += xDelta; - top += yDelta; - right += xDelta; - bottom += yDelta; - } - constexpr XYPOSITION Width() const noexcept { return right - left; } - constexpr XYPOSITION Height() const noexcept { return bottom - top; } - constexpr bool Empty() const noexcept { - return (Height() <= 0) || (Width() <= 0); - } -}; - -/** - * Holds an RGB colour with 8 bits for each component. - */ -constexpr const float componentMaximum = 255.0f; -class ColourDesired { - int co; -public: - constexpr explicit ColourDesired(int co_=0) noexcept : co(co_) { - } - - constexpr ColourDesired(unsigned int red, unsigned int green, unsigned int blue) noexcept : - co(red | (green << 8) | (blue << 16)) { - } - - constexpr bool operator==(const ColourDesired &other) const noexcept { - return co == other.co; - } - - constexpr int AsInteger() const noexcept { - return co; - } - - // Red, green and blue values as bytes 0..255 - constexpr unsigned char GetRed() const noexcept { - return co & 0xff; - } - constexpr unsigned char GetGreen() const noexcept { - return (co >> 8) & 0xff; - } - constexpr unsigned char GetBlue() const noexcept { - return (co >> 16) & 0xff; - } - - // Red, green and blue values as float 0..1.0 - constexpr float GetRedComponent() const noexcept { - return GetRed() / componentMaximum; - } - constexpr float GetGreenComponent() const noexcept { - return GetGreen() / componentMaximum; - } - constexpr float GetBlueComponent() const noexcept { - return GetBlue() / componentMaximum; - } -}; - -/** -* Holds an RGBA colour. -*/ -class ColourAlpha : public ColourDesired { -public: - constexpr explicit ColourAlpha(int co_ = 0) noexcept : ColourDesired(co_) { - } - - constexpr ColourAlpha(unsigned int red, unsigned int green, unsigned int blue) noexcept : - ColourDesired(red | (green << 8) | (blue << 16)) { - } - - constexpr ColourAlpha(unsigned int red, unsigned int green, unsigned int blue, unsigned int alpha) noexcept : - ColourDesired(red | (green << 8) | (blue << 16) | (alpha << 24)) { - } - - constexpr ColourAlpha(ColourDesired cd, unsigned int alpha) noexcept : - ColourDesired(cd.AsInteger() | (alpha << 24)) { - } - - constexpr ColourDesired GetColour() const noexcept { - return ColourDesired(AsInteger() & 0xffffff); - } - - constexpr unsigned char GetAlpha() const noexcept { - return (AsInteger() >> 24) & 0xff; - } - - constexpr float GetAlphaComponent() const noexcept { - return GetAlpha() / componentMaximum; - } - - constexpr ColourAlpha MixedWith(ColourAlpha other) const noexcept { - const unsigned int red = (GetRed() + other.GetRed()) / 2; - const unsigned int green = (GetGreen() + other.GetGreen()) / 2; - const unsigned int blue = (GetBlue() + other.GetBlue()) / 2; - const unsigned int alpha = (GetAlpha() + other.GetAlpha()) / 2; - return ColourAlpha(red, green, blue, alpha); - } -}; - -/** -* Holds an element of a gradient with an RGBA colour and a relative position. -*/ -class ColourStop { -public: - float position; - ColourAlpha colour; - ColourStop(float position_, ColourAlpha colour_) noexcept : - position(position_), colour(colour_) { - } -}; - -/** - * Font management. - */ - -struct FontParameters { - const char *faceName; - float size; - int weight; - bool italic; - int extraFontFlag; - int technology; - int characterSet; - - FontParameters( - const char *faceName_, - float size_=10, - int weight_=400, - bool italic_=false, - int extraFontFlag_=0, - int technology_=0, - int characterSet_=0) noexcept : - - faceName(faceName_), - size(size_), - weight(weight_), - italic(italic_), - extraFontFlag(extraFontFlag_), - technology(technology_), - characterSet(characterSet_) - { - } - -}; - -class Font { -protected: - FontID fid; -public: - Font() noexcept; - // Deleted so Font objects can not be copied - Font(const Font &) = delete; - Font(Font &&) = delete; - Font &operator=(const Font &) = delete; - Font &operator=(Font &&) = delete; - virtual ~Font(); - - virtual void Create(const FontParameters &fp); - virtual void Release(); - - FontID GetID() const noexcept { return fid; } - // Alias another font - caller guarantees not to Release - void SetID(FontID fid_) noexcept { fid = fid_; } - friend class Surface; - friend class SurfaceImpl; -}; - -class IScreenLine { -public: - virtual std::string_view Text() const = 0; - virtual size_t Length() const = 0; - virtual size_t RepresentationCount() const = 0; - virtual XYPOSITION Width() const = 0; - virtual XYPOSITION Height() const = 0; - virtual XYPOSITION TabWidth() const = 0; - virtual XYPOSITION TabWidthMinimumPixels() const = 0; - virtual const Font *FontOfPosition(size_t position) const = 0; - virtual XYPOSITION RepresentationWidth(size_t position) const = 0; - virtual XYPOSITION TabPositionAfter(XYPOSITION xPosition) const = 0; -}; - -struct Interval { - XYPOSITION left; - XYPOSITION right; -}; - -class IScreenLineLayout { -public: - virtual ~IScreenLineLayout() = default; - virtual size_t PositionFromX(XYPOSITION xDistance, bool charPosition) = 0; - virtual XYPOSITION XFromPosition(size_t caretPosition) = 0; - virtual std::vector<Interval> FindRangeIntervals(size_t start, size_t end) = 0; -}; - -/** - * A surface abstracts a place to draw. - */ -class Surface { -public: - Surface() noexcept = default; - Surface(const Surface &) = delete; - Surface(Surface &&) = delete; - Surface &operator=(const Surface &) = delete; - Surface &operator=(Surface &&) = delete; - virtual ~Surface() {} - static Surface *Allocate(int technology); - - virtual void Init(WindowID wid)=0; - virtual void Init(SurfaceID sid, WindowID wid)=0; - virtual void InitPixMap(int width, int height, Surface *surface_, WindowID wid)=0; - - virtual void Release()=0; - virtual bool Initialised()=0; - virtual void PenColour(ColourDesired fore)=0; - virtual int LogPixelsY()=0; - virtual int DeviceHeightFont(int points)=0; - virtual void MoveTo(int x_, int y_)=0; - virtual void LineTo(int x_, int y_)=0; - virtual void Polygon(Point *pts, size_t npts, ColourDesired fore, ColourDesired back)=0; - virtual void RectangleDraw(PRectangle rc, ColourDesired fore, ColourDesired back)=0; - virtual void FillRectangle(PRectangle rc, ColourDesired back)=0; - virtual void FillRectangle(PRectangle rc, Surface &surfacePattern)=0; - virtual void RoundedRectangle(PRectangle rc, ColourDesired fore, ColourDesired back)=0; - virtual void AlphaRectangle(PRectangle rc, int cornerSize, ColourDesired fill, int alphaFill, - ColourDesired outline, int alphaOutline, int flags)=0; - enum class GradientOptions { leftToRight, topToBottom }; - virtual void GradientRectangle(PRectangle rc, const std::vector<ColourStop> &stops, GradientOptions options)=0; - virtual void DrawRGBAImage(PRectangle rc, int width, int height, const unsigned char *pixelsImage) = 0; - virtual void Ellipse(PRectangle rc, ColourDesired fore, ColourDesired back)=0; - virtual void Copy(PRectangle rc, Point from, Surface &surfaceSource)=0; - - virtual std::unique_ptr<IScreenLineLayout> Layout(const IScreenLine *screenLine) = 0; - - virtual void DrawTextNoClip(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, ColourDesired fore, ColourDesired back) = 0; - virtual void DrawTextClipped(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, ColourDesired fore, ColourDesired back) = 0; - virtual void DrawTextTransparent(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, ColourDesired fore) = 0; - virtual void MeasureWidths(Font &font_, std::string_view text, XYPOSITION *positions) = 0; - virtual XYPOSITION WidthText(Font &font_, std::string_view text) = 0; - virtual XYPOSITION Ascent(Font &font_)=0; - virtual XYPOSITION Descent(Font &font_)=0; - virtual XYPOSITION InternalLeading(Font &font_)=0; - virtual XYPOSITION Height(Font &font_)=0; - virtual XYPOSITION AverageCharWidth(Font &font_)=0; - - virtual void SetClip(PRectangle rc)=0; - virtual void FlushCachedState()=0; - - virtual void SetUnicodeMode(bool unicodeMode_)=0; - virtual void SetDBCSMode(int codePage)=0; - virtual void SetBidiR2L(bool bidiR2L_)=0; -}; - -/** - * Class to hide the details of window manipulation. - * Does not own the window which will normally have a longer life than this object. - */ -class Window { -protected: - WindowID wid; -public: - Window() noexcept : wid(nullptr), cursorLast(cursorInvalid) { - } - Window(const Window &source) = delete; - Window(Window &&) = delete; - Window &operator=(WindowID wid_) noexcept { - wid = wid_; - cursorLast = cursorInvalid; - return *this; - } - Window &operator=(const Window &) = delete; - Window &operator=(Window &&) = delete; - virtual ~Window(); - WindowID GetID() const noexcept { return wid; } - bool Created() const noexcept { return wid != nullptr; } - void Destroy(); - PRectangle GetPosition() const; - void SetPosition(PRectangle rc); - void SetPositionRelative(PRectangle rc, const Window *relativeTo); - PRectangle GetClientPosition() const; - void Show(bool show=true); - void InvalidateAll(); - void InvalidateRectangle(PRectangle rc); - virtual void SetFont(Font &font); - enum Cursor { cursorInvalid, cursorText, cursorArrow, cursorUp, cursorWait, cursorHoriz, cursorVert, cursorReverseArrow, cursorHand }; - void SetCursor(Cursor curs); - PRectangle GetMonitorRect(Point pt); -private: - Cursor cursorLast; -}; - -/** - * Listbox management. - */ - -// ScintillaBase implements IListBoxDelegate to receive ListBoxEvents from a ListBox - -struct ListBoxEvent { - enum class EventType { selectionChange, doubleClick } event; - ListBoxEvent(EventType event_) noexcept : event(event_) { - } -}; - -class IListBoxDelegate { -public: - virtual void ListNotify(ListBoxEvent *plbe)=0; -}; - -class ListBox : public Window { -public: - ListBox() noexcept; - ~ListBox() override; - static ListBox *Allocate(); - - void SetFont(Font &font) override =0; - virtual void Create(Window &parent, int ctrlID, Point location, int lineHeight_, bool unicodeMode_, int technology_)=0; - virtual void SetAverageCharWidth(int width)=0; - virtual void SetVisibleRows(int rows)=0; - virtual int GetVisibleRows() const=0; - virtual PRectangle GetDesiredRect()=0; - virtual int CaretFromEdge()=0; - virtual void Clear()=0; - virtual void Append(char *s, int type = -1)=0; - virtual int Length()=0; - virtual void Select(int n)=0; - virtual int GetSelection()=0; - virtual int Find(const char *prefix)=0; - virtual void GetValue(int n, char *value, int len)=0; - virtual void RegisterImage(int type, const char *xpm_data)=0; - virtual void RegisterRGBAImage(int type, int width, int height, const unsigned char *pixelsImage) = 0; - virtual void ClearRegisteredImages()=0; - virtual void SetDelegate(IListBoxDelegate *lbDelegate)=0; - virtual void SetList(const char* list, char separator, char typesep)=0; -}; - -/** - * Menu management. - */ -class Menu { - MenuID mid; -public: - Menu() noexcept; - MenuID GetID() const noexcept { return mid; } - void CreatePopUp(); - void Destroy(); - void Show(Point pt, Window &w); -}; - -/** - * Dynamic Library (DLL/SO/...) loading - */ -class DynamicLibrary { -public: - virtual ~DynamicLibrary() = default; - - /// @return Pointer to function "name", or NULL on failure. - virtual Function FindFunction(const char *name) = 0; - - /// @return true if the library was loaded successfully. - virtual bool IsValid() = 0; - - /// @return An instance of a DynamicLibrary subclass with "modulePath" loaded. - static DynamicLibrary *Load(const char *modulePath); -}; - -#if defined(__clang__) -# if __has_feature(attribute_analyzer_noreturn) -# define CLANG_ANALYZER_NORETURN __attribute__((analyzer_noreturn)) -# else -# define CLANG_ANALYZER_NORETURN -# endif -#else -# define CLANG_ANALYZER_NORETURN -#endif - -/** - * Platform class used to retrieve system wide parameters such as double click speed - * and chrome colour. Not a creatable object, more of a module with several functions. - */ -class Platform { -public: - Platform() = default; - Platform(const Platform &) = delete; - Platform(Platform &&) = delete; - Platform &operator=(const Platform &) = delete; - Platform &operator=(Platform &&) = delete; - ~Platform() = default; - static ColourDesired Chrome(); - static ColourDesired ChromeHighlight(); - static const char *DefaultFont(); - static int DefaultFontSize(); - static unsigned int DoubleClickTime(); - static void DebugDisplay(const char *s); - static constexpr long LongFromTwoShorts(short a,short b) noexcept { - return (a) | ((b) << 16); - } - - static void DebugPrintf(const char *format, ...); - static bool ShowAssertionPopUps(bool assertionPopUps_); - static void Assert(const char *c, const char *file, int line) CLANG_ANALYZER_NORETURN; -}; - -#ifdef NDEBUG -#define PLATFORM_ASSERT(c) ((void)0) -#else -#define PLATFORM_ASSERT(c) ((c) ? (void)(0) : Scintilla::Platform::Assert(#c, __FILE__, __LINE__)) -#endif - -} - -#endif |
