Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
4546a38
Refactor Locale class and add LocaleProvider test
Stefterv Oct 15, 2025
643ec03
Make setLocale parameter nullable in Locale class
Stefterv Oct 15, 2025
06e3094
Add compose ui test to the deps
Stefterv Oct 14, 2025
d42fb2f
Update locale change method in test
Stefterv Oct 15, 2025
58c746b
Add PDE window utilities for Compose and Swing
Stefterv Oct 15, 2025
db69773
Refactor beta welcome window handling
Stefterv Oct 15, 2025
d3681f3
Remove ContributionManager and ContributionPane UI files (#1276)
Stefterv Oct 16, 2025
bf4d163
Refactor Locale class and add LocaleProvider test (#1283)
Stefterv Oct 17, 2025
77eba30
Theming (#1298)
Stefterv Oct 22, 2025
4686345
Merge branch 'welcome-screen' into compose-windows
Stefterv Oct 22, 2025
3e04faa
Merge pull request #1284 from Stefterv/compose-windows
Stefterv Oct 22, 2025
830ecea
Switch from ProcessingTheme to PDETheme in window UI
Stefterv Oct 22, 2025
1c26bab
Refactor preferences to Jetpack Compose UI
Stefterv Oct 23, 2025
8fe0585
Remove obsolete TODO for onClose callback
Stefterv Oct 23, 2025
5a6f7fa
Clean up handlePrefs method by removing comments
Stefterv Oct 24, 2025
7965931
Merge pull request #1304 from Stefterv/preferences-screen
Stefterv Oct 24, 2025
e9b381b
Composable Preferences rewrite (#1277)
Stefterv Oct 28, 2025
e1fcdb1
Welcome screen implementation (#1307)
Stefterv Nov 26, 2025
33f45b5
Merge branch 'main' into welcome-screen
Stefterv Dec 8, 2025
9f588bd
Merge branch 'main' into welcome-screen
Stefterv Dec 8, 2025
4b39a23
Replace ProcessingTheme with PDETheme in WelcomeSurvey
Stefterv Dec 8, 2025
243789b
Add Material Theme Builder file headers
Stefterv Dec 8, 2025
8883c02
Fix preferences file override and update test property
Stefterv Dec 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import org.gradle.internal.jvm.Jvm
import org.gradle.internal.os.OperatingSystem
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
import org.jetbrains.compose.ExperimentalComposeLibrary
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.jetbrains.compose.desktop.application.tasks.AbstractJPackageTask
import org.jetbrains.compose.internal.de.undercouch.gradle.tasks.download.Download
Expand All @@ -16,6 +17,7 @@ plugins{

alias(libs.plugins.compose.compiler)
alias(libs.plugins.jetbrainsCompose)

alias(libs.plugins.serialization)
alias(libs.plugins.download)
}
Expand Down Expand Up @@ -59,7 +61,7 @@ compose.desktop {
).map { "-D${it.first}=${it.second}" }.toTypedArray())

nativeDistributions{
modules("jdk.jdi", "java.compiler", "jdk.accessibility", "java.management.rmi", "java.scripting", "jdk.httpserver")
modules("jdk.jdi", "java.compiler", "jdk.accessibility", "jdk.zipfs", "java.management.rmi", "java.scripting", "jdk.httpserver")
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
packageName = "Processing"

Expand Down Expand Up @@ -107,25 +109,29 @@ dependencies {

implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material)
implementation(compose.ui)
implementation(compose.components.resources)
implementation(compose.components.uiToolingPreview)
implementation(compose.materialIconsExtended)

implementation(compose.desktop.currentOs)
implementation(libs.material3)

implementation(libs.compottie)
implementation(libs.kaml)
implementation(libs.markdown)
implementation(libs.markdownJVM)

implementation(libs.clikt)
implementation(libs.kotlinxSerializationJson)

@OptIn(ExperimentalComposeLibrary::class)
testImplementation(compose.uiTest)
testImplementation(kotlin("test"))
testImplementation(libs.mockitoKotlin)
testImplementation(libs.junitJupiter)
testImplementation(libs.junitJupiterParams)

implementation(libs.clikt)
implementation(libs.kotlinxSerializationJson)

}

tasks.test {
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/resources/icons/Discord.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions app/src/main/resources/icons/GitHub.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions app/src/main/resources/icons/Instagram.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 17 additions & 0 deletions app/src/main/resources/languages/PDE.properties
Original file line number Diff line number Diff line change
Expand Up @@ -643,6 +643,23 @@ welcome.survey.description=Processing is free, open-source, and shaped by its co
color_chooser = Color Selector
color_chooser.select = Select


# ---------------------------------------
# Welcome Screen
welcome.processing.logo = Processing Logo
welcome.processing.title = Welcome to Processing
welcome.actions.sketch.new = New Sketch
welcome.actions.examples = Open Examples
welcome.actions.sketchbook = My Sketches
welcome.actions.show_startup = Show this window at startup
welcome.resources.title = Resources
welcome.resources.get_started = Get Started
welcome.resources.tutorials = Tutorials
welcome.resources.documentation = Reference
welcome.community.title = Join our community
welcome.community.forum = Forum
welcome.sketch.open = Open

# ---------------------------------------
# Movie Maker

Expand Down
16 changes: 16 additions & 0 deletions app/src/main/resources/languages/PDE_nl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,22 @@ beta.title = Dankuwel voor het testen van deze Processing Beta!
beta.message = Deze preview release laat ons feedback verzamelen en problemen oplossen. **Sommige functies werken mogelijk niet zoals verwacht.** Als u problemen ondervindt, [post dan op het forum](https://discourse.processing.org) of [open een GitHub issue](https://github.com/processing/processing4/issues).
beta.button = Ok


# ---------------------------------------
# Welcome Screen
welcome.processing.logo = Processing Logo
welcome.processing.title = Welkom bij Processing!
welcome.actions.sketch.new = Nieuwe Schets
welcome.actions.examples = Open Voorbeelden
welcome.actions.show_startup = Laat dit scherm zien bij opstarten
welcome.resources.title = Resources
welcome.resources.video = Video Cursus
welcome.resources.get_started = Om te beginnen
welcome.resources.tutorials = Tutorials
welcome.resources.documentation = Handleiding
welcome.community.title = Neem deel aan de Community
welcome.community.forum = Forum

# ---------------------------------------
# Color Chooser
color_chooser = Kies een kleur...
20 changes: 7 additions & 13 deletions app/src/processing/app/Base.java
Original file line number Diff line number Diff line change
Expand Up @@ -328,13 +328,7 @@ static private void handleWelcomeScreen(Base base) {
// Needs to be shown after the first editor window opens, so that it
// shows up on top, and doesn't prevent an editor window from opening.
if (Preferences.getBoolean("welcome.four.show")) {
try {
new Welcome(base);
} catch (IOException e) {
Messages.showTrace("Unwelcoming",
"Please report this error to\n" +
"https://github.com/processing/processing4/issues", e, false);
}
PDEWelcomeKt.showWelcomeScreen(base);
}
}

Expand Down Expand Up @@ -598,7 +592,7 @@ public JMenu initDefaultFileMenu() {
defaultFileMenu.add(item);

item = Toolkit.newJMenuItemShift(Language.text("menu.file.examples"), 'O');
item.addActionListener(e -> thinkDifferentExamples());
item.addActionListener(e -> showExamplesFrame());
defaultFileMenu.add(item);

return defaultFileMenu;
Expand Down Expand Up @@ -1874,7 +1868,7 @@ public void handleRestart() {
// }


public void thinkDifferentExamples() {
public void showExamplesFrame() {
nextMode.showExamplesFrame();
}

Expand Down Expand Up @@ -2180,10 +2174,10 @@ static private Mode findSketchMode(File folder, List<Mode> modeList) {
* Show the Preferences window.
*/
public void handlePrefs() {
if (preferencesFrame == null) {
preferencesFrame = new PreferencesFrame(this);
}
preferencesFrame.showFrame();
if (preferencesFrame == null) {
preferencesFrame = new PreferencesFrame(this);
}
preferencesFrame.showFrame();
}


Expand Down
45 changes: 45 additions & 0 deletions app/src/processing/app/Messages.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,27 @@
*/
package processing.app

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import androidx.compose.ui.window.rememberWindowState
import com.formdev.flatlaf.FlatLightLaf
import processing.app.ui.Toolkit
import processing.app.ui.theme.PDETheme
import java.awt.EventQueue
import java.awt.Frame
import java.io.PrintWriter
import java.io.StringWriter
import javax.swing.JFrame
import javax.swing.JOptionPane
import javax.swing.UIManager


class Messages {
companion object {
Expand Down Expand Up @@ -270,6 +284,37 @@ class Messages {
}
}
}
fun main(){
val types = mapOf(
"message" to { Messages.showMessage("Test Title", "This is a test message.") },
"warning" to { Messages.showWarning("Test Warning", "This is a test warning.", Exception("dfdsfjk")) },
"trace" to { Messages.showTrace("Test Trace", "This is a test trace.", Exception("Test Exception"), false) },
"tiered_warning" to { Messages.showWarningTiered("Test Tiered Warning", "Primary message", "Secondary message", null) },
"yes_no" to { Messages.showYesNoQuestion(null, "Test Yes/No", "Do you want to continue?", "Choose yes or no.") },
"custom_question" to { Messages.showCustomQuestion(null, "Test Custom Question", "Choose an option:", "Select one of the options below.", 1, "Option 1", "Option 2", "Option 3") },
"error" to { Messages.showError("Test Error", "This is a test error.", null) },
)
Platform.init()
UIManager.setLookAndFeel(FlatLightLaf())
application {
val state = rememberWindowState(
size = DpSize(500.dp, 300.dp)
)
Window(state = state, onCloseRequest = ::exitApplication, title = "Test Messages") {
PDETheme {
Column {
for ((type, action) in types) {
Button(onClick = { action() }, modifier = Modifier.padding(8.dp)) {
Text("Show $type dialog")
}
}
}
}
}

}

}

// Helper functions to give the base classes a color
fun String.formatClassName() = this
Expand Down
8 changes: 8 additions & 0 deletions app/src/processing/app/Preferences.java
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,14 @@ static public void skipInit() {
initialized = true;
}

/**
* Check whether Preferences.init() has been called. If not, we are probably not running the full application.
* @return true if Preferences has been initialized
*/
static public boolean isInitialized() {
return initialized;
}


static void handleProxy(String protocol, String hostProp, String portProp) {
String proxyHost = get("proxy." + protocol + ".host");
Expand Down
Loading