Files
processing4/core
Stef Tervelde 0299209245 Squashed commit of the following:
commit 3a1aa8e712fa7e26c6fd4f61f11c25c3d63dd1b4
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Tue Jul 1 12:53:59 2025 +0200

    Restore welcome & Cleanup

commit 7d94b30f60b3b2a685734d945693ab6f2c7abe55
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Tue Jul 1 12:20:17 2025 +0200

    PR Cleanup

commit 27764e95cbab9b59ff6a714fe82236416b0f4f6f
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Jun 23 13:33:50 2025 +0200

    Update Toolbar.kt

commit 97fc4c2ec9dea5c8bd21caefa7e5d08b49529232
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Jun 23 13:30:47 2025 +0200

    Removed background job differentiation

commit 85566c8434f3ded9b54377104fe374d3bfd5826d
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Jun 23 13:09:11 2025 +0200

    CLI Compatibility

commit 7f2f2b667c63e8c255d615481355cb1878dbe9b5
Merge: 1c8581e5c bf34adee0
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Jun 23 11:14:57 2025 +0200

    Merge branch 'main' into runner

commit 1c8581e5cd51ecde11a5915035f143a0dcf31709
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu May 15 13:39:21 2025 +0200

    Move Gradle connection into GradleJob

commit d7420021ceb2dc368860e1954f9f21a5a238e665
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu May 15 10:10:33 2025 +0200

    Exclude jnilib from sources

commit 2c9ee1c77aac0e872e9ae124148d331e2dd1a6e0
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu May 15 09:51:08 2025 +0200

    Linux Platform addition

commit 49988e9b022dcb28d23a43d134301e24072a4ae8
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu May 15 09:34:44 2025 +0200

    Use forward slashes on Windows

commit da5092ef4c788ee3dd0b00463d9cbd0b698b9e0e
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu May 15 09:10:11 2025 +0200

    Add support for .java files & Cleanup

commit ab7c216272444d16931bf980db25698045c178c4
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu May 15 08:15:11 2025 +0200

    Preferences in the PDE will now be read from system before looking at files

commit 7775d016dc7b79fba3830a087b97f344dfe81658
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed May 14 18:07:50 2025 +0200

    Identified Bugs

commit 80c48f2fc584057bb7ce8a340dbd9f7b87855597
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed May 14 17:59:07 2025 +0200

    Windows Bugfix

commit 5ad43e0b49125f2313fa602ff1ef2038f891c64f
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed May 14 17:51:57 2025 +0200

    Set a default tab size

commit 2f99a69a69b80d77166f17d25449e1974f20d495
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed May 14 16:14:59 2025 +0200

    Bundle necessary plugins

commit f9b94c57018a0c0084c851a44c78d78ec73e052f
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed May 14 15:17:55 2025 +0200

    Only make parent dirs

commit 982c1113070a944890cf9dec92d4bcde9a5fe664
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed May 14 15:11:54 2025 +0200

    Show debug on gradle tests

commit 917d0d321356c43c247e9d7b711935802dbe88b8
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed May 14 15:08:47 2025 +0200

    Listen for folder changes

commit 12ce4422e1bc0cd5abf7173d7a001ea0a26cb35f
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed May 14 14:25:06 2025 +0200

    Fix saved files using an old version

commit 04ac9f2678d6308c6c8dffb68cd98bc2973e7863
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed May 14 13:47:21 2025 +0200

    Plugin rework for caching heavy work

commit e31d37d64df6aa9ba29ecc0e5529cf91600a3b28
Merge: df1277e58 540d299cf
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed May 14 10:43:43 2025 +0200

    Merge branch 'main' into runner

commit df1277e58c5665acb901a3ea81088eafeccdf283
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed May 14 10:39:22 2025 +0200

    Disabled modern UI for now. Added preference instead

commit c5c3b2f570cabdd1163405057bf8204d1a707336
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Apr 21 14:04:39 2025 +0200

    Added todos

commit 612126a11f690ab7ec7feb7b86c9f9a786cc10cd
Merge: 3e89bfe9a ecd219b03
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu Apr 17 12:37:06 2025 +0200

    Merge branch 'main' into runner

commit 3e89bfe9abef46ee456fabf4d7e054a8d593855f
Merge: efa77bb8d 7489870dd
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu Apr 17 12:34:57 2025 +0200

    Merge branch 'runner' of https://github.com/Stefterv/processing4 into runner

commit efa77bb8d2b46680f13bba14b949e84586c81635
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Tue Apr 1 18:19:58 2025 +0200

    Cleanup

    [skip ci]

commit 7489870ddf4287adaea4b02fdc3a22b54ba3a941
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Tue Apr 1 18:19:58 2025 +0200

    Cleanup

    [skip ci]

commit 97ec5e4cb49eb980e87f37155fa3d8a96477e34c
Merge: 221ee28a0 3d6a6ce1d
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Tue Apr 1 17:54:41 2025 +0200

    Merge branch 'gradle-welcome-screen' into runner

commit 221ee28a0fcb516b6e0d129ad1028ca4ff7a51ac
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Tue Apr 1 17:53:48 2025 +0200

    Toolbar UI design start

commit a870cd03fca9113952dc34bc26db5f134ce76b1c
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Tue Apr 1 10:14:22 2025 +0200

    GradleJob Refactor

commit 2269fd35d9f91b971a163f6b63fb288adb6f9156
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Tue Apr 1 09:15:47 2025 +0200

    Gradle Runner, build script management

commit 6758d684e7863c887c3b559b7b07eeb8eab32080
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Mar 31 18:40:19 2025 +0200

    Richer console output and richer exception output

commit 15114a192e36296796f5640874fd816c05e944b5
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Mar 31 15:00:12 2025 +0200

    Retry vm debug connection

commit 36ce0ab1e3853eb22a28fcd84c560123aa82ae33
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Mar 31 12:05:58 2025 +0200

    Runner: Fixing build errors

commit 701f9f5db84eb114721c033cd2111d16e3320147
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sun Mar 30 23:58:36 2025 +0200

    Gradle Runner PoC Refactor

commit 947a90ea0c204ccd9c5b0139da5eba201dcf2320
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sun Mar 30 14:51:48 2025 +0200

    Toolbar functionality PoC

commit 3d6a6ce1df
Merge: f7f22c5f7 2222331c9
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sun Mar 30 08:52:37 2025 +0200

    Merge branch 'processing:main' into gradle-welcome-screen

commit 4602ef179ea92133ca5d264d8f40aea4f40d4024
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sat Mar 29 22:50:35 2025 +0100

    Fixes for windows

commit 0d3795f89343c98ed23d9cadffd1445df25da7ba
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sat Mar 29 22:31:47 2025 +0100

    Gradle Runner, more variables

commit ab38e5f44b5e72cbace4551ecdeddc80b70b75a1
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sat Mar 29 20:54:02 2025 +0100

    Arguments refactor

commit 17acb01cbe30b1949c5ff60d35f5f8c59d6b567f
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sat Mar 29 20:10:15 2025 +0100

    Copy running JDK rather than download

commit b534c26bca8737513f9808f4e737d96a173ce7ce
Merge: d6cb3eec4 2222331c9
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sat Mar 29 18:17:20 2025 +0100

    Merge branch 'main' into runner

commit d6cb3eec45cdfeac944d5bb271ebd5733f2c36fe
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sat Mar 29 10:20:17 2025 +0100

    Fix for signing release

commit bf82d5327f2368114e499ade3a5eb18b681a4717
Merge: 73dfa0a6e dd823a7d6
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sat Mar 29 10:17:06 2025 +0100

    Merge branch 'runner' of https://github.com/Stefterv/processing4 into runner

commit 73dfa0a6e19c9318504c5a80d7295e495902041b
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sat Mar 29 10:17:04 2025 +0100

    Only sign with signing set up

commit 41ef1cc9813ac6638c85ef0cabfe2121129b363c
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Mar 28 09:00:23 2025 +0100

    Fix plugin name in tests

commit dd823a7d6cf0f9100a3a8ee803a38e8f2c7718cd
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Mar 28 09:00:23 2025 +0100

    Fix plugin name in tests

commit 3a14ff40a41979ff7ad25a144f34629c0405e3a0
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Mar 28 08:18:53 2025 +0100

    Added Stubs

commit 00f8afaa7cd179b720bbd1246c78876295939a2a
Merge: 700599ed8 1ab2359ca
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Mar 28 08:13:11 2025 +0100

    Merge branch 'schema-threading' into runner

commit 700599ed8abf775379a6d14c83d4da9b1b9a05a5
Merge: 1fae4618c 499d200ef
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Mar 28 08:13:06 2025 +0100

    Merge branch 'main' into runner

commit 1fae4618c926cd27044ae1ed734930943fb8723f
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu Mar 27 21:37:55 2025 +0100

    UI Cleanup

commit f762a3ee12842bea96cee8b011c3bdcb716d2d21
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu Mar 27 20:05:01 2025 +0100

    Added debugging

commit c2071a0c2624dde91f70aac1be5d60955dab624c
Merge: f453eca87 8fb9ef57b
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu Mar 27 18:23:23 2025 +0100

    Merge branch 'hide-scrollbars' into runner

commit f453eca87fd77d4b2b8fc96bcc9a5574a99099c0
Merge: 8f47d2110 694eb0cbe
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu Mar 27 18:03:34 2025 +0100

    Merge remote-tracking branch 'upstream/fix-jdk-requirement' into runner

commit 8f47d211093bbd2bd41146a113b77931cb20ebf5
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu Mar 27 18:00:15 2025 +0100

    Scan libaries for dependencies

commit 5d71244e0555d3d079e5b2149ba1381e524caa55
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu Mar 27 14:58:11 2025 +0100

    Plugin rework

commit e164fe48bc1f7ee92029ba7a85ab6a8188fea501
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu Mar 27 13:01:33 2025 +0100

    Gradle variables from Processing, Group resolution

commit 672c2ac479e6874965fac03a0398b6f68dc79f2d
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu Mar 27 11:51:08 2025 +0100

    Removed the need for settings.gradle.kts & Embedding maven repo

commit cdec594cdd57bd71b4bf0c9525af5c2921edbef0
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Mar 26 18:39:04 2025 +0100

    Added export support

commit 3ad36547296ed0bfa2f457cf822c2105e90ef8d7
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Mar 26 17:25:51 2025 +0100

    Gradle Runner visual styling

commit bc063e80dbda0c8f78f86b36227948954382528a
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Mar 26 14:17:25 2025 +0100

    Gradle Runner PoC

commit 47d3428e6298f26aa8b6b951caaddc0d679a811e
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sun Mar 23 18:18:54 2025 +0100

    More todo's

commit 29d76eb1d1
Merge: ba496569d 9760a63b9
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sun Mar 23 17:58:39 2025 +0100

    Merge branch 'processing:main' into gradle-plugin

commit ba496569d8
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Tue Mar 18 10:15:40 2025 +0100

    Adding tests and direct linking

commit e01d02a8af
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Mar 17 15:31:25 2025 +0100

    Update settings.gradle.kts

commit b0b12ddad6
Merge: 7e6c97add ad5c27ec4
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Mar 17 15:14:35 2025 +0100

    Merge branch 'gradle-preprocessor' into gradle-plugin

commit ad5c27ec42
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Mar 17 15:11:24 2025 +0100

    Apply same parser & lexer fixes from before

commit 743ea14190
Merge: c28a2676b 8e8f7dc5a
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Mar 17 13:53:40 2025 +0100

    Merge branch 'main' into gradle-preprocessor

commit 7e6c97add9
Merge: f126d4b62 8e8f7dc5a
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Mar 17 13:43:21 2025 +0100

    Merge branch 'main' into gradle-plugin

commit f7f22c5f7c
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Mar 17 10:40:37 2025 +0100

    Create Directory as well

commit d17ca0cdcd
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Mar 17 10:36:35 2025 +0100

    Removed PlatformStart and create new file if doesn't exist

commit b0e7f96bdd
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Mar 17 10:28:12 2025 +0100

    Added initial tests

commit 0df4dc076a
Merge: 6974811be 8e8f7dc5a
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sun Mar 16 21:18:22 2025 +0100

    Merge branch 'main' into gradle-welcome-screen

commit 6974811beb
Merge: 7452d658c 145551246
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Tue Mar 11 20:42:46 2025 +0100

    Merge branch 'test-schema' into gradle-welcome-screen

commit 7452d658c8
Merge: babf54e04 fe152b752
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Mar 7 15:07:56 2025 +0100

    Merge branch 'main' into gradle-welcome-screen

commit c28a2676bd
Merge: e18833608 fe152b752
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Mar 7 15:06:27 2025 +0100

    Merge branch 'processing:main' into gradle-preprocessor

commit f126d4b628
Merge: da852b45a fe152b752
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Mar 7 15:06:08 2025 +0100

    Merge branch 'processing:main' into gradle-plugin

commit babf54e04d
Merge: 0e56f895b 00c57607d
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Feb 10 17:58:35 2025 +0100

    Merge branch 'gradle-loggin' into gradle-welcome-screen

commit 0e56f895bd
Merge: 54944afc2 29b557a7c
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sun Feb 9 21:15:36 2025 +0100

    Merge branch 'main-gradle' into gradle-welcome-screen

commit 54944afc24
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sun Feb 9 14:36:37 2025 +0100

    Welcome Screen: JDK Module

commit 8d8bd01d80
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sun Feb 9 13:54:07 2025 +0100

    Welcome Screen: Close Functionality

commit 3df4da9461
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sun Feb 9 12:57:55 2025 +0100

    Welcome Screen: Bugfixes

commit cb184fb104
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sun Feb 9 12:19:33 2025 +0100

    Welcome Screen: Layout fixes

commit 3d81b02ffe
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sat Feb 8 22:47:28 2025 +0100

    Welcome Screen: Language selection

commit b0c61a4467
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Sat Feb 8 11:10:33 2025 +0100

    Welcome Screen: Load & Display examples

commit 2f12d13422
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Feb 7 21:53:49 2025 +0100

    Saveable/Reactive Preferences

commit 8ed2d1b40a
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Feb 7 16:34:23 2025 +0100

    Welcome Screen: WIP

commit 5c020dd017
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Feb 7 15:49:25 2025 +0100

    Welcome Screen: Initial Layout

commit bd3a77ef17
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Feb 7 12:09:58 2025 +0100

    Welcome Screen: Window Abstraction

commit b1910de2e6
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Fri Feb 7 11:24:30 2025 +0100

    Welcome Screen: Initial Frame

commit da852b45a1
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Feb 5 20:54:32 2025 +0100

    Fullscreen support

commit 44ab816ca9
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Feb 5 20:38:27 2025 +0100

    disable full screen from settings and fixed a few bugs

commit e18833608b
Merge: df745bb09 3f3e7d785
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Feb 5 13:03:51 2025 +0100

    Merge branch 'main-gradle' into gradle/preprocessor

commit 031d304dbd
Merge: 25e147eaf 3f3e7d785
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Feb 5 13:03:12 2025 +0100

    Merge branch 'main-gradle' into gradle/plugin

commit 25e147eaf1
Merge: 7f00d5b02 3b9aea1f4
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Feb 5 12:56:55 2025 +0100

    Merge branch 'main-gradle' into gradle/plugin

commit df745bb09c
Merge: f016cc474 3b9aea1f4
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Feb 5 12:56:38 2025 +0100

    Merge branch 'main-gradle' into gradle/preprocessor

commit 7f00d5b028
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Feb 5 12:36:18 2025 +0100

    added example of plugin usage

commit f4d7fbf99b
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Feb 5 09:19:08 2025 +0100

    Changed naming

commit 1b8a8ed461
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Feb 5 09:10:42 2025 +0100

    Gradle Plugin from PoC

commit 5468da0fd6
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Tue Feb 4 16:18:29 2025 +0100

    Removed outdated ant backwards compatibility marks

commit 23c8a4626a
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Mon Feb 3 12:07:01 2025 +0100

    - Imports cleanup
    - Disable system look & feel on macOS for readability
    - Cleaned unnecessary space
    - Cleaned finished TODO

commit f016cc474c
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Wed Feb 5 12:01:47 2025 +0100

    Removed core dependency from the pre-processor

commit 971d98bba0
Author: Stef Tervelde <stef@steftervelde.nl>
Date:   Thu Jan 30 22:59:16 2025 +0100

    Preprocessor with antlr Plugin
2025-07-01 13:07:40 +02:00
..
2025-04-18 17:42:31 +02:00
2024-11-17 19:47:08 +01:00
2025-07-01 13:07:40 +02:00
2024-08-26 17:34:54 +02:00
2023-02-18 17:58:43 -05:00
2023-07-26 07:32:46 -04:00
2025-03-10 21:30:19 +01:00
2023-09-27 20:14:12 -04:00

Processing Core

Core contains the implementations of all the functionality that you would use within a Processing sketch, e.g. size() and ellipse()

Including the Processing Core library on your project

Processings core libraries are available through Maven Central.
This allows integration of Processing into Java-based projects using build tools like Maven or Gradle.

Important

Repository https://jogamp.org/deployment/maven must be added to the repository list.

This is because the core library depends on some external libraries that are hosted on the aftermentioned repository.
See the Examples section on how to do this.

Examples

Here are some examples on how to add the Processing core library to the Maven and Gradle build systems.
All examples consist on two parts:

  1. Adds the https://jogamp.org/deployment/maven repository to the build system to satisfy dependencies needed by the Processing core library.
  2. Adds the Processing core library as a dependency to your project.

Maven

<repositories>
  <repository>
    <id>jogamp</id>
    <url>https://jogamp.org/deployment/maven</url>
  </repository>
</repositories>

<dependencies>
  <dependency>
    <groupId>org.processing</groupId>
    <artifactId>core</artifactId>
    <version>4.3.1</version>
  </dependency>
</dependencies>

Gradle (kotlin)

repositories {
  mavenCentral()
  maven {
      url = uri("https://jogamp.org/deployment/maven")
  }
}

dependencies {
  implementation("org.processing:core:4.3.1")
}

Gradle (groovy)

repositories {
  mavenCentral()
  maven {
      url = uri("https://jogamp.org/deployment/maven")
  }
}

dependencies {
  implementation group: 'org.processing', name: 'core', version: '4.3.1'
}

Developing for Core

The easiest way to develop for core, without the need to build the whole project, is to use the examples/src sketches.

PGraphics Modes

Documentation on how to develop graphics modes as a library should go here.

Other

Other example snippets on including the library are included in the Maven Central repo.
Please look up on how to add the custom https://jogamp.org/deployment/maven repository to your build system.

There are significant changes to core in Processing 3.

What?

We've removed Applet as the base class for PApplet and have redone the entire rendering and threading model for Processing sketches.

Why?

  1. The changes improve performance--greatly, in some cases--and reduce flicker and quirkiness in others. Using AWT objects like Applet (which subclasses Component) cause (sometimes major) performance restrictions or other visual glitches like flicker.
  2. Without making these changes, the code to mitigate the issues from #1 is very difficult to debug and make work properly across the many platforms we support: Macs, Macs with retina displays, Windows 7, Windows 8, 32- and 64-bit machines, Linux who-knows-what, and so on.
  3. The design of core is 13 years old, and the graphics features available (OpenGL, VolatileImage, BufferStrategy, etc) have changed drastically since then. I've papered over these changes and done my best to keep performance on-pace so that we don't break a lot of old code (or libraries), but now is the time for a clean break.
  4. With the death of applets, keeping the Applet base class is anachronistic (in addition to hindering performance). However, we're keeping the name PApplet because with any luck, these changes will only require a recompile of any sketch (or library) code.

What else?

  1. A new PSurface object has been added that acts as the layer between PApplet and PGraphics. It handles interaction with the OS (creation of a window, placement on screen, getting mouse and key events) as well as the animation thread (because OpenGL's animation thread is very different from an AWT animation thread).
  2. Many deprecated functions (notably, the pre-2.0 only method registration mechanism used by libraries) have been removed.
  3. Undocumented features (such as the image object in PGraphics) may disappear and break code from advanced users.
  4. We've added the ability to span multiple screens in "full screen" mode.
  5. In 3.0a2 we changed the OS X version to use Apple's "official" full screen mode. With this came a dorky animation and the inability to span multiple screens. We've rolled that back because of the latter, though the former was also a consideration.

But what about...?

We're still determining how much code we're willing to break due to API changes. Stay tuned.

Integration with Java applications

One downside of these changes is that you'll no longer be able to just drop a Processing sketch into other Java code, because PApplet will no longer subclass Applet (and therefore, Component). This is a huge downside for a tiny number of users.

Making it a generic Component, however, means that we cannot improve performance, due to the cross-platform mess of Java's outdated (and somewhat unsuspported) AWT.

In 3.0 alpha 6, the getCanvas() method (calledgetComponent() in alpha 7) provided a way to get an object to be embedded, but it looks like we'll have to move in another direction. At the present time, it looks like it'll be necessary to create a separate PComponent or PCanvas class that can be used, but it's not clear how that will work. We'll have this sorted out by the final release of 3.0.

This is one of many unfortunate tradeoffs I'm trying to sort through as we try to remove significant barriers to performance caused by the design of Java's AWT, while also supporting features (like embedding) that we've spent so much time supporting in the past.

settings() is required

Prior to Processing 3, dark magic was used to make the size() command work. This was done to hide an enormous amount of complexity from users. Over time, the hacks involved became untenable or just unsustainable. The process was like this:

  • The default renderer would be initialized offscreen and unused
  • setup() would run, and if the renderer changed, the sketch would throw an exception causing things to restart (re-calling the setup() method)
  • The previous step gave fits to any other variants of Processing (like Python or Ruby or Scala)

We had a tricky, stuttery situation where some things would happen automatically, other things would be delayed slightly. In the Android version of Processing, these methods weren't possible, so we enhanced the preprocessor to parse the size() command used in the sketch and create methods called sketchWidth() and sketchHeight() and so on, that returned the values found in setup().

In Processing 3, we've moved in a different direction. A new method called settings() has been introduced. When running inside the PDE, commands like size(), fullScreen(), pixelDensity(), and smooth() are all moved to the settings() method, which is called once, before setup(). Those are the only methods that can be called inside settings(). When outside the PDE (i.e. using Eclipse), you'll need to move those methods to settings() yourself.

Offscreen rendering

createGraphics() will create a buffer that's not resizable. PGraphics.setSize() is called in PApplet.makeGraphics(), and that's the end of the story. No Surface.setSize() calls are involved as in a normal rendering situation.

Retina/HiDPI/2x drawing and displays

Documentation is on its way, see here

The Event Dispatch Thread

The source has gone back and forth between putting all AWT (and Swing, if any) calls on the EDT. Per Oracle's statements in Java's documentation, this is best practice (at least for Swing; for AWT it's not clear). However, we've gone back and forth several times as to whether it's necessary or worthwhile. Actual rendering in the default renderer happens off the EDT, but the EDT is used to blit the image to the screen (or resize windows, etc). By moving to the EDT, we're looking for more consistent cross-platform results. In practice, results are either mixed or not there.

OpenGL

And now, for something completely different.

Changes from 2.x

Any code that uses javax.media.opengl in imports should replace that com.jogamp.opengl. I guess the JOGL folks are fully on their own w/o Oracle/Sun support.

NEWT

NEWT was written by the JOGL guys so that they could avoid AWT altogether. The outdated/outmoded AWT makes a lot of assumptions that make implementation of GL a mess and causes performance trouble. This is a big part of the rendering changes that Ive been making in 3—that were moving away from AWT as much as possible so that we dont have performance problems. In the GL case, AWT causes some stuttering and lowered frame rates. We can get rid of those by dropping Applet, Component, and Canvas, and switching to NEWTs windowing mechanism.

JOGL vs LWJGL

During the alpha 6, 7, and 8 release process we did some juggling with what OpenGL library we should use.

The short version of how it played out (written 15 May 2015)

  • JOGL had some major bugs and development seemed to have stopped (summer/fall 2014)
  • @codeanticode had been trying out LWJGL2 to see how it fared (last fall 2014)
  • The LWJGL project has moved all their development effort to LWJGL3 (since then)
  • Andrés spent the week rewriting OpenGL to use LWJGL3
  • LWJGL3 is simply too unstable for us to use, would require major reworking of PApplet to remove all uses of AWT, and they seem to be still struggling with many fundamental issues (this week)
  • Andrés went back to JOGL (last 48 hours) to find that many bugs had been fixed and development was continuing.
  • For 3.0a8, we dropped LWJGL since JOGL is performing much better, and we're 99% sure that's the final decision for 3.0 (yesterday).

It looks like LWJGL3 will be a nice game-centric platform (full screen, affordances for game input/behavior) in the coming months, but the direction they're having to go with 3 means they're moving further away from what we need in Processing with something slightly more general.

LWJGL and JOGL are both great projects and we're thankful for all the work that they put in, and our own experience with Processing means that we couldn't be more sympathetic to the difficulty they face in maintaining their cross-platform, cross-chipset, cross-everything code. Like Processing, both projects are open source and created by volunteers who give their work away for free. We're enormously appreciative of their efforts.

JavaFX

Similarly to the NEWT situation in JOGL described above, weve hit the upper bound of what we can do on performance in Java2D as well. The graphics engineers from the Java team seem to have all moved to JavaFX for the last few years, perhaps because AWT is a dead end. So… Ive started doing the JavaFX port so that we can drop even more of the AWT code.

JavaFX provides significantly better performance on recent (last couple years) hardware. Performance is drastically better than Java2D on retina displays. It makes heavy use of OpenGL, so on machines that have mediocre GL performance (integrated graphics, ultralight laptops, that sort of thing), it may even be slower than Java2D. But those situations are growing more rare, especially for our target audience.

We hope to make JavaFX the default renderer instead of Java2D. With any luck, we'd like to do this before 3.0 final is released.

Whither AWT

Run away from the AWT. All of our focus is on the OpenGL and JavaFX rendering engines, neither of which use AWT. Even the (currently) default PGraphicsJava2D renderer will be de-emphasized (though not removed) in the final 3.0.


The Mess

The rest of this document are my notes while I'm making changes.

Modes on startup

  1. nothing displayed (isDisplayable returns false, i.e. PDF)
  2. sketch in a window (most usage, from the PDE)
  3. present (sketch is smaller, color the rest of the screen; does not work with multiple screens at once)
  4. full screen (sketch same as screen size)
  5. all screens (sketch spans all screens)

alternate version

  1. pde sketch
  2. standalone sketch (exported)
  3. running from Eclipse
  4. size command?
  5. renderer change?
  6. renderer that draws to screen (Java2D) or not (PDF)
  7. OpenGL or not

resize events: Frame > Canvas > PGraphics > PApplet user-driven Frame resize events follow that order all resize events happen on the surface sketch sends message to the surface, which notifies the renderer itself resize of component is handled in thread-safe way from PSurface

PApplet.size() calls setSize() in PSurface, and in surface:

  • Mode 2: resize the frame, which will resize the canvas, etc
  • Mode 3: resizes and places of Canvas
  • Mode 4 and 5: no resize, always full display

PSurfaceAWT is a simple Canvas-based surface that blits a BufferedImage provides most compatibility with previous renderers another PSurfaceAWT variant could allow direct rendering to the canvas (no loadPixels) through the whole strategy setup

To Document

  • the renderer class/package is used to call a static method on the PGraphics that returns the class type for the rendering surface

inside main, will know the screen that's being used for the app

Questions/To Do

  • change size() command to check through renderer constants and give better error message when using one of the built-in renderers
  • bad idea, or worst idea, to have 'surface' var in PGraphics?
  • move getFontRenderContext(font) to PApplet? surface? elsewhere? _ do we need canDraw() anymore?
  • Can we remove while() loop that waits until defaultSize is set false?
  • Does init() need to go away, because it's not going to work in any other setting? Because a surface must first be created, the init() method on its own will be a mess.
  • If Frame/Canvas are moved to another display, will the display object update?
  • Does sun.awt.noerasebackground (in PApplet) help flicker?
  • The size() JavaDoc in PApplet is comically old
  • Does createFont() need to run through PGraphics?
  • Need to fix sketch placement issues (default size with long setup(), etc) Actually, the default size with long setup() is probably that defaultSize is set false, but the initial render doesn't finish before width/height are set to something useful.
  • selectInput(), selectOutput(), selectFolder() now passing 'null' as parent Window. Should just leave them un-anchored, but need to test to make this doesn't break anything else.
  • do we need sketchOutputPath() and sketchOutputStream()?

Removed functions (not final, just notes)

param() the old awt event handlers (they were a warning in 2.x) PGraphics.requestDraw(), because renderers now have their own threads PGraphics.setFrameRate removed, added to PSurface requires 1.7.. uses revalidate() method destroy() (only called by Applet? calls dispose())