Compare commits
54 Commits
262
...
avu/scr_te
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e309845093 | ||
|
|
e838103a24 | ||
|
|
e7ca6db66b | ||
|
|
d9656a178b | ||
|
|
5f6351b0c4 | ||
|
|
c3a0ec902d | ||
|
|
567d96c428 | ||
|
|
1666f05b23 | ||
|
|
ae823a660b | ||
|
|
f6a31f444c | ||
|
|
a1b4cd964a | ||
|
|
5845719fe5 | ||
|
|
dae56a9e8b | ||
|
|
9cc97b0c00 | ||
|
|
936dc2c40b | ||
|
|
db6c43b6f4 | ||
|
|
bd9a95d6fb | ||
|
|
8d9bac395e | ||
|
|
f652c790f4 | ||
|
|
8e59bb2f09 | ||
|
|
c8533a1219 | ||
|
|
f35489e8ca | ||
|
|
3ad94911af | ||
|
|
31629b719d | ||
|
|
0e3ce4aa6a | ||
|
|
4cef4a36c7 | ||
|
|
7a05ec59e0 | ||
|
|
26807f5975 | ||
|
|
85dad30333 | ||
|
|
9f7289d5ef | ||
|
|
14d51243c6 | ||
|
|
350a3fdef3 | ||
|
|
ae087bad40 | ||
|
|
74b2cb3607 | ||
|
|
63f98e40a6 | ||
|
|
5547701e2c | ||
|
|
1ca0a3f140 | ||
|
|
194b2d939f | ||
|
|
943b1472c7 | ||
|
|
83c22de72e | ||
|
|
62d057516d | ||
|
|
e57384c1d6 | ||
|
|
3655b01149 | ||
|
|
5f9b3a6dda | ||
|
|
cab6dd5087 | ||
|
|
e4b063cb1f | ||
|
|
bbd90315c9 | ||
|
|
c93b853a2b | ||
|
|
d65279cdc1 | ||
|
|
6c71f3a853 | ||
|
|
95a5c1661b | ||
|
|
153020320d | ||
|
|
23e2ac4c4e | ||
|
|
29ec6c2bce |
2
jb/project/java-gradle/.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# Default ignored files
|
||||
/workspace.xml
|
||||
9
jb/project/java-gradle/.idea/compiler.xml
generated
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel>
|
||||
<module name="java-gradle.main" target="11" />
|
||||
<module name="java-gradle.test" target="11" />
|
||||
</bytecodeTargetLevel>
|
||||
</component>
|
||||
</project>
|
||||
20
jb/project/java-gradle/.idea/gradle.xml
generated
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="gradleHome" value="/usr/share/gradle" />
|
||||
<option name="gradleJvm" value="11" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
</set>
|
||||
</option>
|
||||
<option name="useAutoImport" value="true" />
|
||||
<option name="useQualifiedModuleNames" value="true" />
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,11 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: com.twelvemonkeys.common:common-image:3.3.2">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.twelvemonkeys.common/common-image/3.3.2/9c975152864050c6dbb7226ca1100694f0aa099d/common-image-3.3.2.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.twelvemonkeys.common/common-image/3.3.2/e6fb35a9825421ec5a634af328e22546992d536d/common-image-3.3.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
@@ -1,11 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: com.twelvemonkeys.common:common-io:3.3.2">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.twelvemonkeys.common/common-io/3.3.2/e00b1c744993864d3c8dc698ba7d356122019398/common-io-3.3.2.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.twelvemonkeys.common/common-io/3.3.2/dbb242585fdfd353dc4c2c0e8b3d8b0383dffbb2/common-io-3.3.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
@@ -1,11 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: com.twelvemonkeys.common:common-lang:3.3.2">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.twelvemonkeys.common/common-lang/3.3.2/ffbc5e05208c5c9cb43052438294c3ec5546aecf/common-lang-3.3.2.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.twelvemonkeys.common/common-lang/3.3.2/b695db345614a2b9344fd43a44d9ce722df4b39/common-lang-3.3.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
@@ -1,11 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: com.twelvemonkeys.imageio:imageio-core:3.3.2">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.twelvemonkeys.imageio/imageio-core/3.3.2/8def41c756831dde3c23f2d525e5667cfbfa1847/imageio-core-3.3.2.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.twelvemonkeys.imageio/imageio-core/3.3.2/abcb2beaf21364467afe0e33824dce5730bef0c3/imageio-core-3.3.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
@@ -1,11 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: com.twelvemonkeys.imageio:imageio-metadata:3.3.2">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.twelvemonkeys.imageio/imageio-metadata/3.3.2/b8a31725bde0dc6f4e6b01711784f5ca0a2275f3/imageio-metadata-3.3.2.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.twelvemonkeys.imageio/imageio-metadata/3.3.2/6fc3b223c81afbd4b829e2c924c096aab3ed0e9e/imageio-metadata-3.3.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
@@ -1,11 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: com.twelvemonkeys.imageio:imageio-tiff:3.3.2">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.twelvemonkeys.imageio/imageio-tiff/3.3.2/9bea1214eae7d287dc0c685fb6be75102318d080/imageio-tiff-3.3.2.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.twelvemonkeys.imageio/imageio-tiff/3.3.2/cae5b3540dc01889dc9560db86f5f61bdc253107/imageio-tiff-3.3.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
@@ -1,11 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: junit:junit:4.12">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/2973d150c0dc1fefe998f834810d68f278ea58ec/junit-4.12.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/a6c32b40bf3d76eca54e3c601e5d1470c86fcdfa/junit-4.12-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
@@ -1,11 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: net.java.dev.jna:jna:4.4.0">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna/4.4.0/cb208278274bf12ebdb56c61bd7407e6f774d65a/jna-4.4.0.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna/4.4.0/9d45d3dc35711eef7267d8b4fc2c0dc482ef9fd2/jna-4.4.0-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
@@ -1,11 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: org.apache.commons:commons-lang3:3.0">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.0/8873bd0bb5cb9ee37f1b04578eb7e26fcdd44cb0/commons-lang3-3.0.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.0/d48f964b56a931ec2712ce5d411a40d114a69753/commons-lang3-3.0-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
@@ -1,11 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: org.hamcrest:hamcrest-core:1.3">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/1dc37250fbc78e23a65a67fbbaf71d2e9cbc3c0b/hamcrest-core-1.3-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
@@ -1,11 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: org.hamcrest:hamcrest-library:1.3">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-library/1.3/4785a3c21320980282f9f33d0d1264a69040538f/hamcrest-library-1.3.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-library/1.3/47a7ee46628ab7133129cd7cef1e92657bc275e/hamcrest-library-1.3-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
6
jb/project/java-gradle/.idea/misc.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/classes" />
|
||||
</component>
|
||||
</project>
|
||||
11
jb/project/java-gradle/.idea/modules.xml
generated
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/java-gradle.iml" filepath="$PROJECT_DIR$/.idea/modules/java-gradle.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/java-gradle.iml" filepath="$PROJECT_DIR$/java-gradle.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/java-gradle.main.iml" filepath="$PROJECT_DIR$/.idea/modules/java-gradle.main.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/java-gradle.test.iml" filepath="$PROJECT_DIR$/.idea/modules/java-gradle.test.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,34 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module external.linked.project.id="java-gradle:main" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="" external.system.module.type="sourceSet" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
|
||||
<output url="file://$MODULE_DIR$/../../out/production/classes" />
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$/../../src/main" />
|
||||
<content url="file://$MODULE_DIR$/../../../../../src">
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.base/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.datatransfer/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.desktop/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.instrument/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.logging/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.management.rmi/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.management/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.naming/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.prefs/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.rmi/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.scripting/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.se/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.security.jgss/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.security.sasl/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.smartcardio/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.sql.rowset/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.sql/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.xml.crypto/share/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.base/macosx/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.datatransfer/macosx/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.desktop/macosx/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../src/java.prefs/macosx/classes" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module external.linked.project.id="java-gradle:test" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="" external.system.module.type="sourceSet" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
|
||||
<output-test url="file://$MODULE_DIR$/../../out/test/classes" />
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$/../../src/test" />
|
||||
<content url="file://$MODULE_DIR$/../../../../../test">
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../../../../test/jdk/jbu" isTestSource="true" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="java-gradle.main" />
|
||||
<orderEntry type="library" name="Gradle: junit:junit:4.12" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.hamcrest:hamcrest-library:1.3" level="project" />
|
||||
<orderEntry type="library" name="Gradle: net.java.dev.jna:jna:4.4.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.twelvemonkeys.imageio:imageio-tiff:3.3.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.apache.commons:commons-lang3:3.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.hamcrest:hamcrest-core:1.3" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.twelvemonkeys.imageio:imageio-metadata:3.3.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.twelvemonkeys.imageio:imageio-core:3.3.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.twelvemonkeys.common:common-image:3.3.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.twelvemonkeys.common:common-io:3.3.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.twelvemonkeys.common:common-lang:3.3.2" level="project" />
|
||||
</component>
|
||||
<component name="TestModuleProperties" production-module="java-gradle.main" />
|
||||
</module>
|
||||
124
jb/project/java-gradle/.idea/uiDesigner.xml
generated
Normal file
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Palette2">
|
||||
<group name="Swing">
|
||||
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||
</item>
|
||||
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||
<initial-values>
|
||||
<property name="text" value="Button" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="RadioButton" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="CheckBox" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="Label" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||
<preferred-size width="-1" height="20" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||
</item>
|
||||
</group>
|
||||
</component>
|
||||
</project>
|
||||
@@ -10,11 +10,11 @@ def test_jvm = {
|
||||
file(jbsdkhome + (OperatingSystem.current().isWindows()?"/bin/java.exe" : "/bin/java")).absolutePath
|
||||
} else {
|
||||
if (OperatingSystem.current().isMacOsX()) {
|
||||
file('../../../build/macosx-x86_64-normal-server-release/images/jdk-bundle/jdk-11.jdk/Contents/Home/bin/java').absolutePath
|
||||
file('../../../build/macosx-x86_64-normal-server-release/images/jdk-bundle/jdk-11.0.3.jdk/Contents/Home/bin/java').absolutePath
|
||||
} else if (OperatingSystem.current().isLinux()) {
|
||||
file('../../../build/linux-x86_64-normal-server-release/images/jdk/bin/java').absolutePath
|
||||
} else {
|
||||
file('../../../build/windows-x86_64-normal-server-release/images/j2sdk-image/bin/java.exe').absolutePath
|
||||
file('../../../build/windows-x86_64-normal-server-release/images/jdk/bin/java.exe').absolutePath
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -75,15 +75,22 @@ test.dependsOn tasks.compileTestJava
|
||||
|
||||
test {
|
||||
systemProperty "jb.java2d.metal", "true"
|
||||
systemProperty "testdata", file('../../../jb/tests/testdata').absolutePath
|
||||
systemProperty "testdata", file('../../../test/jdk/jbu/testdata').absolutePath
|
||||
|
||||
// Generate golden images for DroidFontTest and MixedTextTest
|
||||
// systemProperty "gentestdata", ""
|
||||
|
||||
// Enable Java2D logging (https://confluence.jetbrains.com/display/JRE/Java2D+Rendering+Logging)
|
||||
// systemProperty "sun.java2d.trace", "log"
|
||||
// systemProperty "sun.java2d.debugfonts", "warn"
|
||||
// systemProperty "sun.java2d.trace", "log,pimpl"
|
||||
|
||||
outputs.upToDateWhen { false }
|
||||
executable = test_jvm()
|
||||
|
||||
// Enable J2D logging (only in debug build)
|
||||
// Enable async/dtrace profiler
|
||||
jvmArgs "-XX:+PreserveFramePointer"
|
||||
// Enable native J2D logging (only in debug build)
|
||||
// Can be turned on for J2D by adding "#define DEBUG 1" into jdk/src/share/native/sun/java2d/Trace.h
|
||||
|
||||
// environment 'J2D_TRACE_LEVEL', '4'
|
||||
@@ -96,24 +103,34 @@ if (OperatingSystem.current().isWindows()) {
|
||||
def cyg_make_cmd = new File("c:/cygwin64/bin/make.exe")
|
||||
if (cyg_make_cmd.exists()) make_cmd = cyg_make_cmd.absolutePath
|
||||
}
|
||||
|
||||
task make_images << {
|
||||
def pb = new ProcessBuilder().command(make_cmd.toString(), "-C", buildDir.absolutePath, "images")
|
||||
def proc = pb.redirectErrorStream(true).start()
|
||||
proc.inputStream.eachLine {println it}
|
||||
assert proc.waitFor() == 0
|
||||
def test_run = false
|
||||
task make_images {
|
||||
doLast {
|
||||
if (!test_run) {
|
||||
def pb = new ProcessBuilder().command(make_cmd.toString(), "-C", buildDir.absolutePath, "images")
|
||||
def proc = pb.redirectErrorStream(true).start()
|
||||
proc.inputStream.eachLine { println it }
|
||||
assert proc.waitFor() == 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
task make_clean << {
|
||||
def pb = new ProcessBuilder().command(make_cmd.toString(), "-C", buildDir.absolutePath, "clean")
|
||||
def proc = pb.redirectErrorStream(true).start()
|
||||
proc.inputStream.eachLine {println it}
|
||||
assert proc.waitFor() == 0
|
||||
task make_clean {
|
||||
doLast {
|
||||
def pb = new ProcessBuilder().command(make_cmd.toString(), "-C", buildDir.absolutePath, "clean")
|
||||
def proc = pb.redirectErrorStream(true).start()
|
||||
proc.inputStream.eachLine { println it }
|
||||
assert proc.waitFor() == 0
|
||||
}
|
||||
}
|
||||
|
||||
task run_test {
|
||||
doLast {
|
||||
test_run = true
|
||||
}
|
||||
}
|
||||
|
||||
tasks.compileJava.enabled = false
|
||||
tasks.compileTestJava.dependsOn.clear()
|
||||
tasks.cleanTest.dependsOn tasks.run_test
|
||||
classes.dependsOn.clear()
|
||||
classes.dependsOn tasks.make_images
|
||||
tasks.cleanClasses.dependsOn tasks.make_clean
|
||||
|
||||
@@ -82,11 +82,11 @@ public class AquaImageFactory {
|
||||
}
|
||||
|
||||
static Image getGenericJavaIcon() {
|
||||
return java.security.AccessController.doPrivileged(new PrivilegedAction<Image>() {
|
||||
return checkValidOrStub(java.security.AccessController.doPrivileged(new PrivilegedAction<Image>() {
|
||||
public Image run() {
|
||||
return com.apple.eawt.Application.getApplication().getDockIconImage();
|
||||
}
|
||||
});
|
||||
}));
|
||||
}
|
||||
|
||||
static String getPathToThisApplication() {
|
||||
@@ -496,4 +496,23 @@ public class AquaImageFactory {
|
||||
public static Color getSelectionInactiveForegroundColorUIResource() {
|
||||
return new SystemColorProxy(LWCToolkit.getAppleColor(LWCToolkit.INACTIVE_SELECTION_FOREGROUND_COLOR));
|
||||
}
|
||||
|
||||
private static class EmptyImage {
|
||||
static final BufferedImage INSTANCE;
|
||||
static {
|
||||
INSTANCE = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
|
||||
Graphics g = INSTANCE.createGraphics();
|
||||
g.setColor(new Color(0, 0, 0, 0));
|
||||
g.fillRect(0, 0, 16, 16);
|
||||
g.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
// [tav] a workaround for JBR-1492
|
||||
private static Image checkValidOrStub(Image image) {
|
||||
if (image == null || image.getWidth(null) <= 0 || image.getHeight(null) <= 0) {
|
||||
return EmptyImage.INSTANCE;
|
||||
}
|
||||
return image;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,6 +110,7 @@ final class ScreenMenu extends Menu
|
||||
final Component[] items = fInvoker.getMenuComponents();
|
||||
if (needsUpdate(items, childHashArray)) {
|
||||
removeAll();
|
||||
fItems.clear();
|
||||
if (count <= 0) return;
|
||||
|
||||
childHashArray = new int[count];
|
||||
@@ -246,7 +247,7 @@ final class ScreenMenu extends Menu
|
||||
synchronized (getTreeLock()) {
|
||||
super.addNotify();
|
||||
if (fModelPtr == 0) {
|
||||
fInvoker.addContainerListener(this);
|
||||
fInvoker.getPopupMenu().addContainerListener(this);
|
||||
fInvoker.addComponentListener(this);
|
||||
fPropertyListener = new ScreenMenuPropertyListener(this);
|
||||
fInvoker.addPropertyChangeListener(fPropertyListener);
|
||||
@@ -281,7 +282,7 @@ final class ScreenMenu extends Menu
|
||||
if (fModelPtr != 0) {
|
||||
removeMenuListeners(fModelPtr);
|
||||
fModelPtr = 0;
|
||||
fInvoker.removeContainerListener(this);
|
||||
fInvoker.getPopupMenu().removeContainerListener(this);
|
||||
fInvoker.removeComponentListener(this);
|
||||
fInvoker.removePropertyChangeListener(fPropertyListener);
|
||||
}
|
||||
@@ -302,11 +303,10 @@ final class ScreenMenu extends Menu
|
||||
@Override
|
||||
public void componentRemoved(final ContainerEvent e) {
|
||||
final Component child = e.getChild();
|
||||
final MenuItem sm = fItems.get(child);
|
||||
final MenuItem sm = fItems.remove(child);
|
||||
if (sm == null) return;
|
||||
|
||||
remove(sm);
|
||||
fItems.remove(sm);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -47,7 +47,7 @@ public class CImage extends CFRetainedResource {
|
||||
private static native long nativeCreateNSImageFromImageName(String name);
|
||||
private static native long nativeCreateNSImageFromIconSelector(int selector);
|
||||
private static native byte[] nativeGetPlatformImageBytes(int[] buffer, int w, int h);
|
||||
private static native void nativeCopyNSImageIntoArray(long image, int[] buffer, int dw, int dh);
|
||||
private static native void nativeCopyNSImageIntoArray(long image, int[] buffer, int sw, int sh, int dw, int dh);
|
||||
private static native Dimension2D nativeGetNSImageSize(long image);
|
||||
private static native void nativeSetNSImageSize(long image, double w, double h);
|
||||
private static native void nativeResizeNSImageRepresentations(long image, double w, double h);
|
||||
@@ -280,8 +280,8 @@ public class CImage extends CFRetainedResource {
|
||||
if (size == null) {
|
||||
return null;
|
||||
}
|
||||
final int baseWidth = (int)size.getWidth();
|
||||
final int baseHeight = (int)size.getHeight();
|
||||
final int w = (int)size.getWidth();
|
||||
final int h = (int)size.getHeight();
|
||||
AtomicReference<Dimension2D[]> repRef = new AtomicReference<>();
|
||||
execute(ptr -> {
|
||||
repRef.set(nativeGetNSImageRepresentationSizes(ptr, size.getWidth(),
|
||||
@@ -289,31 +289,18 @@ public class CImage extends CFRetainedResource {
|
||||
});
|
||||
Dimension2D[] sizes = repRef.get();
|
||||
|
||||
// The image may be represented in the only size which differs from the base one.
|
||||
// For instance, the app's dock icon is represented in a Retina-scaled size on Retina.
|
||||
// Check if a single represenation has a bigger size and in that case use it as the dest size.
|
||||
Dimension2D size0 = size;
|
||||
if (sizes != null && sizes.length == 1 &&
|
||||
(sizes[0].getWidth() > baseWidth && sizes[0].getHeight() > baseHeight))
|
||||
{
|
||||
size0 = sizes[0];
|
||||
}
|
||||
final int dstWidth = (int)size0.getWidth();
|
||||
final int dstHeight = (int)size0.getHeight();
|
||||
|
||||
|
||||
return sizes == null || sizes.length < 2 ?
|
||||
new MultiResolutionCachedImage(baseWidth, baseHeight, (width, height)
|
||||
-> toImage(dstWidth, dstHeight))
|
||||
: new MultiResolutionCachedImage(baseWidth, baseHeight, sizes, (width, height)
|
||||
-> toImage(width, height));
|
||||
new MultiResolutionCachedImage(w, h, (width, height)
|
||||
-> toImage(w, h, width, height))
|
||||
: new MultiResolutionCachedImage(w, h, sizes, (width, height)
|
||||
-> toImage(w, h, width, height));
|
||||
}
|
||||
|
||||
private BufferedImage toImage(int dstWidth, int dstHeight) {
|
||||
private BufferedImage toImage(int srcWidth, int srcHeight, int dstWidth, int dstHeight) {
|
||||
final BufferedImage bimg = new BufferedImage(dstWidth, dstHeight, BufferedImage.TYPE_INT_ARGB_PRE);
|
||||
final DataBufferInt dbi = (DataBufferInt)bimg.getRaster().getDataBuffer();
|
||||
final int[] buffer = SunWritableRaster.stealData(dbi, 0);
|
||||
execute(ptr->nativeCopyNSImageIntoArray(ptr, buffer, dstWidth, dstHeight));
|
||||
execute(ptr->nativeCopyNSImageIntoArray(ptr, buffer, srcWidth, srcHeight, dstWidth, dstHeight));
|
||||
SunWritableRaster.markDirty(dbi);
|
||||
return bimg;
|
||||
}
|
||||
|
||||
@@ -325,9 +325,9 @@ final class CPlatformResponder {
|
||||
|
||||
if (isISOControl) {
|
||||
characterToSendWithTheEvent = checkedChar;
|
||||
}
|
||||
|
||||
characterToSendWithTheEvent = mapNsCharsToCompatibleWithJava(characterToSendWithTheEvent);
|
||||
} else {
|
||||
characterToSendWithTheEvent = mapNsCharsToCompatibleWithJava(characterToSendWithTheEvent);
|
||||
}
|
||||
|
||||
String stringWithChar = NSEvent.nsToJavaChar(characterToSendWithTheEvent, nsEvent.getModifierFlags(), spaceKeyTyped);
|
||||
characterToSendWithTheEvent = stringWithChar == null ? KeyEvent.CHAR_UNDEFINED : stringWithChar.charAt(0);
|
||||
|
||||
@@ -103,6 +103,9 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
// for client properties
|
||||
public static final String WINDOW_BRUSH_METAL_LOOK = "apple.awt.brushMetalLook";
|
||||
public static final String WINDOW_DARK_APPEARANCE = "jetbrains.awt.windowDarkAppearance";
|
||||
public static final String WINDOW_LIGHT_APPEARANCE = "jetbrains.awt.windowLightAppearance";
|
||||
public static final String WINDOW_TRANSPARENT_TITLEBAR_APPEARANCE = "jetbrains.awt.transparentTitleBarAppearance";
|
||||
public static final String WINDOW_AQUA_APPEARANCE = "jetbrains.awt.windowAquaAppearance";
|
||||
public static final String WINDOW_DRAGGABLE_BACKGROUND = "apple.awt.draggableWindowBackground";
|
||||
|
||||
public static final String WINDOW_ALPHA = "Window.alpha";
|
||||
@@ -148,6 +151,8 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
|
||||
static final int RESIZABLE = 1 << 9; // both a style bit and prop bit
|
||||
static final int DARK = 1 << 28;
|
||||
static final int LIGHT = 1 << 29;
|
||||
static final int TRANSPARENT_TITLEBAR = 1 << 30;
|
||||
static final int NONACTIVATING = 1 << 24;
|
||||
static final int IS_DIALOG = 1 << 25;
|
||||
static final int IS_MODAL = 1 << 26;
|
||||
@@ -194,6 +199,12 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
new Property<CPlatformWindow>(WINDOW_DARK_APPEARANCE) { public void applyProperty(final CPlatformWindow c, final Object value) {
|
||||
c.setStyleBits(DARK, value == null ? true : Boolean.parseBoolean(value.toString()));
|
||||
}},
|
||||
new Property<CPlatformWindow>(WINDOW_TRANSPARENT_TITLEBAR_APPEARANCE) { public void applyProperty(final CPlatformWindow c, final Object value) {
|
||||
c.setStyleBits(TRANSPARENT_TITLEBAR, value == null ? true : Boolean.parseBoolean(value.toString()));
|
||||
}},
|
||||
new Property<CPlatformWindow>(WINDOW_LIGHT_APPEARANCE) { public void applyProperty(final CPlatformWindow c, final Object value) {
|
||||
c.setStyleBits(LIGHT, value == null ? true : Boolean.parseBoolean(value.toString()));
|
||||
}},
|
||||
new Property<CPlatformWindow>(WINDOW_ALPHA) { public void applyProperty(final CPlatformWindow c, final Object value) {
|
||||
c.target.setOpacity(value == null ? 1.0f : Float.parseFloat(value.toString()));
|
||||
}},
|
||||
@@ -474,6 +485,16 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
styleBits = SET(styleBits, DARK, Boolean.parseBoolean(prop.toString()));
|
||||
}
|
||||
|
||||
prop = rootpane.getClientProperty(WINDOW_TRANSPARENT_TITLEBAR_APPEARANCE);
|
||||
if (prop != null) {
|
||||
styleBits = SET(styleBits, TRANSPARENT_TITLEBAR, Boolean.parseBoolean(prop.toString()));
|
||||
}
|
||||
|
||||
prop = rootpane.getClientProperty(WINDOW_LIGHT_APPEARANCE);
|
||||
if (prop != null) {
|
||||
styleBits = SET(styleBits, LIGHT, Boolean.parseBoolean(prop.toString()));
|
||||
}
|
||||
|
||||
prop = rootpane.getClientProperty(WINDOW_ZOOMABLE);
|
||||
if (prop != null) {
|
||||
styleBits = SET(styleBits, ZOOMABLE, Boolean.parseBoolean(prop.toString()));
|
||||
|
||||
@@ -326,10 +326,7 @@ static BOOL shouldUsePressAndHold() {
|
||||
}
|
||||
}
|
||||
|
||||
NSString *eventCharacters = [event characters];
|
||||
BOOL isDeadKey = (eventCharacters != nil && [eventCharacters length] == 0);
|
||||
|
||||
if ((![self hasMarkedText] && fKeyEventsNeeded) || isDeadKey) {
|
||||
if ((![self hasMarkedText] && fKeyEventsNeeded)) {
|
||||
[self deliverJavaKeyEventHelper: event];
|
||||
}
|
||||
|
||||
@@ -525,7 +522,6 @@ static BOOL shouldUsePressAndHold() {
|
||||
0,
|
||||
LMGetKbdType(),
|
||||
0,
|
||||
// ignore for now
|
||||
&isDeadKeyPressed,
|
||||
lengthOfBuffer,
|
||||
&actualLength,
|
||||
|
||||
@@ -274,7 +274,14 @@ AWT_NS_WINDOW_IMPLEMENTATION
|
||||
AWT_ASSERT_APPKIT_THREAD;
|
||||
|
||||
NSUInteger styleMask = [AWTWindow styleMaskForStyleBits:bits];
|
||||
NSRect contentRect = rect; //[NSWindow contentRectForFrameRect:rect styleMask:styleMask];
|
||||
|
||||
BOOL isTransparentTitleBar = IS(bits, TRANSPARENT_TITLEBAR);
|
||||
|
||||
if (isTransparentTitleBar) {
|
||||
styleMask = styleMask | NSFullSizeContentViewWindowMask;
|
||||
}
|
||||
|
||||
NSRect contentRect = isTransparentTitleBar ? [NSWindow contentRectForFrameRect:rect styleMask:styleMask] : rect;
|
||||
if (contentRect.size.width <= 0.0) {
|
||||
contentRect.size.width = 1.0;
|
||||
}
|
||||
@@ -319,6 +326,11 @@ AWT_ASSERT_APPKIT_THREAD;
|
||||
[self.nsWindow setCollectionBehavior:(1 << 8) /*NSWindowCollectionBehaviorFullScreenAuxiliary*/];
|
||||
}
|
||||
|
||||
self.nsWindow.titlebarAppearsTransparent = IS(bits, TRANSPARENT_TITLEBAR);
|
||||
if (self.nsWindow.titlebarAppearsTransparent) {
|
||||
[self.nsWindow setTitleVisibility:NSWindowTitleHidden];
|
||||
}
|
||||
|
||||
if (IS(self.styleBits, DARK)) {
|
||||
[self.nsWindow setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]];
|
||||
} else {
|
||||
|
||||
@@ -201,11 +201,11 @@ AWT_ASSERT_APPKIT_THREAD;
|
||||
|
||||
self.fPreferencesMenu = (NSMenuItem*)[appMenu itemWithTag:PREFERENCES_TAG];
|
||||
self.fAboutMenu = (NSMenuItem*)[appMenu itemAtIndex:0];
|
||||
|
||||
|
||||
NSDockTile *dockTile = [NSApp dockTile];
|
||||
self.fProgressIndicator = [[NSProgressIndicator alloc]
|
||||
initWithFrame:NSMakeRect(3.f, 0.f, dockTile.size.width - 6.f, 20.f)];
|
||||
|
||||
|
||||
[fProgressIndicator setStyle:NSProgressIndicatorBarStyle];
|
||||
[fProgressIndicator setIndeterminate:NO];
|
||||
[[dockTile contentView] addSubview:fProgressIndicator];
|
||||
@@ -476,8 +476,20 @@ AWT_ASSERT_APPKIT_THREAD;
|
||||
return;
|
||||
}
|
||||
|
||||
// Set the app's icon instead to meet Retina.
|
||||
[NSApp setApplicationIconImage:image];
|
||||
// setup an image view for the dock tile
|
||||
NSRect frame = NSMakeRect(0, 0, dockTile.size.width, dockTile.size.height);
|
||||
NSImageView *dockImageView = [[NSImageView alloc] initWithFrame: frame];
|
||||
[dockImageView setImageScaling:NSImageScaleProportionallyUpOrDown];
|
||||
[dockImageView setImage:image];
|
||||
|
||||
[[ApplicationDelegate sharedDelegate].fProgressIndicator removeFromSuperview];
|
||||
[dockImageView addSubview:[ApplicationDelegate sharedDelegate].fProgressIndicator];
|
||||
|
||||
// add it to the NSDockTile
|
||||
[dockTile setContentView: dockImageView];
|
||||
[dockTile display];
|
||||
|
||||
[dockImageView release];
|
||||
}
|
||||
|
||||
+ (void)_setDockIconProgress:(NSNumber *)value {
|
||||
@@ -498,8 +510,25 @@ AWT_ASSERT_APPKIT_THREAD;
|
||||
+ (NSImage *)_dockIconImage {
|
||||
AWT_ASSERT_APPKIT_THREAD;
|
||||
|
||||
// The app's dock icon defaults to the app's icon (see the spec) which is Retina-aware unlike the dock icon.
|
||||
return [NSApp applicationIconImage];
|
||||
NSDockTile *dockTile = [NSApp dockTile];
|
||||
NSView *view = [dockTile contentView];
|
||||
|
||||
if ([view isKindOfClass:[NSImageView class]]) {
|
||||
NSImage *img = [((NSImageView *)view) image];
|
||||
if (img) return img;
|
||||
}
|
||||
|
||||
if (view == nil) {
|
||||
return [NSImage imageNamed:@"NSApplicationIcon"];
|
||||
}
|
||||
|
||||
NSRect frame = [view frame];
|
||||
NSImage *image = [[NSImage alloc] initWithSize:frame.size];
|
||||
[image lockFocus];
|
||||
[view drawRect:frame];
|
||||
[image unlockFocus];
|
||||
[image autorelease];
|
||||
return image;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -142,6 +142,7 @@ canChooseDirectories:(BOOL)inChooseDirectories
|
||||
[thePanel setNameFieldStringValue:fFile];
|
||||
}
|
||||
|
||||
CMenuBar *menuBar = nil;
|
||||
if (fOwner != nil) {
|
||||
|
||||
// Finds appropriate menubar in our hierarchy,
|
||||
@@ -150,7 +151,6 @@ canChooseDirectories:(BOOL)inChooseDirectories
|
||||
awtWindow = awtWindow.ownerWindow;
|
||||
}
|
||||
|
||||
CMenuBar *menuBar = nil;
|
||||
BOOL isDisabled = NO;
|
||||
if ([awtWindow.nsWindow isVisible]){
|
||||
menuBar = awtWindow.javaMenuBar;
|
||||
@@ -180,6 +180,9 @@ canChooseDirectories:(BOOL)inChooseDirectories
|
||||
}
|
||||
[fURLs retain];
|
||||
[NSApp stopModal];
|
||||
if (menuBar != nil) {
|
||||
[CMenuBar activate:menuBar modallyDisabled:NO];
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
@@ -257,24 +257,24 @@ JNF_COCOA_EXIT(env);
|
||||
/*
|
||||
* Class: sun_lwawt_macosx_CImage
|
||||
* Method: nativeCopyNSImageIntoArray
|
||||
* Signature: (J[III)V
|
||||
* Signature: (J[IIIII)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CImage_nativeCopyNSImageIntoArray
|
||||
(JNIEnv *env, jclass klass, jlong nsImgPtr, jintArray buffer, jint dw, jint dh)
|
||||
(JNIEnv *env, jclass klass, jlong nsImgPtr, jintArray buffer, jint sw, jint sh,
|
||||
jint dw, jint dh)
|
||||
{
|
||||
JNF_COCOA_ENTER(env);
|
||||
JNF_COCOA_ENTER(env);
|
||||
|
||||
NSImage *img = (NSImage *)jlong_to_ptr(nsImgPtr);
|
||||
jint *dst = (*env)->GetPrimitiveArrayCritical(env, buffer, NULL);
|
||||
if (dst) {
|
||||
NSSize size = [(NSImage *)jlong_to_ptr(nsImgPtr) size];
|
||||
NSRect fromRect = NSMakeRect(0, 0, size.width, size.height);
|
||||
NSRect fromRect = NSMakeRect(0, 0, sw, sh);
|
||||
NSRect toRect = NSMakeRect(0, 0, dw, dh);
|
||||
CImage_CopyNSImageIntoArray(img, dst, fromRect, toRect);
|
||||
(*env)->ReleasePrimitiveArrayCritical(env, buffer, dst, JNI_ABORT);
|
||||
}
|
||||
|
||||
JNF_COCOA_EXIT(env);
|
||||
JNF_COCOA_EXIT(env);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#import "CMenuBar.h"
|
||||
#import "CMenu.h"
|
||||
#import "PropertiesUtilities.h"
|
||||
#import "ThreadUtilities.h"
|
||||
#import "ApplicationDelegate.h"
|
||||
|
||||
@@ -42,6 +43,7 @@ NSString *CMenuBarDidReuseItemNotification =
|
||||
static CMenuBar *sActiveMenuBar = nil;
|
||||
static NSMenu *sDefaultHelpMenu = nil;
|
||||
static BOOL sSetupHelpMenu = NO;
|
||||
static BOOL sUseSingleMenuBar = NO; // Equals YES when VM-property 'mac.system.menu.singleton' == true
|
||||
|
||||
@interface CMenuBar (CMenuBar_Private)
|
||||
+ (void) addDefaultHelpMenu;
|
||||
@@ -98,7 +100,8 @@ static BOOL sSetupHelpMenu = NO;
|
||||
AWT_ASSERT_APPKIT_THREAD;
|
||||
|
||||
if (!menubar) {
|
||||
[CMenuBar clearMenuBarExcludingAppleMenu_OnAppKitThread:YES];
|
||||
if (!sUseSingleMenuBar)
|
||||
[CMenuBar clearMenuBarExcludingAppleMenu_OnAppKitThread:YES];
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -107,6 +110,8 @@ static BOOL sSetupHelpMenu = NO;
|
||||
#endif
|
||||
|
||||
@synchronized([CMenuBar class]) {
|
||||
if (sUseSingleMenuBar && sActiveMenuBar == menubar && menubar->fModallyDisabled == modallyDisabled)
|
||||
return;
|
||||
sActiveMenuBar = menubar;
|
||||
}
|
||||
|
||||
@@ -397,6 +402,8 @@ static BOOL sSetupHelpMenu = NO;
|
||||
|
||||
@end
|
||||
|
||||
static BOOL sUseSingleMenuBarCalculated = NO;
|
||||
|
||||
/*
|
||||
* Class: sun_lwawt_macosx_CMenuBar
|
||||
* Method: nativeCreateMenuBar
|
||||
@@ -421,6 +428,13 @@ Java_sun_lwawt_macosx_CMenuBar_nativeCreateMenuBar
|
||||
}
|
||||
|
||||
JNF_COCOA_EXIT(env);
|
||||
|
||||
if (!sUseSingleMenuBarCalculated) {
|
||||
NSString * sval = [PropertiesUtilities javaSystemPropertyForKey:@"mac.system.menu.singleton" withEnv:env];
|
||||
sUseSingleMenuBar = sval != nil && ([@"true" caseInsensitiveCompare:sval] == 0);
|
||||
sUseSingleMenuBarCalculated = YES;
|
||||
}
|
||||
|
||||
return ptr_to_jlong(aCMenuBar);
|
||||
}
|
||||
|
||||
|
||||
@@ -496,18 +496,21 @@ class BufferStrategyPaintManager extends RepaintManager.PaintManager {
|
||||
}
|
||||
}
|
||||
|
||||
if (isPaint && c == rootJ && x == 0 && y == 0 &&
|
||||
c.getWidth() == w && c.getHeight() == h) {
|
||||
|
||||
if (isPaint) {
|
||||
// Fallback to normal painting in undecorated non-opaque dialogs
|
||||
// and frames to resolve black background problem
|
||||
if ((root instanceof Dialog && ((Dialog)root).isUndecorated() ||
|
||||
root instanceof Frame && ((Frame)root).isUndecorated()) &&
|
||||
bsg != null && !c.isOpaque() &&
|
||||
Window window = SunToolkit.getContainingWindow(c);
|
||||
if ((window instanceof Dialog && ((Dialog)window).isUndecorated() ||
|
||||
window instanceof Frame && ((Frame)window).isUndecorated()) &&
|
||||
bsg != null && !window.isOpaque() &&
|
||||
((SunGraphics2D)bsg).getSurfaceData().getTransparency() ==
|
||||
Transparency.OPAQUE) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (isPaint && c == rootJ && x == 0 && y == 0 &&
|
||||
c.getWidth() == w && c.getHeight() == h) {
|
||||
bufferInfo.setInSync(true);
|
||||
}
|
||||
else if (contentsLost) {
|
||||
|
||||
@@ -347,7 +347,7 @@ public class PopupFactory {
|
||||
private static final Object heavyWeightPopupCacheKey =
|
||||
new StringBuffer("PopupFactory.heavyWeightPopupCache");
|
||||
|
||||
private volatile boolean isCacheEnabled = true;
|
||||
private volatile boolean isCacheEnabled = false;
|
||||
|
||||
/**
|
||||
* Returns either a new or recycled <code>Popup</code> containing
|
||||
|
||||
@@ -1967,6 +1967,7 @@ public abstract class BasicTextUI extends TextUI implements ViewFactory {
|
||||
* @see DocumentListener#insertUpdate
|
||||
*/
|
||||
public final void insertUpdate(DocumentEvent e) {
|
||||
rootViewInitialized = false;
|
||||
Document doc = e.getDocument();
|
||||
Object o = doc.getProperty("i18n");
|
||||
if (o instanceof Boolean) {
|
||||
@@ -1995,6 +1996,7 @@ public abstract class BasicTextUI extends TextUI implements ViewFactory {
|
||||
* @see DocumentListener#removeUpdate
|
||||
*/
|
||||
public final void removeUpdate(DocumentEvent e) {
|
||||
rootViewInitialized = false;
|
||||
Rectangle alloc = (painted) ? getVisibleEditorRect() : null;
|
||||
rootView.removeUpdate(e, alloc, rootView.getViewFactory());
|
||||
}
|
||||
@@ -2010,6 +2012,7 @@ public abstract class BasicTextUI extends TextUI implements ViewFactory {
|
||||
* @see DocumentListener#changedUpdate(DocumentEvent)
|
||||
*/
|
||||
public final void changedUpdate(DocumentEvent e) {
|
||||
rootViewInitialized = false;
|
||||
Rectangle alloc = (painted) ? getVisibleEditorRect() : null;
|
||||
rootView.changedUpdate(e, alloc, rootView.getViewFactory());
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ public abstract class Font2D {
|
||||
public static final int NATIVE_RANK = 5;
|
||||
public static final int UNKNOWN_RANK = 6;
|
||||
public static final int DEFAULT_RANK = 4;
|
||||
public static final int IDEA_RANK = 7;
|
||||
|
||||
private static final String[] boldNames = {
|
||||
"bold", "demibold", "demi-bold", "demi bold", "negreta", "demi", };
|
||||
|
||||
@@ -219,7 +219,7 @@ public class FontFamily {
|
||||
case Font.PLAIN:
|
||||
case Font.ITALIC:
|
||||
return (newWeight <= Font2D.FWEIGHT_NORMAL &&
|
||||
newWeight > currFont.getWeight());
|
||||
newWeight >= currFont.getWeight());
|
||||
|
||||
case Font.BOLD:
|
||||
case Font.BOLD|Font.ITALIC:
|
||||
|
||||
@@ -82,6 +82,24 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE {
|
||||
}
|
||||
}
|
||||
|
||||
private static class TTFilterIdea extends TTFilter {
|
||||
final private boolean positive;
|
||||
final private HashSet<String> ideaSet;
|
||||
|
||||
public TTFilterIdea(boolean positive, HashSet<String> ideaSet) {
|
||||
this.positive = positive;
|
||||
this.ideaSet = ideaSet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(File dir, String name) {
|
||||
if (super.accept(dir, name) && ideaSet.contains(name)) {
|
||||
return positive;
|
||||
}
|
||||
return !positive;
|
||||
}
|
||||
}
|
||||
|
||||
private static class T1Filter implements FilenameFilter {
|
||||
public boolean accept(File dir,String name) {
|
||||
if (noType1Font) {
|
||||
@@ -189,6 +207,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE {
|
||||
boolean loadedAllFontFiles = false;
|
||||
HashMap<String,String> jreFontMap;
|
||||
HashSet<String> jreBundledFontFiles;
|
||||
HashSet<String> ideaFontSet;
|
||||
String[] jreOtherFontFiles;
|
||||
boolean noOtherJREFontFiles = false; // initial assumption.
|
||||
|
||||
@@ -224,6 +243,8 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE {
|
||||
private static final FilenameFilter ttFilter = new TTFilter();
|
||||
private static final FilenameFilter t1Filter = new T1Filter();
|
||||
|
||||
private FilenameFilter ttFilterIdea;
|
||||
private FilenameFilter ttFilterJre;
|
||||
private Font[] allFonts;
|
||||
private String[] allFamilies; // cache for default locale only
|
||||
private Locale lastDefaultLocale;
|
||||
@@ -300,6 +321,41 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE {
|
||||
jreFontMap.put("droid serif3", "DroidSerif-BoldItalic.ttf");
|
||||
jreFontMap.put("droid serif bold1", "DroidSerif-Bold.ttf");
|
||||
jreFontMap.put("droid serif bold italic3", "DroidSerif-BoldItalic.ttf");
|
||||
|
||||
/* Idea bundled fonts */
|
||||
jreFontMap.put("FiraCode bold", "FiraCode-Bold.ttf");
|
||||
jreFontMap.put("FiraCode light", "FiraCode-Light.ttf");
|
||||
jreFontMap.put("FiraCode medium", "FiraCode-Medium.ttf");
|
||||
jreFontMap.put("FiraCode retina", "FiraCode-Retina.ttf");
|
||||
jreFontMap.put("FiraCode regular", "FiraCode-Regular.ttf");
|
||||
|
||||
jreFontMap.put("SourceCodePro bold italic", "SourceCodePro-BoldIt.ttf");
|
||||
jreFontMap.put("SourceCodePro regular", "SourceCodePro-Regular.ttf");
|
||||
jreFontMap.put("SourceCodePro bold", "SourceCodePro-Bold.ttf");
|
||||
jreFontMap.put("SourceCodePro italic", "SourceCodePro-It.ttf");
|
||||
|
||||
jreFontMap.put("Inconsolata", "Inconsolata.ttf");
|
||||
|
||||
jreFontMap.put("Roboto light", "Roboto-Light.ttf");
|
||||
jreFontMap.put("Roboto thin", "Roboto-Thin.ttf");
|
||||
|
||||
ideaFontSet = new HashSet<>();
|
||||
ideaFontSet.add("FiraCode-Bold.ttf");
|
||||
ideaFontSet.add("FiraCode-Light.ttf");
|
||||
ideaFontSet.add("FiraCode-Medium.ttf");
|
||||
ideaFontSet.add("FiraCode-Retina.ttf");
|
||||
ideaFontSet.add("FiraCode-Regular.ttf");
|
||||
ideaFontSet.add("SourceCodePro-BoldIt.ttf");
|
||||
ideaFontSet.add("SourceCodePro-Regular.ttf");
|
||||
ideaFontSet.add("SourceCodePro-Bold.ttf");
|
||||
ideaFontSet.add("SourceCodePro-It.ttf");
|
||||
ideaFontSet.add("Inconsolata.ttf");
|
||||
ideaFontSet.add("Roboto-Light.ttf");
|
||||
ideaFontSet.add("Roboto-Thin.ttf");
|
||||
|
||||
ttFilterIdea = new TTFilterIdea(true, ideaFontSet);
|
||||
ttFilterJre = new TTFilterIdea(false, ideaFontSet);
|
||||
|
||||
for (String ffile : jreFontMap.values()) {
|
||||
jreBundledFontFiles.add(ffile);
|
||||
}
|
||||
@@ -403,8 +459,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE {
|
||||
/* Linux font configuration uses these fonts */
|
||||
registerFontDir(jreFontDirName);
|
||||
}
|
||||
registerFontsInDir(jreFontDirName, true, Font2D.JRE_RANK,
|
||||
true, false);
|
||||
registerJREFonts();
|
||||
|
||||
/* Create the font configuration and get any font path
|
||||
* that might be specified.
|
||||
@@ -3284,7 +3339,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE {
|
||||
|
||||
/* Called to register fall back fonts */
|
||||
public void registerFontsInDir(String dirName) {
|
||||
registerFontsInDir(dirName, true, Font2D.JRE_RANK, true, false);
|
||||
registerJREFonts();
|
||||
}
|
||||
|
||||
// MACOSX begin -- need to access this in subclass
|
||||
@@ -3305,6 +3360,18 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE {
|
||||
defer, resolveSymLinks);
|
||||
}
|
||||
|
||||
protected void registerJREFonts() {
|
||||
File pathFile = new File(jreFontDirName);
|
||||
addDirFonts(jreFontDirName, pathFile, ttFilterIdea,
|
||||
FONTFORMAT_TRUETYPE, true,
|
||||
Font2D.IDEA_RANK,
|
||||
true, false);
|
||||
addDirFonts(jreFontDirName, pathFile, ttFilterJre,
|
||||
FONTFORMAT_TRUETYPE, true,
|
||||
Font2D.JRE_RANK,
|
||||
true, false);
|
||||
}
|
||||
|
||||
protected void registerFontDir(String path) {
|
||||
}
|
||||
|
||||
|
||||
BIN
src/java.desktop/share/fonts/FiraCode-Bold.ttf
Normal file
BIN
src/java.desktop/share/fonts/FiraCode-Light.ttf
Normal file
BIN
src/java.desktop/share/fonts/FiraCode-Medium.ttf
Normal file
BIN
src/java.desktop/share/fonts/FiraCode-Regular.ttf
Normal file
BIN
src/java.desktop/share/fonts/FiraCode-Retina.ttf
Normal file
102
src/java.desktop/share/fonts/FiraCode_LICENSE.txt
Normal file
@@ -0,0 +1,102 @@
|
||||
Copyright (c) 2014, Nikita Prokopov http://tonsky.me
|
||||
with Reserved Font Name Fira Code.
|
||||
|
||||
Copyright (c) 2014, Mozilla Foundation https://mozilla.org/
|
||||
with Reserved Font Name Fira Sans.
|
||||
|
||||
Copyright (c) 2014, Mozilla Foundation https://mozilla.org/
|
||||
with Reserved Font Name Fira Mono.
|
||||
|
||||
Copyright (c) 2014, Telefonica S.A.
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
BIN
src/java.desktop/share/fonts/Inconsolata.ttf
Normal file
93
src/java.desktop/share/fonts/Inconsolata_LICENSE.txt
Normal file
@@ -0,0 +1,93 @@
|
||||
Copyright (c) 2011, Raph Levien (firstname.lastname@gmail.com), Copyright (c) 2012, Cyreal (cyreal.org)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
BIN
src/java.desktop/share/fonts/Roboto-Light.ttf
Normal file
BIN
src/java.desktop/share/fonts/Roboto-Thin.ttf
Normal file
BIN
src/java.desktop/share/fonts/SourceCodePro-Bold.ttf
Normal file
BIN
src/java.desktop/share/fonts/SourceCodePro-BoldIt.ttf
Normal file
BIN
src/java.desktop/share/fonts/SourceCodePro-It.ttf
Normal file
BIN
src/java.desktop/share/fonts/SourceCodePro-Regular.ttf
Normal file
93
src/java.desktop/share/fonts/SourceCodePro_LICENSE.txt
Normal file
@@ -0,0 +1,93 @@
|
||||
Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
|
||||
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -594,12 +594,13 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol {
|
||||
XBaseWindow xbasewindow = XToolkit.windowToXWindow(xclient.get_window());
|
||||
if (xbasewindow instanceof XWindow) {
|
||||
xwindow = (XWindow)xbasewindow;
|
||||
// xclient can be a system-generated or a sent event (see XDragSourceContextPeer)
|
||||
// so x/y is expected to be presented in device space
|
||||
x = xbasewindow.scaleDown(x);
|
||||
y = xbasewindow.scaleDown(y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (xwindow == null) {
|
||||
long receiver =
|
||||
XDropTargetRegistry.getRegistry().getEmbeddedDropSite(
|
||||
|
||||
@@ -524,8 +524,9 @@ public final class XDragSourceContextPeer
|
||||
updateTargetWindow(xmotion);
|
||||
|
||||
if (dragProtocol != null) {
|
||||
dragProtocol.sendMoveMessage(scaleDown(xmotion.get_x_root()),
|
||||
scaleDown(xmotion.get_y_root()),
|
||||
// XDnDDropTargetProtocol.processXdndPosition will scale x/y
|
||||
dragProtocol.sendMoveMessage(xmotion.get_x_root(),
|
||||
xmotion.get_y_root(),
|
||||
sourceAction, sourceActions,
|
||||
xmotion.get_time());
|
||||
}
|
||||
@@ -533,8 +534,9 @@ public final class XDragSourceContextPeer
|
||||
|
||||
private void processDrop(XButtonEvent xbutton) {
|
||||
try {
|
||||
dragProtocol.initiateDrop(scaleDown(xbutton.get_x_root()),
|
||||
scaleDown(xbutton.get_y_root()),
|
||||
// XDnDDropTargetProtocol.processXdndPosition will scale x/y
|
||||
dragProtocol.initiateDrop(xbutton.get_x_root(),
|
||||
xbutton.get_y_root(),
|
||||
sourceAction, sourceActions,
|
||||
xbutton.get_time());
|
||||
} catch (XException e) {
|
||||
|
||||
@@ -72,6 +72,17 @@ public class XInputMethod extends X11InputMethod {
|
||||
return createXICNative(peer.getContentWindow());
|
||||
}
|
||||
|
||||
protected boolean recreateXIC() {
|
||||
final XComponentPeer peer = (XComponentPeer)getPeer(clientComponentWindow);
|
||||
if (peer == null || pData == 0)
|
||||
return true;
|
||||
return recreateXICNative(peer.getContentWindow(), pData);
|
||||
}
|
||||
protected void releaseXIC() {
|
||||
if (pData == 0)
|
||||
return;
|
||||
releaseXICNative(pData);
|
||||
}
|
||||
|
||||
private static volatile long xicFocus = 0;
|
||||
|
||||
@@ -150,6 +161,8 @@ public class XInputMethod extends X11InputMethod {
|
||||
*/
|
||||
private native boolean openXIMNative(long display);
|
||||
private native boolean createXICNative(long window);
|
||||
private native boolean recreateXICNative(long window, long px11data);
|
||||
private native void releaseXICNative(long px11data);
|
||||
private native void setXICFocusNative(long window,
|
||||
boolean value, boolean active);
|
||||
private native void adjustStatusWindow(long window);
|
||||
|
||||
@@ -25,6 +25,9 @@
|
||||
|
||||
package sun.awt;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import java.awt.AWTException;
|
||||
import java.awt.event.InputMethodEvent;
|
||||
import java.awt.font.TextAttribute;
|
||||
@@ -40,6 +43,7 @@ import sun.util.logging.PlatformLogger;
|
||||
* @author JavaSoft International
|
||||
*/
|
||||
public abstract class X11InputMethod extends X11InputMethodBase {
|
||||
protected static final List<X11InputMethod> activeInputMethods = new ArrayList<X11InputMethod>();
|
||||
|
||||
/**
|
||||
* Constructs an X11InputMethod instance. It initializes the XIM
|
||||
@@ -85,6 +89,9 @@ public abstract class X11InputMethod extends X11InputMethodBase {
|
||||
if (!createXIC()) {
|
||||
return;
|
||||
}
|
||||
awtLock();
|
||||
activeInputMethods.add(this);
|
||||
awtUnlock();
|
||||
disposed = false;
|
||||
}
|
||||
|
||||
@@ -329,6 +336,7 @@ public abstract class X11InputMethod extends X11InputMethodBase {
|
||||
protected synchronized void disposeImpl() {
|
||||
disposeXIC();
|
||||
awtLock();
|
||||
activeInputMethods.remove(this);
|
||||
composedText = null;
|
||||
committedText = null;
|
||||
rawFeedbacks = null;
|
||||
@@ -353,4 +361,22 @@ public abstract class X11InputMethod extends X11InputMethodBase {
|
||||
savedCompositionState = enable;
|
||||
}
|
||||
}
|
||||
|
||||
static void recreateAllXIC() {
|
||||
// NOTE: called from native within AWT_LOCK
|
||||
for (X11InputMethod im : activeInputMethods)
|
||||
im.releaseXIC();
|
||||
if (!recreateX11InputMethod()) {
|
||||
log.warning("can't recreate X11 InputMethod");
|
||||
return;
|
||||
}
|
||||
for (X11InputMethod im : activeInputMethods) {
|
||||
if (!im.recreateXIC())
|
||||
log.warning("can't recreate XIC for " + im.toString());
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract boolean recreateXIC();
|
||||
protected abstract void releaseXIC();
|
||||
private static native boolean recreateX11InputMethod();
|
||||
}
|
||||
|
||||
@@ -342,13 +342,8 @@ static void setX11InputMethodData(JNIEnv * env, jobject imInstance, X11InputMeth
|
||||
JNU_SetLongFieldFromPtr(env, imInstance, x11InputMethodIDs.pData, pX11IMData);
|
||||
}
|
||||
|
||||
/* this function should be called within AWT_LOCK() */
|
||||
static void
|
||||
destroyX11InputMethodData(JNIEnv *env, X11InputMethodData *pX11IMData)
|
||||
{
|
||||
/*
|
||||
* Destroy XICs
|
||||
*/
|
||||
destroyXInputContexts(X11InputMethodData *pX11IMData) {
|
||||
if (pX11IMData == NULL) {
|
||||
return;
|
||||
}
|
||||
@@ -365,7 +360,20 @@ destroyX11InputMethodData(JNIEnv *env, X11InputMethodData *pX11IMData)
|
||||
pX11IMData->current_ic = (XIC)0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* this function should be called within AWT_LOCK() */
|
||||
static void
|
||||
destroyX11InputMethodData(JNIEnv *env, X11InputMethodData *pX11IMData)
|
||||
{
|
||||
/*
|
||||
* Destroy XICs
|
||||
*/
|
||||
if (pX11IMData == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
destroyXInputContexts(pX11IMData);
|
||||
freeX11InputMethodData(env, pX11IMData);
|
||||
}
|
||||
|
||||
@@ -1364,6 +1372,27 @@ finally:
|
||||
return (pX11IMData != NULL);
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_sun_awt_X11_XInputMethod_recreateXICNative(JNIEnv *env,
|
||||
jobject this,
|
||||
jlong window, jlong pData)
|
||||
{
|
||||
// NOTE: must be called under AWT_LOCK
|
||||
return createXIC(env, (X11InputMethodData *)pData, window);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_awt_X11_XInputMethod_releaseXICNative(JNIEnv *env,
|
||||
jobject this,
|
||||
jlong pData)
|
||||
{
|
||||
// NOTE: must be called under AWT_LOCK
|
||||
X11InputMethodData * pX11IMData = (X11InputMethodData *)pData;
|
||||
pX11IMData->current_ic = NULL;
|
||||
destroyXInputContexts(pX11IMData);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_awt_X11_XInputMethod_setXICFocusNative(JNIEnv *env,
|
||||
jobject this,
|
||||
@@ -1616,3 +1645,21 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XInputMethod_adjustStatusWindow
|
||||
AWT_UNLOCK();
|
||||
#endif
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_sun_awt_X11InputMethod_recreateX11InputMethod(JNIEnv *env, jclass cls)
|
||||
{
|
||||
if (X11im == NULL || dpy == NULL)
|
||||
return JNI_FALSE;
|
||||
|
||||
Status retstat = XCloseIM(X11im);
|
||||
X11im = XOpenIM(dpy, NULL, NULL, NULL);
|
||||
if (X11im == NULL)
|
||||
return JNI_FALSE;
|
||||
|
||||
XIMCallback ximCallback;
|
||||
ximCallback.callback = (XIMProc)DestroyXIMCallback;
|
||||
ximCallback.client_data = NULL;
|
||||
XSetIMValues(X11im, XNDestroyCallback, &ximCallback, NULL);
|
||||
return JNI_TRUE;
|
||||
}
|
||||
|
||||
@@ -324,6 +324,8 @@ GtkApi* gtk3_load(JNIEnv *env, const char* lib_name)
|
||||
/* GDK */
|
||||
fp_gdk_get_default_root_window =
|
||||
dl_symbol("gdk_get_default_root_window");
|
||||
fp_gdk_window_get_scale_factor =
|
||||
dl_symbol("gdk_window_get_scale_factor");
|
||||
|
||||
/* Pixbuf */
|
||||
fp_gdk_pixbuf_new = dl_symbol("gdk_pixbuf_new");
|
||||
@@ -2869,7 +2871,10 @@ static gboolean gtk3_get_drawable_data(JNIEnv *env, jintArray pixelArray,
|
||||
jint *ary;
|
||||
|
||||
GdkWindow *root = (*fp_gdk_get_default_root_window)();
|
||||
pixbuf = (*fp_gdk_pixbuf_get_from_drawable)(root, x, y, width, height);
|
||||
int win_scale = (*fp_gdk_window_get_scale_factor)(root);
|
||||
pixbuf = (*fp_gdk_pixbuf_get_from_drawable)(
|
||||
root, x, y, (int)(width / (float)win_scale + 0.5), (int)(height / (float)win_scale + 0.5));
|
||||
|
||||
if (pixbuf && scale != 1) {
|
||||
GdkPixbuf *scaledPixbuf;
|
||||
x /= scale;
|
||||
@@ -2887,8 +2892,8 @@ static gboolean gtk3_get_drawable_data(JNIEnv *env, jintArray pixelArray,
|
||||
if (pixbuf) {
|
||||
int nchan = (*fp_gdk_pixbuf_get_n_channels)(pixbuf);
|
||||
int stride = (*fp_gdk_pixbuf_get_rowstride)(pixbuf);
|
||||
if ((*fp_gdk_pixbuf_get_width)(pixbuf) == width
|
||||
&& (*fp_gdk_pixbuf_get_height)(pixbuf) == height
|
||||
if ((*fp_gdk_pixbuf_get_width)(pixbuf) >= width
|
||||
&& (*fp_gdk_pixbuf_get_height)(pixbuf) >= height
|
||||
&& (*fp_gdk_pixbuf_get_bits_per_sample)(pixbuf) == 8
|
||||
&& (*fp_gdk_pixbuf_get_colorspace)(pixbuf) == GDK_COLORSPACE_RGB
|
||||
&& nchan >= 3
|
||||
|
||||
@@ -253,6 +253,7 @@ static gchar* (*fp_gtk_check_version)(guint required_major, guint
|
||||
static void (*fp_g_free)(gpointer mem);
|
||||
static void (*fp_g_object_unref)(gpointer object);
|
||||
static GdkWindow *(*fp_gdk_get_default_root_window) (void);
|
||||
static int (*fp_gdk_window_get_scale_factor) (GdkWindow *window);
|
||||
|
||||
static int (*fp_gdk_pixbuf_get_bits_per_sample)(const GdkPixbuf *pixbuf);
|
||||
static guchar *(*fp_gdk_pixbuf_get_pixels)(const GdkPixbuf *pixbuf);
|
||||
|
||||
@@ -644,6 +644,55 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XWindowEvent
|
||||
XWindowEvent( (Display *) jlong_to_ptr(display), (Window)window, event_mask, (XEvent *) jlong_to_ptr(event_return));
|
||||
}
|
||||
|
||||
static int filteredEventsCount = 0;
|
||||
static int filteredEventsThreshold = -1;
|
||||
#define KeyPressEventType 2
|
||||
#define KeyReleaseEventType 3
|
||||
|
||||
static void checkBrokenInputMethod(XEvent * event, jboolean isEventFiltered) {
|
||||
if (filteredEventsThreshold < 0) {
|
||||
filteredEventsThreshold = 0;
|
||||
|
||||
// read from VM-property
|
||||
JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
|
||||
jclass systemCls = (*env)->FindClass(env, "java/lang/System");
|
||||
CHECK_NULL(systemCls);
|
||||
jmethodID mid = (*env)->GetStaticMethodID(env, systemCls, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;");
|
||||
CHECK_NULL(mid);
|
||||
jstring name = (*env)->NewStringUTF(env, "recreate.x11.input.method");
|
||||
CHECK_NULL(name);
|
||||
jstring jvalue = (*env)->CallStaticObjectMethod(env, systemCls, mid, name);
|
||||
if (jvalue != NULL) {
|
||||
const char * utf8string = (*env)->GetStringUTFChars(env, jvalue, NULL);
|
||||
if (utf8string != NULL) {
|
||||
const int parsedVal = atoi(utf8string);
|
||||
if (parsedVal > 0)
|
||||
filteredEventsThreshold = parsedVal;
|
||||
else if (strncmp(utf8string, "true", 4) == 0)
|
||||
filteredEventsThreshold = 10;
|
||||
}
|
||||
(*env)->ReleaseStringUTFChars(env, jvalue, utf8string);
|
||||
}
|
||||
(*env)->DeleteLocalRef(env, name);
|
||||
}
|
||||
if (filteredEventsThreshold <= 0)
|
||||
return;
|
||||
|
||||
if (event->type == KeyPressEventType || event->type == KeyReleaseEventType) {
|
||||
if (isEventFiltered) {
|
||||
filteredEventsCount++;
|
||||
} else {
|
||||
filteredEventsCount = 0;
|
||||
}
|
||||
|
||||
if (filteredEventsCount > filteredEventsThreshold) {
|
||||
JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
|
||||
JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11InputMethod", "recreateAllXIC", "()V");
|
||||
filteredEventsCount = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: sun_awt_X11_XlibWrapper
|
||||
* Method: XFilterEvent
|
||||
@@ -658,7 +707,9 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XFilterEvent
|
||||
return (jboolean)True;
|
||||
}
|
||||
#endif
|
||||
return (jboolean) XFilterEvent((XEvent *) jlong_to_ptr(ptr), (Window) window);
|
||||
jboolean isEventFiltered = (jboolean) XFilterEvent((XEvent *) jlong_to_ptr(ptr), (Window) window);
|
||||
checkBrokenInputMethod((XEvent *)jlong_to_ptr(ptr), isEventFiltered);
|
||||
return isEventFiltered;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1720,7 +1720,7 @@ void GetSysInsets(RECT* insets, AwtFrame* pFrame) {
|
||||
int dpi = device ? device->GetScaleX() * 96 : 96;
|
||||
|
||||
// GetSystemMetricsForDpi gives incorrect values, use AdjustWindowRectExForDpi for border metrics instead
|
||||
RECT rect = {0};
|
||||
RECT rect = {};
|
||||
DWORD style = pFrame->IsResizable() ? WS_OVERLAPPEDWINDOW : WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME;
|
||||
AwtToolkit::AdjustWindowRectExForDpi(&rect, style, FALSE, NULL, dpi);
|
||||
::SetRect(insets, -rect.left, -rect.top, rect.right, rect.bottom);
|
||||
@@ -1734,7 +1734,7 @@ LRESULT HitTestNCA(AwtFrame* frame, int x, int y) {
|
||||
GetWindowRect(frame->GetHWnd(), &rcWindow);
|
||||
|
||||
// Get the frame rectangle, adjusted for the style without a caption.
|
||||
RECT rcFrame = {0};
|
||||
RECT rcFrame = {};
|
||||
AdjustWindowRectEx(&rcFrame, WS_OVERLAPPEDWINDOW & ~WS_CAPTION, FALSE, NULL);
|
||||
|
||||
USHORT uRow = 1;
|
||||
@@ -1794,8 +1794,10 @@ MsgRouting AwtFrame::WmNcCalcSize(BOOL wParam, LPNCCALCSIZE_PARAMS lpncsp, LRESU
|
||||
if (::IsZoomed(GetHWnd())) {
|
||||
rect->top += insets.bottom;
|
||||
// [moklev] Workaround for RIDER-27069, IDEA-211327
|
||||
rect->right += this->ScaleUpX(1);
|
||||
rect->bottom -= 1;
|
||||
if (!this->IsUndecorated()) {
|
||||
rect->right += this->ScaleUpX(1);
|
||||
rect->bottom -= 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// this makes the native caption go uncovered
|
||||
|
||||
@@ -103,16 +103,21 @@ public class ClassLoaderReferenceImpl extends ObjectReferenceImpl
|
||||
|
||||
Type findType(String signature) throws ClassNotLoadedException {
|
||||
List<ReferenceType> types = visibleClasses();
|
||||
Iterator<ReferenceType> iter = types.iterator();
|
||||
while (iter.hasNext()) {
|
||||
ReferenceType type = iter.next();
|
||||
|
||||
// first check already loaded classes and possibly avoid massive signature retrieval later
|
||||
String typeName = new JNITypeParser(signature).typeName();
|
||||
for (ReferenceType type : vm.classesByName(typeName)) {
|
||||
if (types.contains(type)) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
||||
for (ReferenceType type : types) {
|
||||
if (type.signature().equals(signature)) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
JNITypeParser parser = new JNITypeParser(signature);
|
||||
throw new ClassNotLoadedException(parser.typeName(),
|
||||
"Class " + parser.typeName() + " not loaded");
|
||||
throw new ClassNotLoadedException(typeName, "Class " + typeName + " not loaded");
|
||||
}
|
||||
|
||||
byte typeValueKey() {
|
||||
|
||||
@@ -61,6 +61,9 @@ applications/ctw/modules/jdk_jconsole.java 8189604 windows-all
|
||||
|
||||
compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java 8190680 generic-all
|
||||
|
||||
compiler/uncommontrap/DeoptReallocFailure.java nobug generic-all causes Out of memory: Java heap space affects run status
|
||||
compiler/uncommontrap/TestDeoptOOM.java nobug generic-all causes Out of memory: Java heap space affects run status
|
||||
|
||||
#############################################################################
|
||||
|
||||
# :hotspot_gc
|
||||
|
||||
@@ -38,9 +38,12 @@ import javax.swing.UIManager;
|
||||
* @bug 8073320
|
||||
* @summary Windows HiDPI support
|
||||
* @author Alexander Scherbatiy
|
||||
* @requires (os.family == "windows")
|
||||
* @requires (os.family == "linux" | os.family == "windows")
|
||||
* @run main/othervm -Dsun.java2d.win.uiScaleX=3 -Dsun.java2d.win.uiScaleY=2
|
||||
* HiDPIRobotScreenCaptureTest
|
||||
HiDPIRobotScreenCaptureTest
|
||||
* @run main/othervm -Dsun.java2d.uiScale=1 HiDPIRobotScreenCaptureTest
|
||||
* @run main/othervm -Dsun.java2d.uiScale=2 HiDPIRobotScreenCaptureTest
|
||||
* @run main/othervm -Dsun.java2d.uiScale=3 HiDPIRobotScreenCaptureTest
|
||||
*/
|
||||
|
||||
public class HiDPIRobotScreenCaptureTest {
|
||||
@@ -50,11 +53,13 @@ public class HiDPIRobotScreenCaptureTest {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
try {
|
||||
UIManager.setLookAndFeel(
|
||||
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
|
||||
} catch (Exception e) {
|
||||
return;
|
||||
if (System.getProperty("os.name").toLowerCase().contains("win")) {
|
||||
try {
|
||||
UIManager.setLookAndFeel(
|
||||
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
|
||||
} catch (Exception e) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Frame frame = new Frame();
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright 2000-2019 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @summary JBR-1604 Tooltip with package's info is cut
|
||||
*/
|
||||
public class JEditorPanePreferredSizeTest2 {
|
||||
public static void main(String[] args) throws InvocationTargetException, InterruptedException {
|
||||
final Dimension size = new Dimension();
|
||||
SwingUtilities.invokeAndWait(() -> {
|
||||
JEditorPane editorPane = new JEditorPane("text/html", "text");
|
||||
editorPane.setBorder(null);
|
||||
editorPane.getPreferredSize();
|
||||
editorPane.setText("another text");
|
||||
size.setSize(editorPane.getPreferredSize());
|
||||
});
|
||||
if (size.width <= 0 || size.height <= 0) {
|
||||
throw new RuntimeException("Test FAILED: bad preferred size: " + size);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -193,7 +193,7 @@ java/awt/Focus/WindowIsFocusableAccessByThreadsTest/WindowIsFocusableAccessByThr
|
||||
java/awt/Focus/WindowUpdateFocusabilityTest/WindowUpdateFocusabilityTest.html 8202926 generic-all
|
||||
java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java 8169096,8213522 macosx-all,linux-all,windows-all
|
||||
java/awt/FontMetrics/FontCrash.java 8198336 windows-all
|
||||
java/awt/Frame/DisposeParentGC/DisposeParentGC.java 8079786 macosx-all
|
||||
java/awt/Frame/DisposeParentGC/DisposeParentGC.java 8079786,8055833 macosx-all,linux-all
|
||||
java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java 8198237 macosx-all
|
||||
java/awt/Frame/FramesGC/FramesGC.java 8079069 macosx-all
|
||||
java/awt/Frame/InvisibleOwner/InvisibleOwner.java 8169111 macosx-all,windows-all
|
||||
@@ -529,7 +529,7 @@ java/awt/Modal/ToFront/FrameToFrontTKModal3Test.java
|
||||
java/awt/Modal/ToFront/FrameToFrontTKModal4Test.java 8196441 macosx-all,windows-all,linux-all
|
||||
java/awt/Modal/ToFront/FrameToFrontTKModal5Test.java 8196441 macosx-all,windows-all,linux-all
|
||||
java/awt/Mouse/EnterExitEvents/DragWindowOutOfFrameTest.java 8177326 macosx-all,windows-all
|
||||
java/awt/Mouse/EnterExitEvents/DragWindowTest.java 8023562 macosx-all,windows-all
|
||||
java/awt/Mouse/EnterExitEvents/DragWindowTest.java 8023562 macosx-all,windows-all,linux-all
|
||||
java/awt/Mouse/EnterExitEvents/ModalDialogEnterExitEventsTest.java JRE-898 macosx-all,windows-all,linux-all
|
||||
java/awt/Mouse/EnterExitEvents/ResizingFrameTest.java 8005021 macosx-all,windows-all,linux-all
|
||||
java/awt/Mouse/EnterExitEvents/FullscreenEnterEventTest.java 8051455 macosx-all
|
||||
@@ -599,7 +599,7 @@ java/awt/Window/AlwaysOnTop/AutoTestOnTop.java
|
||||
java/awt/Window/AlwaysOnTop/TestAlwaysOnTopBeforeShow.java 8169530 macosx-all,windows-all
|
||||
java/awt/Window/GrabSequence/GrabSequence.java 6848409 macosx-all,windows-all,linux-all
|
||||
java/awt/Window/LocationAtScreenCorner/LocationAtScreenCorner.java 8203371 linux-all,solaris-all
|
||||
java/awt/Window/setLocRelativeTo/SetLocationRelativeToTest.java JRE-1173 windows-all
|
||||
java/awt/Window/setLocRelativeTo/SetLocationRelativeToTest.java JRE-1173 windows-all,linux-all
|
||||
java/awt/datatransfer/ConstructFlavoredObjectTest/ConstructFlavoredObjectTest.java 8202860 linux-all
|
||||
java/awt/datatransfer/DataFlavor/DataFlavorRemoteTest.java JRE-898 macosx-all
|
||||
java/awt/datatransfer/DragImage/MultiResolutionDragImageTest.java 8080982 generic-all
|
||||
@@ -618,6 +618,7 @@ java/awt/dnd/MissingEventsOnModalDialog/MissingEventsOnModalDialogTest.java
|
||||
java/awt/dnd/NoFormatsCrashTest/NoFormatsCrashTest.html 8214221 windows-all,linux-all,macosx-all
|
||||
java/awt/dnd/URIListBetweenJVMsTest/URIListBetweenJVMsTest.html 8171510 macosx-all
|
||||
java/awt/dnd/URIListToFileListBetweenJVMsTest/URIListToFileListBetweenJVMsTest.html 8194947 generic-all
|
||||
java/awt/event/ComponentEvent/MovedResizedTardyEventTest/MovedResizedTardyEventTest.html 6511207 generic-all
|
||||
java/awt/event/HierarchyEvent/AncestorResized/AncestorResized.java 6618538 generic-all
|
||||
java/awt/event/InputEvent/EventWhenTest/EventWhenTest.java 8168646 generic-all
|
||||
java/awt/event/KeyEvent/CorrectTime/CorrectTime.java 6626492 generic-all
|
||||
@@ -984,7 +985,7 @@ javax/swing/JPopupMenu/6515446/bug6515446.java
|
||||
javax/swing/JPopupMenu/6580930/bug6580930.java 8196096 windows-all,linux-all,macosx-all
|
||||
javax/swing/JPopupMenu/6583251/bug6583251.java 8213564 linux-all
|
||||
javax/swing/JPopupMenu/6675802/bug6675802.java 8196097 windows-all
|
||||
javax/swing/JPopupMenu/6800513/bug6800513.java 7184956,8080868 macosx-all,windows-all
|
||||
javax/swing/JPopupMenu/6800513/bug6800513.java 7184956,8080868 macosx-all,windows-all,linux-all
|
||||
javax/swing/JPopupMenu/6987844/bug6987844.java 8169956 macosx-all,windows-all
|
||||
javax/swing/JPopupMenu/7156657/bug7156657.java 8171381 macosx-all,windows-all
|
||||
javax/swing/JPopupMenu/8075063/ContextMenuScrollTest.java 8202880 linux-all,windows-all,macosx-all
|
||||
|
||||
@@ -3,6 +3,7 @@ java/awt/Choice/DragMouseOutAndRelease/DragMouseOutAndRelease.java
|
||||
java/awt/Choice/GetSizeTest/GetSizeTest.java nobug macosx-all,windows-all
|
||||
java/awt/Choice/ResizeAutoClosesChoice/ResizeAutoClosesChoice.java nobug windows-all,linux-all
|
||||
java/awt/Component/F10TopToplevel/F10TopToplevel.html nobug linux-all
|
||||
java/awt/Component/PaintAll/PaintAll.java nobug linux-all
|
||||
java/awt/Container/isRemoveNotifyNeeded/JInternalFrameTest.java nobug generic-all
|
||||
java/awt/Dialog/MakeWindowAlwaysOnTop/MakeWindowAlwaysOnTop.java nobug macosx-all,windows-all
|
||||
java/awt/Dialog/NestedDialogs/Modal/NestedModalDialogTest.java nobug macosx-all,windows-all
|
||||
@@ -47,7 +48,7 @@ java/awt/Graphics/LineClipTest.java
|
||||
java/awt/Graphics2D/ScaledTransform/ScaledTransform.java nobug macosx-all,linux-all,windows-all
|
||||
java/awt/JAWT/JAWT.sh nobug linux-all,windows-all
|
||||
java/awt/KeyboardFocusmanager/ConsumeNextMnemonicKeyTypedTest/ConsumeNextMnemonicKeyTypedTest.html nobug macosx-all,windows-all
|
||||
java/awt/KeyboardFocusmanager/TypeAhead/EnqueueWithDialogTest/EnqueueWithDialogTest.java nobug macosx-all,windows-all
|
||||
java/awt/KeyboardFocusmanager/TypeAhead/EnqueueWithDialogTest/EnqueueWithDialogTest.java nobug macosx-all,windows-all,linux-all
|
||||
java/awt/KeyboardFocusmanager/TypeAhead/MenuItemActivatedTest/MenuItemActivatedTest.html nobug windows-all reproduced with Adopt
|
||||
java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java nobug windows-all
|
||||
java/awt/List/ActionAfterRemove/ActionAfterRemove.java nobug windows-all
|
||||
@@ -75,6 +76,7 @@ java/awt/Mouse/MouseWheelAbsXY/MouseWheelAbsXY.java
|
||||
java/awt/MouseAdapter/MouseAdapterUnitTest/MouseAdapterUnitTest.java nobug macosx-all,windows-all
|
||||
java/awt/MouseInfo/ComponentMousePositionTest.java nobug macosx-all,windows-all
|
||||
java/awt/MouseInfo/JContainerMousePositionTest.java nobug macosx-all,windows-all
|
||||
java/awt/Paint/ComponentIsNotDrawnAfterRemoveAddTest/ComponentIsNotDrawnAfterRemoveAddTest.java nobug linux-all,macosx-all,windows-all
|
||||
java/awt/Paint/ExposeOnEDT.java nobug windows-all
|
||||
java/awt/Paint/ListRepaint.java nobug linux-all (java.lang.NullPointerException reproduced with Adopt)
|
||||
java/awt/PopupMenu/PopupMenuLocation.java nobug macosx-all,linux-all,windows-all
|
||||
@@ -123,7 +125,6 @@ java/awt/event/KeyEvent/ExtendedKeyCode/ExtendedKeyCodeTest.java
|
||||
java/awt/event/KeyEvent/KeyChar/KeyCharTest.java nobug macosx-all,windows-all
|
||||
java/awt/event/KeyEvent/KeyTyped/CtrlASCII.html nobug linux-all,windows-all
|
||||
java/awt/event/KeyEvent/RobotCrash/RobotCrash.java nobug linux-all,windows-all
|
||||
java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java nobug macosx-all,linux-all
|
||||
java/awt/event/MouseEvent/ClickDuringKeypress/ClickDuringKeypress.java nobug macosx-all,windows-all,linux-all
|
||||
java/awt/event/MouseEvent/EnterAsGrabbedEvent/EnterAsGrabbedEvent.java nobug macosx-all,windows-all
|
||||
java/awt/event/MouseEvent/MouseButtonsTest/MouseButtonsTest.java nobug macosx-all,linux-all,windows-all
|
||||
@@ -153,7 +154,7 @@ java/awt/print/PaintSetEnabledDeadlock/PaintSetEnabledDeadlock.java
|
||||
|
||||
javax/swing/JComboBox/4199622/bug4199622.java nobug windows-all
|
||||
javax/swing/JComboBox/4523758/bug4523758.java nobug macosx-all,windows-all
|
||||
javax/swing/JDialog/Transparency/TransparencyTest.java nobug macosx-all,windows-all
|
||||
javax/swing/JDialog/Transparency/TransparencyTest.java nobug linux-all,macosx-all,windows-all
|
||||
javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest.java nobug windows-all
|
||||
javax/swing/JEditorPane/JEditorPaneGCSwitchTest/JEditorPaneGCSwitchTest_i18n.java nobug windows-all
|
||||
javax/swing/JFileChooser/6489130/bug6489130.java nobug macosx-all
|
||||
|
||||
710
test/jdk/jbu/performance/rendering/RenderPerfTest.java
Normal file
@@ -0,0 +1,710 @@
|
||||
/*
|
||||
* Copyright 2019 JetBrains s.r.o.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package performance.rendering;
|
||||
|
||||
import org.junit.Test;
|
||||
import util.Renderer;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.awt.geom.QuadCurve2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class RenderPerfTest {
|
||||
private final static int N = 1000;
|
||||
private final static float R = 25;
|
||||
private final static int COUNT = 300;
|
||||
|
||||
|
||||
static class Particles {
|
||||
private float[] bx;
|
||||
private float[] by;
|
||||
private float[] vx;
|
||||
private float[] vy;
|
||||
private float r;
|
||||
private int n;
|
||||
|
||||
private float x0;
|
||||
private float y0;
|
||||
private float width;
|
||||
private float height;
|
||||
|
||||
Particles(int n, float r, float x0, float y0, float width, float height) {
|
||||
bx = new float[n];
|
||||
by = new float[n];
|
||||
vx = new float[n];
|
||||
vy = new float[n];
|
||||
this.n = n;
|
||||
this.r = r;
|
||||
this.x0 = x0;
|
||||
this.y0 = y0;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
for (int i = 0; i < n; i++) {
|
||||
bx[i] = (float) (x0 + r + 0.1 + Math.random() * (width - 2 * r - 0.2 - x0));
|
||||
by[i] = (float) (y0 + r + 0.1 + Math.random() * (height - 2 * r - 0.2 - y0));
|
||||
vx[i] = 0.1f * (float) (Math.random() * 2 * r - r);
|
||||
vy[i] = 0.1f * (float) (Math.random() * 2 * r - r);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void render(Graphics2D g2d, ParticleRenderer renderer) {
|
||||
for (int i = 0; i < n; i++) {
|
||||
renderer.render(g2d, i, bx, by, vx, vy);
|
||||
}
|
||||
}
|
||||
|
||||
void update() {
|
||||
for (int i = 0; i < n; i++) {
|
||||
bx[i] += vx[i];
|
||||
if (bx[i] + r > width || bx[i] - r < x0) vx[i] = -vx[i];
|
||||
by[i] += vy[i];
|
||||
if (by[i] + r > height || by[i] - r < y0) vy[i] = -vy[i];
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
interface ParticleRenderer {
|
||||
void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy);
|
||||
|
||||
}
|
||||
|
||||
private static void report(String name, double value) {
|
||||
System.err.println("##teamcity[buildStatisticValue key='" + name + "' value='" + value +"']");
|
||||
}
|
||||
|
||||
static class FlatParticleRenderer implements ParticleRenderer {
|
||||
Color[] colors;
|
||||
float r;
|
||||
|
||||
FlatParticleRenderer(int n, float r) {
|
||||
colors = new Color[n];
|
||||
this.r = r;
|
||||
for (int i = 0; i < n; i++) {
|
||||
colors[i] = new Color((float) Math.random(),
|
||||
(float) Math.random(), (float) Math.random());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
|
||||
g2d.setColor(colors[id % colors.length]);
|
||||
g2d.fillOval((int)(x[id] - r), (int)(y[id] - r), (int)(2*r), (int)(2*r));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class WhiteTextParticleRenderer implements ParticleRenderer {
|
||||
float r;
|
||||
Object hint;
|
||||
|
||||
WhiteTextParticleRenderer(float r, Object hint) {
|
||||
this.r = r;
|
||||
this.hint = hint;
|
||||
}
|
||||
|
||||
void setPaint(Graphics2D g2d, int id) {
|
||||
g2d.setColor(Color.WHITE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
|
||||
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, hint);
|
||||
|
||||
setPaint(g2d, id);
|
||||
g2d.drawString("The quick brown fox jumps over the lazy dog",
|
||||
(int)(x[id] - r), (int)(y[id] - r));
|
||||
g2d.drawString("The quick brown fox jumps over the lazy dog",
|
||||
(int)(x[id] - r), (int)y[id]);
|
||||
g2d.drawString("The quick brown fox jumps over the lazy dog",
|
||||
(int)(x[id] - r), (int)(y[id] + r));
|
||||
}
|
||||
}
|
||||
|
||||
static class TextParticleRenderer extends WhiteTextParticleRenderer {
|
||||
Color[] colors;
|
||||
|
||||
float r;
|
||||
|
||||
TextParticleRenderer(int n, float r, Object hint) {
|
||||
super(r, hint);
|
||||
colors = new Color[n];
|
||||
this.r = r;
|
||||
for (int i = 0; i < n; i++) {
|
||||
colors[i] = new Color((float) Math.random(),
|
||||
(float) Math.random(), (float) Math.random());
|
||||
}
|
||||
}
|
||||
|
||||
void setPaint(Graphics2D g2d, int id) {
|
||||
g2d.setColor(colors[id % colors.length]);
|
||||
}
|
||||
}
|
||||
|
||||
static class FlatOvalRotParticleRenderer extends FlatParticleRenderer {
|
||||
|
||||
|
||||
FlatOvalRotParticleRenderer(int n, float r) {
|
||||
super(n, r);
|
||||
}
|
||||
|
||||
void setPaint(Graphics2D g2d, int id) {
|
||||
g2d.setColor(colors[id % colors.length]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
|
||||
setPaint(g2d, id);
|
||||
if (Math.abs(vx[id] + vy[id]) > 0.001) {
|
||||
AffineTransform t = (AffineTransform) g2d.getTransform().clone();
|
||||
double l = vx[id] / Math.sqrt(vx[id] * vx[id] + vy[id] * vy[id]);
|
||||
if (vy[id] < 0) {
|
||||
l = -l;
|
||||
}
|
||||
g2d.translate(x[id], y[id]);
|
||||
g2d.rotate(Math.acos(l));
|
||||
g2d.fillOval(-(int)r, (int)(-0.5*r), (int) (2 * r), (int)r);
|
||||
g2d.setTransform(t);
|
||||
} else {
|
||||
g2d.fillOval((int)(x[id] - r), (int)(y[id] - 0.5*r),
|
||||
(int) (2 * r), (int) r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static class LinGradOvalRotParticleRenderer extends FlatOvalRotParticleRenderer {
|
||||
|
||||
|
||||
LinGradOvalRotParticleRenderer(int n, float r) {
|
||||
super(n, r);
|
||||
}
|
||||
|
||||
@Override
|
||||
void setPaint(Graphics2D g2d, int id) {
|
||||
Point2D start = new Point2D.Double(- r, - 0.5*r);
|
||||
Point2D end = new Point2D.Double( 2 * r, r);
|
||||
float[] dist = {0.0f, 1.0f};
|
||||
Color[] cls = {colors[id %colors.length], colors[(colors.length - id) %colors.length]};
|
||||
LinearGradientPaint p =
|
||||
new LinearGradientPaint(start, end, dist, cls);
|
||||
g2d.setPaint(p);
|
||||
}
|
||||
}
|
||||
|
||||
static class FlatBoxParticleRenderer extends FlatParticleRenderer {
|
||||
|
||||
|
||||
FlatBoxParticleRenderer(int n, float r) {
|
||||
super(n, r);
|
||||
}
|
||||
@Override
|
||||
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
|
||||
g2d.setColor(colors[id % colors.length]);
|
||||
g2d.fillRect((int)(x[id] - r), (int)(y[id] - r), (int)(2*r), (int)(2*r));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class ImgParticleRenderer extends FlatParticleRenderer {
|
||||
BufferedImage dukeImg;
|
||||
|
||||
ImgParticleRenderer(int n, float r) {
|
||||
super(n, r);
|
||||
String testDataStr = System.getProperty("testdata");
|
||||
assertNotNull("testdata property is not set", testDataStr);
|
||||
|
||||
File testData = new File(testDataStr, "performance" + File.separator + "rendering");
|
||||
assertTrue("Test data dir does not exist", testData.exists());
|
||||
File dukeFile = new File(testData, "duke.png");
|
||||
|
||||
if (!dukeFile.exists()) throw new RuntimeException(dukeFile.toString() + " not found");
|
||||
|
||||
try {
|
||||
dukeImg = ImageIO.read(dukeFile);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
|
||||
g2d.setColor(colors[id % colors.length]);
|
||||
g2d.drawImage(dukeImg, (int)(x[id] - r), (int)(y[id] - r), (int)(2*r), (int)(2*r), null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class FlatBoxRotParticleRenderer extends FlatParticleRenderer {
|
||||
|
||||
|
||||
FlatBoxRotParticleRenderer(int n, float r) {
|
||||
super(n, r);
|
||||
}
|
||||
@Override
|
||||
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
|
||||
g2d.setColor(colors[id % colors.length]);
|
||||
if (Math.abs(vx[id] + vy[id]) > 0.001) {
|
||||
AffineTransform t = (AffineTransform) g2d.getTransform().clone();
|
||||
double l = vx[id] / Math.sqrt(vx[id] * vx[id] + vy[id] * vy[id]);
|
||||
if (vy[id] < 0) {
|
||||
l = -l;
|
||||
}
|
||||
g2d.translate(x[id], y[id]);
|
||||
g2d.rotate(Math.acos(l));
|
||||
g2d.fillRect(-(int)r, -(int)r, (int) (2 * r), (int) (2 * r));
|
||||
g2d.setTransform(t);
|
||||
} else {
|
||||
g2d.fillRect((int)(x[id] - r), (int)(y[id] - r),
|
||||
(int) (2 * r), (int) (2 * r));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static class WiredParticleRenderer extends FlatParticleRenderer {
|
||||
|
||||
|
||||
WiredParticleRenderer(int n, float r) {
|
||||
super(n, r);
|
||||
}
|
||||
@Override
|
||||
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
|
||||
g2d.setColor(colors[id % colors.length]);
|
||||
g2d.drawOval((int)(x[id] - r), (int)(y[id] - r), (int)(2*r), (int)(2*r));
|
||||
}
|
||||
|
||||
}
|
||||
static class WiredBoxParticleRenderer extends FlatParticleRenderer {
|
||||
|
||||
WiredBoxParticleRenderer(int n, float r) {
|
||||
super(n, r);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
|
||||
g2d.setColor(colors[id % colors.length]);
|
||||
g2d.drawRect((int)(x[id] - r), (int)(y[id] - r), (int)(2*r), (int)(2*r));
|
||||
}
|
||||
|
||||
}
|
||||
static class SegParticleRenderer extends FlatParticleRenderer {
|
||||
|
||||
SegParticleRenderer(int n, float r) {
|
||||
super(n, r);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
|
||||
double v = Math.sqrt(vx[id]*vx[id]+vy[id]*vy[id]);
|
||||
float nvx = (float) (vx[id]/v);
|
||||
float nvy = (float) (vy[id]/v);
|
||||
g2d.setColor(colors[id % colors.length]);
|
||||
g2d.drawLine((int)(x[id] - r*nvx), (int)(y[id] - r*nvy),
|
||||
(int)(x[id] + 2*r*nvx), (int)(y[id] + 2*r*nvy));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
static class WiredQuadParticleRenderer extends FlatParticleRenderer {
|
||||
|
||||
WiredQuadParticleRenderer(int n, float r) {
|
||||
super(n, r);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
|
||||
if (id > 2 && (id % 3) == 0) {
|
||||
g2d.setColor(colors[id % colors.length]);
|
||||
g2d.draw(new QuadCurve2D.Float(x[id-3], y[id-3], x[id-2], y[id-2], x[id-1], y[id-1]));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static class FlatQuadParticleRenderer extends FlatParticleRenderer {
|
||||
|
||||
FlatQuadParticleRenderer(int n, float r) {
|
||||
super(n, r);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
|
||||
if (id > 2 && (id % 3) == 0) {
|
||||
g2d.setColor(colors[id % colors.length]);
|
||||
g2d.fill(new QuadCurve2D.Float(x[id-3], y[id-3], x[id-2], y[id-2], x[id-1], y[id-1]));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private static final Particles balls = new Particles(N, R, 0, 0, Renderer.WIDTH, Renderer.HEIGHT);
|
||||
private static final ParticleRenderer flatRenderer = new FlatParticleRenderer(N, R);
|
||||
private static final ParticleRenderer flatOvalRotRenderer = new FlatOvalRotParticleRenderer(N, R);
|
||||
private static final ParticleRenderer flatBoxRenderer = new FlatBoxParticleRenderer(N, R);
|
||||
private static final ParticleRenderer flatBoxRotRenderer = new FlatBoxRotParticleRenderer(N, R);
|
||||
private static final ParticleRenderer linGradOvalRotRenderer = new LinGradOvalRotParticleRenderer(N, R);
|
||||
private static final ParticleRenderer wiredRenderer = new WiredParticleRenderer(N, R);
|
||||
private static final ParticleRenderer wiredBoxRenderer = new WiredBoxParticleRenderer(N, R);
|
||||
private static final ParticleRenderer segRenderer = new SegParticleRenderer(N, R);
|
||||
private static final ParticleRenderer flatQuadRenderer = new FlatQuadParticleRenderer(N, R);
|
||||
private static final ParticleRenderer wiredQuadRenderer = new WiredQuadParticleRenderer(N, R);
|
||||
private static final ParticleRenderer imgRenderer = new ImgParticleRenderer(N, R);
|
||||
private static final ParticleRenderer textRendererNoAA =
|
||||
new TextParticleRenderer(N, R, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
|
||||
private static final ParticleRenderer textRendererLCD =
|
||||
new TextParticleRenderer(N, R, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
|
||||
private static final ParticleRenderer textRendererGray =
|
||||
new TextParticleRenderer(N, R, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||
|
||||
private static final ParticleRenderer whiteTextRendererNoAA =
|
||||
new WhiteTextParticleRenderer(R, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
|
||||
private static final ParticleRenderer whiteTextRendererLCD =
|
||||
new WhiteTextParticleRenderer(R, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
|
||||
private static final ParticleRenderer whiteTextRendererGray =
|
||||
new WhiteTextParticleRenderer(R, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||
|
||||
|
||||
@Test
|
||||
public void testFlatBubbles() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.Renderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, flatRenderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void screenShot(BufferedImage result) {
|
||||
System.err.println();
|
||||
}
|
||||
});
|
||||
|
||||
report("FlatOval", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFlatBoxBubbles() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, flatBoxRenderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("FlatBox", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testImgBubbles() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, imgRenderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("Image", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFlatBoxRotBubbles() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, flatBoxRotRenderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("RotatedBox", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFlatOvalRotBubbles() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, flatOvalRotRenderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("RotatedOval", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLinGradOvalRotBubbles() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, linGradOvalRotRenderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("LinGradRotatedOval", fps);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testWiredBubbles() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, wiredRenderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("WiredOval", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWiredBoxBubbles() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, wiredBoxRenderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("WiredBox", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLines() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, segRenderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("Lines", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFlatQuad() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, flatQuadRenderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("FlatQuad", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWiredQuad() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, wiredQuadRenderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("WiredQuad", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTextBubblesNoAA() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, textRendererNoAA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("TextNoAA", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTextBubblesLCD() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, textRendererLCD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("TextLCD", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTextBubblesGray() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, textRendererGray);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("TextGray", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWhiteTextBubblesNoAA() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, whiteTextRendererNoAA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("WhiteTextNoAA", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWhiteTextBubblesLCD() throws Exception {
|
||||
|
||||
double fps = (new util.Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, whiteTextRendererLCD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("WhiteTextLCD", fps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWhiteTextBubblesGray() throws Exception {
|
||||
|
||||
double fps = (new Renderer(COUNT)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
balls.render(g2d, whiteTextRendererGray);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
balls.update();
|
||||
}
|
||||
});
|
||||
|
||||
report("WhiteTextGray", fps);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,14 +1,12 @@
|
||||
package quality.text;
|
||||
|
||||
import org.junit.Test;
|
||||
import quality.util.RenderUtil;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.Raster;
|
||||
import java.io.File;
|
||||
|
||||
@@ -40,7 +38,7 @@ public class DroidFontTest {
|
||||
|
||||
String[] testDataVariant = {
|
||||
"osx_hardware_rendering", "osx_software_rendering", "osx_sierra_rendering",
|
||||
"linux_rendering"};
|
||||
"osx_mojave_rendering", "linux_rendering"};
|
||||
|
||||
String testDataStr = System.getProperty("testdata");
|
||||
assertNotNull("testdata property is not set", testDataStr);
|
||||
@@ -70,7 +68,7 @@ public class DroidFontTest {
|
||||
(int) bnd.getWidth(), (int) bnd.getHeight());
|
||||
|
||||
String gfName = name.toLowerCase().replace(" ", "") +
|
||||
Integer.toString(style) + "_" + Integer.toString(size) + ".png";
|
||||
style + "_" + size + ".png";
|
||||
|
||||
if (System.getProperty("gentestdata") == null) {
|
||||
boolean failed = true;
|
||||
@@ -98,7 +96,7 @@ public class DroidFontTest {
|
||||
for (int j = 0; j < gRaster.getHeight(); j++) {
|
||||
gRaster.getPixel(i, j, gArr);
|
||||
rRaster.getPixel(i, j, rArr);
|
||||
assertTrue(gArr.length == rArr.length);
|
||||
assertEquals(gArr.length, rArr.length);
|
||||
for (int k = 0; k < gArr.length; k++) {
|
||||
if (gArr[k] != rArr[k]) {
|
||||
failureReason.append(variant).append(" : Different pixels found ").append("at (").append(i).append(",").append(j).append(")");
|
||||
|
||||
37
test/jdk/jbu/quality/text/FiraCodeScrTest.java
Normal file
@@ -0,0 +1,37 @@
|
||||
package quality.text;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import quality.util.RenderUtil;
|
||||
import util.Renderer;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
public class FiraCodeScrTest {
|
||||
|
||||
@Test
|
||||
public void testRenderText() throws Exception {
|
||||
String [] testResult = new String[] {null};
|
||||
|
||||
(new util.Renderer(2, 300, 30, true)).exec(new Renderer.DefaultRenderable() {
|
||||
@Override
|
||||
public void render(Graphics2D g2d) {
|
||||
g2d.setColor(Color.WHITE);
|
||||
Font f = new Font("Fira Code", Font.PLAIN, 12);
|
||||
g2d.setFont(f);
|
||||
g2d.drawString("The quick brown fox jumps over the lazy dog", 0, 15);
|
||||
}
|
||||
@Override
|
||||
public void screenShot(BufferedImage result) {
|
||||
try {
|
||||
RenderUtil.checkImage(result, "text", "firacode.png");
|
||||
} catch (Exception e) {
|
||||
testResult[0] = e.getMessage();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (testResult[0] != null) Assert.fail(testResult[0]);
|
||||
}
|
||||
}
|
||||
@@ -33,7 +33,7 @@ public class RenderUtil {
|
||||
throws Exception
|
||||
{
|
||||
JFrame[] f = new JFrame[1];
|
||||
Point[] p = new Point[1];
|
||||
int[] p = new int[2];
|
||||
double[] scale = new double[2];
|
||||
SwingUtilities.invokeAndWait(() -> {
|
||||
f[0] = new JFrame();
|
||||
@@ -47,19 +47,22 @@ public class RenderUtil {
|
||||
// e.g. rounded frame
|
||||
c.setLocation(50, 50);
|
||||
f[0].setVisible(true);
|
||||
p[0]= c.getLocationOnScreen();
|
||||
p[0] = f[0].getLocationOnScreen().x + f[0].getInsets().left;
|
||||
p[1] = f[0].getLocationOnScreen().y + f[0].getInsets().top;
|
||||
scale[0] = f[0].getGraphicsConfiguration().getDefaultTransform().getScaleX();
|
||||
scale[1] = f[0].getGraphicsConfiguration().getDefaultTransform().getScaleY();
|
||||
});
|
||||
|
||||
Rectangle screenRect;
|
||||
Robot r = new Robot();
|
||||
while (!Color.black.equals(r.getPixelColor(p[0].x+1, p[0].y))) {
|
||||
while (!Color.black.equals(r.getPixelColor(p[0] + 1, p[1] + 1))) {
|
||||
p[0] = f[0].getLocationOnScreen().x + f[0].getInsets().left;
|
||||
p[1] = f[0].getLocationOnScreen().y + f[0].getInsets().top;
|
||||
Thread.sleep(100);
|
||||
}
|
||||
screenRect = new Rectangle(
|
||||
p[0].x + 5,
|
||||
p[0].y + 5,
|
||||
p[0] + 5,
|
||||
p[1] + 5,
|
||||
(int)((width - 20) * scale[0]), (int)((height - 30) * scale[1]));
|
||||
|
||||
BufferedImage result = r.createScreenCapture(screenRect);
|
||||
@@ -95,7 +98,7 @@ public class RenderUtil {
|
||||
|
||||
String[] testDataVariant = {
|
||||
"osx_hardware_rendering", "osx_software_rendering",
|
||||
"osx_sierra_rendering", "osx_lowres_rendering",
|
||||
"osx_sierra_rendering", "osx_mojave_rendering", "osx_lowres_rendering",
|
||||
"linux_rendering", "windows_rendering"};
|
||||
|
||||
String testDataStr = System.getProperty("testdata");
|
||||
|
||||
BIN
test/jdk/jbu/testdata/performance/rendering/duke.png
vendored
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
test/jdk/jbu/testdata/quality/text/linux_rendering/bndtext.png
vendored
Normal file
|
After Width: | Height: | Size: 537 B |
BIN
test/jdk/jbu/testdata/quality/text/linux_rendering/cnclcd.png
vendored
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 3.3 KiB |
BIN
test/jdk/jbu/testdata/quality/text/linux_rendering/lcdgray.png
vendored
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/bndtext.png
vendored
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/cnclcd.png
vendored
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/droidsans0_20.png
vendored
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/droidsans1_20.png
vendored
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/droidsansmono0_20.png
vendored
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/droidsansmonodotted0_20.png
vendored
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/droidsansmonoslashed0_20.png
vendored
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/droidserif0_20.png
vendored
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/droidserif1_20.png
vendored
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/droidserif2_20.png
vendored
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/droidserif3_20.png
vendored
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/firacode.png
vendored
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
test/jdk/jbu/testdata/quality/text/osx_mojave_rendering/lcdgray.png
vendored
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
test/jdk/jbu/testdata/quality/text/windows_rendering/droidsans0_20.png
vendored
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
test/jdk/jbu/testdata/quality/text/windows_rendering/droidsans1_20.png
vendored
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
test/jdk/jbu/testdata/quality/text/windows_rendering/droidsansmono0_20.png
vendored
Normal file
|
After Width: | Height: | Size: 3.2 KiB |