diff options
| author | Neil <nyamatongwe@gmail.com> | 2018-05-23 15:41:59 +1000 | 
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2018-05-23 15:41:59 +1000 | 
| commit | 7ee2a70c18f899a4845621622241adc578b0400c (patch) | |
| tree | 2f4f7b7a5869523ec8baae1751e39c0f1f7851b3 | |
| parent | 05845e8e5d1d934a16550f33099be89d189bfcad (diff) | |
| download | scintilla-mirror-7ee2a70c18f899a4845621622241adc578b0400c.tar.gz | |
Add definitions for bidirectional support to Platform.h and provide empty
implementations for each platform.
| -rw-r--r-- | cocoa/PlatCocoa.h | 4 | ||||
| -rw-r--r-- | cocoa/PlatCocoa.mm | 19 | ||||
| -rw-r--r-- | gtk/PlatGTK.cxx | 20 | ||||
| -rw-r--r-- | include/Platform.h | 23 | ||||
| -rw-r--r-- | qt/ScintillaEditBase/PlatQt.cpp | 19 | ||||
| -rw-r--r-- | qt/ScintillaEditBase/PlatQt.h | 5 | ||||
| -rw-r--r-- | win32/PlatWin.cxx | 41 | 
7 files changed, 131 insertions, 0 deletions
| diff --git a/cocoa/PlatCocoa.h b/cocoa/PlatCocoa.h index 940de83d5..bc80e9fce 100644 --- a/cocoa/PlatCocoa.h +++ b/cocoa/PlatCocoa.h @@ -98,6 +98,9 @@ public:  	void DrawRGBAImage(PRectangle rc, int width, int height, const unsigned char *pixelsImage) override;  	void Ellipse(PRectangle rc, ColourDesired fore, ColourDesired back) override;  	void Copy(PRectangle rc, Scintilla::Point from, Surface &surfaceSource) override; +	size_t PositionFromX(const IScreenLine *screenLine, XYPOSITION xDistance, bool charPosition) override; +	XYPOSITION XFromPosition(const IScreenLine *screenLine, size_t caretPosition) override; +	std::vector<Interval> FindRangeIntervals(const IScreenLine *screenLine, size_t start, size_t end) override;  	void DrawTextNoClip(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, ColourDesired fore,  			    ColourDesired back) override;  	void DrawTextClipped(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, ColourDesired fore, @@ -116,6 +119,7 @@ public:  	void SetUnicodeMode(bool unicodeMode_) override;  	void SetDBCSMode(int codePage_) override; +	void SetBidiR2L(bool bidiR2L_) override;  }; // SurfaceImpl class  } // Scintilla namespace diff --git a/cocoa/PlatCocoa.mm b/cocoa/PlatCocoa.mm index 7d7eafb42..62a0ba5f0 100644 --- a/cocoa/PlatCocoa.mm +++ b/cocoa/PlatCocoa.mm @@ -819,6 +819,22 @@ void SurfaceImpl::Copy(PRectangle rc, Scintilla::Point from, Surface &surfaceSou  //-------------------------------------------------------------------------------------------------- +// Bidirectional text support for Arabic and Hebrew not currently implemented on Cocoa. + +size_t SurfaceImpl::PositionFromX(const IScreenLine *, XYPOSITION, bool) { +	return 0; +} + +XYPOSITION SurfaceImpl::XFromPosition(const IScreenLine *, size_t) { +	return 0; +} + +std::vector<Interval> SurfaceImpl::FindRangeIntervals(const IScreenLine *, size_t, size_t) { +	return std::vector<Interval>(); +} + +//-------------------------------------------------------------------------------------------------- +  void SurfaceImpl::DrawTextNoClip(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text,  				 ColourDesired fore, ColourDesired back) {  	FillRectangle(rc, back); @@ -1034,6 +1050,9 @@ void SurfaceImpl::SetDBCSMode(int codePage_) {  		codePage = codePage_;  } +void SurfaceImpl::SetBidiR2L(bool) { +} +  Surface *Surface::Allocate(int) {  	return new SurfaceImpl();  } diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx index 0f5ea58d9..ce0863462 100644 --- a/gtk/PlatGTK.cxx +++ b/gtk/PlatGTK.cxx @@ -166,6 +166,10 @@ public:  	void Ellipse(PRectangle rc, ColourDesired fore, ColourDesired back) override;  	void Copy(PRectangle rc, Point from, Surface &surfaceSource) override; +	size_t PositionFromX(const IScreenLine *screenLine, XYPOSITION xDistance, bool charPosition) override; +	XYPOSITION XFromPosition(const IScreenLine *screenLine, size_t caretPosition) override; +	std::vector<Interval> FindRangeIntervals(const IScreenLine *screenLine, size_t start, size_t end) override; +  	void DrawTextBase(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, ColourDesired fore);  	void DrawTextNoClip(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, ColourDesired fore, ColourDesired back) override;  	void DrawTextClipped(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, ColourDesired fore, ColourDesired back) override; @@ -183,6 +187,7 @@ public:  	void SetUnicodeMode(bool unicodeMode_) override;  	void SetDBCSMode(int codePage) override; +	void SetBidiR2L(bool bidiR2L_) override;  };  } @@ -625,6 +630,18 @@ void SurfaceImpl::Copy(PRectangle rc, Point from, Surface &surfaceSource) {  	}  } +size_t SurfaceImpl::PositionFromX(const IScreenLine *, XYPOSITION, bool) { +	return 0; +} + +XYPOSITION SurfaceImpl::XFromPosition(const IScreenLine *, size_t) { +	return 0; +} + +std::vector<Interval> SurfaceImpl::FindRangeIntervals(const IScreenLine *, size_t, size_t) { +	return std::vector<Interval>(); +} +  std::string UTF8FromLatin1(std::string_view text) {  	std::string utfForm(text.length()*2 + 1, '\0');  	size_t lenU = 0; @@ -954,6 +971,9 @@ void SurfaceImpl::SetDBCSMode(int codePage) {  		et = dbcs;  } +void SurfaceImpl::SetBidiR2L(bool) { +} +  Surface *Surface::Allocate(int) {  	return new SurfaceImpl();  } diff --git a/include/Platform.h b/include/Platform.h index e83b8e5e5..9606ecab4 100644 --- a/include/Platform.h +++ b/include/Platform.h @@ -317,6 +317,24 @@ public:  	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; +}; + +struct Interval { +	XYPOSITION left; +	XYPOSITION right; +}; +  /**   * A surface abstracts a place to draw.   */ @@ -354,6 +372,10 @@ public:  	virtual void Ellipse(PRectangle rc, ColourDesired fore, ColourDesired back)=0;  	virtual void Copy(PRectangle rc, Point from, Surface &surfaceSource)=0; +	virtual size_t PositionFromX(const IScreenLine *screenLine, XYPOSITION xDistance, bool charPosition)=0; +	virtual XYPOSITION XFromPosition(const IScreenLine *screenLine, size_t caretPosition)=0; +	virtual std::vector<Interval> FindRangeIntervals(const IScreenLine *screenLine, size_t start, size_t end)=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; @@ -370,6 +392,7 @@ public:  	virtual void SetUnicodeMode(bool unicodeMode_)=0;  	virtual void SetDBCSMode(int codePage)=0; +	virtual void SetBidiR2L(bool bidiR2L_)=0;  };  /** diff --git a/qt/ScintillaEditBase/PlatQt.cpp b/qt/ScintillaEditBase/PlatQt.cpp index 44082c77a..917f35b3b 100644 --- a/qt/ScintillaEditBase/PlatQt.cpp +++ b/qt/ScintillaEditBase/PlatQt.cpp @@ -408,6 +408,21 @@ void SurfaceImpl::Copy(PRectangle rc, Point from, Surface &surfaceSource)  	GetPainter()->drawPixmap(rc.left, rc.top, *pixmap, from.x, from.y, -1, -1);  } +size_t SurfaceImpl::PositionFromX(const IScreenLine *, XYPOSITION, bool) +{ +	return 0; +} + +XYPOSITION SurfaceImpl::XFromPosition(const IScreenLine *, size_t) +{ +	return 0; +} + +std::vector<Interval> SurfaceImpl::FindRangeIntervals(const IScreenLine *, size_t, size_t) +{ +	return std::vector<Interval>(); +} +  void SurfaceImpl::DrawTextNoClip(PRectangle rc,                                   Font &font,                                   XYPOSITION ybase, @@ -565,6 +580,10 @@ void SurfaceImpl::SetDBCSMode(int codePage_)  	codePage = codePage_;  } +void SurfaceImpl::SetBidiR2L(bool) +{ +} +  QPaintDevice *SurfaceImpl::GetPaintDevice()  {  	return device; diff --git a/qt/ScintillaEditBase/PlatQt.h b/qt/ScintillaEditBase/PlatQt.h index 6baa12877..65a5e8be0 100644 --- a/qt/ScintillaEditBase/PlatQt.h +++ b/qt/ScintillaEditBase/PlatQt.h @@ -103,6 +103,10 @@ public:  		ColourDesired back) override;  	void Copy(PRectangle rc, Point from, Surface &surfaceSource) override; +	size_t PositionFromX(const IScreenLine *screenLine, XYPOSITION xDistance, bool charPosition) override; +	XYPOSITION XFromPosition(const IScreenLine *screenLine, size_t caretPosition) override; +	std::vector<Interval> FindRangeIntervals(const IScreenLine *screenLine, size_t start, size_t end) override; +  	void DrawTextNoClip(PRectangle rc, Font &font, XYPOSITION ybase,  		std::string_view text, ColourDesired fore, ColourDesired back) override;  	void DrawTextClipped(PRectangle rc, Font &font, XYPOSITION ybase, @@ -123,6 +127,7 @@ public:  	void SetUnicodeMode(bool unicodeMode_) override;  	void SetDBCSMode(int codePage_) override; +	void SetBidiR2L(bool bidiR2L_) override;  	void BrushColour(ColourDesired back);  	void SetCodec(Font &font); diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx index 81e5b827b..cdaea41e4 100644 --- a/win32/PlatWin.cxx +++ b/win32/PlatWin.cxx @@ -566,6 +566,10 @@ public:  	void Ellipse(PRectangle rc, ColourDesired fore, ColourDesired back) override;  	void Copy(PRectangle rc, Point from, Surface &surfaceSource) override; +	size_t PositionFromX(const IScreenLine *screenLine, XYPOSITION xDistance, bool charPosition) override; +	XYPOSITION XFromPosition(const IScreenLine *screenLine, size_t caretPosition) override; +	std::vector<Interval> FindRangeIntervals(const IScreenLine *screenLine, size_t start, size_t end) override; +  	void DrawTextCommon(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, UINT fuOptions);  	void DrawTextNoClip(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, ColourDesired fore, ColourDesired back) override;  	void DrawTextClipped(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, ColourDesired fore, ColourDesired back) override; @@ -583,6 +587,7 @@ public:  	void SetUnicodeMode(bool unicodeMode_) override;  	void SetDBCSMode(int codePage_) override; +	void SetBidiR2L(bool bidiR2L_) override;  };  SurfaceGDI::SurfaceGDI() : @@ -919,6 +924,18 @@ void SurfaceGDI::Copy(PRectangle rc, Point from, Surface &surfaceSource) {  		static_cast<int>(from.x), static_cast<int>(from.y), SRCCOPY);  } +size_t SurfaceGDI::PositionFromX(const IScreenLine *, XYPOSITION, bool) { +	return 0; +} + +XYPOSITION SurfaceGDI::XFromPosition(const IScreenLine *, size_t) { +	return 0; +} + +std::vector<Interval> SurfaceGDI::FindRangeIntervals(const IScreenLine *, size_t, size_t) { +	return std::vector<Interval>(); +} +  typedef VarBuffer<int, stackBufferLength> TextPositionsI;  void SurfaceGDI::DrawTextCommon(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, UINT fuOptions) { @@ -1072,6 +1089,9 @@ void SurfaceGDI::SetDBCSMode(int codePage_) {  	codePage = codePage_;  } +void SurfaceGDI::SetBidiR2L(bool) { +} +  #if defined(USE_D2D)  class SurfaceD2D : public Surface { @@ -1136,6 +1156,10 @@ public:  	void Ellipse(PRectangle rc, ColourDesired fore, ColourDesired back) override;  	void Copy(PRectangle rc, Point from, Surface &surfaceSource) override; +	size_t PositionFromX(const IScreenLine *screenLine, XYPOSITION xDistance, bool charPosition) override; +	XYPOSITION XFromPosition(const IScreenLine *screenLine, size_t caretPosition) override; +	std::vector<Interval> FindRangeIntervals(const IScreenLine *screenLine, size_t start, size_t end) override; +  	void DrawTextCommon(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, UINT fuOptions);  	void DrawTextNoClip(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, ColourDesired fore, ColourDesired back) override;  	void DrawTextClipped(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, ColourDesired fore, ColourDesired back) override; @@ -1153,6 +1177,7 @@ public:  	void SetUnicodeMode(bool unicodeMode_) override;  	void SetDBCSMode(int codePage_) override; +	void SetBidiR2L(bool bidiR2L_) override;  };  SurfaceD2D::SurfaceD2D() : @@ -1590,6 +1615,18 @@ void SurfaceD2D::Copy(PRectangle rc, Point from, Surface &surfaceSource) {  	}  } +size_t SurfaceD2D::PositionFromX(const IScreenLine *, XYPOSITION, bool) { +	return 0; +} + +XYPOSITION SurfaceD2D::XFromPosition(const IScreenLine *, size_t) { +	return 0; +} + +std::vector<Interval> SurfaceD2D::FindRangeIntervals(const IScreenLine *, size_t, size_t) { +	return std::vector<Interval>(); +} +  void SurfaceD2D::DrawTextCommon(PRectangle rc, Font &font_, XYPOSITION ybase, std::string_view text, UINT fuOptions) {  	SetFont(font_); @@ -1806,6 +1843,10 @@ void SurfaceD2D::SetDBCSMode(int codePage_) {  	// No action on window as automatically handled by system.  	codePage = codePage_;  } + +void SurfaceD2D::SetBidiR2L(bool) { +} +  #endif  Surface *Surface::Allocate(int technology) { | 
