summaryrefslogtreecommitdiff
blob: 2cc50575672b8eabf0fcc2d341b04792e7965498 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
From 157207b915647cd8600c616cf6dfed8f83ecff30 Mon Sep 17 00:00:00 2001
From: Thomas Friedrichsmeier <thomas.friedrichsmeier@kdemail.net>
Date: Sat, 26 Jun 2021 22:16:22 +0200
Subject: [PATCH] Add dummies for the new R graphics functions to avoid crash.

This is not a proper implementation, yet.

CCBUG: https://bugs.kde.org/show_bug.cgi?id=438993
---
 ChangeLog                                     |  3 ++
 .../rkwarddevice/rkgraphicsdevice_setup.cpp   | 15 +++++++-
 .../rkwarddevice/rkgraphicsdevice_stubs.cpp   | 36 +++++++++++++++++++
 3 files changed, 53 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 0210df6e..ae17bc62 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+--- Version 0.7.2b - UNRELEASED
+- Fixed: Crash when attempting to use new graphics features in R 4.1.0 (esp. plotting using ggplot2)
+
 --- Version 0.7.2 - Oct-16-2020
 - Script preview keeps vertical scroll position when updating
 - Python development scripts have been ported to python3
diff --git a/rkward/rbackend/rkwarddevice/rkgraphicsdevice_setup.cpp b/rkward/rbackend/rkwarddevice/rkgraphicsdevice_setup.cpp
index 9909639f..e215c090 100644
--- a/rkward/rbackend/rkwarddevice/rkgraphicsdevice_setup.cpp
+++ b/rkward/rbackend/rkwarddevice/rkgraphicsdevice_setup.cpp
@@ -216,6 +216,19 @@ bool RKGraphicsDeviceDesc::init (pDevDesc dev, double pointsize, const QStringLi
 #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)
+	dev->setPattern = RKD_SetPattern;
+	dev->releasePattern = RKD_ReleasePattern;
+	dev->setClipPath = RKD_SetClipPath;
+	dev->releaseClipPath = RKD_ReleaseClipPath;
+	dev->setMask = RKD_SetMask;
+	dev->releaseMask = RKD_ReleaseMask;
+	dev->deviceVersion = 14;
+	dev->deviceClip = FALSE; // for now
+#endif
 	return true;
 }
- 
diff --git a/rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp b/rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp
index 716a9511..b7be1609 100644
--- a/rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp
+++ b/rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp
@@ -579,5 +579,41 @@ 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) {
+#warning implement me
+	return 0;
+}
+#endif
+
+#if R_VERSION >= R_Version (4, 1, 0)
+SEXP RKD_SetPattern (SEXP pattern, pDevDesc dd) {
+#warning implement me
+	return R_NilValue;
+}
+
+void RKD_ReleasePattern (SEXP ref, pDevDesc dd) {
+#warning implement me
+}
+
+SEXP RKD_SetClipPath (SEXP path, SEXP ref, pDevDesc dd) {
+#warning implement me
+	return R_NilValue;
+}
+
+void RKD_ReleaseClipPath (SEXP ref, pDevDesc dd) {
+#warning implement me
+}
+
+SEXP RKD_SetMask (SEXP path, SEXP ref, pDevDesc dd) {
+#warning implement me
+	return R_NilValue;
+}
+
+void RKD_ReleaseMask (SEXP ref, pDevDesc dd) {
+#warning implement me
+}
 
 #endif
-- 
GitLab