diff options
Diffstat (limited to 'gtk/PlatGTK.cxx')
| -rwxr-xr-x | gtk/PlatGTK.cxx | 27 | 
1 files changed, 23 insertions, 4 deletions
| diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx index b9c049f1d..3debf8fc8 100755 --- a/gtk/PlatGTK.cxx +++ b/gtk/PlatGTK.cxx @@ -155,6 +155,7 @@ public:  	int Supports(int feature) noexcept override;  	bool Initialised() override;  	void PenColour(ColourDesired fore) override; +	void PenColourAlpha(ColourAlpha fore);  	int LogPixelsY() override;  	int PixelDivisions() override;  	int DeviceHeightFont(int points) override; @@ -163,6 +164,7 @@ public:  	void Polygon(Point *pts, size_t npts, ColourDesired fore, ColourDesired back) override;  	void RectangleDraw(PRectangle rc, ColourDesired fore, ColourDesired back) override;  	void FillRectangle(PRectangle rc, ColourDesired back) override; +	void FillRectangle(PRectangle rc, Fill fill) override;  	void FillRectangle(PRectangle rc, Surface &surfacePattern) override;  	void RoundedRectangle(PRectangle rc, ColourDesired fore, ColourDesired back) override;  	void AlphaRectangle(PRectangle rc, int cornerSize, ColourDesired fill, int alphaFill, @@ -399,11 +401,20 @@ int SurfaceImpl::Supports(int feature) noexcept {  void SurfaceImpl::PenColour(ColourDesired fore) {  	if (context) { -		const ColourDesired cdFore(fore.AsInteger());  		cairo_set_source_rgb(context, -				     cdFore.GetRed() / 255.0, -				     cdFore.GetGreen() / 255.0, -				     cdFore.GetBlue() / 255.0); +			fore.GetRed() / 255.0, +			fore.GetGreen() / 255.0, +			fore.GetBlue() / 255.0); +	} +} + +void SurfaceImpl::PenColourAlpha(ColourAlpha fore) { +	if (context) { +		cairo_set_source_rgba(context, +			fore.GetRed() / 255.0, +			fore.GetGreen() / 255.0, +			fore.GetBlue() / 255.0, +			fore.GetAlpha() / 255.0);  	}  } @@ -503,6 +514,14 @@ void SurfaceImpl::FillRectangle(PRectangle rc, ColourDesired back) {  	}  } +void SurfaceImpl::FillRectangle(PRectangle rc, Fill fill) { +	PenColourAlpha(fill.colour); +	if (context && (rc.left < maxCoordinate)) {	// Protect against out of range +		CairoRectangle(rc); +		cairo_fill(context); +	} +} +  void SurfaceImpl::FillRectangle(PRectangle rc, Surface &surfacePattern) {  	SurfaceImpl &surfi = dynamic_cast<SurfaceImpl &>(surfacePattern);  	if (context && surfi.psurf) { | 
