[education/rkward] rkward/rbackend/rkwarddevice: Add stubs for R 4.2 graphics, remove some ancient version checks.

Thomas Friedrichsmeier null at kde.org
Sun Apr 3 15:26:23 BST 2022


Git commit 346be3508ac1f05b5f255338c36edd82081e6d3e by Thomas Friedrichsmeier.
Committed on 02/04/2022 at 21:24.
Pushed by tfry into branch 'master'.

Add stubs for R 4.2 graphics, remove some ancient version checks.

M  +16   -12   rkward/rbackend/rkwarddevice/rkgraphicsdevice_setup.cpp
M  +27   -4    rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp

https://invent.kde.org/education/rkward/commit/346be3508ac1f05b5f255338c36edd82081e6d3e

diff --git a/rkward/rbackend/rkwarddevice/rkgraphicsdevice_setup.cpp b/rkward/rbackend/rkwarddevice/rkgraphicsdevice_setup.cpp
index a91f8127..0e547ad6 100644
--- a/rkward/rbackend/rkwarddevice/rkgraphicsdevice_setup.cpp
+++ b/rkward/rbackend/rkwarddevice/rkgraphicsdevice_setup.cpp
@@ -170,15 +170,12 @@ bool RKGraphicsDeviceDesc::init (pDevDesc dev, double pointsize, const QStringLi
 	dev->wantSymbolUTF8 = TRUE;
 	dev->useRotatedTextInContour = TRUE;
 
-#if R_VERSION >= R_Version (2, 14, 0)
 	dev->haveTransparency = 2;
 	dev->haveTransparentBg = 2; // FIXME. Do we really? Check.
 	dev->haveRaster = 2;
 	dev->haveCapture = 2;
 	dev->haveLocator = 2;
-#endif
 
-#if R_VERSION >= R_Version (2, 12, 0)
 	/*
 	* Mouse events
 	*/
@@ -191,7 +188,6 @@ bool RKGraphicsDeviceDesc::init (pDevDesc dev, double pointsize, const QStringLi
 	// looking for events
 	dev->eventHelper = RKD_EventHelper;
 	dev->onExit = RKD_onExit;
-#endif
 
 	/*
 	* Device functions
@@ -208,31 +204,39 @@ bool RKGraphicsDeviceDesc::init (pDevDesc dev, double pointsize, const QStringLi
 	dev->newPage = RKD_NewPage;
 	dev->polygon = RKD_Polygon;
 	dev->polyline = RKD_Polyline;
-#if R_VERSION >= R_Version (2, 12, 0)
 	dev->path = RKD_Path;
-#endif
 	dev->rect = RKD_Rect;
 	dev->size = RKD_Size;
 	// dev->onexit = RKD_OnExit; Called on user interrupts. NULL is OK.
-#if R_VERSION >= R_Version (2, 11, 0)
 	dev->raster = RKD_Raster;
 	dev->cap = RKD_Capture;
-#endif
 	dev->newFrameConfirm = RKD_NewFrameConfirm;
-
-#if R_VERSION >= R_Version (2, 14, 0)
 	dev->holdflush = RKD_HoldFlush;
-#endif
 
 #if R_VERSION >= R_Version (4, 1, 0)
+	// patterns and gradients
 	dev->setPattern = RKD_SetPattern;
 	dev->releasePattern = RKD_ReleasePattern;
+	// clipping paths
 	dev->setClipPath = RKD_SetClipPath;
 	dev->releaseClipPath = RKD_ReleaseClipPath;
+	// masks
 	dev->setMask = RKD_SetMask;
 	dev->releaseMask = RKD_ReleaseMask;
-	dev->deviceVersion = qMin(14, R_GE_version);
+	dev->deviceVersion = qMin(15, R_GE_version);
 	dev->deviceClip = TRUE; // for now
 #endif
+
+#if R_VERSION >= R_Version (4, 2, 0)
+	// groups
+	dev->defineGroup = RKD_DefineGroup;
+	dev->useGroup = RKD_UseGroup;
+	dev->releaseGroup = RKD_ReleaseGroup;
+
+	// stroked / filled paths
+	dev->stroke = RKD_Stroke;
+	dev->fill = RKD_Fill;
+	dev->fillStroke = RKD_FillStroke;
+#endif
 	return true;
 }
diff --git a/rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp b/rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp
index 5890e2f0..56e0d343 100644
--- a/rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp
+++ b/rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp
@@ -546,7 +546,6 @@ static Rboolean RKD_NewFrameConfirm (pDevDesc dev) {
 	// Return value FALSE: Let R ask, instead
 }
 
-#if R_VERSION >= R_Version (2, 12, 0)
 void RKD_EventHelper (pDevDesc dev, int code) {
 	RK_TRACE(GRAPHICS_DEVICE);
 	{
@@ -635,9 +634,7 @@ void RKD_onExit (pDevDesc dev) {
 	}
 	dev->gettingEvent = (Rboolean) false;
 }
-#endif
 
-#if R_VERSION >= R_Version (2, 14, 0)
 int RKD_HoldFlush (pDevDesc dev, int level) {
 	RK_TRACE(GRAPHICS_DEVICE);
 #ifdef __GNUC__
@@ -645,7 +642,6 @@ int RKD_HoldFlush (pDevDesc dev, int level) {
 #endif
 	return 0;
 }
-#endif
 
 #if R_VERSION >= R_Version (4, 1, 0)
 qint8 getGradientExtend(int Rextent) {
@@ -857,3 +853,30 @@ void RKD_ReleaseMask (SEXP ref, pDevDesc dev) {
 }
 
 #endif
+
+#if R_VERSION >= R_Version(4,2,0)
+SEXP RKD_DefineGroup(SEXP source, int op, SEXP destination, pDevDesc dev) {
+	return R_NilValue;
+}
+
+void RKD_UseGroup(SEXP ref, SEXP trans, pDevDesc dev) {
+}
+
+void RKD_ReleaseGroup(SEXP ref, pDevDesc dev) {
+}
+
+void doFillAndOrStroke(SEXP path, const pGEcontext g, pDevDesc dev, bool fill, bool stroke) {
+}
+
+void RKD_Stroke(SEXP path, const pGEcontext gc, pDevDesc dev) {
+	doFillAndOrStroke(path, gc, dev, false, true);
+}
+
+void RKD_Fill(SEXP path, int rule, const pGEcontext gc, pDevDesc dev) {
+	doFillAndOrStroke(path, gc, dev, true, false);
+}
+
+void RKD_FillStroke(SEXP path, int rule, const pGEcontext gc, pDevDesc dev) {
+	doFillAndOrStroke(path, gc, dev, true, true);
+}
+#endif



More information about the rkward-tracker mailing list