Skip to content

Commit 7fee5b1

Browse files
committed
Add welcome survey to Welcome screen
Introduces a new Compose-based survey component to the Welcome screen via WelcomeSurvey.kt. Refactors Welcome.java to include the survey, and updates PDEButton in WelcomeToBeta.kt to support a modifier and proper content color handling.
1 parent 0491c4d commit 7fee5b1

File tree

3 files changed

+116
-45
lines changed

3 files changed

+116
-45
lines changed

app/src/processing/app/ui/Welcome.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,18 @@
2121

2222
package processing.app.ui;
2323

24-
import java.awt.Color;
25-
import java.awt.EventQueue;
26-
import java.awt.Font;
24+
import processing.app.Base;
25+
import processing.app.Platform;
26+
import processing.app.Preferences;
27+
28+
import javax.swing.*;
29+
import javax.swing.border.EmptyBorder;
30+
import java.awt.*;
2731
import java.awt.event.ItemEvent;
2832
import java.io.File;
2933
import java.io.IOException;
3034

31-
import javax.swing.Box;
32-
import javax.swing.JButton;
33-
import javax.swing.JCheckBox;
34-
import javax.swing.JComponent;
35-
import javax.swing.border.EmptyBorder;
36-
37-
import processing.app.Base;
38-
import processing.app.Platform;
39-
import processing.app.Preferences;
35+
import static processing.app.ui.WelcomeSurveyKt.addSurveyToWelcomeScreen;
4036

4137

4238
public class Welcome {
@@ -47,6 +43,7 @@ public class Welcome {
4743
public Welcome(Base base) throws IOException {
4844
this.base = base;
4945

46+
var parent = Box.createVerticalBox();
5047
JComponent panel = Box.createHorizontalBox();
5148
//panel.setBackground(new Color(245, 245, 245));
5249
panel.setBackground(Color.WHITE);
@@ -71,11 +68,13 @@ public Welcome(Base base) throws IOException {
7168
button.setFont(Toolkit.getSansFont(14, Font.PLAIN));
7269
button.addActionListener(e -> view.handleClose());
7370
panel.add(button);
71+
parent.add(addSurveyToWelcomeScreen());
72+
parent.add(panel);
7473

7574
File indexFile = getIndexFile();
7675
if (indexFile == null) return; // giving up; error already printed
7776

78-
view = new WebFrame(getIndexFile(), 420, panel) {
77+
view = new WebFrame(getIndexFile(), 420, parent) {
7978
/*
8079
@Override
8180
public void handleSubmit(StringDict dict) {
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package processing.app.ui
2+
3+
import androidx.compose.foundation.Image
4+
import androidx.compose.foundation.background
5+
import androidx.compose.foundation.layout.*
6+
import androidx.compose.foundation.shape.RoundedCornerShape
7+
import androidx.compose.material.MaterialTheme
8+
import androidx.compose.material.Text
9+
import androidx.compose.ui.Alignment
10+
import androidx.compose.ui.Modifier
11+
import androidx.compose.ui.awt.ComposePanel
12+
import androidx.compose.ui.draw.clip
13+
import androidx.compose.ui.res.painterResource
14+
import androidx.compose.ui.text.font.FontWeight
15+
import androidx.compose.ui.unit.dp
16+
import processing.app.ui.WelcomeToBeta.Companion.PDEButton
17+
import processing.app.ui.theme.LocalLocale
18+
import processing.app.ui.theme.ProcessingTheme
19+
import javax.swing.JComponent
20+
21+
22+
fun addSurveyToWelcomeScreen(): JComponent {
23+
return ComposePanel().apply {
24+
setContent {
25+
ProcessingTheme {
26+
val locale = LocalLocale.current
27+
Box {
28+
Row(
29+
modifier = Modifier
30+
.width(420.dp)
31+
.padding(16.dp)
32+
.padding(bottom = 12.dp)
33+
.clip(RoundedCornerShape(12.dp))
34+
.background(MaterialTheme.colors.surface)
35+
) {
36+
Image(
37+
painter = painterResource("bird.svg"),
38+
contentDescription = locale["beta.logo"],
39+
modifier = Modifier
40+
.align(Alignment.CenterVertically)
41+
.padding(20.dp)
42+
.size(50.dp)
43+
44+
)
45+
Column(
46+
modifier = Modifier.padding(12.dp),
47+
) {
48+
Text(
49+
text = "Survey",
50+
style = MaterialTheme.typography.subtitle1.copy(fontWeight = FontWeight.Bold)
51+
)
52+
Text(
53+
text = "welcome survey message"
54+
)
55+
56+
}
57+
}
58+
59+
PDEButton(
60+
onClick = {
61+
62+
},
63+
modifier = Modifier
64+
.align(Alignment.BottomEnd)
65+
.padding(horizontal = 6.dp, vertical = 16.dp)
66+
) {
67+
Text(text = "Take Survey")
68+
}
69+
}
70+
}
71+
}
72+
}
73+
74+
}

app/src/processing/app/ui/WelcomeToBeta.kt

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import androidx.compose.animation.core.animateFloatAsState
55
import androidx.compose.foundation.Image
66
import androidx.compose.foundation.background
77
import androidx.compose.foundation.layout.*
8-
import androidx.compose.material.MaterialTheme
8+
import androidx.compose.material.LocalContentColor
99
import androidx.compose.material.MaterialTheme.colors
1010
import androidx.compose.material.MaterialTheme.typography
1111
import androidx.compose.material.Surface
@@ -21,10 +21,8 @@ import androidx.compose.ui.input.pointer.PointerIcon
2121
import androidx.compose.ui.input.pointer.onPointerEvent
2222
import androidx.compose.ui.input.pointer.pointerHoverIcon
2323
import androidx.compose.ui.res.painterResource
24-
import androidx.compose.ui.text.font.FontWeight
2524
import androidx.compose.ui.unit.DpSize
2625
import androidx.compose.ui.unit.dp
27-
import androidx.compose.ui.unit.sp
2826
import androidx.compose.ui.window.Window
2927
import androidx.compose.ui.window.WindowPosition
3028
import androidx.compose.ui.window.application
@@ -33,11 +31,9 @@ import com.formdev.flatlaf.util.SystemInfo
3331
import com.mikepenz.markdown.compose.Markdown
3432
import com.mikepenz.markdown.m2.markdownColor
3533
import com.mikepenz.markdown.m2.markdownTypography
36-
import com.mikepenz.markdown.model.MarkdownColors
37-
import com.mikepenz.markdown.model.MarkdownTypography
38-
import processing.app.Preferences
3934
import processing.app.Base.getRevision
4035
import processing.app.Base.getVersionName
36+
import processing.app.Preferences
4137
import processing.app.ui.theme.LocalLocale
4238
import processing.app.ui.theme.LocalTheme
4339
import processing.app.ui.theme.Locale
@@ -46,8 +42,6 @@ import java.awt.Cursor
4642
import java.awt.Dimension
4743
import java.awt.event.KeyAdapter
4844
import java.awt.event.KeyEvent
49-
import java.io.InputStream
50-
import java.util.Properties
5145
import javax.swing.JFrame
5246
import javax.swing.SwingUtilities
5347

@@ -150,43 +144,47 @@ class WelcomeToBeta {
150144
}
151145
@OptIn(ExperimentalComposeUiApi::class)
152146
@Composable
153-
fun PDEButton(onClick: () -> Unit, content: @Composable BoxScope.() -> Unit) {
147+
fun PDEButton(onClick: () -> Unit, modifier: Modifier = Modifier, content: @Composable BoxScope.() -> Unit) {
154148
val theme = LocalTheme.current
155149

156150
var hover by remember { mutableStateOf(false) }
157151
var clicked by remember { mutableStateOf(false) }
158152
val offset by animateFloatAsState(if (hover) -5f else 5f)
159153
val color by animateColorAsState(if(clicked) colors.primaryVariant else colors.primary)
160154

161-
Box(modifier = Modifier.padding(end = 5.dp, top = 5.dp)) {
155+
Box(modifier = modifier.padding(end = 5.dp, top = 5.dp)) {
162156
Box(
163157
modifier = Modifier
164158
.offset((-offset).dp, (offset).dp)
165159
.background(theme.getColor("toolbar.button.pressed.field"))
166160
.matchParentSize()
167161
)
168-
Box(
169-
modifier = Modifier
170-
.onPointerEvent(PointerEventType.Press) {
171-
clicked = true
172-
}
173-
.onPointerEvent(PointerEventType.Release) {
174-
clicked = false
175-
onClick()
176-
}
177-
.onPointerEvent(PointerEventType.Enter) {
178-
hover = true
179-
}
180-
.onPointerEvent(PointerEventType.Exit) {
181-
hover = false
182-
}
183-
.pointerHoverIcon(PointerIcon(Cursor(Cursor.HAND_CURSOR)))
184-
.background(color)
185-
.padding(10.dp)
186-
.sizeIn(minWidth = 100.dp),
187-
contentAlignment = Alignment.Center,
188-
content = content
189-
)
162+
CompositionLocalProvider(
163+
LocalContentColor provides colors.onPrimary
164+
) {
165+
Box(
166+
modifier = Modifier
167+
.onPointerEvent(PointerEventType.Press) {
168+
clicked = true
169+
}
170+
.onPointerEvent(PointerEventType.Release) {
171+
clicked = false
172+
onClick()
173+
}
174+
.onPointerEvent(PointerEventType.Enter) {
175+
hover = true
176+
}
177+
.onPointerEvent(PointerEventType.Exit) {
178+
hover = false
179+
}
180+
.pointerHoverIcon(PointerIcon(Cursor(Cursor.HAND_CURSOR)))
181+
.background(color)
182+
.padding(10.dp)
183+
.sizeIn(minWidth = 100.dp),
184+
contentAlignment = Alignment.Center,
185+
content = content
186+
)
187+
}
190188
}
191189
}
192190

0 commit comments

Comments
 (0)