joonsrenderer 1.1-java → 1.3.1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +5 -5
  2. data/.mvn/extensions.xml +1 -1
  3. data/.mvn/wrapper/MavenWrapperDownloader.java +117 -0
  4. data/.mvn/wrapper/maven-wrapper.properties +2 -0
  5. data/CHANGELOG.md +12 -1
  6. data/README.md +1 -1
  7. data/Rakefile +6 -1
  8. data/docs/Gemfile +2 -0
  9. data/docs/_config.yml +3 -0
  10. data/docs/_includes/header.html +1 -1
  11. data/docs/_includes/top.html +11 -0
  12. data/docs/_layouts/default.html +6 -15
  13. data/docs/_posts/2017-01-06-media.md +101 -0
  14. data/docs/_posts/2017-01-08-animated_ray_tracing.md +2 -2
  15. data/docs/_posts/2017-01-08-resources.md +14 -0
  16. data/docs/about.md +2 -2
  17. data/docs/assets/media_captured.png +0 -0
  18. data/docs/assets/media_rendered.png +0 -0
  19. data/joonsrenderer.gemspec +2 -2
  20. data/lib/commons.compiler/module-info.class +0 -0
  21. data/lib/commons.compiler/module-info.java +7 -0
  22. data/lib/janino/module-info.class +0 -0
  23. data/lib/janino/module-info.java +5 -0
  24. data/lib/joonsrenderer/version.rb +1 -1
  25. data/mvnw +310 -0
  26. data/mvnw.cmd +182 -0
  27. data/pom.rb +22 -22
  28. data/pom.xml +32 -17
  29. data/src/{test/java/a_maintest.java → a_maintest.java} +1 -1
  30. data/src/main/java/SunflowGUI.java +295 -351
  31. data/src/main/java/joons/JRFiller.java +15 -23
  32. data/src/main/java/joons/JoonsRenderer.java +6 -5
  33. data/src/main/java/org/sunflow/AsciiFileSunflowAPI.java +1 -1
  34. data/src/main/java/org/sunflow/BinaryFileSunflowAPI.java +1 -1
  35. data/src/main/java/org/sunflow/SunflowAPI.java +5 -5
  36. data/src/main/java/org/sunflow/core/GIEngine.java +3 -1
  37. data/src/main/java/org/sunflow/core/Geometry.java +1 -1
  38. data/src/main/java/org/sunflow/core/ImageSampler.java +3 -0
  39. data/src/main/java/org/sunflow/core/InstanceList.java +1 -1
  40. data/src/main/java/org/sunflow/core/IntersectionState.java +7 -6
  41. data/src/main/java/org/sunflow/core/ParameterList.java +3 -2
  42. data/src/main/java/org/sunflow/core/PhotonStore.java +1 -0
  43. data/src/main/java/org/sunflow/core/Ray.java +4 -3
  44. data/src/main/java/org/sunflow/core/TextureCache.java +1 -1
  45. data/src/main/java/org/sunflow/core/accel/BoundingIntervalHierarchy.java +1 -1
  46. data/src/main/java/org/sunflow/core/accel/KDTree.java +1 -1
  47. data/src/main/java/org/sunflow/core/photonmap/CausticPhotonMap.java +2 -2
  48. data/src/main/java/org/sunflow/core/photonmap/GlobalPhotonMap.java +2 -2
  49. data/src/main/java/org/sunflow/core/renderer/BucketRenderer.java +3 -1
  50. data/src/main/java/org/sunflow/image/writers/EXRBitmapWriter.java +28 -19
  51. data/src/main/java/org/sunflow/image/writers/PNGBitmapWriter.java +5 -0
  52. data/src/main/java/org/sunflow/image/writers/TGABitmapWriter.java +20 -14
  53. data/src/main/java/org/sunflow/system/BenchmarkFramework.java +2 -2
  54. data/src/main/java/org/sunflow/system/RenderGlobalsPanel.java +5 -4
  55. metadata +20 -8
  56. data/docs/_includes/head.html +0 -15
@@ -0,0 +1,182 @@
1
+ @REM ----------------------------------------------------------------------------
2
+ @REM Licensed to the Apache Software Foundation (ASF) under one
3
+ @REM or more contributor license agreements. See the NOTICE file
4
+ @REM distributed with this work for additional information
5
+ @REM regarding copyright ownership. The ASF licenses this file
6
+ @REM to you under the Apache License, Version 2.0 (the
7
+ @REM "License"); you may not use this file except in compliance
8
+ @REM with the License. You may obtain a copy of the License at
9
+ @REM
10
+ @REM http://www.apache.org/licenses/LICENSE-2.0
11
+ @REM
12
+ @REM Unless required by applicable law or agreed to in writing,
13
+ @REM software distributed under the License is distributed on an
14
+ @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ @REM KIND, either express or implied. See the License for the
16
+ @REM specific language governing permissions and limitations
17
+ @REM under the License.
18
+ @REM ----------------------------------------------------------------------------
19
+
20
+ @REM ----------------------------------------------------------------------------
21
+ @REM Maven2 Start Up Batch script
22
+ @REM
23
+ @REM Required ENV vars:
24
+ @REM JAVA_HOME - location of a JDK home dir
25
+ @REM
26
+ @REM Optional ENV vars
27
+ @REM M2_HOME - location of maven2's installed home dir
28
+ @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29
+ @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
30
+ @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31
+ @REM e.g. to debug Maven itself, use
32
+ @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33
+ @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34
+ @REM ----------------------------------------------------------------------------
35
+
36
+ @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37
+ @echo off
38
+ @REM set title of command window
39
+ title %0
40
+ @REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
41
+ @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
42
+
43
+ @REM set %HOME% to equivalent of $HOME
44
+ if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
45
+
46
+ @REM Execute a user defined script before this one
47
+ if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
48
+ @REM check for pre script, once with legacy .bat ending and once with .cmd ending
49
+ if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
50
+ if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
51
+ :skipRcPre
52
+
53
+ @setlocal
54
+
55
+ set ERROR_CODE=0
56
+
57
+ @REM To isolate internal variables from possible post scripts, we use another setlocal
58
+ @setlocal
59
+
60
+ @REM ==== START VALIDATION ====
61
+ if not "%JAVA_HOME%" == "" goto OkJHome
62
+
63
+ echo.
64
+ echo Error: JAVA_HOME not found in your environment. >&2
65
+ echo Please set the JAVA_HOME variable in your environment to match the >&2
66
+ echo location of your Java installation. >&2
67
+ echo.
68
+ goto error
69
+
70
+ :OkJHome
71
+ if exist "%JAVA_HOME%\bin\java.exe" goto init
72
+
73
+ echo.
74
+ echo Error: JAVA_HOME is set to an invalid directory. >&2
75
+ echo JAVA_HOME = "%JAVA_HOME%" >&2
76
+ echo Please set the JAVA_HOME variable in your environment to match the >&2
77
+ echo location of your Java installation. >&2
78
+ echo.
79
+ goto error
80
+
81
+ @REM ==== END VALIDATION ====
82
+
83
+ :init
84
+
85
+ @REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
86
+ @REM Fallback to current working directory if not found.
87
+
88
+ set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
89
+ IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
90
+
91
+ set EXEC_DIR=%CD%
92
+ set WDIR=%EXEC_DIR%
93
+ :findBaseDir
94
+ IF EXIST "%WDIR%"\.mvn goto baseDirFound
95
+ cd ..
96
+ IF "%WDIR%"=="%CD%" goto baseDirNotFound
97
+ set WDIR=%CD%
98
+ goto findBaseDir
99
+
100
+ :baseDirFound
101
+ set MAVEN_PROJECTBASEDIR=%WDIR%
102
+ cd "%EXEC_DIR%"
103
+ goto endDetectBaseDir
104
+
105
+ :baseDirNotFound
106
+ set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
107
+ cd "%EXEC_DIR%"
108
+
109
+ :endDetectBaseDir
110
+
111
+ IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
112
+
113
+ @setlocal EnableExtensions EnableDelayedExpansion
114
+ for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
115
+ @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
116
+
117
+ :endReadAdditionalConfig
118
+
119
+ SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
120
+ set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
121
+ set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
122
+
123
+ set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar"
124
+
125
+ FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
126
+ IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
127
+ )
128
+
129
+ @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
130
+ @REM This allows using the maven wrapper in projects that prohibit checking in binary data.
131
+ if exist %WRAPPER_JAR% (
132
+ if "%MVNW_VERBOSE%" == "true" (
133
+ echo Found %WRAPPER_JAR%
134
+ )
135
+ ) else (
136
+ if not "%MVNW_REPOURL%" == "" (
137
+ SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar"
138
+ )
139
+ if "%MVNW_VERBOSE%" == "true" (
140
+ echo Couldn't find %WRAPPER_JAR%, downloading it ...
141
+ echo Downloading from: %DOWNLOAD_URL%
142
+ )
143
+
144
+ powershell -Command "&{"^
145
+ "$webclient = new-object System.Net.WebClient;"^
146
+ "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
147
+ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
148
+ "}"^
149
+ "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
150
+ "}"
151
+ if "%MVNW_VERBOSE%" == "true" (
152
+ echo Finished downloading %WRAPPER_JAR%
153
+ )
154
+ )
155
+ @REM End of extension
156
+
157
+ @REM Provide a "standardized" way to retrieve the CLI args that will
158
+ @REM work with both Windows and non-Windows executions.
159
+ set MAVEN_CMD_LINE_ARGS=%*
160
+
161
+ %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
162
+ if ERRORLEVEL 1 goto error
163
+ goto end
164
+
165
+ :error
166
+ set ERROR_CODE=1
167
+
168
+ :end
169
+ @endlocal & set ERROR_CODE=%ERROR_CODE%
170
+
171
+ if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
172
+ @REM check for post script, once with legacy .bat ending and once with .cmd ending
173
+ if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
174
+ if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
175
+ :skipRcPost
176
+
177
+ @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
178
+ if "%MAVEN_BATCH_PAUSE%" == "on" pause
179
+
180
+ if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
181
+
182
+ exit /B %ERROR_CODE%
data/pom.rb CHANGED
@@ -2,11 +2,11 @@ require 'fileutils'
2
2
  project 'joonsrenderer' do
3
3
 
4
4
  model_version '4.0.0'
5
- id 'joons:joonsrenderer:1.1-SNAPSHOT'
5
+ id 'joons:joonsrenderer:1.3.0'
6
6
  packaging 'jar'
7
7
  description 'joonsrenderer for propane and JRubyArt'
8
8
  organization 'ruby-processing', 'https://ruby-processing.github.io'
9
- { 'fpsunflower' => 'Christopher Kulla', 'geneome' => 'Not Known', 'joonhyublee' => 'Joon Hyub Lee', 'monkstone' => 'Martin Prout' }.each do |key, value|
9
+ { 'fpsunflower' => 'Christopher Kulla', 'geneome' => 'Eugene Reilly', 'joonhyublee' => 'Joon Hyub Lee', 'monkstone' => 'Martin Prout' }.each do |key, value|
10
10
  developer key do
11
11
  name value
12
12
  roles 'developer'
@@ -18,12 +18,10 @@ project 'joonsrenderer' do
18
18
  properties( 'source.directory' => 'src',
19
19
  'joonsrenderer.basedir' => '${project.basedir}',
20
20
  'polyglot.dump.pom' => 'pom.xml',
21
- 'maven.compiler.source' => '1.8',
22
21
  'project.build.sourceEncoding' => 'utf-8',
23
- 'maven.compiler.target' => '1.8',
24
- 'janino.version' => '3.0.6',
22
+ 'janino.version' => '3.1.3',
25
23
  'jogl.version' => '2.3.2',
26
- 'processing.version' => '3.2.3'
24
+ 'processing.version' => '3.3.7'
27
25
  )
28
26
 
29
27
  jar 'org.processing:core:${processing.version}'
@@ -33,8 +31,8 @@ project 'joonsrenderer' do
33
31
  jar('org.codehaus.janino:janino:${janino.version}')
34
32
 
35
33
  overrides do
36
- plugin :resources, '2.6'
37
- plugin :dependency, '2.10' do
34
+ plugin :resources, '3.1.0'
35
+ plugin :dependency, '3.1.2' do
38
36
  execute_goals( id: 'default-cli',
39
37
  artifactItems:[
40
38
  { groupId: 'org.codehaus.janino',
@@ -52,24 +50,26 @@ project 'joonsrenderer' do
52
50
  ]
53
51
  )
54
52
  end
55
-
56
- plugin( :compiler, '3.6.0',
57
- source: '${maven.compiler.source}',
58
- target: '${maven.compiler.target}'
59
- )
60
- plugin( :javadoc, '2.10.4',
61
- detect_offline_links: 'false',
62
- )
63
- plugin( :jar, '3.0.2',
64
- 'archive' => {
65
- 'manifestFile' => 'MANIFEST.MF'
66
- }
67
- )
53
+ plugin(:compiler, '3.8.1',
54
+ 'release' => '11')
55
+ plugin(:javadoc, '2.10.4',
56
+ 'detectOfflineLinks' => 'false',
57
+ 'links' => ['${processing.api}',
58
+ '${jruby.api}'])
59
+ plugin(:jar, '3.2.0',
60
+ 'archive' => {
61
+ 'manifestEntries' => {
62
+ 'Automatic-Module-Name' => 'joonsrenderer'
63
+ }
64
+ })
65
+ plugin :jdeps, '3.1.2' do
66
+ execute_goals 'jdkinternals', 'test-jdkinternals'
67
+ end
68
68
  end
69
69
 
70
70
  build do
71
71
  default_goal 'package'
72
- source_directory 'src'
72
+ source_directory '${source.directory}/main/java'
73
73
  final_name 'joonsrenderer'
74
74
  end
75
75
  end
data/pom.xml CHANGED
@@ -6,12 +6,12 @@ DO NOT MODIFIY - GENERATED CODE
6
6
 
7
7
 
8
8
  -->
9
- <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
9
+ <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
10
10
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
11
11
  <modelVersion>4.0.0</modelVersion>
12
12
  <groupId>joons</groupId>
13
13
  <artifactId>joonsrenderer</artifactId>
14
- <version>1.1-SNAPSHOT</version>
14
+ <version>1.3.0</version>
15
15
  <name>joonsrenderer</name>
16
16
  <description>joonsrenderer for propane and JRubyArt</description>
17
17
  <organization>
@@ -34,7 +34,7 @@ DO NOT MODIFIY - GENERATED CODE
34
34
  </developer>
35
35
  <developer>
36
36
  <id>geneome</id>
37
- <name>Not Known</name>
37
+ <name>Eugene Reilly</name>
38
38
  <roles>
39
39
  <role>developer</role>
40
40
  </roles>
@@ -59,15 +59,13 @@ DO NOT MODIFIY - GENERATED CODE
59
59
  <url>https://github.com/monkstone/joonsrenderer/issues</url>
60
60
  </issueManagement>
61
61
  <properties>
62
+ <janino.version>3.1.3</janino.version>
62
63
  <jogl.version>2.3.2</jogl.version>
63
- <source.directory>src</source.directory>
64
64
  <joonsrenderer.basedir>${project.basedir}</joonsrenderer.basedir>
65
- <maven.compiler.target>1.8</maven.compiler.target>
66
- <processing.version>3.2.3</processing.version>
67
- <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
68
- <janino.version>3.0.6</janino.version>
69
65
  <polyglot.dump.pom>pom.xml</polyglot.dump.pom>
70
- <maven.compiler.source>1.8</maven.compiler.source>
66
+ <processing.version>3.3.7</processing.version>
67
+ <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
68
+ <source.directory>src</source.directory>
71
69
  </properties>
72
70
  <dependencies>
73
71
  <dependency>
@@ -97,18 +95,18 @@ DO NOT MODIFIY - GENERATED CODE
97
95
  </dependency>
98
96
  </dependencies>
99
97
  <build>
100
- <sourceDirectory>src</sourceDirectory>
98
+ <sourceDirectory>${source.directory}/main/java</sourceDirectory>
101
99
  <defaultGoal>package</defaultGoal>
102
100
  <finalName>joonsrenderer</finalName>
103
101
  <pluginManagement>
104
102
  <plugins>
105
103
  <plugin>
106
104
  <artifactId>maven-resources-plugin</artifactId>
107
- <version>2.6</version>
105
+ <version>3.1.0</version>
108
106
  </plugin>
109
107
  <plugin>
110
108
  <artifactId>maven-dependency-plugin</artifactId>
111
- <version>2.10</version>
109
+ <version>3.1.2</version>
112
110
  <executions>
113
111
  <execution>
114
112
  <id>default-cli</id>
@@ -135,10 +133,9 @@ DO NOT MODIFIY - GENERATED CODE
135
133
  </plugin>
136
134
  <plugin>
137
135
  <artifactId>maven-compiler-plugin</artifactId>
138
- <version>3.6.0</version>
136
+ <version>3.8.1</version>
139
137
  <configuration>
140
- <source>${maven.compiler.source}</source>
141
- <target>${maven.compiler.target}</target>
138
+ <release>11</release>
142
139
  </configuration>
143
140
  </plugin>
144
141
  <plugin>
@@ -146,17 +143,35 @@ DO NOT MODIFIY - GENERATED CODE
146
143
  <version>2.10.4</version>
147
144
  <configuration>
148
145
  <detectOfflineLinks>false</detectOfflineLinks>
146
+ <links>
147
+ <link>${processing.api}</link>
148
+ <link>${jruby.api}</link>
149
+ </links>
149
150
  </configuration>
150
151
  </plugin>
151
152
  <plugin>
152
153
  <artifactId>maven-jar-plugin</artifactId>
153
- <version>3.0.2</version>
154
+ <version>3.2.0</version>
154
155
  <configuration>
155
156
  <archive>
156
- <manifestFile>MANIFEST.MF</manifestFile>
157
+ <manifestEntries>
158
+ <Automatic-Module-Name>joonsrenderer</Automatic-Module-Name>
159
+ </manifestEntries>
157
160
  </archive>
158
161
  </configuration>
159
162
  </plugin>
163
+ <plugin>
164
+ <artifactId>maven-jdeps-plugin</artifactId>
165
+ <version>3.1.2</version>
166
+ <executions>
167
+ <execution>
168
+ <goals>
169
+ <goal>jdkinternals</goal>
170
+ <goal>test-jdkinternals</goal>
171
+ </goals>
172
+ </execution>
173
+ </executions>
174
+ </plugin>
160
175
  </plugins>
161
176
  </pluginManagement>
162
177
  </build>
@@ -1,7 +1,7 @@
1
1
  import processing.core.PApplet;
2
2
  import joons.JoonsRenderer;
3
3
 
4
- @SuppressWarnings("serial")
4
+
5
5
  public class a_maintest extends PApplet {
6
6
 
7
7
  JoonsRenderer jr;
@@ -1,3 +1,4 @@
1
+ package main.java;
1
2
 
2
3
  import java.awt.BorderLayout;
3
4
  import java.awt.Dimension;
@@ -5,8 +6,8 @@ import java.awt.FlowLayout;
5
6
  import java.awt.Toolkit;
6
7
  import java.awt.datatransfer.DataFlavor;
7
8
  import java.awt.datatransfer.Transferable;
9
+ import java.awt.datatransfer.UnsupportedFlavorException;
8
10
  import java.awt.event.ActionEvent;
9
- import java.awt.event.ActionListener;
10
11
  import java.beans.PropertyVetoException;
11
12
  import java.io.BufferedReader;
12
13
  import java.io.File;
@@ -40,6 +41,7 @@ import javax.swing.SwingUtilities;
40
41
  import javax.swing.TransferHandler;
41
42
  import javax.swing.UIManager;
42
43
  import javax.swing.UIManager.LookAndFeelInfo;
44
+ import javax.swing.UnsupportedLookAndFeelException;
43
45
  import javax.swing.filechooser.FileFilter;
44
46
  import javax.swing.plaf.metal.DefaultMetalTheme;
45
47
  import javax.swing.plaf.metal.MetalLookAndFeel;
@@ -198,196 +200,216 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
198
200
  String translateFilename = null;
199
201
  int frameStart = 1, frameStop = 1;
200
202
  while (i < args.length) {
201
- if (args[i].equals("-o")) {
202
- if (i > args.length - 2) {
203
- usage(false);
204
- }
205
- filename = args[i + 1];
206
- i += 2;
207
- } else if (args[i].equals("-nogui")) {
208
- showFrame = false;
209
- i++;
210
- } else if (args[i].equals("-ipr")) {
211
- sampler = "ipr";
212
- i++;
213
- } else if (args[i].equals("-threads")) {
214
- if (i > args.length - 2) {
215
- usage(false);
216
- }
217
- threads = Integer.parseInt(args[i + 1]);
218
- i += 2;
219
- } else if (args[i].equals("-lopri")) {
220
- lowPriority = true;
221
- i++;
222
- } else if (args[i].equals("-hipri")) {
223
- lowPriority = false;
224
- i++;
225
- } else if (args[i].equals("-sampler")) {
226
- if (i > args.length - 2) {
227
- usage(false);
228
- }
229
- sampler = args[i + 1];
230
- i += 2;
231
- } else if (args[i].equals("-smallmesh")) {
232
- TriangleMesh.setSmallTriangles(true);
233
- i++;
234
- } else if (args[i].equals("-dumpkd")) {
235
- KDTree.setDumpMode(true, "kdtree");
236
- i++;
237
- } else if (args[i].equals("-buildonly")) {
238
- noRender = true;
239
- i++;
240
- } else if (args[i].equals("-showaa")) {
241
- showAA = true;
242
- i++;
243
- } else if (args[i].equals("-nogi")) {
244
- noGI = true;
245
- i++;
246
- } else if (args[i].equals("-nocaustics")) {
247
- noCaustics = true;
248
- i++;
249
- } else if (args[i].equals("-pathgi")) {
250
- if (i > args.length - 2) {
251
- usage(false);
252
- }
253
- pathGI = Integer.parseInt(args[i + 1]);
254
- i += 2;
255
- } else if (args[i].equals("-quick_ambocc")) {
256
- if (i > args.length - 2) {
257
- usage(false);
258
- }
259
- maxDist = Float.parseFloat(args[i + 1]);
260
- shaderOverride = "ambient_occlusion"; // new
261
- // AmbientOcclusionShader(Color.WHITE,
262
- // d);
263
- i += 2;
264
- } else if (args[i].equals("-quick_uvs")) {
265
- if (i > args.length - 1) {
266
- usage(false);
267
- }
268
- shaderOverride = "show_uvs";
269
- i++;
270
- } else if (args[i].equals("-quick_normals")) {
271
- if (i > args.length - 1) {
272
- usage(false);
273
- }
274
- shaderOverride = "show_normals";
275
- i++;
276
- } else if (args[i].equals("-quick_id")) {
277
- if (i > args.length - 1) {
278
- usage(false);
279
- }
280
- shaderOverride = "show_instance_id";
281
- i++;
282
- } else if (args[i].equals("-quick_prims")) {
283
- if (i > args.length - 1) {
284
- usage(false);
285
- }
286
- shaderOverride = "show_primitive_id";
287
- i++;
288
- } else if (args[i].equals("-quick_gray")) {
289
- if (i > args.length - 1) {
290
- usage(false);
291
- }
292
- shaderOverride = "quick_gray";
293
- i++;
294
- } else if (args[i].equals("-quick_wire")) {
295
- if (i > args.length - 1) {
296
- usage(false);
297
- }
298
- shaderOverride = "wireframe";
299
- i++;
300
- } else if (args[i].equals("-resolution")) {
301
- if (i > args.length - 3) {
302
- usage(false);
303
- }
304
- resolutionW = Integer.parseInt(args[i + 1]);
305
- resolutionH = Integer.parseInt(args[i + 2]);
306
- i += 3;
307
- } else if (args[i].equals("-aa")) {
308
- if (i > args.length - 3) {
309
- usage(false);
310
- }
311
- aaMin = Integer.parseInt(args[i + 1]);
312
- aaMax = Integer.parseInt(args[i + 2]);
313
- i += 3;
314
- } else if (args[i].equals("-samples")) {
315
- if (i > args.length - 2) {
316
- usage(false);
317
- }
318
- samples = Integer.parseInt(args[i + 1]);
319
- i += 2;
320
- } else if (args[i].equals("-bucket")) {
321
- if (i > args.length - 3) {
322
- usage(false);
323
- }
324
- bucketSize = Integer.parseInt(args[i + 1]);
325
- bucketOrder = args[i + 2];
326
- i += 3;
327
- } else if (args[i].equals("-bake")) {
328
- if (i > args.length - 2) {
329
- usage(false);
330
- }
331
- bakingName = args[i + 1];
332
- i += 2;
333
- } else if (args[i].equals("-bakedir")) {
334
- if (i > args.length - 2) {
335
- usage(false);
336
- }
337
- String baketype = args[i + 1];
338
- if (baketype.equals("view")) {
339
- bakeViewdep = true;
340
- } else if (baketype.equals("ortho")) {
341
- bakeViewdep = false;
342
- } else {
343
- usage(false);
344
- }
345
- i += 2;
346
- } else if (args[i].equals("-filter")) {
347
- if (i > args.length - 2) {
348
- usage(false);
349
- }
350
- filterType = args[i + 1];
351
- i += 2;
352
- } else if (args[i].equals("-bench")) {
353
- runBenchmark = true;
354
- i++;
355
- } else if (args[i].equals("-rtbench")) {
356
- runRTBenchmark = true;
357
- i++;
358
- } else if (args[i].equals("-frame")) {
359
- if (i > args.length - 2) {
360
- usage(false);
361
- }
362
- frameStart = frameStop = Integer.parseInt(args[i + 1]);
363
- i += 2;
364
- } else if (args[i].equals("-anim")) {
365
- if (i > args.length - 3) {
366
- usage(false);
367
- }
368
- frameStart = Integer.parseInt(args[i + 1]);
369
- frameStop = Integer.parseInt(args[i + 2]);
370
- i += 3;
371
- } else if (args[i].equals("-v")) {
372
- if (i > args.length - 2) {
373
- usage(false);
374
- }
375
- UI.verbosity(Integer.parseInt(args[i + 1]));
376
- i += 2;
377
- } else if (args[i].equals("-translate")) {
378
- if (i > args.length - 2) {
379
- usage(false);
380
- }
381
- translateFilename = args[i + 1];
382
- i += 2;
383
- } else if (args[i].equals("-h") || args[i].equals("-help")) {
384
- usage(true);
385
- } else {
386
- if (input != null) {
387
- usage(false);
203
+ switch (args[i]) {
204
+ case "-o":
205
+ if (i > args.length - 2) {
206
+ usage(false);
207
+ } filename = args[i + 1];
208
+ i += 2;
209
+ break;
210
+ case "-nogui":
211
+ showFrame = false;
212
+ i++;
213
+ break;
214
+ case "-ipr":
215
+ sampler = "ipr";
216
+ i++;
217
+ break;
218
+ case "-threads":
219
+ if (i > args.length - 2) {
220
+ usage(false);
221
+ } threads = Integer.parseInt(args[i + 1]);
222
+ i += 2;
223
+ break;
224
+ case "-lopri":
225
+ lowPriority = true;
226
+ i++;
227
+ break;
228
+ case "-hipri":
229
+ lowPriority = false;
230
+ i++;
231
+ break;
232
+ case "-sampler":
233
+ if (i > args.length - 2) {
234
+ usage(false);
235
+ } sampler = args[i + 1];
236
+ i += 2;
237
+ break;
238
+ case "-smallmesh":
239
+ TriangleMesh.setSmallTriangles(true);
240
+ i++;
241
+ break;
242
+ case "-dumpkd":
243
+ KDTree.setDumpMode(true, "kdtree");
244
+ i++;
245
+ break;
246
+ case "-buildonly":
247
+ noRender = true;
248
+ i++;
249
+ break;
250
+ case "-showaa":
251
+ showAA = true;
252
+ i++;
253
+ break;
254
+ case "-nogi":
255
+ noGI = true;
256
+ i++;
257
+ break;
258
+ case "-nocaustics":
259
+ noCaustics = true;
260
+ i++;
261
+ break;
262
+ case "-pathgi":
263
+ if (i > args.length - 2) {
264
+ usage(false);
265
+ } pathGI = Integer.parseInt(args[i + 1]);
266
+ i += 2;
267
+ break;
268
+ case "-quick_ambocc":
269
+ if (i > args.length - 2) {
270
+ usage(false);
271
+ } maxDist = Float.parseFloat(args[i + 1]);
272
+ shaderOverride = "ambient_occlusion"; // new
273
+ // AmbientOcclusionShader(Color.WHITE,
274
+ // d);
275
+ i += 2;
276
+ break;
277
+ case "-quick_uvs":
278
+ if (i > args.length - 1) {
279
+ usage(false);
280
+ } shaderOverride = "show_uvs";
281
+ i++;
282
+ break;
283
+ case "-quick_normals":
284
+ if (i > args.length - 1) {
285
+ usage(false);
286
+ } shaderOverride = "show_normals";
287
+ i++;
288
+ break;
289
+ case "-quick_id":
290
+ if (i > args.length - 1) {
291
+ usage(false);
292
+ } shaderOverride = "show_instance_id";
293
+ i++;
294
+ break;
295
+ case "-quick_prims":
296
+ if (i > args.length - 1) {
297
+ usage(false);
298
+ } shaderOverride = "show_primitive_id";
299
+ i++;
300
+ break;
301
+ case "-quick_gray":
302
+ if (i > args.length - 1) {
303
+ usage(false);
304
+ } shaderOverride = "quick_gray";
305
+ i++;
306
+ break;
307
+ case "-quick_wire":
308
+ if (i > args.length - 1) {
309
+ usage(false);
310
+ } shaderOverride = "wireframe";
311
+ i++;
312
+ break;
313
+ case "-resolution":
314
+ if (i > args.length - 3) {
315
+ usage(false);
316
+ } resolutionW = Integer.parseInt(args[i + 1]);
317
+ resolutionH = Integer.parseInt(args[i + 2]);
318
+ i += 3;
319
+ break;
320
+ case "-aa":
321
+ if (i > args.length - 3) {
322
+ usage(false);
323
+ } aaMin = Integer.parseInt(args[i + 1]);
324
+ aaMax = Integer.parseInt(args[i + 2]);
325
+ i += 3;
326
+ break;
327
+ case "-samples":
328
+ if (i > args.length - 2) {
329
+ usage(false);
330
+ } samples = Integer.parseInt(args[i + 1]);
331
+ i += 2;
332
+ break;
333
+ case "-bucket":
334
+ if (i > args.length - 3) {
335
+ usage(false);
336
+ } bucketSize = Integer.parseInt(args[i + 1]);
337
+ bucketOrder = args[i + 2];
338
+ i += 3;
339
+ break;
340
+ case "-bake":
341
+ if (i > args.length - 2) {
342
+ usage(false);
343
+ } bakingName = args[i + 1];
344
+ i += 2;
345
+ break;
346
+ case "-bakedir":
347
+ if (i > args.length - 2) {
348
+ usage(false);
349
+ } String baketype = args[i + 1];
350
+ switch (baketype) {
351
+ case "view":
352
+ bakeViewdep = true;
353
+ break;
354
+ case "ortho":
355
+ bakeViewdep = false;
356
+ break;
357
+ default:
358
+ usage(false);
359
+ break;
388
360
  }
389
- input = args[i];
390
- i++;
361
+ i += 2;
362
+ break;
363
+
364
+ case "-filter":
365
+ if (i > args.length - 2) {
366
+ usage(false);
367
+ } filterType = args[i + 1];
368
+ i += 2;
369
+ break;
370
+ case "-bench":
371
+ runBenchmark = true;
372
+ i++;
373
+ break;
374
+ case "-rtbench":
375
+ runRTBenchmark = true;
376
+ i++;
377
+ break;
378
+ case "-frame":
379
+ if (i > args.length - 2) {
380
+ usage(false);
381
+ } frameStart = frameStop = Integer.parseInt(args[i + 1]);
382
+ i += 2;
383
+ break;
384
+ case "-anim":
385
+ if (i > args.length - 3) {
386
+ usage(false);
387
+ } frameStart = Integer.parseInt(args[i + 1]);
388
+ frameStop = Integer.parseInt(args[i + 2]);
389
+ i += 3;
390
+ break;
391
+ case "-v":
392
+ if (i > args.length - 2) {
393
+ usage(false);
394
+ } UI.verbosity(Integer.parseInt(args[i + 1]));
395
+ i += 2;
396
+ break;
397
+ case "-translate":
398
+ if (i > args.length - 2) {
399
+ usage(false);
400
+ } translateFilename = args[i + 1];
401
+ i += 2;
402
+ break;
403
+ case "-h":
404
+ case "-help":
405
+ usage(true);
406
+ break;
407
+ default:
408
+ if (input != null) {
409
+ usage(false);
410
+ } input = args[i];
411
+ i++;
412
+ break;
391
413
  }
392
414
  }
393
415
  if (runBenchmark) {
@@ -495,7 +517,7 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
495
517
  break;
496
518
  }
497
519
  }
498
- } catch (Exception e) {
520
+ } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | UnsupportedLookAndFeelException e) {
499
521
  // If Nimbus is not available, you can set the GUI to another look and feel.
500
522
  MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
501
523
  }
@@ -548,22 +570,16 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
548
570
  renderButton = new JButton();
549
571
  jPanel1.add(renderButton);
550
572
  renderButton.setText("Render");
551
- renderButton.addActionListener(new ActionListener() {
552
- @Override
553
- public void actionPerformed(ActionEvent evt) {
554
- renderMenuItemActionPerformed(evt);
555
- }
573
+ renderButton.addActionListener((ActionEvent evt) -> {
574
+ renderMenuItemActionPerformed(evt);
556
575
  });
557
576
  }
558
577
  {
559
578
  iprButton = new JButton();
560
579
  jPanel1.add(iprButton);
561
580
  iprButton.setText("IPR");
562
- iprButton.addActionListener(new ActionListener() {
563
- @Override
564
- public void actionPerformed(ActionEvent evt) {
565
- iprMenuItemActionPerformed(evt);
566
- }
581
+ iprButton.addActionListener((ActionEvent evt) -> {
582
+ iprMenuItemActionPerformed(evt);
567
583
  });
568
584
  }
569
585
  }
@@ -608,11 +624,8 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
608
624
  buildButton = new JButton();
609
625
  jPanel3.add(buildButton);
610
626
  buildButton.setText("Build Scene");
611
- buildButton.addActionListener(new ActionListener() {
612
- @Override
613
- public void actionPerformed(ActionEvent evt) {
614
- buildMenuItemActionPerformed(evt);
615
- }
627
+ buildButton.addActionListener((ActionEvent evt) -> {
628
+ buildMenuItemActionPerformed(evt);
616
629
  });
617
630
  }
618
631
  }
@@ -669,22 +682,16 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
669
682
  jPanel5.add(taskCancelButton);
670
683
  taskCancelButton.setText("Cancel");
671
684
  taskCancelButton.setEnabled(false);
672
- taskCancelButton.addActionListener(new ActionListener() {
673
- @Override
674
- public void actionPerformed(ActionEvent evt) {
675
- UI.taskCancel();
676
- }
685
+ taskCancelButton.addActionListener((ActionEvent evt) -> {
686
+ UI.taskCancel();
677
687
  });
678
688
  }
679
689
  {
680
690
  clearConsoleButton = new JButton();
681
691
  jPanel5.add(clearConsoleButton);
682
692
  clearConsoleButton.setText("Clear");
683
- clearConsoleButton.addActionListener(new ActionListener() {
684
- @Override
685
- public void actionPerformed(ActionEvent evt) {
686
- clearConsole();
687
- }
693
+ clearConsoleButton.addActionListener((ActionEvent evt) -> {
694
+ clearConsole();
688
695
  });
689
696
  }
690
697
  }
@@ -705,11 +712,8 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
705
712
  fileMenu.add(newFileMenuItem);
706
713
  newFileMenuItem.setText("New");
707
714
  newFileMenuItem.setAccelerator(KeyStroke.getKeyStroke("ctrl N"));
708
- newFileMenuItem.addActionListener(new ActionListener() {
709
- @Override
710
- public void actionPerformed(ActionEvent evt) {
711
- newFileMenuItemActionPerformed(evt);
712
- }
715
+ newFileMenuItem.addActionListener((ActionEvent evt) -> {
716
+ newFileMenuItemActionPerformed(evt);
713
717
  });
714
718
  }
715
719
  {
@@ -717,11 +721,8 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
717
721
  fileMenu.add(openFileMenuItem);
718
722
  openFileMenuItem.setText("Open ...");
719
723
  openFileMenuItem.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));
720
- openFileMenuItem.addActionListener(new ActionListener() {
721
- @Override
722
- public void actionPerformed(ActionEvent evt) {
723
- openFileMenuItemActionPerformed(evt);
724
- }
724
+ openFileMenuItem.addActionListener((ActionEvent evt) -> {
725
+ openFileMenuItemActionPerformed(evt);
725
726
  });
726
727
  }
727
728
  {
@@ -729,22 +730,16 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
729
730
  fileMenu.add(saveMenuItem);
730
731
  saveMenuItem.setText("Save");
731
732
  saveMenuItem.setAccelerator(KeyStroke.getKeyStroke("ctrl S"));
732
- saveMenuItem.addActionListener(new ActionListener() {
733
- @Override
734
- public void actionPerformed(ActionEvent evt) {
735
- saveCurrentFile(currentFile);
736
- }
733
+ saveMenuItem.addActionListener((ActionEvent evt) -> {
734
+ saveCurrentFile(currentFile);
737
735
  });
738
736
  }
739
737
  {
740
738
  saveAsMenuItem = new JMenuItem();
741
739
  fileMenu.add(saveAsMenuItem);
742
740
  saveAsMenuItem.setText("Save As ...");
743
- saveAsMenuItem.addActionListener(new ActionListener() {
744
- @Override
745
- public void actionPerformed(ActionEvent evt) {
746
- saveAsMenuItemActionPerformed(evt);
747
- }
741
+ saveAsMenuItem.addActionListener((ActionEvent evt) -> {
742
+ saveAsMenuItemActionPerformed(evt);
748
743
  });
749
744
  }
750
745
  {
@@ -755,11 +750,8 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
755
750
  exitMenuItem = new JMenuItem();
756
751
  fileMenu.add(exitMenuItem);
757
752
  exitMenuItem.setText("Exit");
758
- exitMenuItem.addActionListener(new ActionListener() {
759
- @Override
760
- public void actionPerformed(ActionEvent evt) {
761
- System.exit(0);
762
- }
753
+ exitMenuItem.addActionListener((ActionEvent evt) -> {
754
+ System.exit(0);
763
755
  });
764
756
  }
765
757
  }
@@ -772,12 +764,9 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
772
764
  sceneMenu.add(buildMenuItem);
773
765
  buildMenuItem.setText("Build");
774
766
  buildMenuItem.setAccelerator(KeyStroke.getKeyStroke("ctrl B"));
775
- buildMenuItem.addActionListener(new ActionListener() {
776
- @Override
777
- public void actionPerformed(ActionEvent evt) {
778
- if (sceneMenu.isEnabled()) {
779
- buildMenuItemActionPerformed(evt);
780
- }
767
+ buildMenuItem.addActionListener((ActionEvent evt) -> {
768
+ if (sceneMenu.isEnabled()) {
769
+ buildMenuItemActionPerformed(evt);
781
770
  }
782
771
  });
783
772
  }
@@ -795,22 +784,16 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
795
784
  renderMenuItem = new JMenuItem();
796
785
  sceneMenu.add(renderMenuItem);
797
786
  renderMenuItem.setText("Render");
798
- renderMenuItem.addActionListener(new ActionListener() {
799
- @Override
800
- public void actionPerformed(ActionEvent evt) {
801
- renderMenuItemActionPerformed(evt);
802
- }
787
+ renderMenuItem.addActionListener((ActionEvent evt) -> {
788
+ renderMenuItemActionPerformed(evt);
803
789
  });
804
790
  }
805
791
  {
806
792
  iprMenuItem = new JMenuItem();
807
793
  sceneMenu.add(iprMenuItem);
808
794
  iprMenuItem.setText("IPR");
809
- iprMenuItem.addActionListener(new ActionListener() {
810
- @Override
811
- public void actionPerformed(ActionEvent evt) {
812
- iprMenuItemActionPerformed(evt);
813
- }
795
+ iprMenuItem.addActionListener((ActionEvent evt) -> {
796
+ iprMenuItemActionPerformed(evt);
814
797
  });
815
798
  }
816
799
  {
@@ -828,11 +811,8 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
828
811
  textureCacheClearMenuItem = new JMenuItem();
829
812
  sceneMenu.add(textureCacheClearMenuItem);
830
813
  textureCacheClearMenuItem.setText("Clear Texture Cache");
831
- textureCacheClearMenuItem.addActionListener(new ActionListener() {
832
- @Override
833
- public void actionPerformed(ActionEvent evt) {
834
- textureCacheClearMenuItemActionPerformed(evt);
835
- }
814
+ textureCacheClearMenuItem.addActionListener((ActionEvent evt) -> {
815
+ textureCacheClearMenuItemActionPerformed(evt);
836
816
  });
837
817
  }
838
818
  {
@@ -840,11 +820,8 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
840
820
  sceneMenu.add(smallTrianglesMenuItem);
841
821
  smallTrianglesMenuItem.setText("Low Mem Triangles");
842
822
  smallTrianglesMenuItem.setToolTipText("Load future meshes using a low memory footprint triangle representation");
843
- smallTrianglesMenuItem.addActionListener(new ActionListener() {
844
- @Override
845
- public void actionPerformed(ActionEvent evt) {
846
- smallTrianglesMenuItemActionPerformed(evt);
847
- }
823
+ smallTrianglesMenuItem.addActionListener((ActionEvent evt) -> {
824
+ smallTrianglesMenuItemActionPerformed(evt);
848
825
  });
849
826
  }
850
827
  }
@@ -856,22 +833,16 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
856
833
  resetZoomMenuItem = new JMenuItem();
857
834
  imageMenu.add(resetZoomMenuItem);
858
835
  resetZoomMenuItem.setText("Reset Zoom");
859
- resetZoomMenuItem.addActionListener(new ActionListener() {
860
- @Override
861
- public void actionPerformed(ActionEvent evt) {
862
- imagePanel.reset();
863
- }
836
+ resetZoomMenuItem.addActionListener((ActionEvent evt) -> {
837
+ imagePanel.reset();
864
838
  });
865
839
  }
866
840
  {
867
841
  fitWindowMenuItem = new JMenuItem();
868
842
  imageMenu.add(fitWindowMenuItem);
869
843
  fitWindowMenuItem.setText("Fit to Window");
870
- fitWindowMenuItem.addActionListener(new ActionListener() {
871
- @Override
872
- public void actionPerformed(ActionEvent evt) {
873
- imagePanel.fit();
874
- }
844
+ fitWindowMenuItem.addActionListener((ActionEvent evt) -> {
845
+ imagePanel.fit();
875
846
  });
876
847
  }
877
848
  {
@@ -882,26 +853,23 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
882
853
  jMenuItem4 = new JMenuItem();
883
854
  imageMenu.add(jMenuItem4);
884
855
  jMenuItem4.setText("Save Image ...");
885
- jMenuItem4.addActionListener(new ActionListener() {
886
- @Override
887
- public void actionPerformed(ActionEvent evt) {
888
- // imagePanel.image;
889
- JFileChooser fc = new JFileChooser(".");
890
- fc.setFileFilter(new FileFilter() {
891
- @Override
892
- public String getDescription() {
893
- return "Image File";
894
- }
895
-
896
- @Override
897
- public boolean accept(File f) {
898
- return (f.isDirectory() || f.getName().endsWith(".png") || f.getName().endsWith(".tga"));
899
- }
900
- });
901
- if (fc.showSaveDialog(SunflowGUI.this) == JFileChooser.APPROVE_OPTION) {
902
- String filename = fc.getSelectedFile().getAbsolutePath();
903
- imagePanel.save(filename);
856
+ jMenuItem4.addActionListener((ActionEvent evt) -> {
857
+ // imagePanel.image;
858
+ JFileChooser fc = new JFileChooser(".");
859
+ fc.setFileFilter(new FileFilter() {
860
+ @Override
861
+ public String getDescription() {
862
+ return "Image File";
904
863
  }
864
+
865
+ @Override
866
+ public boolean accept(File f) {
867
+ return (f.isDirectory() || f.getName().endsWith(".png") || f.getName().endsWith(".tga"));
868
+ }
869
+ });
870
+ if (fc.showSaveDialog(SunflowGUI.this) == JFileChooser.APPROVE_OPTION) {
871
+ String filename = fc.getSelectedFile().getAbsolutePath();
872
+ imagePanel.save(filename);
905
873
  }
906
874
  });
907
875
  }
@@ -916,11 +884,8 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
916
884
  windowMenu.add(imageWindowMenuItem);
917
885
  imageWindowMenuItem.setText("Image");
918
886
  imageWindowMenuItem.setAccelerator(KeyStroke.getKeyStroke("ctrl 1"));
919
- imageWindowMenuItem.addActionListener(new ActionListener() {
920
- @Override
921
- public void actionPerformed(ActionEvent evt) {
922
- selectFrame(imagePanelFrame);
923
- }
887
+ imageWindowMenuItem.addActionListener((ActionEvent evt) -> {
888
+ selectFrame(imagePanelFrame);
924
889
  });
925
890
  }
926
891
  {
@@ -928,11 +893,8 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
928
893
  windowMenu.add(editorWindowMenuItem);
929
894
  editorWindowMenuItem.setText("Script Editor");
930
895
  editorWindowMenuItem.setAccelerator(KeyStroke.getKeyStroke("ctrl 2"));
931
- editorWindowMenuItem.addActionListener(new ActionListener() {
932
- @Override
933
- public void actionPerformed(ActionEvent evt) {
934
- selectFrame(editorFrame);
935
- }
896
+ editorWindowMenuItem.addActionListener((ActionEvent evt) -> {
897
+ selectFrame(editorFrame);
936
898
  });
937
899
  }
938
900
  {
@@ -940,11 +902,8 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
940
902
  windowMenu.add(consoleWindowMenuItem);
941
903
  consoleWindowMenuItem.setText("Console");
942
904
  consoleWindowMenuItem.setAccelerator(KeyStroke.getKeyStroke("ctrl 3"));
943
- consoleWindowMenuItem.addActionListener(new ActionListener() {
944
- @Override
945
- public void actionPerformed(ActionEvent evt) {
946
- selectFrame(consoleFrame);
947
- }
905
+ consoleWindowMenuItem.addActionListener((ActionEvent evt) -> {
906
+ selectFrame(consoleFrame);
948
907
  });
949
908
  }
950
909
  {
@@ -956,11 +915,8 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
956
915
  windowMenu.add(tileWindowMenuItem);
957
916
  tileWindowMenuItem.setText("Tile");
958
917
  tileWindowMenuItem.setAccelerator(KeyStroke.getKeyStroke("ctrl T"));
959
- tileWindowMenuItem.addActionListener(new ActionListener() {
960
- @Override
961
- public void actionPerformed(ActionEvent evt) {
962
- tileWindowMenuItemActionPerformed(evt);
963
- }
918
+ tileWindowMenuItem.addActionListener((ActionEvent evt) -> {
919
+ tileWindowMenuItemActionPerformed(evt);
964
920
  });
965
921
  }
966
922
  }
@@ -1045,11 +1001,8 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
1045
1001
  }
1046
1002
 
1047
1003
  private void println(final String s) {
1048
- SwingUtilities.invokeLater(new Runnable() {
1049
- @Override
1050
- public void run() {
1051
- consoleTextArea.append(s + "\n");
1052
- }
1004
+ SwingUtilities.invokeLater(() -> {
1005
+ consoleTextArea.append(s + "\n");
1053
1006
  });
1054
1007
  }
1055
1008
 
@@ -1079,16 +1032,13 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
1079
1032
  currentTaskLastP = -1;
1080
1033
  final int taskMin = min;
1081
1034
  final int taskMax = max;
1082
- SwingUtilities.invokeLater(new Runnable() {
1083
- @Override
1084
- public void run() {
1085
- taskProgressBar.setEnabled(true);
1086
- taskCancelButton.setEnabled(true);
1087
- taskProgressBar.setMinimum(taskMin);
1088
- taskProgressBar.setMaximum(taskMax);
1089
- taskProgressBar.setValue(taskMin);
1090
- taskProgressBar.setString(currentTask);
1091
- }
1035
+ SwingUtilities.invokeLater(() -> {
1036
+ taskProgressBar.setEnabled(true);
1037
+ taskCancelButton.setEnabled(true);
1038
+ taskProgressBar.setMinimum(taskMin);
1039
+ taskProgressBar.setMaximum(taskMax);
1040
+ taskProgressBar.setValue(taskMin);
1041
+ taskProgressBar.setString(currentTask);
1092
1042
  });
1093
1043
  }
1094
1044
 
@@ -1096,29 +1046,23 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
1096
1046
  public void taskUpdate(int current) {
1097
1047
  final int taskCurrent = current;
1098
1048
  final String taskString = currentTask;
1099
- SwingUtilities.invokeLater(new Runnable() {
1100
- @Override
1101
- public void run() {
1102
- taskProgressBar.setValue(taskCurrent);
1103
- int p = (int) (100.0 * taskProgressBar.getPercentComplete());
1104
- if (p > currentTaskLastP) {
1105
- taskProgressBar.setString(taskString + " [" + p + "%]");
1106
- currentTaskLastP = p;
1107
- }
1049
+ SwingUtilities.invokeLater(() -> {
1050
+ taskProgressBar.setValue(taskCurrent);
1051
+ int p = (int) (100.0 * taskProgressBar.getPercentComplete());
1052
+ if (p > currentTaskLastP) {
1053
+ taskProgressBar.setString(taskString + " [" + p + "%]");
1054
+ currentTaskLastP = p;
1108
1055
  }
1109
1056
  });
1110
1057
  }
1111
1058
 
1112
1059
  @Override
1113
1060
  public void taskStop() {
1114
- SwingUtilities.invokeLater(new Runnable() {
1115
- @Override
1116
- public void run() {
1117
- taskProgressBar.setValue(taskProgressBar.getMinimum());
1118
- taskProgressBar.setString("");
1119
- taskProgressBar.setEnabled(false);
1120
- taskCancelButton.setEnabled(false);
1121
- }
1061
+ SwingUtilities.invokeLater(() -> {
1062
+ taskProgressBar.setValue(taskProgressBar.getMinimum());
1063
+ taskProgressBar.setString("");
1064
+ taskProgressBar.setEnabled(false);
1065
+ taskCancelButton.setEnabled(false);
1122
1066
  });
1123
1067
  }
1124
1068
 
@@ -1330,7 +1274,7 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
1330
1274
  break;
1331
1275
  }
1332
1276
  }
1333
- } catch (Exception exp) {
1277
+ } catch (UnsupportedFlavorException | IOException exp) {
1334
1278
  Logger.getLogger(SunflowGUI.class.getName()).log(Level.SEVERE, null, exp);
1335
1279
  }
1336
1280
 
@@ -1341,8 +1285,8 @@ public class SunflowGUI extends javax.swing.JFrame implements UserInterface {
1341
1285
  public boolean canImport(JComponent c, DataFlavor[] flavors) {
1342
1286
  // Just a quick check to see if a file can be accepted at this time
1343
1287
  // Are there any files around?
1344
- for (int i = 0; i < flavors.length; i++) {
1345
- if (flavors[i].isFlavorJavaFileListType()) {
1288
+ for (DataFlavor flavor : flavors) {
1289
+ if (flavor.isFlavorJavaFileListType()) {
1346
1290
  return true;
1347
1291
  }
1348
1292
  }