From 0901a3aacb4ed5188f4f656114e2793c4c1047f5 Mon Sep 17 00:00:00 2001 From: Christos Kalonakis Date: Mon, 11 Apr 2022 14:39:11 +0300 Subject: [PATCH] Update Fixed a bug that caused settings for julia set to fail to load Fixed a bug in orbit traps when the initial value was a constant --- Changelog.txt | 6 +- README.txt | 2 +- .../orbit_traps/AtomDomainOrbitTrap.java | 2 +- .../orbit_traps/CircleCrossOrbitTrap.java | 2 +- .../orbit_traps/CircleOrbitTrap.java | 2 +- .../orbit_traps/CirclePointOrbitTrap.java | 2 +- .../orbit_traps/CrossOrbitTrap.java | 2 +- .../GoldenRatioSpiralCircleOrbitTrap.java | 2 +- .../GoldenRatioSpiralCrossOrbitTrap.java | 2 +- .../GoldenRatioSpiralNNormOrbitTrap.java | 2 +- .../GoldenRatioSpiralOrbitTrap.java | 2 +- .../GoldenRatioSpiralPointNNormOrbitTrap.java | 2 +- .../GoldenRatioSpiralPointOrbitTrap.java | 2 +- .../GoldenRatioSpiralRhombusOrbitTrap.java | 2 +- .../GoldenRatioSpiralSquareOrbitTrap.java | 2 +- .../orbit_traps/ImOrbitTrap.java | 2 +- .../orbit_traps/ImageOrbitTrap.java | 2 +- .../orbit_traps/NNormAtomDomainOrbitTrap.java | 2 +- .../orbit_traps/NNormCrossOrbitTrap.java | 2 +- .../orbit_traps/NNormOrbitTrap.java | 2 +- .../orbit_traps/NNormPointNNormOrbitTrap.java | 2 +- .../orbit_traps/NNormPointOrbitTrap.java | 2 +- .../orbit_traps/OrbitTrap.java | 37 +- .../orbit_traps/PointNNormOrbitTrap.java | 2 +- .../orbit_traps/PointOrbitTrap.java | 2 +- .../orbit_traps/PointRhombusOrbitTrap.java | 2 +- .../orbit_traps/PointSquareOrbitTrap.java | 2 +- .../orbit_traps/ReOrbitTrap.java | 2 +- .../RhombusAtomDomainOrbitTrap.java | 2 +- .../orbit_traps/RhombusCrossOrbitTrap.java | 2 +- .../orbit_traps/RhombusOrbitTrap.java | 2 +- .../orbit_traps/RhombusPointOrbitTrap.java | 2 +- .../SquareAtomDomainOrbitTrap.java | 2 +- .../orbit_traps/SquareCrossOrbitTrap.java | 2 +- .../orbit_traps/SquareOrbitTrap.java | 2 +- .../orbit_traps/SquarePointOrbitTrap.java | 2 +- .../orbit_traps/StalksCircleOrbitTrap.java | 2 +- .../orbit_traps/StalksCrossOrbitTrap.java | 2 +- .../orbit_traps/StalksNNormOrbitTrap.java | 2 +- .../orbit_traps/StalksOrbitTrap.java | 2 +- .../StalksPointNNormOrbitTrap.java | 2 +- .../orbit_traps/StalksPointOrbitTrap.java | 2 +- .../orbit_traps/StalksRhombusOrbitTrap.java | 2 +- .../orbit_traps/StalksSquareOrbitTrap.java | 2 +- .../orbit_traps/SuperFormulaOrbitTrap.java | 2 +- .../orbit_traps/TearDropOrbitTrap.java | 2 +- src/fractalzoomer/functions/Fractal.java | 5 + src/fractalzoomer/gui/ColorChooserFrame.java | 359 ++-- .../gui/CustomDomainColoringFrame.java | 1652 +++++++++-------- .../gui/CustomPaletteEditorFrame.java | 23 + .../gui/DomainColoringFrame.java | 27 +- .../gui/FiltersOptionsFrame.java | 22 + src/fractalzoomer/gui/FractalColorsFrame.java | 22 + src/fractalzoomer/gui/GradientFrame.java | 1270 ++++++------- .../gui/GreedyAlgorithmsFrame.java | 22 + src/fractalzoomer/gui/OrbitTrapsFrame.java | 26 +- .../gui/PlaneVisualizationFrame.java | 503 ++--- .../gui/ProcessingOrderingFrame.java | 678 +++---- .../gui/StatisticsColoringFrame.java | 22 + .../help/Fractal_Zoomer_Help.chm | Bin 281504 -> 281504 bytes src/fractalzoomer/main/CommonFunctions.java | 6 +- src/fractalzoomer/main/Constants.java | 2 +- .../main/app_settings/OrbitTrapSettings.java | 3 + .../settings/SettingsJulia1081.java | 2 +- 64 files changed, 2539 insertions(+), 2236 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index eabff8912..7ec4198b8 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,6 +1,10 @@ +Version 1.0.8.2 + -Fixed a bug that caused settings for julia set to fail to load + -Fixed a bug in orbit traps when the initial value was a constant + Version 1.0.8.1 -Added a new fixed point precision implementation (BigNum) - -Optimized the reference calculation and pixel to coordinate mapping on all fractals that support pertubation and do not use division + -Optimized the reference calculation and pixel to coordinate mapping on all fractals that support perturbation and do not use division -Reduced the memory footprint of the reference orbit -Reduced the memory footprint when saving struct-like types and saved them like primitive values -Optimized SA for Mandelbrot, add thread support, and increased the terms up to 257 diff --git a/README.txt b/README.txt index 9dd66692c..8739b7fde 100644 --- a/README.txt +++ b/README.txt @@ -1,4 +1,4 @@ -Fractal Zoomer 1.0.8.1 +Fractal Zoomer 1.0.8.2 The most complete fractal generating software using java! diff --git a/src/fractalzoomer/fractal_options/orbit_traps/AtomDomainOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/AtomDomainOrbitTrap.java index 9337b26f0..b91557d5a 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/AtomDomainOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/AtomDomainOrbitTrap.java @@ -42,7 +42,7 @@ public void initialize(Complex pixel) { } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/CircleCrossOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/CircleCrossOrbitTrap.java index b5338c47f..275eb5e94 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/CircleCrossOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/CircleCrossOrbitTrap.java @@ -31,7 +31,7 @@ public CircleCrossOrbitTrap(int checkType, double pointRe, double pointIm, doubl } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/CircleOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/CircleOrbitTrap.java index b6283cfb9..e210d1021 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/CircleOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/CircleOrbitTrap.java @@ -33,7 +33,7 @@ public CircleOrbitTrap(int checkType, double pointRe, double pointIm, double tra } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/CirclePointOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/CirclePointOrbitTrap.java index 28c956a76..0d8de8f69 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/CirclePointOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/CirclePointOrbitTrap.java @@ -28,7 +28,7 @@ public CirclePointOrbitTrap(int checkType, double pointRe, double pointIm, doubl } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/CrossOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/CrossOrbitTrap.java index 08783f39d..22a44cda3 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/CrossOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/CrossOrbitTrap.java @@ -35,7 +35,7 @@ public CrossOrbitTrap(int checkType, double pointRe, double pointIm, double trap } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralCircleOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralCircleOrbitTrap.java index 12e79f1ee..6a4b59b57 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralCircleOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralCircleOrbitTrap.java @@ -35,7 +35,7 @@ public GoldenRatioSpiralCircleOrbitTrap(int checkType, double pointRe, double po } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralCrossOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralCrossOrbitTrap.java index bcc269dbd..ce4690a4d 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralCrossOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralCrossOrbitTrap.java @@ -37,7 +37,7 @@ public GoldenRatioSpiralCrossOrbitTrap(int checkType, double pointRe, double poi } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralNNormOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralNNormOrbitTrap.java index 4d4c40144..9fcf5c91b 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralNNormOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralNNormOrbitTrap.java @@ -37,7 +37,7 @@ public GoldenRatioSpiralNNormOrbitTrap(int checkType, double pointRe, double poi } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralOrbitTrap.java index f99754f5a..dbfc4bb89 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralOrbitTrap.java @@ -35,7 +35,7 @@ public GoldenRatioSpiralOrbitTrap(int checkType, double pointRe, double pointIm, } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralPointNNormOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralPointNNormOrbitTrap.java index a020c75ef..e144f9531 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralPointNNormOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralPointNNormOrbitTrap.java @@ -37,7 +37,7 @@ public GoldenRatioSpiralPointNNormOrbitTrap(int checkType, double pointRe, doubl } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralPointOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralPointOrbitTrap.java index 07cc4c632..77f21b53b 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralPointOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralPointOrbitTrap.java @@ -35,7 +35,7 @@ public GoldenRatioSpiralPointOrbitTrap(int checkType, double pointRe, double poi } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralRhombusOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralRhombusOrbitTrap.java index 5c4e51e74..2e8c96083 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralRhombusOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralRhombusOrbitTrap.java @@ -35,7 +35,7 @@ public GoldenRatioSpiralRhombusOrbitTrap(int checkType, double pointRe, double p } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralSquareOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralSquareOrbitTrap.java index e503aaf2e..2d0f68ddd 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralSquareOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/GoldenRatioSpiralSquareOrbitTrap.java @@ -35,7 +35,7 @@ public GoldenRatioSpiralSquareOrbitTrap(int checkType, double pointRe, double po } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/ImOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/ImOrbitTrap.java index e5de4fb93..95897d565 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/ImOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/ImOrbitTrap.java @@ -35,7 +35,7 @@ public ImOrbitTrap(int checkType, double pointRe, double pointIm, double trapLen } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/ImageOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/ImageOrbitTrap.java index cb2864525..d0016f495 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/ImageOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/ImageOrbitTrap.java @@ -41,7 +41,7 @@ public ImageOrbitTrap(int checkType, double pointRe, double pointIm, double trap } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/NNormAtomDomainOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/NNormAtomDomainOrbitTrap.java index 734a6294c..802c5d044 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/NNormAtomDomainOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/NNormAtomDomainOrbitTrap.java @@ -44,7 +44,7 @@ public void initialize(Complex pixel) { } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/NNormCrossOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/NNormCrossOrbitTrap.java index ff07d71a1..0ae9b394a 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/NNormCrossOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/NNormCrossOrbitTrap.java @@ -33,7 +33,7 @@ public NNormCrossOrbitTrap(int checkType, double pointRe, double pointIm, double } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/NNormOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/NNormOrbitTrap.java index 0c775d196..4d671fcb1 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/NNormOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/NNormOrbitTrap.java @@ -35,7 +35,7 @@ public NNormOrbitTrap(int checkType, double pointRe, double pointIm, double trap } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/NNormPointNNormOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/NNormPointNNormOrbitTrap.java index a0ee2bcdd..3d18239c1 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/NNormPointNNormOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/NNormPointNNormOrbitTrap.java @@ -31,7 +31,7 @@ public NNormPointNNormOrbitTrap(int checkType, double pointRe, double pointIm, d } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/NNormPointOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/NNormPointOrbitTrap.java index 4f0e92c8e..1ac315dd8 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/NNormPointOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/NNormPointOrbitTrap.java @@ -31,7 +31,7 @@ public NNormPointOrbitTrap(int checkType, double pointRe, double pointIm, double } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/OrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/OrbitTrap.java index a32233715..b41543ea7 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/OrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/OrbitTrap.java @@ -36,6 +36,11 @@ public abstract class OrbitTrap { protected boolean trapped; protected boolean countTrapIterations; protected int checkType; + protected boolean isJulia; + protected boolean usesPerturbation; + protected boolean usesStaticInitVal; + protected boolean doFirstIterationSkipCheck; + protected int skipTrapCheckForIterations; public OrbitTrap(int checkType, double pointRe, double pointIm, double trapLength, double trapWidth, boolean countTrapIterations) { @@ -44,7 +49,6 @@ public OrbitTrap(int checkType, double pointRe, double pointIm, double trapLengt this.trapWidth = trapWidth; this.countTrapIterations = countTrapIterations; this.checkType = checkType; - } public void initialize(Complex pixel) { @@ -56,10 +60,18 @@ public void initialize(Complex pixel) { extraIterations = 0; trappedPoint = new Complex(); trapped = false; + doFirstIterationSkipCheck = !isJulia && (usesPerturbation || usesStaticInitVal); } - - public abstract void check(Complex val, int iteration); + + public void check(Complex val, int iteration) { + if((doFirstIterationSkipCheck && iteration == 0) || (iteration < skipTrapCheckForIterations)) { + return; + } + checkInternal(val, iteration); + } + + protected abstract void checkInternal(Complex val, int iteration); public double getDistance() { @@ -164,5 +176,22 @@ public boolean isTrapped() { return trapped; } - + + public void setJulia(boolean julia) { + isJulia = julia; + } + + public void setUsesPerturbation(boolean usesPerturbation) { + this.usesPerturbation = usesPerturbation; + } + + public void setUsesStaticInitVal(boolean usesStaticInitVal) { + this.usesStaticInitVal = usesStaticInitVal; + } + + public void setSkipTrapCheckForIterations(int skipTrapCheckForIterations) { + this.skipTrapCheckForIterations = skipTrapCheckForIterations; + } + + } diff --git a/src/fractalzoomer/fractal_options/orbit_traps/PointNNormOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/PointNNormOrbitTrap.java index bc393e57b..091559066 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/PointNNormOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/PointNNormOrbitTrap.java @@ -34,7 +34,7 @@ public PointNNormOrbitTrap(int checkType, double pointRe, double pointIm, double } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/PointOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/PointOrbitTrap.java index f92aefc97..4dbb690ee 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/PointOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/PointOrbitTrap.java @@ -33,7 +33,7 @@ public PointOrbitTrap(int checkType, double pointRe, double pointIm, double trap } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/PointRhombusOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/PointRhombusOrbitTrap.java index e6c3d8c4c..a2aa94102 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/PointRhombusOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/PointRhombusOrbitTrap.java @@ -33,7 +33,7 @@ public PointRhombusOrbitTrap(int checkType, double pointRe, double pointIm, doub } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/PointSquareOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/PointSquareOrbitTrap.java index 3b409f571..5236b6faf 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/PointSquareOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/PointSquareOrbitTrap.java @@ -33,7 +33,7 @@ public PointSquareOrbitTrap(int checkType, double pointRe, double pointIm, doubl } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/ReOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/ReOrbitTrap.java index 1bb441f90..dd4bf592c 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/ReOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/ReOrbitTrap.java @@ -35,7 +35,7 @@ public ReOrbitTrap(int checkType, double pointRe, double pointIm, double trapLen } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/RhombusAtomDomainOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/RhombusAtomDomainOrbitTrap.java index d7ff34637..58ad0a3cb 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/RhombusAtomDomainOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/RhombusAtomDomainOrbitTrap.java @@ -42,7 +42,7 @@ public void initialize(Complex pixel) { } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/RhombusCrossOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/RhombusCrossOrbitTrap.java index 2c7839ff2..140330529 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/RhombusCrossOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/RhombusCrossOrbitTrap.java @@ -31,7 +31,7 @@ public RhombusCrossOrbitTrap(int checkType, double pointRe, double pointIm, doub } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/RhombusOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/RhombusOrbitTrap.java index 36e477152..d3ef05f33 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/RhombusOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/RhombusOrbitTrap.java @@ -33,7 +33,7 @@ public RhombusOrbitTrap(int checkType, double pointRe, double pointIm, double tr } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/RhombusPointOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/RhombusPointOrbitTrap.java index 6f4650777..36582f8d9 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/RhombusPointOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/RhombusPointOrbitTrap.java @@ -28,7 +28,7 @@ public RhombusPointOrbitTrap(int checkType, double pointRe, double pointIm, doub } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/SquareAtomDomainOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/SquareAtomDomainOrbitTrap.java index e78589c8d..083129d18 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/SquareAtomDomainOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/SquareAtomDomainOrbitTrap.java @@ -42,7 +42,7 @@ public void initialize(Complex pixel) { } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if (checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/SquareCrossOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/SquareCrossOrbitTrap.java index a3dece2e4..195da7995 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/SquareCrossOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/SquareCrossOrbitTrap.java @@ -31,7 +31,7 @@ public SquareCrossOrbitTrap(int checkType, double pointRe, double pointIm, doubl } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/SquareOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/SquareOrbitTrap.java index c527787dd..708834e1a 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/SquareOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/SquareOrbitTrap.java @@ -33,7 +33,7 @@ public SquareOrbitTrap(int checkType, double pointRe, double pointIm, double tra } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/SquarePointOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/SquarePointOrbitTrap.java index aaffb6393..74ee61919 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/SquarePointOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/SquarePointOrbitTrap.java @@ -29,7 +29,7 @@ public SquarePointOrbitTrap(int checkType, double pointRe, double pointIm, doubl } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/StalksCircleOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/StalksCircleOrbitTrap.java index 74f3bb03a..83a37a194 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/StalksCircleOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/StalksCircleOrbitTrap.java @@ -36,7 +36,7 @@ public StalksCircleOrbitTrap(int checkType, double pointRe, double pointIm, doub } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/StalksCrossOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/StalksCrossOrbitTrap.java index 08be60c4b..8ca6ca9dd 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/StalksCrossOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/StalksCrossOrbitTrap.java @@ -38,7 +38,7 @@ public StalksCrossOrbitTrap(int checkType, double pointRe, double pointIm, doubl } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/StalksNNormOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/StalksNNormOrbitTrap.java index 742e5765d..e0b0fffcf 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/StalksNNormOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/StalksNNormOrbitTrap.java @@ -38,7 +38,7 @@ public StalksNNormOrbitTrap(int checkType, double pointRe, double pointIm, doubl } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/StalksOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/StalksOrbitTrap.java index 7be2276b7..51756f057 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/StalksOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/StalksOrbitTrap.java @@ -34,7 +34,7 @@ public StalksOrbitTrap(int checkType, double pointRe, double pointIm, double tra } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/StalksPointNNormOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/StalksPointNNormOrbitTrap.java index b12317430..a52d25dc1 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/StalksPointNNormOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/StalksPointNNormOrbitTrap.java @@ -38,7 +38,7 @@ public StalksPointNNormOrbitTrap(int checkType, double pointRe, double pointIm, } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/StalksPointOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/StalksPointOrbitTrap.java index 46fefb9de..453d6bf53 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/StalksPointOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/StalksPointOrbitTrap.java @@ -36,7 +36,7 @@ public StalksPointOrbitTrap(int checkType, double pointRe, double pointIm, doubl } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/StalksRhombusOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/StalksRhombusOrbitTrap.java index bf01e2563..7fa49be51 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/StalksRhombusOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/StalksRhombusOrbitTrap.java @@ -36,7 +36,7 @@ public StalksRhombusOrbitTrap(int checkType, double pointRe, double pointIm, dou } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/StalksSquareOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/StalksSquareOrbitTrap.java index bc0b57568..9009f4df2 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/StalksSquareOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/StalksSquareOrbitTrap.java @@ -36,7 +36,7 @@ public StalksSquareOrbitTrap(int checkType, double pointRe, double pointIm, doub } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/SuperFormulaOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/SuperFormulaOrbitTrap.java index 4e5dc71a1..7333164e0 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/SuperFormulaOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/SuperFormulaOrbitTrap.java @@ -29,7 +29,7 @@ public SuperFormulaOrbitTrap(int checkType, double pointRe, double pointIm, doub } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/fractal_options/orbit_traps/TearDropOrbitTrap.java b/src/fractalzoomer/fractal_options/orbit_traps/TearDropOrbitTrap.java index ebcb1a1a1..c87d70a0b 100644 --- a/src/fractalzoomer/fractal_options/orbit_traps/TearDropOrbitTrap.java +++ b/src/fractalzoomer/fractal_options/orbit_traps/TearDropOrbitTrap.java @@ -49,7 +49,7 @@ private double getDistance(Complex val) { } @Override - public void check(Complex val, int iteration) { + protected void checkInternal(Complex val, int iteration) { if(checkType == TRAP_CHECK_TYPE_TRAPPED_FIRST && trapped) { return; diff --git a/src/fractalzoomer/functions/Fractal.java b/src/fractalzoomer/functions/Fractal.java index a537a951b..368d00a19 100644 --- a/src/fractalzoomer/functions/Fractal.java +++ b/src/fractalzoomer/functions/Fractal.java @@ -2493,6 +2493,11 @@ private void TrapFactory(OrbitTrapSettings ots) { } + trap.setJulia(isJulia); + trap.setUsesPerturbation(ThreadDraw.PERTURBATION_THEORY && supportsPerturbationTheory()); + trap.setUsesStaticInitVal(init_val instanceof InitialValue); + trap.setSkipTrapCheckForIterations(ots.skipTrapCheckForIterations); + } public void setTrueColorAlgorithm(TrueColorSettings tcs) { diff --git a/src/fractalzoomer/gui/ColorChooserFrame.java b/src/fractalzoomer/gui/ColorChooserFrame.java index 5d0107146..73e8ece0e 100644 --- a/src/fractalzoomer/gui/ColorChooserFrame.java +++ b/src/fractalzoomer/gui/ColorChooserFrame.java @@ -1,170 +1,189 @@ -/* - * Fractal Zoomer, Copyright (C) 2020 hrkalona2 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package fractalzoomer.gui; - -import fractalzoomer.main.MainWindow; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; - -/** - * - * @author hrkalona2 - */ -public class ColorChooserFrame extends JFrame { - private static final long serialVersionUID = 2164955068218376522L; - private JFrame ptr2; - private Object obj2; - - public ColorChooserFrame(JFrame ptr, String title, Object obj, final int num) { - - super(); - - ptr2 = ptr; - obj2 = obj; - - ptr2.setEnabled(false); - int color_window_width = 720; - int color_window_height = 480; - setTitle(title); - setSize(color_window_width, color_window_height); - setIconImage(getIcon("/fractalzoomer/icons/color.png").getImage()); - setLocation((int)(ptr2.getLocation().getX() + ptr2.getSize().getWidth() / 2) - (color_window_width / 2), (int)(ptr2.getLocation().getY() + ptr2.getSize().getHeight() / 2) - (color_window_height / 2)); - final JColorChooser color_chooser = new JColorChooser(); - color_chooser.setBackground(MainWindow.bg_color); - - if(obj2 instanceof JLabel) { - color_chooser.setColor(((JLabel)obj2).getBackground()); - } - else if(obj2 instanceof Color) { - color_chooser.setColor((Color)obj2); - } - else if(obj2 instanceof String) { - color_chooser.setColor(new Color(Integer.valueOf((String)obj2))); - } - - color_chooser.setPreferredSize(new Dimension(600, 360)); - - addWindowListener(new WindowAdapter() { - - @Override - public void windowClosing(WindowEvent e) { - - ptr2.setEnabled(true); - dispose(); - - } - }); - - JButton ok = new JButton("Ok"); - ok.setFocusable(false); - - getRootPane().setDefaultButton(ok); - - ok.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - - if(obj2 instanceof JLabel) { - ((JLabel)obj2).setBackground(new Color(color_chooser.getColor().getRed(), color_chooser.getColor().getGreen(), color_chooser.getColor().getBlue())); - - if(ptr2 instanceof GradientFrame) { - ((GradientFrame)ptr2).colorChanged(); - } - else if(ptr2 instanceof CustomPaletteEditorFrame) { - ((CustomPaletteEditorFrame)ptr2).colorChanged(num); - } - } - else if(obj2 instanceof Color) { - if(ptr2 instanceof MainWindow) { - ((MainWindow)ptr2).storeColor(num, color_chooser.getColor()); - } - } - else if(obj2 instanceof String) { - - if(ptr2 instanceof StatisticsColoringFrame) { - ((StatisticsColoringFrame)ptr2).storeColor(num, color_chooser.getColor()); - } - } - - ptr2.setEnabled(true); - dispose(); - - } - }); - - JButton close = new JButton("Cancel"); - close.setFocusable(false); - close.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - - ptr2.setEnabled(true); - dispose(); - - } - }); - - JPanel buttons = new JPanel(); - buttons.setBackground(MainWindow.bg_color); - - buttons.add(ok); - buttons.add(close); - - RoundedPanel round_panel = new RoundedPanel(true, true, true, 15); - round_panel.setBackground(MainWindow.bg_color); - round_panel.setPreferredSize(new Dimension(640, 380)); - round_panel.setLayout(new GridBagLayout()); - - GridBagConstraints con = new GridBagConstraints(); - - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 0; - - round_panel.add(color_chooser, con); - - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 1; - - round_panel.add(buttons, con); - - JPanel main_panel = new JPanel(); - main_panel.setLayout(new GridBagLayout()); - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 0; - main_panel.add(round_panel, con); - - JScrollPane scrollPane = new JScrollPane(main_panel); - add(scrollPane); - - setVisible(true); - } - - private ImageIcon getIcon(String path) { - - return new ImageIcon(getClass().getResource(path)); - } -} +/* + * Fractal Zoomer, Copyright (C) 2020 hrkalona2 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package fractalzoomer.gui; + +import fractalzoomer.main.MainWindow; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; + +/** + * + * @author hrkalona2 + */ +public class ColorChooserFrame extends JFrame { + private static final long serialVersionUID = 2164955068218376522L; + private JFrame ptr2; + private Object obj2; + + public ColorChooserFrame(JFrame ptr, String title, Object obj, final int num) { + + super(); + + ptr2 = ptr; + obj2 = obj; + + ptr2.setEnabled(false); + int color_window_width = 720; + int color_window_height = 480; + setTitle(title); + setSize(color_window_width, color_window_height); + setIconImage(getIcon("/fractalzoomer/icons/color.png").getImage()); + setLocation((int)(ptr2.getLocation().getX() + ptr2.getSize().getWidth() / 2) - (color_window_width / 2), (int)(ptr2.getLocation().getY() + ptr2.getSize().getHeight() / 2) - (color_window_height / 2)); + final JColorChooser color_chooser = new JColorChooser(); + color_chooser.setBackground(MainWindow.bg_color); + + if(obj2 instanceof JLabel) { + color_chooser.setColor(((JLabel)obj2).getBackground()); + } + else if(obj2 instanceof Color) { + color_chooser.setColor((Color)obj2); + } + else if(obj2 instanceof String) { + color_chooser.setColor(new Color(Integer.valueOf((String)obj2))); + } + + color_chooser.setPreferredSize(new Dimension(600, 360)); + + addWindowListener(new WindowAdapter() { + + @Override + public void windowClosing(WindowEvent e) { + + ptr2.setEnabled(true); + dispose(); + + } + }); + + JButton ok = new JButton("Ok"); + ok.setFocusable(false); + + getRootPane().setDefaultButton(ok); + + ok.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + if(obj2 instanceof JLabel) { + ((JLabel)obj2).setBackground(new Color(color_chooser.getColor().getRed(), color_chooser.getColor().getGreen(), color_chooser.getColor().getBlue())); + + if(ptr2 instanceof GradientFrame) { + ((GradientFrame)ptr2).colorChanged(); + } + else if(ptr2 instanceof CustomPaletteEditorFrame) { + ((CustomPaletteEditorFrame)ptr2).colorChanged(num); + } + } + else if(obj2 instanceof Color) { + if(ptr2 instanceof MainWindow) { + ((MainWindow)ptr2).storeColor(num, color_chooser.getColor()); + } + } + else if(obj2 instanceof String) { + + if(ptr2 instanceof StatisticsColoringFrame) { + ((StatisticsColoringFrame)ptr2).storeColor(num, color_chooser.getColor()); + } + } + + ptr2.setEnabled(true); + dispose(); + + } + }); + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Ok"); + getRootPane().getActionMap().put("Ok", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + ok.doClick(); + } + }); + + JButton close = new JButton("Cancel"); + close.setFocusable(false); + close.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + ptr2.setEnabled(true); + dispose(); + + } + }); + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); + getRootPane().getActionMap().put("Cancel", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + close.doClick(); + } + }); + + JPanel buttons = new JPanel(); + buttons.setBackground(MainWindow.bg_color); + + buttons.add(ok); + buttons.add(close); + + RoundedPanel round_panel = new RoundedPanel(true, true, true, 15); + round_panel.setBackground(MainWindow.bg_color); + round_panel.setPreferredSize(new Dimension(640, 380)); + round_panel.setLayout(new GridBagLayout()); + + GridBagConstraints con = new GridBagConstraints(); + + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 0; + + round_panel.add(color_chooser, con); + + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 1; + + round_panel.add(buttons, con); + + JPanel main_panel = new JPanel(); + main_panel.setLayout(new GridBagLayout()); + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 0; + main_panel.add(round_panel, con); + + JScrollPane scrollPane = new JScrollPane(main_panel); + add(scrollPane); + + setVisible(true); + } + + private ImageIcon getIcon(String path) { + + return new ImageIcon(getClass().getResource(path)); + } +} diff --git a/src/fractalzoomer/gui/CustomDomainColoringFrame.java b/src/fractalzoomer/gui/CustomDomainColoringFrame.java index a5b4638e7..bfd0fd06a 100644 --- a/src/fractalzoomer/gui/CustomDomainColoringFrame.java +++ b/src/fractalzoomer/gui/CustomDomainColoringFrame.java @@ -1,815 +1,837 @@ -/* - * Fractal Zoomer, Copyright (C) 2020 hrkalona2 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package fractalzoomer.gui; - -import fractalzoomer.main.Constants; -import fractalzoomer.main.MainWindow; -import fractalzoomer.main.app_settings.DomainColoringSettings; - -import javax.swing.*; -import javax.swing.border.EtchedBorder; -import javax.swing.border.TitledBorder; -import java.awt.*; -import java.awt.event.*; -import java.util.Hashtable; - -/** - * - * @author hrkalona2 - */ -public class CustomDomainColoringFrame extends JFrame { - private static final long serialVersionUID = 9219140248202199287L; - private DomainColoringFrame ptra2; - private CustomDomainColoringFrame this_frame; - private static DomainColoringSettings ds; - private JList list; - private JCheckBox enable_grid; - private JCheckBox enable_circles; - private JCheckBox enable_iso_lines; - private JTextField max_value_textfield; - private JComboBox domain_colors_combo; - private JCheckBox enable_colors; - private JComboBox domain_contours_colord_method_combo; - private JSlider contour_blend_opt; - private JCheckBox enable_contours; - - public static void setSettings(DomainColoringSettings settings) { - - ds = settings; - - } - - public static DomainColoringSettings getSettings() { - - return ds; - - } - - public CustomDomainColoringFrame(DomainColoringFrame ptra) { - - super(); - - ptra2 = ptra; - - this_frame = this; - - ptra2.setEnabled(false); - int custom_palette_window_width = 890; - int custom_palette_window_height = 660; - setTitle("Custom Domain Coloring"); - setIconImage(getIcon("/fractalzoomer/icons/domain_coloring.png").getImage()); - setSize(custom_palette_window_width, custom_palette_window_height); - setLocation((int)(ptra2.getLocation().getX() + ptra2.getSize().getWidth() / 2) - (custom_palette_window_width / 2), (int)(ptra2.getLocation().getY() + ptra2.getSize().getHeight() / 2) - (custom_palette_window_height / 2)); - - addWindowListener(new WindowAdapter() { - - @Override - public void windowClosing(WindowEvent e) { - - ptra2.setEnabled(true); - dispose(); - - } - }); - - JPanel domain_coloring_panel = new JPanel(); - - domain_coloring_panel.setPreferredSize(new Dimension(790, 525)); - domain_coloring_panel.setLayout(new FlowLayout()); - domain_coloring_panel.setBackground(MainWindow.bg_color); - - JPanel general_settings_panel = new JPanel(); - general_settings_panel.setLayout(new FlowLayout()); - general_settings_panel.setBackground(MainWindow.bg_color); - - final JTextField log_base_textfield = new JTextField(10); - log_base_textfield.setText("" + ds.logBase); - - final JTextField grid_spacing_textfield = new JTextField(10); - grid_spacing_textfield.setText("" + ds.gridFactor); - - final JTextField norm_type_textfield = new JTextField(10); - norm_type_textfield.setText("" + ds.normType); - - final JComboBox iso_lines_distance_opt = new JComboBox(Constants.argumentLinesDistance); - iso_lines_distance_opt.setSelectedIndex(ds.iso_distance); - iso_lines_distance_opt.setFocusable(false); - iso_lines_distance_opt.setToolTipText("Sets the iso-argument distance."); - - - final JComboBox gridAlgorithm_opt = new JComboBox(Constants.gridAlgorithms); - gridAlgorithm_opt.setSelectedIndex(ds.gridAlgorithm); - gridAlgorithm_opt.setFocusable(false); - gridAlgorithm_opt.setToolTipText("Sets the grid algorithm."); - - final JComboBox combineAlgorithm_opt = new JComboBox(Constants.combineAlgorithms); - combineAlgorithm_opt.setSelectedIndex(ds.combineType); - combineAlgorithm_opt.setFocusable(false); - combineAlgorithm_opt.setToolTipText("Sets the combining algorithm."); - - DefaultListModel m = new DefaultListModel<>(); - for(int i = 0; i < ds.domainOrder.length; i++) { - m.addElement("" + ds.domainOrder[i]); - } - list = new JList<>(m); - list.getSelectionModel().setSelectionMode( - ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - list.setTransferHandler(new ListItemTransferHandler()); - - list.getInputMap( JComponent.WHEN_FOCUSED ).getParent().remove( KeyStroke.getKeyStroke( KeyEvent.VK_X, InputEvent.CTRL_DOWN_MASK ) ); - list.getInputMap( JComponent.WHEN_FOCUSED ).getParent().remove( KeyStroke.getKeyStroke( KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK ) ); - list.getInputMap( JComponent.WHEN_FOCUSED ).getParent().remove( KeyStroke.getKeyStroke( KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK ) ); - - list.setDropMode(DropMode.INSERT); - list.setDragEnabled(true); - //http://java-swing-tips.blogspot.jp/2008/10/rubber-band-selection-drag-and-drop.html - list.setLayoutOrientation(JList.HORIZONTAL_WRAP); - list.setVisibleRowCount(0); - list.setFixedCellWidth(30); - list.setFixedCellHeight(27); - list.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); - - final Color activeColor = new Color(185, 223, 147); - - list.setCellRenderer(new ListCellRenderer() { - private final JPanel p = new JPanel(new BorderLayout()); - private final JLabel icon = new JLabel((Icon)null, JLabel.CENTER); - //private final JLabel label = new JLabel("", JLabel.LEFT); - - @Override - public Component getListCellRendererComponent( - JList list, String value, int index, - boolean isSelected, boolean cellHasFocus) { - if(value.equals(""+ MainWindow.GRID)) { - icon.setIcon(getIcon("/fractalzoomer/icons/grid.png")); - p.setToolTipText("Grid"); - } - else if(value.equals("" +MainWindow.CIRCLES)) { - icon.setIcon(getIcon("/fractalzoomer/icons/circles.png")); - p.setToolTipText("Circles"); - } - else if(value.equals("" + MainWindow.ISO_LINES)) { - icon.setIcon(getIcon("/fractalzoomer/icons/iso_arg_lines.png")); - p.setToolTipText("Iso-Argument Lines"); - } - - //label.setText(value); - //label.setForeground(list.getForeground()); - p.add(icon); - //p.add(label, BorderLayout.SOUTH); - p.setBackground(list.getBackground()); - - - if(enable_grid != null && value.equals(""+ MainWindow.GRID) && enable_grid.isSelected()) { - p.setBackground(activeColor); - //label.setForeground(list.getSelectionForeground()); - } - else if(enable_circles != null && value.equals(""+ MainWindow.CIRCLES) && enable_circles.isSelected()) { - p.setBackground(activeColor); - //label.setForeground(list.getSelectionForeground()); - } - else if(enable_iso_lines != null && value.equals(""+ MainWindow.ISO_LINES) && enable_iso_lines.isSelected()) { - p.setBackground(activeColor); - //label.setForeground(list.getSelectionForeground()); - } - - if(isSelected) { - p.setBackground(list.getSelectionBackground()); - //label.setForeground(list.getSelectionForeground()); - } - return p; - } - }); - - JScrollPane scroll_pane = new JScrollPane(list); - scroll_pane.setPreferredSize(new Dimension(115, 32)); - scroll_pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); - scroll_pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - - JPanel p1 = new JPanel(); - p1.setLayout(new FlowLayout()); - p1.setBackground(MainWindow.bg_color); - - p1.add(new JLabel("Circle Log Base: ")); - p1.add(log_base_textfield); - p1.add(new JLabel(" Grid Spacing: ")); - p1.add(grid_spacing_textfield); - p1.add(new JLabel(" Norm Type: ")); - p1.add(norm_type_textfield); - - JPanel p2 = new JPanel(); - p2.setLayout(new FlowLayout()); - p2.setBackground(MainWindow.bg_color); - - p2.add(new JLabel("Iso-Arg Line Distance: ")); - p2.add(iso_lines_distance_opt); - p2.add(new JLabel(" Grid Algorithm: ")); - p2.add(gridAlgorithm_opt); - p2.add(new JLabel(" Order: ")); - p2.add(scroll_pane); - - JPanel p7 = new JPanel(); - p7.setLayout(new FlowLayout()); - p7.setBackground(MainWindow.bg_color); - p7.setPreferredSize(new Dimension(300, 30)); - - p7.add(new JLabel("Combine Algorithm: ")); - p7.add(combineAlgorithm_opt); - - general_settings_panel.add(p1); - general_settings_panel.add(p2); - general_settings_panel.add(p7); - - general_settings_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "General Settings", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); - - final JPanel color_panel = new JPanel(); - color_panel.setLayout(new FlowLayout()); - color_panel.setBackground(MainWindow.bg_color); - - final JPanel contours_panel = new JPanel(); - contours_panel.setLayout(new FlowLayout()); - contours_panel.setBackground(MainWindow.bg_color); - - final JPanel grid_panel = new JPanel(); - grid_panel.setLayout(new FlowLayout()); - grid_panel.setBackground(MainWindow.bg_color); - - final JPanel circles_panel = new JPanel(); - circles_panel.setLayout(new FlowLayout()); - circles_panel.setBackground(MainWindow.bg_color); - - final JPanel iso_lines_panel = new JPanel(); - iso_lines_panel.setLayout(new FlowLayout()); - iso_lines_panel.setBackground(MainWindow.bg_color); - - enable_colors = new JCheckBox("Colors"); - enable_colors.setBackground(MainWindow.bg_color); - enable_colors.setSelected(ds.drawColor); - - domain_colors_combo = new JComboBox(Constants.domainColors); - domain_colors_combo.setSelectedIndex(ds.colorType); - domain_colors_combo.setFocusable(false); - domain_colors_combo.setToolTipText("Sets the coloring option."); - - ComponentTitledBorder colors_border = new ComponentTitledBorder(enable_colors, color_panel, BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), this_frame); - colors_border.setChangeListener(); - - color_panel.setBorder(colors_border); - - max_value_textfield = new JTextField(10); - max_value_textfield.setText("" + ds.max_norm_re_im_value); - - domain_colors_combo.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - max_value_textfield.setEnabled(domain_colors_combo.getSelectedIndex() != 0); - } - }); - - color_panel.add(new JLabel("Type: ")); - color_panel.add(domain_colors_combo); - color_panel.add(new JLabel(" Max Norm/Re/Im Value: ")); - color_panel.add(max_value_textfield); - - enable_contours = new JCheckBox("Contours"); - enable_contours.setBackground(MainWindow.bg_color); - enable_contours.setSelected(ds.drawContour); - - final JComboBox domain_contours_combo = new JComboBox(Constants.domainContours); - domain_contours_combo.setSelectedIndex(ds.contourType); - domain_contours_combo.setFocusable(false); - domain_contours_combo.setToolTipText("Sets the contouring option."); - - domain_contours_colord_method_combo = new JComboBox(Constants.colorMethod); - domain_contours_colord_method_combo.setSelectedIndex(ds.contourMethod); - domain_contours_colord_method_combo.setFocusable(false); - domain_contours_colord_method_combo.setToolTipText("Sets the contour color method."); - - domain_contours_colord_method_combo.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - contour_blend_opt.setEnabled(domain_contours_colord_method_combo.getSelectedIndex() == 3); - } - }); - - contour_blend_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); - contour_blend_opt.setValue((int)(100 * ds.contourBlending)); - contour_blend_opt.setBackground(MainWindow.bg_color); - contour_blend_opt.setMajorTickSpacing(25); - contour_blend_opt.setMinorTickSpacing(1); - contour_blend_opt.setToolTipText("Sets the contour blending percentage."); - contour_blend_opt.setFocusable(false); - contour_blend_opt.setPaintLabels(true); - - contours_panel.add(new JLabel("Type: ")); - contours_panel.add(domain_contours_combo); - contours_panel.add(new JLabel(" Color Method: ")); - contours_panel.add(domain_contours_colord_method_combo); - contours_panel.add(new JLabel(" Color Blending: ")); - contours_panel.add(contour_blend_opt); - - ComponentTitledBorder contours_border = new ComponentTitledBorder(enable_contours, contours_panel, BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), this_frame); - contours_border.setChangeListener(); - - contours_panel.setBorder(contours_border); - - enable_grid = new JCheckBox("Grid"); - enable_grid.setBackground(MainWindow.bg_color); - enable_grid.setSelected(ds.drawGrid); - enable_grid.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - list.updateUI(); - } - - }); - - final JSlider grid_coef_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); - grid_coef_opt.setValue((int)(100 * ds.gridBlending)); - grid_coef_opt.setBackground(MainWindow.bg_color); - grid_coef_opt.setMajorTickSpacing(25); - grid_coef_opt.setMinorTickSpacing(1); - grid_coef_opt.setToolTipText("Sets the grid strength percentage."); - grid_coef_opt.setFocusable(false); - grid_coef_opt.setPaintLabels(true); - - final JLabel grid_color_label = new JLabel(); - - grid_color_label.setPreferredSize(new Dimension(22, 22)); - grid_color_label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); - grid_color_label.setBackground(ds.gridColor); - grid_color_label.setOpaque(true); - grid_color_label.setToolTipText("Changes the grid color."); - - grid_color_label.addMouseListener(new MouseListener() { - @Override - public void mouseClicked(MouseEvent e) { - - } - - @Override - public void mousePressed(MouseEvent e) { - - if(!grid_color_label.isEnabled()) { - return; - } - - new ColorChooserFrame(this_frame, "Grid Color", grid_color_label, -1); - } - - @Override - public void mouseReleased(MouseEvent e) { - - } - - @Override - public void mouseEntered(MouseEvent e) { - - } - - @Override - public void mouseExited(MouseEvent e) { - - } - - }); - - final JComboBox grid_fade_combo = new JComboBox(Constants.circleAndGridFadeNames); - grid_fade_combo.setSelectedIndex(ds.gridFadeFunction); - grid_fade_combo.setFocusable(false); - grid_fade_combo.setToolTipText("Sets the fading option for grid."); - - - final JSlider grid_lines_factor_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); - grid_lines_factor_opt.setValue((int)(100 * ds.gridWidth)); - grid_lines_factor_opt.setBackground(MainWindow.bg_color); - grid_lines_factor_opt.setToolTipText("Sets the grid lines width factor."); - grid_lines_factor_opt.setFocusable(false); - grid_lines_factor_opt.setPaintLabels(true); - - Hashtable table3 = new Hashtable(); - table3.put(0, new JLabel("0")); - table3.put(25, new JLabel("25")); - table3.put(50, new JLabel("50")); - table3.put(75, new JLabel("75")); - table3.put(100, new JLabel("100")); - - grid_lines_factor_opt.setLabelTable(table3); - - - grid_panel.add(new JLabel("Width: ")); - grid_panel.add(grid_lines_factor_opt); - grid_panel.add(new JLabel(" Fading: ")); - grid_panel.add(grid_fade_combo); - grid_panel.add(new JLabel(" Strength: ")); - grid_panel.add(grid_coef_opt); - grid_panel.add(new JLabel(" Color: ")); - grid_panel.add(grid_color_label); - - ComponentTitledBorder grid_border = new ComponentTitledBorder(enable_grid, grid_panel, BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), this_frame); - grid_border.setChangeListener(); - - grid_panel.setBorder(grid_border); - - enable_circles = new JCheckBox("Circles"); - enable_circles.setBackground(MainWindow.bg_color); - enable_circles.setSelected(ds.drawCircles); - enable_circles.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - list.updateUI(); - } - - }); - - final JSlider circles_coef_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); - circles_coef_opt.setValue((int)(100 * ds.circlesBlending)); - circles_coef_opt.setBackground(MainWindow.bg_color); - circles_coef_opt.setMajorTickSpacing(25); - circles_coef_opt.setMinorTickSpacing(1); - circles_coef_opt.setToolTipText("Sets the circles strength percentage."); - circles_coef_opt.setFocusable(false); - circles_coef_opt.setPaintLabels(true); - - final JLabel circles_color_label = new JLabel(); - - circles_color_label.setPreferredSize(new Dimension(22, 22)); - circles_color_label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); - circles_color_label.setBackground(ds.circlesColor); - circles_color_label.setOpaque(true); - circles_color_label.setToolTipText("Changes the circles color."); - - circles_color_label.addMouseListener(new MouseListener() { - @Override - public void mouseClicked(MouseEvent e) { - - } - - @Override - public void mousePressed(MouseEvent e) { - if(!circles_color_label.isEnabled()) { - return; - } - - new ColorChooserFrame(this_frame, "Circles Color", circles_color_label, -1); - } - - @Override - public void mouseReleased(MouseEvent e) { - - } - - @Override - public void mouseEntered(MouseEvent e) { - - } - - @Override - public void mouseExited(MouseEvent e) { - - } - - }); - - final JComboBox circle_fade_combo = new JComboBox(Constants.circleAndGridFadeNames); - circle_fade_combo.setSelectedIndex(ds.circleFadeFunction); - circle_fade_combo.setFocusable(false); - circle_fade_combo.setToolTipText("Sets the fading option for circles."); - - - final JSlider circle_lines_factor_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); - circle_lines_factor_opt.setValue((int)(100 * ds.circleWidth)); - circle_lines_factor_opt.setBackground(MainWindow.bg_color); - circle_lines_factor_opt.setToolTipText("Sets the circle lines width factor."); - circle_lines_factor_opt.setFocusable(false); - circle_lines_factor_opt.setPaintLabels(true); - - table3 = new Hashtable(); - table3.put(0, new JLabel("0")); - table3.put(25, new JLabel("25")); - table3.put(50, new JLabel("50")); - table3.put(75, new JLabel("75")); - table3.put(100, new JLabel("100")); - - circle_lines_factor_opt.setLabelTable(table3); - - - circles_panel.add(new JLabel("Width: ")); - circles_panel.add(circle_lines_factor_opt); - circles_panel.add(new JLabel(" Fading: ")); - circles_panel.add(circle_fade_combo); - circles_panel.add(new JLabel(" Strength: ")); - circles_panel.add(circles_coef_opt); - circles_panel.add(new JLabel(" Color: ")); - circles_panel.add(circles_color_label); - - ComponentTitledBorder circles_border = new ComponentTitledBorder(enable_circles, circles_panel, BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), this_frame); - circles_border.setChangeListener(); - - circles_panel.setBorder(circles_border); - - enable_iso_lines = new JCheckBox("Iso-Argument Lines"); - enable_iso_lines.setBackground(MainWindow.bg_color); - enable_iso_lines.setSelected(ds.drawIsoLines); - enable_iso_lines.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - list.updateUI(); - } - - }); - - final JSlider iso_lines_factor_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); - iso_lines_factor_opt.setValue((int)(100 * ds.iso_factor)); - iso_lines_factor_opt.setBackground(MainWindow.bg_color); - iso_lines_factor_opt.setToolTipText("Sets the iso-argument lines width factor."); - iso_lines_factor_opt.setFocusable(false); - iso_lines_factor_opt.setPaintLabels(true); - - table3 = new Hashtable(); - table3.put(0, new JLabel("0")); - table3.put(25, new JLabel("25")); - table3.put(50, new JLabel("50")); - table3.put(75, new JLabel("75")); - table3.put(100, new JLabel("100")); - - iso_lines_factor_opt.setLabelTable(table3); - - final JSlider iso_lines_coef_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); - iso_lines_coef_opt.setValue((int)(100 * ds.isoLinesBlendingFactor)); - iso_lines_coef_opt.setBackground(MainWindow.bg_color); - iso_lines_coef_opt.setMajorTickSpacing(25); - iso_lines_coef_opt.setMinorTickSpacing(1); - iso_lines_coef_opt.setToolTipText("Sets the iso-argument lines strentgh percentage."); - iso_lines_coef_opt.setFocusable(false); - iso_lines_coef_opt.setPaintLabels(true); - - final JLabel iso_lines_color_label = new JLabel(); - - iso_lines_color_label.setPreferredSize(new Dimension(22, 22)); - iso_lines_color_label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); - iso_lines_color_label.setBackground(ds.isoLinesColor); - iso_lines_color_label.setOpaque(true); - iso_lines_color_label.setToolTipText("Changes the iso-argument lines color."); - - iso_lines_color_label.addMouseListener(new MouseListener() { - @Override - public void mouseClicked(MouseEvent e) { - - } - - @Override - public void mousePressed(MouseEvent e) { - if(!iso_lines_color_label.isEnabled()) { - return; - } - - new ColorChooserFrame(this_frame, "Iso-Argument Lines Color", iso_lines_color_label, -1); - } - - @Override - public void mouseReleased(MouseEvent e) { - - } - - @Override - public void mouseEntered(MouseEvent e) { - - } - - @Override - public void mouseExited(MouseEvent e) { - - } - - }); - - iso_lines_panel.add(new JLabel("Width: ")); - iso_lines_panel.add(iso_lines_factor_opt); - iso_lines_panel.add(new JLabel(" Strength: ")); - iso_lines_panel.add(iso_lines_coef_opt); - iso_lines_panel.add(new JLabel(" Color: ")); - iso_lines_panel.add(iso_lines_color_label); - - ComponentTitledBorder iso_lines_border = new ComponentTitledBorder(enable_iso_lines, iso_lines_panel, BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), this_frame); - iso_lines_border.setChangeListener(); - - iso_lines_panel.setBorder(iso_lines_border); - - colors_border.setState(enable_colors.isSelected()); - iso_lines_border.setState(enable_iso_lines.isSelected()); - circles_border.setState(enable_circles.isSelected()); - grid_border.setState(enable_grid.isSelected()); - contours_border.setState(enable_contours.isSelected()); - - JPanel p4 = new JPanel(); - p4.setLayout(new GridLayout(1, 1)); - p4.setBackground(MainWindow.bg_color); - p4.setPreferredSize(new Dimension(790, 150)); - - p4.add(general_settings_panel); - - domain_coloring_panel.add(p4); - - JPanel p3 = new JPanel(); - p3.setLayout(new GridLayout(5, 1)); - p3.setBackground(MainWindow.bg_color); - p3.setPreferredSize(new Dimension(790, 360)); - - p3.add(color_panel); - p3.add(contours_panel); - p3.add(grid_panel); - p3.add(circles_panel); - p3.add(iso_lines_panel); - - domain_coloring_panel.add(p3); - - JPanel buttons = new JPanel(); - buttons.setLayout(new FlowLayout()); - buttons.setBackground(MainWindow.bg_color); - - max_value_textfield.setEnabled(ds.colorType != 0); - contour_blend_opt.setEnabled(ds.contourMethod == 3); - - JButton ok = new JButton("Ok"); - ok.setFocusable(false); - getRootPane().setDefaultButton(ok); - ok.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - - double temp, temp2, temp3, temp4; - try { - temp = Double.parseDouble(log_base_textfield.getText()); - temp2 = Double.parseDouble(grid_spacing_textfield.getText()); - temp3 = Double.parseDouble(norm_type_textfield.getText()); - temp4 = Double.parseDouble(max_value_textfield.getText()); - } - catch(Exception ex) { - JOptionPane.showMessageDialog(this_frame, "Illegal Argument!", "Error!", JOptionPane.ERROR_MESSAGE); - return; - } - - if(temp <= 1) { - JOptionPane.showMessageDialog(this_frame, "Log Base must be greater than 1.", "Error!", JOptionPane.ERROR_MESSAGE); - return; - } - - if(temp2 <= 0) { - JOptionPane.showMessageDialog(this_frame, "Grid Spacing must be greater than 0.", "Error!", JOptionPane.ERROR_MESSAGE); - return; - } - - if(temp4 <= 0) { - JOptionPane.showMessageDialog(this_frame, "Max Norm/Re/Im Value must be greater than 0.", "Error!", JOptionPane.ERROR_MESSAGE); - return; - } - - ds.gridFactor = temp2; - ds.logBase = temp; - ds.normType = temp3; - ds.iso_distance = iso_lines_distance_opt.getSelectedIndex(); - - ds.max_norm_re_im_value = temp4; - - ds.drawColor = enable_colors.isSelected(); - ds.drawContour = enable_contours.isSelected(); - ds.drawGrid = enable_grid.isSelected(); - ds.drawCircles = enable_circles.isSelected(); - ds.drawIsoLines = enable_iso_lines.isSelected(); - - ds.gridBlending = grid_coef_opt.getValue() / 100.0; - ds.circlesBlending = circles_coef_opt.getValue() / 100.0; - ds.isoLinesBlendingFactor = iso_lines_coef_opt.getValue() / 100.0; - ds.contourBlending = contour_blend_opt.getValue() / 100.0; - - ds.gridColor = grid_color_label.getBackground(); - ds.circlesColor = circles_color_label.getBackground(); - ds.isoLinesColor = iso_lines_color_label.getBackground(); - - ds.iso_factor = iso_lines_factor_opt.getValue() / 100.0; - - ds.colorType = domain_colors_combo.getSelectedIndex(); - ds.contourType = domain_contours_combo.getSelectedIndex(); - - ds.domainOrder = getOrder(); - - ds.circleFadeFunction = circle_fade_combo.getSelectedIndex(); - ds.gridFadeFunction = grid_fade_combo.getSelectedIndex(); - - ds.contourMethod = domain_contours_colord_method_combo.getSelectedIndex(); - - ds.circleWidth = circle_lines_factor_opt.getValue() / 100.0; - ds.gridWidth = grid_lines_factor_opt.getValue() / 100.0; - - ds.gridAlgorithm = gridAlgorithm_opt.getSelectedIndex(); - - ds.combineType = combineAlgorithm_opt.getSelectedIndex(); - - ptra2.setEnabled(true); - dispose(); - - } - - }); - - buttons.add(ok); - - JButton cancel = new JButton("Cancel"); - cancel.setFocusable(false); - cancel.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - - ptra2.setEnabled(true); - dispose(); - - } - }); - - buttons.add(cancel); - - RoundedPanel round_panel = new RoundedPanel(true, true, true, 15); - round_panel.setBackground(MainWindow.bg_color); - round_panel.setPreferredSize(new Dimension(830, 580)); - round_panel.setLayout(new GridBagLayout()); - - GridBagConstraints con = new GridBagConstraints(); - - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 0; - - round_panel.add(domain_coloring_panel, con); - - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 1; - - round_panel.add(buttons, con); - - JPanel main_panel = new JPanel(); - main_panel.setLayout(new GridBagLayout()); - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 0; - main_panel.add(round_panel, con); - - JScrollPane scrollPane = new JScrollPane(main_panel); - add(scrollPane); - - setVisible(true); - } - - private ImageIcon getIcon(String path) { - - return new ImageIcon(getClass().getResource(path)); - - } - - public int[] getOrder() { - - int[] order = new int[ds.domainOrder.length]; - - for(int i = 0; i < ds.domainOrder.length; i++) { - String name = list.getModel().getElementAt(i); - order[i] = Integer.parseInt(name); - } - - return order; - } - - public void toggled(boolean toggled) { - - if (!toggled) { - return; - } - - if(enable_colors.isSelected()) { - max_value_textfield.setEnabled(domain_colors_combo.getSelectedIndex() != 0); - } - - if(enable_contours.isSelected()) { - contour_blend_opt.setEnabled(domain_contours_colord_method_combo.getSelectedIndex() == 3); - } - } -} +/* + * Fractal Zoomer, Copyright (C) 2020 hrkalona2 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package fractalzoomer.gui; + +import fractalzoomer.main.Constants; +import fractalzoomer.main.MainWindow; +import fractalzoomer.main.app_settings.DomainColoringSettings; + +import javax.swing.*; +import javax.swing.border.EtchedBorder; +import javax.swing.border.TitledBorder; +import java.awt.*; +import java.awt.event.*; +import java.util.Hashtable; + +/** + * + * @author hrkalona2 + */ +public class CustomDomainColoringFrame extends JFrame { + private static final long serialVersionUID = 9219140248202199287L; + private DomainColoringFrame ptra2; + private CustomDomainColoringFrame this_frame; + private static DomainColoringSettings ds; + private JList list; + private JCheckBox enable_grid; + private JCheckBox enable_circles; + private JCheckBox enable_iso_lines; + private JTextField max_value_textfield; + private JComboBox domain_colors_combo; + private JCheckBox enable_colors; + private JComboBox domain_contours_colord_method_combo; + private JSlider contour_blend_opt; + private JCheckBox enable_contours; + + public static void setSettings(DomainColoringSettings settings) { + + ds = settings; + + } + + public static DomainColoringSettings getSettings() { + + return ds; + + } + + public CustomDomainColoringFrame(DomainColoringFrame ptra) { + + super(); + + ptra2 = ptra; + + this_frame = this; + + ptra2.setEnabled(false); + int custom_palette_window_width = 890; + int custom_palette_window_height = 660; + setTitle("Custom Domain Coloring"); + setIconImage(getIcon("/fractalzoomer/icons/domain_coloring.png").getImage()); + setSize(custom_palette_window_width, custom_palette_window_height); + setLocation((int)(ptra2.getLocation().getX() + ptra2.getSize().getWidth() / 2) - (custom_palette_window_width / 2), (int)(ptra2.getLocation().getY() + ptra2.getSize().getHeight() / 2) - (custom_palette_window_height / 2)); + + addWindowListener(new WindowAdapter() { + + @Override + public void windowClosing(WindowEvent e) { + + ptra2.setEnabled(true); + dispose(); + + } + }); + + JPanel domain_coloring_panel = new JPanel(); + + domain_coloring_panel.setPreferredSize(new Dimension(790, 525)); + domain_coloring_panel.setLayout(new FlowLayout()); + domain_coloring_panel.setBackground(MainWindow.bg_color); + + JPanel general_settings_panel = new JPanel(); + general_settings_panel.setLayout(new FlowLayout()); + general_settings_panel.setBackground(MainWindow.bg_color); + + final JTextField log_base_textfield = new JTextField(10); + log_base_textfield.setText("" + ds.logBase); + + final JTextField grid_spacing_textfield = new JTextField(10); + grid_spacing_textfield.setText("" + ds.gridFactor); + + final JTextField norm_type_textfield = new JTextField(10); + norm_type_textfield.setText("" + ds.normType); + + final JComboBox iso_lines_distance_opt = new JComboBox(Constants.argumentLinesDistance); + iso_lines_distance_opt.setSelectedIndex(ds.iso_distance); + iso_lines_distance_opt.setFocusable(false); + iso_lines_distance_opt.setToolTipText("Sets the iso-argument distance."); + + + final JComboBox gridAlgorithm_opt = new JComboBox(Constants.gridAlgorithms); + gridAlgorithm_opt.setSelectedIndex(ds.gridAlgorithm); + gridAlgorithm_opt.setFocusable(false); + gridAlgorithm_opt.setToolTipText("Sets the grid algorithm."); + + final JComboBox combineAlgorithm_opt = new JComboBox(Constants.combineAlgorithms); + combineAlgorithm_opt.setSelectedIndex(ds.combineType); + combineAlgorithm_opt.setFocusable(false); + combineAlgorithm_opt.setToolTipText("Sets the combining algorithm."); + + DefaultListModel m = new DefaultListModel<>(); + for(int i = 0; i < ds.domainOrder.length; i++) { + m.addElement("" + ds.domainOrder[i]); + } + list = new JList<>(m); + list.getSelectionModel().setSelectionMode( + ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + list.setTransferHandler(new ListItemTransferHandler()); + + list.getInputMap( JComponent.WHEN_FOCUSED ).getParent().remove( KeyStroke.getKeyStroke( KeyEvent.VK_X, InputEvent.CTRL_DOWN_MASK ) ); + list.getInputMap( JComponent.WHEN_FOCUSED ).getParent().remove( KeyStroke.getKeyStroke( KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK ) ); + list.getInputMap( JComponent.WHEN_FOCUSED ).getParent().remove( KeyStroke.getKeyStroke( KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK ) ); + + list.setDropMode(DropMode.INSERT); + list.setDragEnabled(true); + //http://java-swing-tips.blogspot.jp/2008/10/rubber-band-selection-drag-and-drop.html + list.setLayoutOrientation(JList.HORIZONTAL_WRAP); + list.setVisibleRowCount(0); + list.setFixedCellWidth(30); + list.setFixedCellHeight(27); + list.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); + + final Color activeColor = new Color(185, 223, 147); + + list.setCellRenderer(new ListCellRenderer() { + private final JPanel p = new JPanel(new BorderLayout()); + private final JLabel icon = new JLabel((Icon)null, JLabel.CENTER); + //private final JLabel label = new JLabel("", JLabel.LEFT); + + @Override + public Component getListCellRendererComponent( + JList list, String value, int index, + boolean isSelected, boolean cellHasFocus) { + if(value.equals(""+ MainWindow.GRID)) { + icon.setIcon(getIcon("/fractalzoomer/icons/grid.png")); + p.setToolTipText("Grid"); + } + else if(value.equals("" +MainWindow.CIRCLES)) { + icon.setIcon(getIcon("/fractalzoomer/icons/circles.png")); + p.setToolTipText("Circles"); + } + else if(value.equals("" + MainWindow.ISO_LINES)) { + icon.setIcon(getIcon("/fractalzoomer/icons/iso_arg_lines.png")); + p.setToolTipText("Iso-Argument Lines"); + } + + //label.setText(value); + //label.setForeground(list.getForeground()); + p.add(icon); + //p.add(label, BorderLayout.SOUTH); + p.setBackground(list.getBackground()); + + + if(enable_grid != null && value.equals(""+ MainWindow.GRID) && enable_grid.isSelected()) { + p.setBackground(activeColor); + //label.setForeground(list.getSelectionForeground()); + } + else if(enable_circles != null && value.equals(""+ MainWindow.CIRCLES) && enable_circles.isSelected()) { + p.setBackground(activeColor); + //label.setForeground(list.getSelectionForeground()); + } + else if(enable_iso_lines != null && value.equals(""+ MainWindow.ISO_LINES) && enable_iso_lines.isSelected()) { + p.setBackground(activeColor); + //label.setForeground(list.getSelectionForeground()); + } + + if(isSelected) { + p.setBackground(list.getSelectionBackground()); + //label.setForeground(list.getSelectionForeground()); + } + return p; + } + }); + + JScrollPane scroll_pane = new JScrollPane(list); + scroll_pane.setPreferredSize(new Dimension(115, 32)); + scroll_pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); + scroll_pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + + JPanel p1 = new JPanel(); + p1.setLayout(new FlowLayout()); + p1.setBackground(MainWindow.bg_color); + + p1.add(new JLabel("Circle Log Base: ")); + p1.add(log_base_textfield); + p1.add(new JLabel(" Grid Spacing: ")); + p1.add(grid_spacing_textfield); + p1.add(new JLabel(" Norm Type: ")); + p1.add(norm_type_textfield); + + JPanel p2 = new JPanel(); + p2.setLayout(new FlowLayout()); + p2.setBackground(MainWindow.bg_color); + + p2.add(new JLabel("Iso-Arg Line Distance: ")); + p2.add(iso_lines_distance_opt); + p2.add(new JLabel(" Grid Algorithm: ")); + p2.add(gridAlgorithm_opt); + p2.add(new JLabel(" Order: ")); + p2.add(scroll_pane); + + JPanel p7 = new JPanel(); + p7.setLayout(new FlowLayout()); + p7.setBackground(MainWindow.bg_color); + p7.setPreferredSize(new Dimension(300, 30)); + + p7.add(new JLabel("Combine Algorithm: ")); + p7.add(combineAlgorithm_opt); + + general_settings_panel.add(p1); + general_settings_panel.add(p2); + general_settings_panel.add(p7); + + general_settings_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "General Settings", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); + + final JPanel color_panel = new JPanel(); + color_panel.setLayout(new FlowLayout()); + color_panel.setBackground(MainWindow.bg_color); + + final JPanel contours_panel = new JPanel(); + contours_panel.setLayout(new FlowLayout()); + contours_panel.setBackground(MainWindow.bg_color); + + final JPanel grid_panel = new JPanel(); + grid_panel.setLayout(new FlowLayout()); + grid_panel.setBackground(MainWindow.bg_color); + + final JPanel circles_panel = new JPanel(); + circles_panel.setLayout(new FlowLayout()); + circles_panel.setBackground(MainWindow.bg_color); + + final JPanel iso_lines_panel = new JPanel(); + iso_lines_panel.setLayout(new FlowLayout()); + iso_lines_panel.setBackground(MainWindow.bg_color); + + enable_colors = new JCheckBox("Colors"); + enable_colors.setBackground(MainWindow.bg_color); + enable_colors.setSelected(ds.drawColor); + + domain_colors_combo = new JComboBox(Constants.domainColors); + domain_colors_combo.setSelectedIndex(ds.colorType); + domain_colors_combo.setFocusable(false); + domain_colors_combo.setToolTipText("Sets the coloring option."); + + ComponentTitledBorder colors_border = new ComponentTitledBorder(enable_colors, color_panel, BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), this_frame); + colors_border.setChangeListener(); + + color_panel.setBorder(colors_border); + + max_value_textfield = new JTextField(10); + max_value_textfield.setText("" + ds.max_norm_re_im_value); + + domain_colors_combo.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + max_value_textfield.setEnabled(domain_colors_combo.getSelectedIndex() != 0); + } + }); + + color_panel.add(new JLabel("Type: ")); + color_panel.add(domain_colors_combo); + color_panel.add(new JLabel(" Max Norm/Re/Im Value: ")); + color_panel.add(max_value_textfield); + + enable_contours = new JCheckBox("Contours"); + enable_contours.setBackground(MainWindow.bg_color); + enable_contours.setSelected(ds.drawContour); + + final JComboBox domain_contours_combo = new JComboBox(Constants.domainContours); + domain_contours_combo.setSelectedIndex(ds.contourType); + domain_contours_combo.setFocusable(false); + domain_contours_combo.setToolTipText("Sets the contouring option."); + + domain_contours_colord_method_combo = new JComboBox(Constants.colorMethod); + domain_contours_colord_method_combo.setSelectedIndex(ds.contourMethod); + domain_contours_colord_method_combo.setFocusable(false); + domain_contours_colord_method_combo.setToolTipText("Sets the contour color method."); + + domain_contours_colord_method_combo.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + contour_blend_opt.setEnabled(domain_contours_colord_method_combo.getSelectedIndex() == 3); + } + }); + + contour_blend_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); + contour_blend_opt.setValue((int)(100 * ds.contourBlending)); + contour_blend_opt.setBackground(MainWindow.bg_color); + contour_blend_opt.setMajorTickSpacing(25); + contour_blend_opt.setMinorTickSpacing(1); + contour_blend_opt.setToolTipText("Sets the contour blending percentage."); + contour_blend_opt.setFocusable(false); + contour_blend_opt.setPaintLabels(true); + + contours_panel.add(new JLabel("Type: ")); + contours_panel.add(domain_contours_combo); + contours_panel.add(new JLabel(" Color Method: ")); + contours_panel.add(domain_contours_colord_method_combo); + contours_panel.add(new JLabel(" Color Blending: ")); + contours_panel.add(contour_blend_opt); + + ComponentTitledBorder contours_border = new ComponentTitledBorder(enable_contours, contours_panel, BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), this_frame); + contours_border.setChangeListener(); + + contours_panel.setBorder(contours_border); + + enable_grid = new JCheckBox("Grid"); + enable_grid.setBackground(MainWindow.bg_color); + enable_grid.setSelected(ds.drawGrid); + enable_grid.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + list.updateUI(); + } + + }); + + final JSlider grid_coef_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); + grid_coef_opt.setValue((int)(100 * ds.gridBlending)); + grid_coef_opt.setBackground(MainWindow.bg_color); + grid_coef_opt.setMajorTickSpacing(25); + grid_coef_opt.setMinorTickSpacing(1); + grid_coef_opt.setToolTipText("Sets the grid strength percentage."); + grid_coef_opt.setFocusable(false); + grid_coef_opt.setPaintLabels(true); + + final JLabel grid_color_label = new JLabel(); + + grid_color_label.setPreferredSize(new Dimension(22, 22)); + grid_color_label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); + grid_color_label.setBackground(ds.gridColor); + grid_color_label.setOpaque(true); + grid_color_label.setToolTipText("Changes the grid color."); + + grid_color_label.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + + if(!grid_color_label.isEnabled()) { + return; + } + + new ColorChooserFrame(this_frame, "Grid Color", grid_color_label, -1); + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + }); + + final JComboBox grid_fade_combo = new JComboBox(Constants.circleAndGridFadeNames); + grid_fade_combo.setSelectedIndex(ds.gridFadeFunction); + grid_fade_combo.setFocusable(false); + grid_fade_combo.setToolTipText("Sets the fading option for grid."); + + + final JSlider grid_lines_factor_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); + grid_lines_factor_opt.setValue((int)(100 * ds.gridWidth)); + grid_lines_factor_opt.setBackground(MainWindow.bg_color); + grid_lines_factor_opt.setToolTipText("Sets the grid lines width factor."); + grid_lines_factor_opt.setFocusable(false); + grid_lines_factor_opt.setPaintLabels(true); + + Hashtable table3 = new Hashtable(); + table3.put(0, new JLabel("0")); + table3.put(25, new JLabel("25")); + table3.put(50, new JLabel("50")); + table3.put(75, new JLabel("75")); + table3.put(100, new JLabel("100")); + + grid_lines_factor_opt.setLabelTable(table3); + + + grid_panel.add(new JLabel("Width: ")); + grid_panel.add(grid_lines_factor_opt); + grid_panel.add(new JLabel(" Fading: ")); + grid_panel.add(grid_fade_combo); + grid_panel.add(new JLabel(" Strength: ")); + grid_panel.add(grid_coef_opt); + grid_panel.add(new JLabel(" Color: ")); + grid_panel.add(grid_color_label); + + ComponentTitledBorder grid_border = new ComponentTitledBorder(enable_grid, grid_panel, BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), this_frame); + grid_border.setChangeListener(); + + grid_panel.setBorder(grid_border); + + enable_circles = new JCheckBox("Circles"); + enable_circles.setBackground(MainWindow.bg_color); + enable_circles.setSelected(ds.drawCircles); + enable_circles.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + list.updateUI(); + } + + }); + + final JSlider circles_coef_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); + circles_coef_opt.setValue((int)(100 * ds.circlesBlending)); + circles_coef_opt.setBackground(MainWindow.bg_color); + circles_coef_opt.setMajorTickSpacing(25); + circles_coef_opt.setMinorTickSpacing(1); + circles_coef_opt.setToolTipText("Sets the circles strength percentage."); + circles_coef_opt.setFocusable(false); + circles_coef_opt.setPaintLabels(true); + + final JLabel circles_color_label = new JLabel(); + + circles_color_label.setPreferredSize(new Dimension(22, 22)); + circles_color_label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); + circles_color_label.setBackground(ds.circlesColor); + circles_color_label.setOpaque(true); + circles_color_label.setToolTipText("Changes the circles color."); + + circles_color_label.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + if(!circles_color_label.isEnabled()) { + return; + } + + new ColorChooserFrame(this_frame, "Circles Color", circles_color_label, -1); + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + }); + + final JComboBox circle_fade_combo = new JComboBox(Constants.circleAndGridFadeNames); + circle_fade_combo.setSelectedIndex(ds.circleFadeFunction); + circle_fade_combo.setFocusable(false); + circle_fade_combo.setToolTipText("Sets the fading option for circles."); + + + final JSlider circle_lines_factor_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); + circle_lines_factor_opt.setValue((int)(100 * ds.circleWidth)); + circle_lines_factor_opt.setBackground(MainWindow.bg_color); + circle_lines_factor_opt.setToolTipText("Sets the circle lines width factor."); + circle_lines_factor_opt.setFocusable(false); + circle_lines_factor_opt.setPaintLabels(true); + + table3 = new Hashtable(); + table3.put(0, new JLabel("0")); + table3.put(25, new JLabel("25")); + table3.put(50, new JLabel("50")); + table3.put(75, new JLabel("75")); + table3.put(100, new JLabel("100")); + + circle_lines_factor_opt.setLabelTable(table3); + + + circles_panel.add(new JLabel("Width: ")); + circles_panel.add(circle_lines_factor_opt); + circles_panel.add(new JLabel(" Fading: ")); + circles_panel.add(circle_fade_combo); + circles_panel.add(new JLabel(" Strength: ")); + circles_panel.add(circles_coef_opt); + circles_panel.add(new JLabel(" Color: ")); + circles_panel.add(circles_color_label); + + ComponentTitledBorder circles_border = new ComponentTitledBorder(enable_circles, circles_panel, BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), this_frame); + circles_border.setChangeListener(); + + circles_panel.setBorder(circles_border); + + enable_iso_lines = new JCheckBox("Iso-Argument Lines"); + enable_iso_lines.setBackground(MainWindow.bg_color); + enable_iso_lines.setSelected(ds.drawIsoLines); + enable_iso_lines.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + list.updateUI(); + } + + }); + + final JSlider iso_lines_factor_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); + iso_lines_factor_opt.setValue((int)(100 * ds.iso_factor)); + iso_lines_factor_opt.setBackground(MainWindow.bg_color); + iso_lines_factor_opt.setToolTipText("Sets the iso-argument lines width factor."); + iso_lines_factor_opt.setFocusable(false); + iso_lines_factor_opt.setPaintLabels(true); + + table3 = new Hashtable(); + table3.put(0, new JLabel("0")); + table3.put(25, new JLabel("25")); + table3.put(50, new JLabel("50")); + table3.put(75, new JLabel("75")); + table3.put(100, new JLabel("100")); + + iso_lines_factor_opt.setLabelTable(table3); + + final JSlider iso_lines_coef_opt = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); + iso_lines_coef_opt.setValue((int)(100 * ds.isoLinesBlendingFactor)); + iso_lines_coef_opt.setBackground(MainWindow.bg_color); + iso_lines_coef_opt.setMajorTickSpacing(25); + iso_lines_coef_opt.setMinorTickSpacing(1); + iso_lines_coef_opt.setToolTipText("Sets the iso-argument lines strentgh percentage."); + iso_lines_coef_opt.setFocusable(false); + iso_lines_coef_opt.setPaintLabels(true); + + final JLabel iso_lines_color_label = new JLabel(); + + iso_lines_color_label.setPreferredSize(new Dimension(22, 22)); + iso_lines_color_label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); + iso_lines_color_label.setBackground(ds.isoLinesColor); + iso_lines_color_label.setOpaque(true); + iso_lines_color_label.setToolTipText("Changes the iso-argument lines color."); + + iso_lines_color_label.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + if(!iso_lines_color_label.isEnabled()) { + return; + } + + new ColorChooserFrame(this_frame, "Iso-Argument Lines Color", iso_lines_color_label, -1); + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + }); + + iso_lines_panel.add(new JLabel("Width: ")); + iso_lines_panel.add(iso_lines_factor_opt); + iso_lines_panel.add(new JLabel(" Strength: ")); + iso_lines_panel.add(iso_lines_coef_opt); + iso_lines_panel.add(new JLabel(" Color: ")); + iso_lines_panel.add(iso_lines_color_label); + + ComponentTitledBorder iso_lines_border = new ComponentTitledBorder(enable_iso_lines, iso_lines_panel, BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), this_frame); + iso_lines_border.setChangeListener(); + + iso_lines_panel.setBorder(iso_lines_border); + + colors_border.setState(enable_colors.isSelected()); + iso_lines_border.setState(enable_iso_lines.isSelected()); + circles_border.setState(enable_circles.isSelected()); + grid_border.setState(enable_grid.isSelected()); + contours_border.setState(enable_contours.isSelected()); + + JPanel p4 = new JPanel(); + p4.setLayout(new GridLayout(1, 1)); + p4.setBackground(MainWindow.bg_color); + p4.setPreferredSize(new Dimension(790, 150)); + + p4.add(general_settings_panel); + + domain_coloring_panel.add(p4); + + JPanel p3 = new JPanel(); + p3.setLayout(new GridLayout(5, 1)); + p3.setBackground(MainWindow.bg_color); + p3.setPreferredSize(new Dimension(790, 360)); + + p3.add(color_panel); + p3.add(contours_panel); + p3.add(grid_panel); + p3.add(circles_panel); + p3.add(iso_lines_panel); + + domain_coloring_panel.add(p3); + + JPanel buttons = new JPanel(); + buttons.setLayout(new FlowLayout()); + buttons.setBackground(MainWindow.bg_color); + + max_value_textfield.setEnabled(ds.colorType != 0); + contour_blend_opt.setEnabled(ds.contourMethod == 3); + + JButton ok = new JButton("Ok"); + ok.setFocusable(false); + getRootPane().setDefaultButton(ok); + ok.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + double temp, temp2, temp3, temp4; + try { + temp = Double.parseDouble(log_base_textfield.getText()); + temp2 = Double.parseDouble(grid_spacing_textfield.getText()); + temp3 = Double.parseDouble(norm_type_textfield.getText()); + temp4 = Double.parseDouble(max_value_textfield.getText()); + } + catch(Exception ex) { + JOptionPane.showMessageDialog(this_frame, "Illegal Argument!", "Error!", JOptionPane.ERROR_MESSAGE); + return; + } + + if(temp <= 1) { + JOptionPane.showMessageDialog(this_frame, "Log Base must be greater than 1.", "Error!", JOptionPane.ERROR_MESSAGE); + return; + } + + if(temp2 <= 0) { + JOptionPane.showMessageDialog(this_frame, "Grid Spacing must be greater than 0.", "Error!", JOptionPane.ERROR_MESSAGE); + return; + } + + if(temp4 <= 0) { + JOptionPane.showMessageDialog(this_frame, "Max Norm/Re/Im Value must be greater than 0.", "Error!", JOptionPane.ERROR_MESSAGE); + return; + } + + ds.gridFactor = temp2; + ds.logBase = temp; + ds.normType = temp3; + ds.iso_distance = iso_lines_distance_opt.getSelectedIndex(); + + ds.max_norm_re_im_value = temp4; + + ds.drawColor = enable_colors.isSelected(); + ds.drawContour = enable_contours.isSelected(); + ds.drawGrid = enable_grid.isSelected(); + ds.drawCircles = enable_circles.isSelected(); + ds.drawIsoLines = enable_iso_lines.isSelected(); + + ds.gridBlending = grid_coef_opt.getValue() / 100.0; + ds.circlesBlending = circles_coef_opt.getValue() / 100.0; + ds.isoLinesBlendingFactor = iso_lines_coef_opt.getValue() / 100.0; + ds.contourBlending = contour_blend_opt.getValue() / 100.0; + + ds.gridColor = grid_color_label.getBackground(); + ds.circlesColor = circles_color_label.getBackground(); + ds.isoLinesColor = iso_lines_color_label.getBackground(); + + ds.iso_factor = iso_lines_factor_opt.getValue() / 100.0; + + ds.colorType = domain_colors_combo.getSelectedIndex(); + ds.contourType = domain_contours_combo.getSelectedIndex(); + + ds.domainOrder = getOrder(); + + ds.circleFadeFunction = circle_fade_combo.getSelectedIndex(); + ds.gridFadeFunction = grid_fade_combo.getSelectedIndex(); + + ds.contourMethod = domain_contours_colord_method_combo.getSelectedIndex(); + + ds.circleWidth = circle_lines_factor_opt.getValue() / 100.0; + ds.gridWidth = grid_lines_factor_opt.getValue() / 100.0; + + ds.gridAlgorithm = gridAlgorithm_opt.getSelectedIndex(); + + ds.combineType = combineAlgorithm_opt.getSelectedIndex(); + + ptra2.setEnabled(true); + dispose(); + + } + + }); + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Ok"); + getRootPane().getActionMap().put("Ok", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + ok.doClick(); + } + }); + + buttons.add(ok); + + JButton cancel = new JButton("Cancel"); + cancel.setFocusable(false); + cancel.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + ptra2.setEnabled(true); + dispose(); + + } + }); + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); + getRootPane().getActionMap().put("Cancel", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + cancel.doClick(); + } + }); + + buttons.add(cancel); + + RoundedPanel round_panel = new RoundedPanel(true, true, true, 15); + round_panel.setBackground(MainWindow.bg_color); + round_panel.setPreferredSize(new Dimension(830, 580)); + round_panel.setLayout(new GridBagLayout()); + + GridBagConstraints con = new GridBagConstraints(); + + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 0; + + round_panel.add(domain_coloring_panel, con); + + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 1; + + round_panel.add(buttons, con); + + JPanel main_panel = new JPanel(); + main_panel.setLayout(new GridBagLayout()); + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 0; + main_panel.add(round_panel, con); + + JScrollPane scrollPane = new JScrollPane(main_panel); + add(scrollPane); + + setVisible(true); + } + + private ImageIcon getIcon(String path) { + + return new ImageIcon(getClass().getResource(path)); + + } + + public int[] getOrder() { + + int[] order = new int[ds.domainOrder.length]; + + for(int i = 0; i < ds.domainOrder.length; i++) { + String name = list.getModel().getElementAt(i); + order[i] = Integer.parseInt(name); + } + + return order; + } + + public void toggled(boolean toggled) { + + if (!toggled) { + return; + } + + if(enable_colors.isSelected()) { + max_value_textfield.setEnabled(domain_colors_combo.getSelectedIndex() != 0); + } + + if(enable_contours.isSelected()) { + contour_blend_opt.setEnabled(domain_contours_colord_method_combo.getSelectedIndex() == 3); + } + } +} diff --git a/src/fractalzoomer/gui/CustomPaletteEditorFrame.java b/src/fractalzoomer/gui/CustomPaletteEditorFrame.java index 8e9f858a2..1b9c8f9fd 100644 --- a/src/fractalzoomer/gui/CustomPaletteEditorFrame.java +++ b/src/fractalzoomer/gui/CustomPaletteEditorFrame.java @@ -643,6 +643,18 @@ public void actionPerformed(ActionEvent e) { } }); + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Ok"); + getRootPane().getActionMap().put("Ok", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + palette_ok.doClick(); + } + }); + buttons.add(palette_ok); JButton palette_cancel = new JButton("Cancel"); @@ -663,6 +675,17 @@ public void actionPerformed(ActionEvent e) { } }); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); + getRootPane().getActionMap().put("Cancel", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + palette_cancel.doClick(); + } + }); + buttons.add(palette_cancel); colors = new BufferedImage(868, 36, BufferedImage.TYPE_INT_ARGB); diff --git a/src/fractalzoomer/gui/DomainColoringFrame.java b/src/fractalzoomer/gui/DomainColoringFrame.java index d6aa990df..eff816ee7 100644 --- a/src/fractalzoomer/gui/DomainColoringFrame.java +++ b/src/fractalzoomer/gui/DomainColoringFrame.java @@ -23,10 +23,7 @@ import javax.swing.*; import javax.swing.border.TitledBorder; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; +import java.awt.event.*; import static fractalzoomer.main.Constants.CUSTOM_PALETTE_ID; import static fractalzoomer.main.Constants.domainAlgNames; @@ -313,6 +310,17 @@ public void actionPerformed(ActionEvent e) { }); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Ok"); + getRootPane().getActionMap().put("Ok", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + ok.doClick(); + } + }); + buttons.add(ok); JButton cancel = new JButton("Cancel"); @@ -328,6 +336,17 @@ public void actionPerformed(ActionEvent e) { } }); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); + getRootPane().getActionMap().put("Cancel", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + cancel.doClick(); + } + }); + buttons.add(cancel); RoundedPanel round_panel = new RoundedPanel(true, true, true, 15); diff --git a/src/fractalzoomer/gui/FiltersOptionsFrame.java b/src/fractalzoomer/gui/FiltersOptionsFrame.java index 7c078738d..d0debea2a 100644 --- a/src/fractalzoomer/gui/FiltersOptionsFrame.java +++ b/src/fractalzoomer/gui/FiltersOptionsFrame.java @@ -2928,6 +2928,17 @@ else if ( components_filters[k] instanceof JComboBox){ } }); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Ok"); + getRootPane().getActionMap().put("Ok", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + ok.doClick(); + } + }); + buttons.add(ok); JButton cancel = new JButton("Cancel"); @@ -2947,6 +2958,17 @@ public void actionPerformed(ActionEvent e) { }); buttons.add(cancel); + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); + getRootPane().getActionMap().put("Cancel", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + cancel.doClick(); + } + }); JButton reset = new JButton("Reset"); reset.setFocusable(false); diff --git a/src/fractalzoomer/gui/FractalColorsFrame.java b/src/fractalzoomer/gui/FractalColorsFrame.java index 0da99f41c..023020c52 100644 --- a/src/fractalzoomer/gui/FractalColorsFrame.java +++ b/src/fractalzoomer/gui/FractalColorsFrame.java @@ -287,6 +287,17 @@ public void actionPerformed(ActionEvent e) { } }); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Ok"); + getRootPane().getActionMap().put("Ok", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + ok.doClick(); + } + }); + JButton close = new JButton("Cancel"); close.setFocusable(false); @@ -301,6 +312,17 @@ public void actionPerformed(ActionEvent e) { } }); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); + getRootPane().getActionMap().put("Cancel", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + close.doClick(); + } + }); + JPanel buttons = new JPanel(); buttons.setBackground(MainWindow.bg_color); diff --git a/src/fractalzoomer/gui/GradientFrame.java b/src/fractalzoomer/gui/GradientFrame.java index 187b9d88f..a5f639b6b 100644 --- a/src/fractalzoomer/gui/GradientFrame.java +++ b/src/fractalzoomer/gui/GradientFrame.java @@ -1,624 +1,646 @@ -/* - * Fractal Zoomer, Copyright (C) 2020 hrkalona2 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package fractalzoomer.gui; - -import fractalzoomer.main.MainWindow; -import fractalzoomer.main.app_settings.GradientSettings; -import fractalzoomer.palettes.CustomPalette; - -import javax.swing.*; -import javax.swing.JSpinner.DefaultEditor; -import javax.swing.border.EtchedBorder; -import javax.swing.border.TitledBorder; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import java.awt.*; -import java.awt.event.*; -import java.awt.geom.Rectangle2D; -import java.awt.image.BufferedImage; - -import static fractalzoomer.main.Constants.color_interp_str; - -/** - * - * @author kaloch - */ -public class GradientFrame extends JFrame { - - private static final long serialVersionUID = -1756188920359636585L; - private MainWindow ptra2; - private GradientFrame this_frame; - private JLabel gradient_label; - private BufferedImage colors; - private JComboBox combo_box_color_interp; - private JLabel color_a_label; - private JLabel color_b_label; - private JComboBox combo_box_color_space; - private JCheckBox check_box_reveres_palette; - private JSpinner offset_textfield; - private int mouse_color_label_x; - private Cursor grab_cursor; - private Cursor grabbing_cursor; - - public GradientFrame(MainWindow ptra, GradientSettings gs) { - - super(); - - ptra2 = ptra; - - this_frame = this; - - ptra2.setEnabled(false); - int custom_palette_window_width = 760; - int custom_palette_window_height = 260; - setTitle("Gradient"); - setIconImage(getIcon("/fractalzoomer/icons/gradient.png").getImage()); - - grab_cursor = Toolkit.getDefaultToolkit().createCustomCursor(getIcon("/fractalzoomer/icons/cursor_grab.gif").getImage(), new Point(16, 16), "grab"); - grabbing_cursor = Toolkit.getDefaultToolkit().createCustomCursor(getIcon("/fractalzoomer/icons/cursor_grabbing.gif").getImage(), new Point(16, 16), "grabbing"); - - setSize(custom_palette_window_width, custom_palette_window_height); - setLocation((int) (ptra2.getLocation().getX() + ptra2.getSize().getWidth() / 2) - (custom_palette_window_width / 2), (int) (ptra2.getLocation().getY() + ptra2.getSize().getHeight() / 2) - (custom_palette_window_height / 2)); - - addWindowListener(new WindowAdapter() { - - @Override - public void windowClosing(WindowEvent e) { - - ptra2.setEnabled(true); - dispose(); - - } - }); - - JPanel gradient_panel = new JPanel(); - - gradient_panel.setPreferredSize(new Dimension(680, 130)); - gradient_panel.setLayout(new GridLayout(2, 1)); - gradient_panel.setBackground(MainWindow.bg_color); - - color_a_label = new JLabel(); - - color_a_label.setPreferredSize(new Dimension(22, 22)); - color_a_label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); - color_a_label.setBackground(gs.colorA); - color_a_label.setOpaque(true); - color_a_label.setToolTipText("Changes first color."); - - color_a_label.addMouseListener(new MouseListener() { - @Override - public void mouseClicked(MouseEvent e) { - - } - - @Override - public void mousePressed(MouseEvent e) { - - new ColorChooserFrame(this_frame, "First Color", color_a_label, -1); - - } - - @Override - public void mouseReleased(MouseEvent e) { - - } - - @Override - public void mouseEntered(MouseEvent e) { - - } - - @Override - public void mouseExited(MouseEvent e) { - - } - - }); - - color_b_label = new JLabel(); - - color_b_label.setPreferredSize(new Dimension(22, 22)); - color_b_label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); - color_b_label.setBackground(gs.colorB); - color_b_label.setOpaque(true); - color_b_label.setToolTipText("Changes second color."); - - color_b_label.addMouseListener(new MouseListener() { - @Override - public void mouseClicked(MouseEvent e) { - - } - - @Override - public void mousePressed(MouseEvent e) { - - new ColorChooserFrame(this_frame, "Second Color", color_b_label, -1); - - } - - @Override - public void mouseReleased(MouseEvent e) { - - } - - @Override - public void mouseEntered(MouseEvent e) { - - } - - @Override - public void mouseExited(MouseEvent e) { - - } - - }); - - check_box_reveres_palette = new JCheckBox("Reversed"); - check_box_reveres_palette.setSelected(gs.gradient_reversed); - check_box_reveres_palette.setFocusable(false); - check_box_reveres_palette.setToolTipText("Reverses the current palette."); - check_box_reveres_palette.setBackground(MainWindow.bg_color); - - check_box_reveres_palette.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - try { - int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); - - if (temp3 < 0) { - throw new NumberFormatException(); - } - - Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); - - paintGradient(c); - } catch (Exception ex) { - Graphics2D g = colors.createGraphics(); - g.setColor(Color.LIGHT_GRAY); - g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); - gradient_label.repaint(); - } - } - }); - - combo_box_color_interp = new JComboBox(color_interp_str); - combo_box_color_interp.setSelectedIndex(gs.gradient_interpolation); - combo_box_color_interp.setFocusable(false); - combo_box_color_interp.setToolTipText("Sets the color interpolation option."); - - combo_box_color_interp.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - try { - int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); - - if (temp3 < 0) { - throw new NumberFormatException(); - } - - Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); - - paintGradient(c); - } catch (Exception ex) { - Graphics2D g = colors.createGraphics(); - g.setColor(Color.LIGHT_GRAY); - g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); - gradient_label.repaint(); - } - } - - }); - - JPanel color_interp_panel = new JPanel(); - color_interp_panel.setPreferredSize(new Dimension(165, 60)); - color_interp_panel.setLayout(new FlowLayout()); - color_interp_panel.setBackground(MainWindow.bg_color); - - color_interp_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Color Interpolation", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); - - color_interp_panel.add(combo_box_color_interp); - - String[] color_space_str = {"RGB", "HSB", "Exp", "Square", "Sqrt", "RYB", "LAB", "XYZ", "LCH", "Bezier RGB", "HSL"}; - - combo_box_color_space = new JComboBox(color_space_str); - combo_box_color_space.setSelectedIndex(gs.gradient_color_space); - combo_box_color_space.setFocusable(false); - combo_box_color_space.setToolTipText("Sets the color space option."); - - combo_box_color_space.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - try { - int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); - - if (temp3 < 0) { - throw new NumberFormatException(); - } - - Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); - - paintGradient(c); - } catch (Exception ex) { - Graphics2D g = colors.createGraphics(); - g.setColor(Color.LIGHT_GRAY); - g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); - gradient_label.repaint(); - } - } - - }); - - JPanel color_space_panel = new JPanel(); - color_space_panel.setPreferredSize(new Dimension(140, 60)); - color_space_panel.setLayout(new FlowLayout()); - color_space_panel.setBackground(MainWindow.bg_color); - - color_space_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Color Space", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); - - color_space_panel.add(combo_box_color_space); - - JPanel options_panel = new JPanel(); - - options_panel.setLayout(new FlowLayout()); - options_panel.setBackground(MainWindow.bg_color); - - JPanel color_panel = new JPanel(); - color_panel.setPreferredSize(new Dimension(340, 60)); - color_panel.setLayout(new FlowLayout()); - color_panel.setBackground(MainWindow.bg_color); - - color_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Colors", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); - - color_panel.add(color_a_label); - color_panel.add(color_b_label); - color_panel.add(check_box_reveres_palette); - - options_panel.add(color_panel); - options_panel.add(color_space_panel); - options_panel.add(color_interp_panel); - - colors = new BufferedImage(652, 45, BufferedImage.TYPE_INT_ARGB); - - Color[] c = CustomPalette.getGradient(gs.colorA.getRGB(), gs.colorB.getRGB(), MainWindow.GRADIENT_LENGTH, gs.gradient_interpolation, gs.gradient_color_space, gs.gradient_reversed, gs.gradient_offset); - - try { - Graphics2D g = colors.createGraphics(); - for (int i = 0; i < c.length - 1; i++) { - GradientPaint gp = new GradientPaint(i * colors.getWidth() / c.length, 0, c[i], (i + 1) * colors.getWidth() / c.length, 0, c[(i + 1) % c.length]); - g.setPaint(gp); - g.fill(new Rectangle2D.Double(i * colors.getWidth() / c.length, 0, (i + 1) * colors.getWidth() / c.length - i * colors.getWidth() / c.length, colors.getHeight())); - } - } catch (Exception ex) { - Graphics2D g = colors.createGraphics(); - g.setColor(Color.LIGHT_GRAY); - g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); - } - - gradient_label = new JLabel(new ImageIcon(colors)); - gradient_label.setPreferredSize(new Dimension(colors.getWidth(), colors.getHeight())); - gradient_label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); - - gradient_label.addMouseListener(new MouseListener() { - - @Override - public void mouseClicked(MouseEvent e) { - - } - - @Override - public void mousePressed(MouseEvent e) { - mouse_color_label_x = (int) gradient_label.getMousePosition().getX(); - - if (e.getModifiers() == InputEvent.BUTTON1_MASK) { - gradient_label.setCursor(grabbing_cursor); - } else if (e.getModifiers() != InputEvent.BUTTON1_MASK) { - gradient_label.setCursor(grab_cursor); - } - } - - @Override - public void mouseReleased(MouseEvent e) { - if (e.getModifiers() == InputEvent.BUTTON1_MASK) { - gradient_label.setCursor(grab_cursor); - } else if (e.getModifiers() != InputEvent.BUTTON1_MASK) { - gradient_label.setCursor(grab_cursor); - } - } - - @Override - public void mouseEntered(MouseEvent e) { - - } - - @Override - public void mouseExited(MouseEvent e) { - - } - - }); - - gradient_label.addMouseMotionListener(new MouseMotionListener() { - - @Override - public void mouseDragged(MouseEvent e) { - try { - if (e.getModifiers() == InputEvent.BUTTON1_MASK) { - gradient_label.setCursor(grabbing_cursor); - } else if (e.getModifiers() != InputEvent.BUTTON1_MASK) { - gradient_label.setCursor(grab_cursor); - } - - int diff = (int) gradient_label.getMousePosition().getX() - mouse_color_label_x; - - int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); - - if (temp3 < 0) { - throw new NumberFormatException(); - } - - temp3 -= diff; - - if (temp3 < 0) { - temp3 = 0; - } - - ((DefaultEditor) offset_textfield.getEditor()).getTextField().setText("" + temp3); - - mouse_color_label_x = (int) gradient_label.getMousePosition().getX(); - } catch (Exception ex) { - } - - } - - @Override - public void mouseMoved(MouseEvent e) { - try { - gradient_label.setCursor(grab_cursor); - Color temp_color = new Color(colors.getRGB((int) gradient_label.getMousePosition().getX(), (int) gradient_label.getMousePosition().getY())); - String rr = Integer.toHexString(temp_color.getRed()); - String bb = Integer.toHexString(temp_color.getBlue()); - String gg = Integer.toHexString(temp_color.getGreen()); - - rr = rr.length() == 1 ? "0" + rr : rr; - gg = gg.length() == 1 ? "0" + gg : gg; - bb = bb.length() == 1 ? "0" + bb : bb; - - gradient_label.setToolTipText("R: " + temp_color.getRed() + " G: " + temp_color.getGreen() + " B: " + temp_color.getBlue() + "
" - + "#" + rr + gg + bb + ""); - - } catch (Exception ex) { - } - } - }); - - JPanel gp = new JPanel(); - gp.setBackground(MainWindow.bg_color); - - gp.add(gradient_label); - - JLabel offset_label = new JLabel(" Gradient Offset"); - - color_panel.add(offset_label); - - SpinnerModel spinnerModel = new SpinnerNumberModel(gs.gradient_offset, //initial value - 0, //min - Integer.MAX_VALUE, //max - 1); - - offset_textfield = new JSpinner(spinnerModel); - offset_textfield.setPreferredSize(new Dimension(70, 26)); - offset_textfield.setToolTipText("Adds an offset to the current gradient."); - ((DefaultEditor) offset_textfield.getEditor()).getTextField().getDocument().addDocumentListener(new DocumentListener() { - - @Override - public void insertUpdate(DocumentEvent e) { - - try { - int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); - - if (temp3 < 0) { - throw new NumberFormatException(); - } - - Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); - - paintGradient(c); - } catch (Exception ex) { - Graphics2D g = colors.createGraphics(); - g.setColor(Color.LIGHT_GRAY); - g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); - gradient_label.repaint(); - } - } - - @Override - public void removeUpdate(DocumentEvent e) { - - try { - int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); - - if (temp3 < 0) { - throw new NumberFormatException(); - } - - Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); - - paintGradient(c); - } catch (Exception ex) { - Graphics2D g = colors.createGraphics(); - g.setColor(Color.LIGHT_GRAY); - g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); - gradient_label.repaint(); - } - } - - @Override - public void changedUpdate(DocumentEvent e) { - - try { - int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); - - if (temp3 < 0) { - throw new NumberFormatException(); - } - - Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); - - paintGradient(c); - } catch (Exception ex) { - Graphics2D g = colors.createGraphics(); - g.setColor(Color.LIGHT_GRAY); - g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); - gradient_label.repaint(); - } - - } - }); - - color_panel.add(offset_textfield); - - gradient_panel.add(options_panel); - gradient_panel.add(gp); - - JPanel buttons = new JPanel(); - - buttons.setLayout(new FlowLayout()); - buttons.setBackground(MainWindow.bg_color); - - JButton ok = new JButton("Ok"); - getRootPane().setDefaultButton(ok); - ok.setFocusable(false); - ok.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - - int temp2; - try { - temp2 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); - } catch (Exception ex) { - JOptionPane.showMessageDialog(this_frame, "Illegal Argument!", "Error!", JOptionPane.ERROR_MESSAGE); - return; - } - - if (temp2 < 0) { - JOptionPane.showMessageDialog(this_frame, "Offset must be greater than -1.", "Error!", JOptionPane.ERROR_MESSAGE); - return; - } - - ptra2.gradientChanged(color_a_label.getBackground(), color_b_label.getBackground(), combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp2); - ptra2.setEnabled(true); - dispose(); - - } - - }); - - buttons.add(ok); - - JButton cancel = new JButton("Cancel"); - cancel.setFocusable(false); - cancel.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - - ptra2.setEnabled(true); - dispose(); - - } - }); - - buttons.add(cancel); - - RoundedPanel round_panel = new RoundedPanel(true, true, true, 15); - round_panel.setBackground(MainWindow.bg_color); - round_panel.setPreferredSize(new Dimension(690, 180)); - round_panel.setLayout(new GridBagLayout()); - - GridBagConstraints con = new GridBagConstraints(); - - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 0; - - round_panel.add(gradient_panel, con); - - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 1; - - round_panel.add(buttons, con); - - JPanel main_panel = new JPanel(); - main_panel.setLayout(new GridBagLayout()); - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 0; - main_panel.add(round_panel, con); - - JScrollPane scrollPane = new JScrollPane(main_panel); - add(scrollPane); - - setVisible(true); - } - - private ImageIcon getIcon(String path) { - - return new ImageIcon(getClass().getResource(path)); - - } - - private void paintGradient(Color[] c) { - - try { - Graphics2D g = colors.createGraphics(); - for (int i = 0; i < c.length - 1; i++) { - GradientPaint gp = new GradientPaint(i * colors.getWidth() / c.length, 0, c[i], (i + 1) * colors.getWidth() / c.length, 0, c[(i + 1) % c.length]); - g.setPaint(gp); - g.fill(new Rectangle2D.Double(i * colors.getWidth() / c.length, 0, (i + 1) * colors.getWidth() / c.length - i * colors.getWidth() / c.length, colors.getHeight())); - } - } catch (Exception ex) { - Graphics2D g = colors.createGraphics(); - g.setColor(Color.LIGHT_GRAY); - g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); - } - - gradient_label.repaint(); - - } - - public void colorChanged() { - try { - int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); - - if (temp3 < 0) { - throw new NumberFormatException(); - } - - Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); - - paintGradient(c); - } catch (Exception ex) { - Graphics2D g = colors.createGraphics(); - g.setColor(Color.LIGHT_GRAY); - g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); - gradient_label.repaint(); - } - } -} +/* + * Fractal Zoomer, Copyright (C) 2020 hrkalona2 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package fractalzoomer.gui; + +import fractalzoomer.main.MainWindow; +import fractalzoomer.main.app_settings.GradientSettings; +import fractalzoomer.palettes.CustomPalette; + +import javax.swing.*; +import javax.swing.JSpinner.DefaultEditor; +import javax.swing.border.EtchedBorder; +import javax.swing.border.TitledBorder; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.*; +import java.awt.event.*; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; + +import static fractalzoomer.main.Constants.color_interp_str; + +/** + * + * @author kaloch + */ +public class GradientFrame extends JFrame { + + private static final long serialVersionUID = -1756188920359636585L; + private MainWindow ptra2; + private GradientFrame this_frame; + private JLabel gradient_label; + private BufferedImage colors; + private JComboBox combo_box_color_interp; + private JLabel color_a_label; + private JLabel color_b_label; + private JComboBox combo_box_color_space; + private JCheckBox check_box_reveres_palette; + private JSpinner offset_textfield; + private int mouse_color_label_x; + private Cursor grab_cursor; + private Cursor grabbing_cursor; + + public GradientFrame(MainWindow ptra, GradientSettings gs) { + + super(); + + ptra2 = ptra; + + this_frame = this; + + ptra2.setEnabled(false); + int custom_palette_window_width = 760; + int custom_palette_window_height = 260; + setTitle("Gradient"); + setIconImage(getIcon("/fractalzoomer/icons/gradient.png").getImage()); + + grab_cursor = Toolkit.getDefaultToolkit().createCustomCursor(getIcon("/fractalzoomer/icons/cursor_grab.gif").getImage(), new Point(16, 16), "grab"); + grabbing_cursor = Toolkit.getDefaultToolkit().createCustomCursor(getIcon("/fractalzoomer/icons/cursor_grabbing.gif").getImage(), new Point(16, 16), "grabbing"); + + setSize(custom_palette_window_width, custom_palette_window_height); + setLocation((int) (ptra2.getLocation().getX() + ptra2.getSize().getWidth() / 2) - (custom_palette_window_width / 2), (int) (ptra2.getLocation().getY() + ptra2.getSize().getHeight() / 2) - (custom_palette_window_height / 2)); + + addWindowListener(new WindowAdapter() { + + @Override + public void windowClosing(WindowEvent e) { + + ptra2.setEnabled(true); + dispose(); + + } + }); + + JPanel gradient_panel = new JPanel(); + + gradient_panel.setPreferredSize(new Dimension(680, 130)); + gradient_panel.setLayout(new GridLayout(2, 1)); + gradient_panel.setBackground(MainWindow.bg_color); + + color_a_label = new JLabel(); + + color_a_label.setPreferredSize(new Dimension(22, 22)); + color_a_label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); + color_a_label.setBackground(gs.colorA); + color_a_label.setOpaque(true); + color_a_label.setToolTipText("Changes first color."); + + color_a_label.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + + new ColorChooserFrame(this_frame, "First Color", color_a_label, -1); + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + }); + + color_b_label = new JLabel(); + + color_b_label.setPreferredSize(new Dimension(22, 22)); + color_b_label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); + color_b_label.setBackground(gs.colorB); + color_b_label.setOpaque(true); + color_b_label.setToolTipText("Changes second color."); + + color_b_label.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + + new ColorChooserFrame(this_frame, "Second Color", color_b_label, -1); + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + }); + + check_box_reveres_palette = new JCheckBox("Reversed"); + check_box_reveres_palette.setSelected(gs.gradient_reversed); + check_box_reveres_palette.setFocusable(false); + check_box_reveres_palette.setToolTipText("Reverses the current palette."); + check_box_reveres_palette.setBackground(MainWindow.bg_color); + + check_box_reveres_palette.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + try { + int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); + + if (temp3 < 0) { + throw new NumberFormatException(); + } + + Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); + + paintGradient(c); + } catch (Exception ex) { + Graphics2D g = colors.createGraphics(); + g.setColor(Color.LIGHT_GRAY); + g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); + gradient_label.repaint(); + } + } + }); + + combo_box_color_interp = new JComboBox(color_interp_str); + combo_box_color_interp.setSelectedIndex(gs.gradient_interpolation); + combo_box_color_interp.setFocusable(false); + combo_box_color_interp.setToolTipText("Sets the color interpolation option."); + + combo_box_color_interp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); + + if (temp3 < 0) { + throw new NumberFormatException(); + } + + Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); + + paintGradient(c); + } catch (Exception ex) { + Graphics2D g = colors.createGraphics(); + g.setColor(Color.LIGHT_GRAY); + g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); + gradient_label.repaint(); + } + } + + }); + + JPanel color_interp_panel = new JPanel(); + color_interp_panel.setPreferredSize(new Dimension(165, 60)); + color_interp_panel.setLayout(new FlowLayout()); + color_interp_panel.setBackground(MainWindow.bg_color); + + color_interp_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Color Interpolation", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); + + color_interp_panel.add(combo_box_color_interp); + + String[] color_space_str = {"RGB", "HSB", "Exp", "Square", "Sqrt", "RYB", "LAB", "XYZ", "LCH", "Bezier RGB", "HSL"}; + + combo_box_color_space = new JComboBox(color_space_str); + combo_box_color_space.setSelectedIndex(gs.gradient_color_space); + combo_box_color_space.setFocusable(false); + combo_box_color_space.setToolTipText("Sets the color space option."); + + combo_box_color_space.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); + + if (temp3 < 0) { + throw new NumberFormatException(); + } + + Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); + + paintGradient(c); + } catch (Exception ex) { + Graphics2D g = colors.createGraphics(); + g.setColor(Color.LIGHT_GRAY); + g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); + gradient_label.repaint(); + } + } + + }); + + JPanel color_space_panel = new JPanel(); + color_space_panel.setPreferredSize(new Dimension(140, 60)); + color_space_panel.setLayout(new FlowLayout()); + color_space_panel.setBackground(MainWindow.bg_color); + + color_space_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Color Space", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); + + color_space_panel.add(combo_box_color_space); + + JPanel options_panel = new JPanel(); + + options_panel.setLayout(new FlowLayout()); + options_panel.setBackground(MainWindow.bg_color); + + JPanel color_panel = new JPanel(); + color_panel.setPreferredSize(new Dimension(340, 60)); + color_panel.setLayout(new FlowLayout()); + color_panel.setBackground(MainWindow.bg_color); + + color_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Colors", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); + + color_panel.add(color_a_label); + color_panel.add(color_b_label); + color_panel.add(check_box_reveres_palette); + + options_panel.add(color_panel); + options_panel.add(color_space_panel); + options_panel.add(color_interp_panel); + + colors = new BufferedImage(652, 45, BufferedImage.TYPE_INT_ARGB); + + Color[] c = CustomPalette.getGradient(gs.colorA.getRGB(), gs.colorB.getRGB(), MainWindow.GRADIENT_LENGTH, gs.gradient_interpolation, gs.gradient_color_space, gs.gradient_reversed, gs.gradient_offset); + + try { + Graphics2D g = colors.createGraphics(); + for (int i = 0; i < c.length - 1; i++) { + GradientPaint gp = new GradientPaint(i * colors.getWidth() / c.length, 0, c[i], (i + 1) * colors.getWidth() / c.length, 0, c[(i + 1) % c.length]); + g.setPaint(gp); + g.fill(new Rectangle2D.Double(i * colors.getWidth() / c.length, 0, (i + 1) * colors.getWidth() / c.length - i * colors.getWidth() / c.length, colors.getHeight())); + } + } catch (Exception ex) { + Graphics2D g = colors.createGraphics(); + g.setColor(Color.LIGHT_GRAY); + g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); + } + + gradient_label = new JLabel(new ImageIcon(colors)); + gradient_label.setPreferredSize(new Dimension(colors.getWidth(), colors.getHeight())); + gradient_label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); + + gradient_label.addMouseListener(new MouseListener() { + + @Override + public void mouseClicked(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + mouse_color_label_x = (int) gradient_label.getMousePosition().getX(); + + if (e.getModifiers() == InputEvent.BUTTON1_MASK) { + gradient_label.setCursor(grabbing_cursor); + } else if (e.getModifiers() != InputEvent.BUTTON1_MASK) { + gradient_label.setCursor(grab_cursor); + } + } + + @Override + public void mouseReleased(MouseEvent e) { + if (e.getModifiers() == InputEvent.BUTTON1_MASK) { + gradient_label.setCursor(grab_cursor); + } else if (e.getModifiers() != InputEvent.BUTTON1_MASK) { + gradient_label.setCursor(grab_cursor); + } + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + }); + + gradient_label.addMouseMotionListener(new MouseMotionListener() { + + @Override + public void mouseDragged(MouseEvent e) { + try { + if (e.getModifiers() == InputEvent.BUTTON1_MASK) { + gradient_label.setCursor(grabbing_cursor); + } else if (e.getModifiers() != InputEvent.BUTTON1_MASK) { + gradient_label.setCursor(grab_cursor); + } + + int diff = (int) gradient_label.getMousePosition().getX() - mouse_color_label_x; + + int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); + + if (temp3 < 0) { + throw new NumberFormatException(); + } + + temp3 -= diff; + + if (temp3 < 0) { + temp3 = 0; + } + + ((DefaultEditor) offset_textfield.getEditor()).getTextField().setText("" + temp3); + + mouse_color_label_x = (int) gradient_label.getMousePosition().getX(); + } catch (Exception ex) { + } + + } + + @Override + public void mouseMoved(MouseEvent e) { + try { + gradient_label.setCursor(grab_cursor); + Color temp_color = new Color(colors.getRGB((int) gradient_label.getMousePosition().getX(), (int) gradient_label.getMousePosition().getY())); + String rr = Integer.toHexString(temp_color.getRed()); + String bb = Integer.toHexString(temp_color.getBlue()); + String gg = Integer.toHexString(temp_color.getGreen()); + + rr = rr.length() == 1 ? "0" + rr : rr; + gg = gg.length() == 1 ? "0" + gg : gg; + bb = bb.length() == 1 ? "0" + bb : bb; + + gradient_label.setToolTipText("R: " + temp_color.getRed() + " G: " + temp_color.getGreen() + " B: " + temp_color.getBlue() + "
" + + "#" + rr + gg + bb + ""); + + } catch (Exception ex) { + } + } + }); + + JPanel gp = new JPanel(); + gp.setBackground(MainWindow.bg_color); + + gp.add(gradient_label); + + JLabel offset_label = new JLabel(" Gradient Offset"); + + color_panel.add(offset_label); + + SpinnerModel spinnerModel = new SpinnerNumberModel(gs.gradient_offset, //initial value + 0, //min + Integer.MAX_VALUE, //max + 1); + + offset_textfield = new JSpinner(spinnerModel); + offset_textfield.setPreferredSize(new Dimension(70, 26)); + offset_textfield.setToolTipText("Adds an offset to the current gradient."); + ((DefaultEditor) offset_textfield.getEditor()).getTextField().getDocument().addDocumentListener(new DocumentListener() { + + @Override + public void insertUpdate(DocumentEvent e) { + + try { + int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); + + if (temp3 < 0) { + throw new NumberFormatException(); + } + + Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); + + paintGradient(c); + } catch (Exception ex) { + Graphics2D g = colors.createGraphics(); + g.setColor(Color.LIGHT_GRAY); + g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); + gradient_label.repaint(); + } + } + + @Override + public void removeUpdate(DocumentEvent e) { + + try { + int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); + + if (temp3 < 0) { + throw new NumberFormatException(); + } + + Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); + + paintGradient(c); + } catch (Exception ex) { + Graphics2D g = colors.createGraphics(); + g.setColor(Color.LIGHT_GRAY); + g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); + gradient_label.repaint(); + } + } + + @Override + public void changedUpdate(DocumentEvent e) { + + try { + int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); + + if (temp3 < 0) { + throw new NumberFormatException(); + } + + Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); + + paintGradient(c); + } catch (Exception ex) { + Graphics2D g = colors.createGraphics(); + g.setColor(Color.LIGHT_GRAY); + g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); + gradient_label.repaint(); + } + + } + }); + + color_panel.add(offset_textfield); + + gradient_panel.add(options_panel); + gradient_panel.add(gp); + + JPanel buttons = new JPanel(); + + buttons.setLayout(new FlowLayout()); + buttons.setBackground(MainWindow.bg_color); + + JButton ok = new JButton("Ok"); + getRootPane().setDefaultButton(ok); + ok.setFocusable(false); + ok.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + int temp2; + try { + temp2 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); + } catch (Exception ex) { + JOptionPane.showMessageDialog(this_frame, "Illegal Argument!", "Error!", JOptionPane.ERROR_MESSAGE); + return; + } + + if (temp2 < 0) { + JOptionPane.showMessageDialog(this_frame, "Offset must be greater than -1.", "Error!", JOptionPane.ERROR_MESSAGE); + return; + } + + ptra2.gradientChanged(color_a_label.getBackground(), color_b_label.getBackground(), combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp2); + ptra2.setEnabled(true); + dispose(); + + } + + }); + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Ok"); + getRootPane().getActionMap().put("Ok", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + ok.doClick(); + } + }); + + buttons.add(ok); + + JButton cancel = new JButton("Cancel"); + cancel.setFocusable(false); + cancel.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + ptra2.setEnabled(true); + dispose(); + + } + }); + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); + getRootPane().getActionMap().put("Cancel", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + cancel.doClick(); + } + }); + + buttons.add(cancel); + + RoundedPanel round_panel = new RoundedPanel(true, true, true, 15); + round_panel.setBackground(MainWindow.bg_color); + round_panel.setPreferredSize(new Dimension(690, 180)); + round_panel.setLayout(new GridBagLayout()); + + GridBagConstraints con = new GridBagConstraints(); + + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 0; + + round_panel.add(gradient_panel, con); + + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 1; + + round_panel.add(buttons, con); + + JPanel main_panel = new JPanel(); + main_panel.setLayout(new GridBagLayout()); + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 0; + main_panel.add(round_panel, con); + + JScrollPane scrollPane = new JScrollPane(main_panel); + add(scrollPane); + + setVisible(true); + } + + private ImageIcon getIcon(String path) { + + return new ImageIcon(getClass().getResource(path)); + + } + + private void paintGradient(Color[] c) { + + try { + Graphics2D g = colors.createGraphics(); + for (int i = 0; i < c.length - 1; i++) { + GradientPaint gp = new GradientPaint(i * colors.getWidth() / c.length, 0, c[i], (i + 1) * colors.getWidth() / c.length, 0, c[(i + 1) % c.length]); + g.setPaint(gp); + g.fill(new Rectangle2D.Double(i * colors.getWidth() / c.length, 0, (i + 1) * colors.getWidth() / c.length - i * colors.getWidth() / c.length, colors.getHeight())); + } + } catch (Exception ex) { + Graphics2D g = colors.createGraphics(); + g.setColor(Color.LIGHT_GRAY); + g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); + } + + gradient_label.repaint(); + + } + + public void colorChanged() { + try { + int temp3 = Integer.parseInt(((DefaultEditor) offset_textfield.getEditor()).getTextField().getText()); + + if (temp3 < 0) { + throw new NumberFormatException(); + } + + Color[] c = CustomPalette.getGradient(color_a_label.getBackground().getRGB(), color_b_label.getBackground().getRGB(), MainWindow.GRADIENT_LENGTH, combo_box_color_interp.getSelectedIndex(), combo_box_color_space.getSelectedIndex(), check_box_reveres_palette.isSelected(), temp3); + + paintGradient(c); + } catch (Exception ex) { + Graphics2D g = colors.createGraphics(); + g.setColor(Color.LIGHT_GRAY); + g.fillRect(0, 0, colors.getWidth(), colors.getHeight()); + gradient_label.repaint(); + } + } +} diff --git a/src/fractalzoomer/gui/GreedyAlgorithmsFrame.java b/src/fractalzoomer/gui/GreedyAlgorithmsFrame.java index 7811bdb53..86d111b8a 100644 --- a/src/fractalzoomer/gui/GreedyAlgorithmsFrame.java +++ b/src/fractalzoomer/gui/GreedyAlgorithmsFrame.java @@ -279,6 +279,17 @@ else if(divide_and_conquer_algorithm.isSelected()) { } }); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Ok"); + getRootPane().getActionMap().put("Ok", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + ok.doClick(); + } + }); + JButton close = new JButton("Cancel"); close.setFocusable(false); close.addActionListener(new ActionListener() { @@ -292,6 +303,17 @@ public void actionPerformed(ActionEvent e) { } }); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); + getRootPane().getActionMap().put("Cancel", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + close.doClick(); + } + }); + options_panel2.add(greedy_algorithm_panel); options_panel2.add(coloring_option_panel); diff --git a/src/fractalzoomer/gui/OrbitTrapsFrame.java b/src/fractalzoomer/gui/OrbitTrapsFrame.java index 7db3f677c..a781eadb2 100644 --- a/src/fractalzoomer/gui/OrbitTrapsFrame.java +++ b/src/fractalzoomer/gui/OrbitTrapsFrame.java @@ -273,6 +273,8 @@ public void actionPerformed(ActionEvent e) { p9.add(heightFunction); p9.add(invert_height_opt); + //Todo: add skip trap check + JPanel p10 = new JPanel(); p10.setBackground(MainWindow.bg_color); @@ -505,7 +507,7 @@ public void mouseExited(MouseEvent e) { JPanel p7 = new JPanel(); p7.setBackground(MainWindow.bg_color); - JComboBox colors = new JComboBox(new String[] {"Per Trap", "Random", "Hue/Arg HSB", "Hue/Arg LCH", "Random HSB", "Random Palette", "Arg Palette", "Trap Iteration HSB", "Trap Iterations LCH"}); + JComboBox colors = new JComboBox(new String[] {"Per Trap", "Random", "Hue/Arg HSB", "Hue/Arg LCH", "Random HSB", "Random Palette", "Arg Palette", "Trap Iterations HSB", "Trap Iterations LCH"}); colors.setFocusable(false); colors.setSelectedIndex(ots.trapColorFillingMethod); colors.setToolTipText("Sets the trap color filling method."); @@ -725,6 +727,17 @@ public void actionPerformed(ActionEvent e) { } }); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Ok"); + getRootPane().getActionMap().put("Ok", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + ok.doClick(); + } + }); + JButton close = new JButton("Cancel"); close.setFocusable(false); close.addActionListener(new ActionListener() { @@ -738,6 +751,17 @@ public void actionPerformed(ActionEvent e) { } }); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); + getRootPane().getActionMap().put("Cancel", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + close.doClick(); + } + }); + options_border.setState(orbit_traps_opt.isSelected()); toggled(orbit_traps_opt.isSelected()); diff --git a/src/fractalzoomer/gui/PlaneVisualizationFrame.java b/src/fractalzoomer/gui/PlaneVisualizationFrame.java index 16580f10a..02b03e10d 100644 --- a/src/fractalzoomer/gui/PlaneVisualizationFrame.java +++ b/src/fractalzoomer/gui/PlaneVisualizationFrame.java @@ -1,242 +1,261 @@ -/* - * Copyright (C) 2020 hrkalona2 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package fractalzoomer.gui; - -import fractalzoomer.core.PlaneVisualizer; -import fractalzoomer.main.MainWindow; -import fractalzoomer.main.app_settings.Settings; -import fractalzoomer.parser.ParserException; - -import javax.swing.*; -import javax.swing.border.TitledBorder; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.awt.image.BufferedImage; - -/** - * - * @author hrkalona2 - */ -public class PlaneVisualizationFrame extends JFrame { - private static final long serialVersionUID = 4735832839383508009L; - private MainWindow ptra2; - private PlaneVisualizationFrame thiss; - - public PlaneVisualizationFrame(MainWindow ptra, final Settings s, final double zoom_factor) { - - super(); - - ptra2 = ptra; - thiss = this; - - ptra2.setEnabled(false); - int filters_options_window_width = 1050; - int filters_options_window_height = 660; - setTitle("Plane Visualization"); - setIconImage(getIcon("/fractalzoomer/icons/plane_visualization.png").getImage()); - setSize(filters_options_window_width, filters_options_window_height); - setLocation((int)(ptra2.getLocation().getX() + ptra2.getSize().getWidth() / 2) - (filters_options_window_width / 2), (int)(ptra2.getLocation().getY() + ptra2.getSize().getHeight() / 2) - (filters_options_window_height / 2)); - - addWindowListener(new WindowAdapter() { - - @Override - public void windowClosing(WindowEvent e) { - - ptra2.setEnabled(true); - - dispose(); - - } - }); - - JPanel panel = new JPanel(); - panel.setBackground(MainWindow.bg_color); - panel.setPreferredSize(new Dimension(940, 520)); - panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Planes", TitledBorder.CENTER, TitledBorder.CENTER)); - - final JSlider size_slid = new JSlider(JSlider.HORIZONTAL, 0, 50, 25); - size_slid.setPreferredSize(new Dimension(300, 40)); - size_slid.setFocusable(false); - size_slid.setToolTipText("Changes the zooming."); - size_slid.setPaintLabels(true); - size_slid.setBackground(MainWindow.bg_color); - - /*Hashtable table3 = new Hashtable(); - table3.put(0, new JLabel("0.0")); - table3.put(25, new JLabel("0.25")); - table3.put(50, new JLabel("0.5")); - table3.put(75, new JLabel("0.75")); - table3.put(100, new JLabel("1.0")); - coupling_slid.setLabelTable(table3);*/ - final BufferedImage plane_mu_image = new BufferedImage(402, 402, BufferedImage.TYPE_INT_ARGB); - final BufferedImage new_plane_image = new BufferedImage(402, 402, BufferedImage.TYPE_INT_ARGB); - - String[] color_modes_str = {"Re-Im", "Rainbow"}; - final JComboBox color_modes_opt = new JComboBox(color_modes_str); - color_modes_opt.setSelectedIndex(0); - color_modes_opt.setFocusable(false); - - double size = Math.pow(zoom_factor, (size_slid.getMaximum() - size_slid.getValue()) - size_slid.getMaximum() / 2); - try { - new PlaneVisualizer(plane_mu_image, new_plane_image, s, size).visualizePlanes(color_modes_opt.getSelectedIndex()); - } - catch(ParserException e) { - JOptionPane.showMessageDialog(thiss, e.getMessage() + "\nThe application will terminate.", "Error!", JOptionPane.ERROR_MESSAGE); - ptra2.savePreferences(); - System.exit(-1); - } - - final JLabel l1 = new JLabel(); - l1.setIcon(new ImageIcon(plane_mu_image)); - final JLabel l2 = new JLabel(); - l2.setIcon(new ImageIcon(new_plane_image)); - - size_slid.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - double size = Math.pow(zoom_factor, (size_slid.getMaximum() - size_slid.getValue()) - size_slid.getMaximum() / 2); - try { - new PlaneVisualizer(plane_mu_image, new_plane_image, s, size).visualizePlanes(color_modes_opt.getSelectedIndex()); - } - catch(ParserException ex) { - JOptionPane.showMessageDialog(thiss, ex.getMessage() + "\nThe application will terminate.", "Error!", JOptionPane.ERROR_MESSAGE); - ptra2.savePreferences(); - System.exit(-1); - } - l1.repaint(); - l2.repaint(); - } - - }); - - color_modes_opt.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - double size = Math.pow(zoom_factor, (size_slid.getMaximum() - size_slid.getValue()) - size_slid.getMaximum() / 2); - try { - new PlaneVisualizer(plane_mu_image, new_plane_image, s, size).visualizePlanes(color_modes_opt.getSelectedIndex()); - } - catch(ParserException ex) { - JOptionPane.showMessageDialog(thiss, ex.getMessage() + "\nThe application will terminate.", "Error!", JOptionPane.ERROR_MESSAGE); - ptra2.savePreferences(); - System.exit(-1); - } - l1.repaint(); - l2.repaint(); - } - - }); - - JLabel l3 = new JLabel(); - l3.setIcon(getIcon("/fractalzoomer/icons/transform.png")); - - JPanel mu_panel = new JPanel(); - mu_panel.setBackground(MainWindow.bg_color); - mu_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Original Plane", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); - - JPanel tr_panel = new JPanel(); - tr_panel.setBackground(MainWindow.bg_color); - tr_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Transformed Plane", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); - - mu_panel.add(l1); - tr_panel.add(l2); - - JPanel size_panel = new JPanel(); - size_panel.setBackground(MainWindow.bg_color); - size_panel.setPreferredSize(new Dimension(500, 50)); - size_panel.add(new JLabel("Zoom Out")); - size_panel.add(size_slid); - size_panel.add(new JLabel("Zoom In")); - - JPanel color_panel = new JPanel(); - color_panel.setBackground(MainWindow.bg_color); - color_panel.add(new JLabel("Coloring Option:")); - color_panel.add(color_modes_opt); - - panel.add(size_panel); - panel.add(color_panel); - panel.add(mu_panel); - panel.add(l3); - panel.add(tr_panel); - - JPanel buttons = new JPanel(); - buttons.setBackground(MainWindow.bg_color); - - JButton ok = new JButton("Ok"); - getRootPane().setDefaultButton(ok); - ok.setFocusable(false); - ok.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - - ptra2.setEnabled(true); - - dispose(); - - } - }); - - buttons.add(ok); - - RoundedPanel round_panel = new RoundedPanel(true, true, true, 15); - round_panel.setBackground(MainWindow.bg_color); - round_panel.setPreferredSize(new Dimension(980, 570)); - round_panel.setLayout(new GridBagLayout()); - - GridBagConstraints con = new GridBagConstraints(); - - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 0; - - round_panel.add(panel, con); - - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 1; - - round_panel.add(buttons, con); - - JPanel main_panel = new JPanel(); - main_panel.setLayout(new GridBagLayout()); - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 0; - main_panel.add(round_panel, con); - - JScrollPane scrollPane = new JScrollPane(main_panel); - add(scrollPane); - - requestFocus(); - - setVisible(true); - } - - private ImageIcon getIcon(String path) { - - return new ImageIcon(getClass().getResource(path)); - - } - -} +/* + * Copyright (C) 2020 hrkalona2 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package fractalzoomer.gui; + +import fractalzoomer.core.PlaneVisualizer; +import fractalzoomer.main.MainWindow; +import fractalzoomer.main.app_settings.Settings; +import fractalzoomer.parser.ParserException; + +import javax.swing.*; +import javax.swing.border.TitledBorder; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.*; +import java.awt.image.BufferedImage; + +/** + * + * @author hrkalona2 + */ +public class PlaneVisualizationFrame extends JFrame { + private static final long serialVersionUID = 4735832839383508009L; + private MainWindow ptra2; + private PlaneVisualizationFrame thiss; + + public PlaneVisualizationFrame(MainWindow ptra, final Settings s, final double zoom_factor) { + + super(); + + ptra2 = ptra; + thiss = this; + + ptra2.setEnabled(false); + int filters_options_window_width = 1050; + int filters_options_window_height = 660; + setTitle("Plane Visualization"); + setIconImage(getIcon("/fractalzoomer/icons/plane_visualization.png").getImage()); + setSize(filters_options_window_width, filters_options_window_height); + setLocation((int)(ptra2.getLocation().getX() + ptra2.getSize().getWidth() / 2) - (filters_options_window_width / 2), (int)(ptra2.getLocation().getY() + ptra2.getSize().getHeight() / 2) - (filters_options_window_height / 2)); + + addWindowListener(new WindowAdapter() { + + @Override + public void windowClosing(WindowEvent e) { + + ptra2.setEnabled(true); + + dispose(); + + } + }); + + JPanel panel = new JPanel(); + panel.setBackground(MainWindow.bg_color); + panel.setPreferredSize(new Dimension(940, 520)); + panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Planes", TitledBorder.CENTER, TitledBorder.CENTER)); + + final JSlider size_slid = new JSlider(JSlider.HORIZONTAL, 0, 50, 25); + size_slid.setPreferredSize(new Dimension(300, 40)); + size_slid.setFocusable(false); + size_slid.setToolTipText("Changes the zooming."); + size_slid.setPaintLabels(true); + size_slid.setBackground(MainWindow.bg_color); + + /*Hashtable table3 = new Hashtable(); + table3.put(0, new JLabel("0.0")); + table3.put(25, new JLabel("0.25")); + table3.put(50, new JLabel("0.5")); + table3.put(75, new JLabel("0.75")); + table3.put(100, new JLabel("1.0")); + coupling_slid.setLabelTable(table3);*/ + final BufferedImage plane_mu_image = new BufferedImage(402, 402, BufferedImage.TYPE_INT_ARGB); + final BufferedImage new_plane_image = new BufferedImage(402, 402, BufferedImage.TYPE_INT_ARGB); + + String[] color_modes_str = {"Re-Im", "Rainbow"}; + final JComboBox color_modes_opt = new JComboBox(color_modes_str); + color_modes_opt.setSelectedIndex(0); + color_modes_opt.setFocusable(false); + + double size = Math.pow(zoom_factor, (size_slid.getMaximum() - size_slid.getValue()) - size_slid.getMaximum() / 2); + try { + new PlaneVisualizer(plane_mu_image, new_plane_image, s, size).visualizePlanes(color_modes_opt.getSelectedIndex()); + } + catch(ParserException e) { + JOptionPane.showMessageDialog(thiss, e.getMessage() + "\nThe application will terminate.", "Error!", JOptionPane.ERROR_MESSAGE); + ptra2.savePreferences(); + System.exit(-1); + } + + final JLabel l1 = new JLabel(); + l1.setIcon(new ImageIcon(plane_mu_image)); + final JLabel l2 = new JLabel(); + l2.setIcon(new ImageIcon(new_plane_image)); + + size_slid.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + double size = Math.pow(zoom_factor, (size_slid.getMaximum() - size_slid.getValue()) - size_slid.getMaximum() / 2); + try { + new PlaneVisualizer(plane_mu_image, new_plane_image, s, size).visualizePlanes(color_modes_opt.getSelectedIndex()); + } + catch(ParserException ex) { + JOptionPane.showMessageDialog(thiss, ex.getMessage() + "\nThe application will terminate.", "Error!", JOptionPane.ERROR_MESSAGE); + ptra2.savePreferences(); + System.exit(-1); + } + l1.repaint(); + l2.repaint(); + } + + }); + + color_modes_opt.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + double size = Math.pow(zoom_factor, (size_slid.getMaximum() - size_slid.getValue()) - size_slid.getMaximum() / 2); + try { + new PlaneVisualizer(plane_mu_image, new_plane_image, s, size).visualizePlanes(color_modes_opt.getSelectedIndex()); + } + catch(ParserException ex) { + JOptionPane.showMessageDialog(thiss, ex.getMessage() + "\nThe application will terminate.", "Error!", JOptionPane.ERROR_MESSAGE); + ptra2.savePreferences(); + System.exit(-1); + } + l1.repaint(); + l2.repaint(); + } + + }); + + JLabel l3 = new JLabel(); + l3.setIcon(getIcon("/fractalzoomer/icons/transform.png")); + + JPanel mu_panel = new JPanel(); + mu_panel.setBackground(MainWindow.bg_color); + mu_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Original Plane", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); + + JPanel tr_panel = new JPanel(); + tr_panel.setBackground(MainWindow.bg_color); + tr_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Transformed Plane", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); + + mu_panel.add(l1); + tr_panel.add(l2); + + JPanel size_panel = new JPanel(); + size_panel.setBackground(MainWindow.bg_color); + size_panel.setPreferredSize(new Dimension(500, 50)); + size_panel.add(new JLabel("Zoom Out")); + size_panel.add(size_slid); + size_panel.add(new JLabel("Zoom In")); + + JPanel color_panel = new JPanel(); + color_panel.setBackground(MainWindow.bg_color); + color_panel.add(new JLabel("Coloring Option:")); + color_panel.add(color_modes_opt); + + panel.add(size_panel); + panel.add(color_panel); + panel.add(mu_panel); + panel.add(l3); + panel.add(tr_panel); + + JPanel buttons = new JPanel(); + buttons.setBackground(MainWindow.bg_color); + + JButton ok = new JButton("Ok"); + getRootPane().setDefaultButton(ok); + ok.setFocusable(false); + ok.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + ptra2.setEnabled(true); + + dispose(); + + } + }); + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Ok"); + getRootPane().getActionMap().put("Ok", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + ok.doClick(); + } + }); + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Escape"); + getRootPane().getActionMap().put("Escape", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + ok.doClick(); + } + }); + + buttons.add(ok); + + RoundedPanel round_panel = new RoundedPanel(true, true, true, 15); + round_panel.setBackground(MainWindow.bg_color); + round_panel.setPreferredSize(new Dimension(980, 570)); + round_panel.setLayout(new GridBagLayout()); + + GridBagConstraints con = new GridBagConstraints(); + + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 0; + + round_panel.add(panel, con); + + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 1; + + round_panel.add(buttons, con); + + JPanel main_panel = new JPanel(); + main_panel.setLayout(new GridBagLayout()); + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 0; + main_panel.add(round_panel, con); + + JScrollPane scrollPane = new JScrollPane(main_panel); + add(scrollPane); + + requestFocus(); + + setVisible(true); + } + + private ImageIcon getIcon(String path) { + + return new ImageIcon(getClass().getResource(path)); + + } + +} diff --git a/src/fractalzoomer/gui/ProcessingOrderingFrame.java b/src/fractalzoomer/gui/ProcessingOrderingFrame.java index 0c552d1e4..09ab351e7 100644 --- a/src/fractalzoomer/gui/ProcessingOrderingFrame.java +++ b/src/fractalzoomer/gui/ProcessingOrderingFrame.java @@ -1,328 +1,350 @@ -/* - * Copyright (C) 2020 kaloch - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package fractalzoomer.gui; - -import fractalzoomer.main.MainWindow; - -import javax.swing.*; -import javax.swing.border.EtchedBorder; -import javax.swing.border.TitledBorder; -import java.awt.*; -import java.awt.event.*; - -/** - * - * @author kaloch - */ -public class ProcessingOrderingFrame extends JFrame { - - private static final long serialVersionUID = -1756185420359636585L; - private MainWindow ptra2; - private JList list; - private int[] processing_order; - private Color activeColor; - - public ProcessingOrderingFrame(MainWindow ptra, int[] processing_order, final boolean fake_distance_estimation, final boolean entropy_coloring, final boolean offset_coloring, final boolean rainbow_palette, final boolean greyscale_coloring, final boolean contour_coloring, final boolean bump_mapping, final boolean light) { - - super(); - - ptra2 = ptra; - - this.processing_order = processing_order; - - activeColor = new Color(185, 223, 147); - - ptra2.setEnabled(false); - int custom_palette_window_width = 580; - int custom_palette_window_height = 480; - setTitle("Processing Order"); - setIconImage(getIcon("/fractalzoomer/icons/list.png").getImage()); - - setSize(custom_palette_window_width, custom_palette_window_height); - setLocation((int) (ptra2.getLocation().getX() + ptra2.getSize().getWidth() / 2) - (custom_palette_window_width / 2), (int) (ptra2.getLocation().getY() + ptra2.getSize().getHeight() / 2) - (custom_palette_window_height / 2)); - - addWindowListener(new WindowAdapter() { - - @Override - public void windowClosing(WindowEvent e) { - - ptra2.setEnabled(true); - dispose(); - - } - }); - - DefaultListModel m = new DefaultListModel<>(); - for(int i = 0; i < processing_order.length; i++) { - m.addElement("" + MainWindow.processingAlgorithNames[processing_order[i]]); - } - list = new JList<>(m); - list.getSelectionModel().setSelectionMode( - ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - list.setTransferHandler(new ListItemTransferHandler()); - - list.getInputMap( JComponent.WHEN_FOCUSED ).getParent().remove( KeyStroke.getKeyStroke( KeyEvent.VK_X, InputEvent.CTRL_DOWN_MASK ) ); - list.getInputMap( JComponent.WHEN_FOCUSED ).getParent().remove( KeyStroke.getKeyStroke( KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK ) ); - list.getInputMap( JComponent.WHEN_FOCUSED ).getParent().remove( KeyStroke.getKeyStroke( KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK ) ); - - list.setDropMode(DropMode.INSERT); - list.setDragEnabled(true); - //http://java-swing-tips.blogspot.jp/2008/10/rubber-band-selection-drag-and-drop.html - list.setLayoutOrientation(JList.VERTICAL); - list.setVisibleRowCount(0); - //list.setFixedCellWidth(80); - //list.setFixedCellHeight(80); - list.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - - list.setCellRenderer(new ListCellRenderer() { - private final JPanel p = new JPanel(new BorderLayout()); - private final JLabel icon = new JLabel((Icon)null, JLabel.LEFT); - private final JLabel label = new JLabel("", JLabel.LEFT); - - @Override - public Component getListCellRendererComponent( - JList list, String value, int index, - boolean isSelected, boolean cellHasFocus) { - - if(MainWindow.processingAlgorithNames[0].equals(value)) { - icon.setIcon(getIcon("/fractalzoomer/icons/fake_distance_estimation.png")); - } - else if(MainWindow.processingAlgorithNames[1].equals(value)) { - icon.setIcon(getIcon("/fractalzoomer/icons/entropy_coloring.png")); - } - else if(MainWindow.processingAlgorithNames[2].equals(value)) { - icon.setIcon(getIcon("/fractalzoomer/icons/offset_coloring.png")); - } - else if(MainWindow.processingAlgorithNames[3].equals(value)) { - icon.setIcon(getIcon("/fractalzoomer/icons/rainbow_palette.png")); - } - else if(MainWindow.processingAlgorithNames[4].equals(value)) { - icon.setIcon(getIcon("/fractalzoomer/icons/greyscale_coloring.png")); - } - else if(MainWindow.processingAlgorithNames[5].equals(value)) { - icon.setIcon(getIcon("/fractalzoomer/icons/contour_coloring.png")); - } - else if(MainWindow.processingAlgorithNames[6].equals(value)) { - icon.setIcon(getIcon("/fractalzoomer/icons/bump_map.png")); - } - else if(MainWindow.processingAlgorithNames[7].equals(value)) { - icon.setIcon(getIcon("/fractalzoomer/icons/light.png")); - } - - label.setText(value); - label.setForeground(list.getForeground()); - p.add(icon); - p.add(label, BorderLayout.EAST); - p.setBackground(list.getBackground()); - - if(MainWindow.processingAlgorithNames[0].equals(value)) { - if(fake_distance_estimation) { - p.setBackground(activeColor); - label.setForeground(list.getSelectionForeground()); - } - } - else if(MainWindow.processingAlgorithNames[1].equals(value)) { - if(entropy_coloring) { - p.setBackground(activeColor); - label.setForeground(list.getSelectionForeground()); - } - } - else if(MainWindow.processingAlgorithNames[2].equals(value)) { - if(offset_coloring) { - p.setBackground(activeColor); - label.setForeground(list.getSelectionForeground()); - } - } - else if(MainWindow.processingAlgorithNames[3].equals(value)) { - if(rainbow_palette) { - p.setBackground(activeColor); - label.setForeground(list.getSelectionForeground()); - } - } - else if(MainWindow.processingAlgorithNames[4].equals(value)) { - if(greyscale_coloring) { - p.setBackground(activeColor); - label.setForeground(list.getSelectionForeground()); - } - } - else if(MainWindow.processingAlgorithNames[5].equals(value)) { - if(contour_coloring) { - p.setBackground(activeColor); - label.setForeground(list.getSelectionForeground()); - } - } - else if(MainWindow.processingAlgorithNames[6].equals(value)) { - if(bump_mapping) { - p.setBackground(activeColor); - label.setForeground(list.getSelectionForeground()); - } - } - else if(MainWindow.processingAlgorithNames[7].equals(value)) { - if(light) { - p.setBackground(activeColor); - label.setForeground(list.getSelectionForeground()); - } - } - - if(isSelected) { - p.setBackground(list.getSelectionBackground()); - label.setForeground(list.getSelectionForeground()); - } - return p; - } - }); - - JScrollPane scroll_pane = new JScrollPane(list); - scroll_pane.setPreferredSize(new Dimension(440, 180)); - JPanel text = new JPanel(); - text.setBackground(MainWindow.bg_color); - text.setLayout(new GridLayout(4, 1)); - text.setPreferredSize(new Dimension(440, 120)); - - JPanel p1 = new JPanel(); - p1.setLayout(new FlowLayout(FlowLayout.LEFT)); - p1.setBackground(MainWindow.bg_color); - p1.add(new JLabel("Drag and drop any processing algorithm to change its execution order.")); - - text.add(p1); - - JPanel p2 = new JPanel(); - p2.setLayout(new FlowLayout(FlowLayout.LEFT)); - p2.setBackground(MainWindow.bg_color); - p2.add(new JLabel("Smoothing, Distance Estimation, Orbit Traps, Statistical Coloring,")); - text.add(p2); - - JPanel p4 = new JPanel(); - p4.setLayout(new FlowLayout(FlowLayout.LEFT)); - p4.setBackground(MainWindow.bg_color); - p4.add(new JLabel("and Histogram Coloring are always performed first.")); - text.add(p4); - - JLabel color = new JLabel(); - color.setPreferredSize(new Dimension(22, 22)); - color.setOpaque(true); - color.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); - color.setBackground(activeColor); - - JPanel p3 = new JPanel(); - p3.setLayout(new FlowLayout(FlowLayout.LEFT)); - p3.setBackground(MainWindow.bg_color); - p3.add(color); - p3.add(new JLabel(": Active Processing Algorithms")); - - text.add(p3); - - JPanel panel = new JPanel(); - panel.setBackground(MainWindow.bg_color); - panel.setPreferredSize(new Dimension(480, 340)); - panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Processing Order", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); - - panel.add(text); - panel.add(scroll_pane); - - JPanel buttons = new JPanel(); - - buttons.setLayout(new FlowLayout()); - buttons.setBackground(MainWindow.bg_color); - - JButton ok = new JButton("Ok"); - getRootPane().setDefaultButton(ok); - ok.setFocusable(false); - ok.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - - ptra2.setProcessingOrder(getProcessingOrder()); - ptra2.setEnabled(true); - dispose(); - - } - - }); - - buttons.add(ok); - - JButton cancel = new JButton("Cancel"); - cancel.setFocusable(false); - cancel.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - - ptra2.setEnabled(true); - dispose(); - - } - }); - - buttons.add(cancel); - - RoundedPanel round_panel = new RoundedPanel(true, true, true, 15); - round_panel.setBackground(MainWindow.bg_color); - round_panel.setPreferredSize(new Dimension(510, 400)); - round_panel.setLayout(new GridBagLayout()); - - GridBagConstraints con = new GridBagConstraints(); - - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 0; - - round_panel.add(panel, con); - - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 1; - - round_panel.add(buttons, con); - - JPanel main_panel = new JPanel(); - main_panel.setLayout(new GridBagLayout()); - con.fill = GridBagConstraints.CENTER; - con.gridx = 0; - con.gridy = 0; - main_panel.add(round_panel, con); - - JScrollPane scrollPane = new JScrollPane(main_panel); - add(scrollPane); - - setVisible(true); - } - - private ImageIcon getIcon(String path) { - - return new ImageIcon(getClass().getResource(path)); - - } - - public int[] getProcessingOrder() { - - for(int i = 0; i < processing_order.length; i++) { - String name = list.getModel().getElementAt(i); - for(int j = 0; j < MainWindow.processingAlgorithNames.length; j++) { - if(MainWindow.processingAlgorithNames[j].equals(name)) { - processing_order[i] = j; - break; - } - } - } - - return processing_order; - } - -} +/* + * Copyright (C) 2020 kaloch + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package fractalzoomer.gui; + +import fractalzoomer.main.MainWindow; + +import javax.swing.*; +import javax.swing.border.EtchedBorder; +import javax.swing.border.TitledBorder; +import java.awt.*; +import java.awt.event.*; + +/** + * + * @author kaloch + */ +public class ProcessingOrderingFrame extends JFrame { + + private static final long serialVersionUID = -1756185420359636585L; + private MainWindow ptra2; + private JList list; + private int[] processing_order; + private Color activeColor; + + public ProcessingOrderingFrame(MainWindow ptra, int[] processing_order, final boolean fake_distance_estimation, final boolean entropy_coloring, final boolean offset_coloring, final boolean rainbow_palette, final boolean greyscale_coloring, final boolean contour_coloring, final boolean bump_mapping, final boolean light) { + + super(); + + ptra2 = ptra; + + this.processing_order = processing_order; + + activeColor = new Color(185, 223, 147); + + ptra2.setEnabled(false); + int custom_palette_window_width = 580; + int custom_palette_window_height = 480; + setTitle("Processing Order"); + setIconImage(getIcon("/fractalzoomer/icons/list.png").getImage()); + + setSize(custom_palette_window_width, custom_palette_window_height); + setLocation((int) (ptra2.getLocation().getX() + ptra2.getSize().getWidth() / 2) - (custom_palette_window_width / 2), (int) (ptra2.getLocation().getY() + ptra2.getSize().getHeight() / 2) - (custom_palette_window_height / 2)); + + addWindowListener(new WindowAdapter() { + + @Override + public void windowClosing(WindowEvent e) { + + ptra2.setEnabled(true); + dispose(); + + } + }); + + DefaultListModel m = new DefaultListModel<>(); + for(int i = 0; i < processing_order.length; i++) { + m.addElement("" + MainWindow.processingAlgorithNames[processing_order[i]]); + } + list = new JList<>(m); + list.getSelectionModel().setSelectionMode( + ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + list.setTransferHandler(new ListItemTransferHandler()); + + list.getInputMap( JComponent.WHEN_FOCUSED ).getParent().remove( KeyStroke.getKeyStroke( KeyEvent.VK_X, InputEvent.CTRL_DOWN_MASK ) ); + list.getInputMap( JComponent.WHEN_FOCUSED ).getParent().remove( KeyStroke.getKeyStroke( KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK ) ); + list.getInputMap( JComponent.WHEN_FOCUSED ).getParent().remove( KeyStroke.getKeyStroke( KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK ) ); + + list.setDropMode(DropMode.INSERT); + list.setDragEnabled(true); + //http://java-swing-tips.blogspot.jp/2008/10/rubber-band-selection-drag-and-drop.html + list.setLayoutOrientation(JList.VERTICAL); + list.setVisibleRowCount(0); + //list.setFixedCellWidth(80); + //list.setFixedCellHeight(80); + list.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + + list.setCellRenderer(new ListCellRenderer() { + private final JPanel p = new JPanel(new BorderLayout()); + private final JLabel icon = new JLabel((Icon)null, JLabel.LEFT); + private final JLabel label = new JLabel("", JLabel.LEFT); + + @Override + public Component getListCellRendererComponent( + JList list, String value, int index, + boolean isSelected, boolean cellHasFocus) { + + if(MainWindow.processingAlgorithNames[0].equals(value)) { + icon.setIcon(getIcon("/fractalzoomer/icons/fake_distance_estimation.png")); + } + else if(MainWindow.processingAlgorithNames[1].equals(value)) { + icon.setIcon(getIcon("/fractalzoomer/icons/entropy_coloring.png")); + } + else if(MainWindow.processingAlgorithNames[2].equals(value)) { + icon.setIcon(getIcon("/fractalzoomer/icons/offset_coloring.png")); + } + else if(MainWindow.processingAlgorithNames[3].equals(value)) { + icon.setIcon(getIcon("/fractalzoomer/icons/rainbow_palette.png")); + } + else if(MainWindow.processingAlgorithNames[4].equals(value)) { + icon.setIcon(getIcon("/fractalzoomer/icons/greyscale_coloring.png")); + } + else if(MainWindow.processingAlgorithNames[5].equals(value)) { + icon.setIcon(getIcon("/fractalzoomer/icons/contour_coloring.png")); + } + else if(MainWindow.processingAlgorithNames[6].equals(value)) { + icon.setIcon(getIcon("/fractalzoomer/icons/bump_map.png")); + } + else if(MainWindow.processingAlgorithNames[7].equals(value)) { + icon.setIcon(getIcon("/fractalzoomer/icons/light.png")); + } + + label.setText(value); + label.setForeground(list.getForeground()); + p.add(icon); + p.add(label, BorderLayout.EAST); + p.setBackground(list.getBackground()); + + if(MainWindow.processingAlgorithNames[0].equals(value)) { + if(fake_distance_estimation) { + p.setBackground(activeColor); + label.setForeground(list.getSelectionForeground()); + } + } + else if(MainWindow.processingAlgorithNames[1].equals(value)) { + if(entropy_coloring) { + p.setBackground(activeColor); + label.setForeground(list.getSelectionForeground()); + } + } + else if(MainWindow.processingAlgorithNames[2].equals(value)) { + if(offset_coloring) { + p.setBackground(activeColor); + label.setForeground(list.getSelectionForeground()); + } + } + else if(MainWindow.processingAlgorithNames[3].equals(value)) { + if(rainbow_palette) { + p.setBackground(activeColor); + label.setForeground(list.getSelectionForeground()); + } + } + else if(MainWindow.processingAlgorithNames[4].equals(value)) { + if(greyscale_coloring) { + p.setBackground(activeColor); + label.setForeground(list.getSelectionForeground()); + } + } + else if(MainWindow.processingAlgorithNames[5].equals(value)) { + if(contour_coloring) { + p.setBackground(activeColor); + label.setForeground(list.getSelectionForeground()); + } + } + else if(MainWindow.processingAlgorithNames[6].equals(value)) { + if(bump_mapping) { + p.setBackground(activeColor); + label.setForeground(list.getSelectionForeground()); + } + } + else if(MainWindow.processingAlgorithNames[7].equals(value)) { + if(light) { + p.setBackground(activeColor); + label.setForeground(list.getSelectionForeground()); + } + } + + if(isSelected) { + p.setBackground(list.getSelectionBackground()); + label.setForeground(list.getSelectionForeground()); + } + return p; + } + }); + + JScrollPane scroll_pane = new JScrollPane(list); + scroll_pane.setPreferredSize(new Dimension(440, 180)); + JPanel text = new JPanel(); + text.setBackground(MainWindow.bg_color); + text.setLayout(new GridLayout(4, 1)); + text.setPreferredSize(new Dimension(440, 120)); + + JPanel p1 = new JPanel(); + p1.setLayout(new FlowLayout(FlowLayout.LEFT)); + p1.setBackground(MainWindow.bg_color); + p1.add(new JLabel("Drag and drop any processing algorithm to change its execution order.")); + + text.add(p1); + + JPanel p2 = new JPanel(); + p2.setLayout(new FlowLayout(FlowLayout.LEFT)); + p2.setBackground(MainWindow.bg_color); + p2.add(new JLabel("Smoothing, Distance Estimation, Orbit Traps, Statistical Coloring,")); + text.add(p2); + + JPanel p4 = new JPanel(); + p4.setLayout(new FlowLayout(FlowLayout.LEFT)); + p4.setBackground(MainWindow.bg_color); + p4.add(new JLabel("and Histogram Coloring are always performed first.")); + text.add(p4); + + JLabel color = new JLabel(); + color.setPreferredSize(new Dimension(22, 22)); + color.setOpaque(true); + color.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); + color.setBackground(activeColor); + + JPanel p3 = new JPanel(); + p3.setLayout(new FlowLayout(FlowLayout.LEFT)); + p3.setBackground(MainWindow.bg_color); + p3.add(color); + p3.add(new JLabel(": Active Processing Algorithms")); + + text.add(p3); + + JPanel panel = new JPanel(); + panel.setBackground(MainWindow.bg_color); + panel.setPreferredSize(new Dimension(480, 340)); + panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()), "Processing Order", TitledBorder.DEFAULT_POSITION, TitledBorder.DEFAULT_POSITION)); + + panel.add(text); + panel.add(scroll_pane); + + JPanel buttons = new JPanel(); + + buttons.setLayout(new FlowLayout()); + buttons.setBackground(MainWindow.bg_color); + + JButton ok = new JButton("Ok"); + getRootPane().setDefaultButton(ok); + ok.setFocusable(false); + ok.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + ptra2.setProcessingOrder(getProcessingOrder()); + ptra2.setEnabled(true); + dispose(); + + } + + }); + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Ok"); + getRootPane().getActionMap().put("Ok", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + ok.doClick(); + } + }); + + buttons.add(ok); + + JButton cancel = new JButton("Cancel"); + cancel.setFocusable(false); + cancel.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + ptra2.setEnabled(true); + dispose(); + + } + }); + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); + getRootPane().getActionMap().put("Cancel", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + cancel.doClick(); + } + }); + + buttons.add(cancel); + + RoundedPanel round_panel = new RoundedPanel(true, true, true, 15); + round_panel.setBackground(MainWindow.bg_color); + round_panel.setPreferredSize(new Dimension(510, 400)); + round_panel.setLayout(new GridBagLayout()); + + GridBagConstraints con = new GridBagConstraints(); + + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 0; + + round_panel.add(panel, con); + + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 1; + + round_panel.add(buttons, con); + + JPanel main_panel = new JPanel(); + main_panel.setLayout(new GridBagLayout()); + con.fill = GridBagConstraints.CENTER; + con.gridx = 0; + con.gridy = 0; + main_panel.add(round_panel, con); + + JScrollPane scrollPane = new JScrollPane(main_panel); + add(scrollPane); + + setVisible(true); + } + + private ImageIcon getIcon(String path) { + + return new ImageIcon(getClass().getResource(path)); + + } + + public int[] getProcessingOrder() { + + for(int i = 0; i < processing_order.length; i++) { + String name = list.getModel().getElementAt(i); + for(int j = 0; j < MainWindow.processingAlgorithNames.length; j++) { + if(MainWindow.processingAlgorithNames[j].equals(name)) { + processing_order[i] = j; + break; + } + } + } + + return processing_order; + } + +} diff --git a/src/fractalzoomer/gui/StatisticsColoringFrame.java b/src/fractalzoomer/gui/StatisticsColoringFrame.java index c504706c5..ffa3aa23f 100644 --- a/src/fractalzoomer/gui/StatisticsColoringFrame.java +++ b/src/fractalzoomer/gui/StatisticsColoringFrame.java @@ -1485,6 +1485,17 @@ else if(twinLamps.isSelected()) { }); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Ok"); + getRootPane().getActionMap().put("Ok", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + ok.doClick(); + } + }); + buttons.add(ok); JButton cancel = new JButton("Cancel"); @@ -1500,6 +1511,17 @@ public void actionPerformed(ActionEvent e) { } }); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); + getRootPane().getActionMap().put("Cancel", new AbstractAction() + { + + public void actionPerformed(ActionEvent e) + { + cancel.doClick(); + } + }); + buttons.add(cancel); RoundedPanel round_panel = new RoundedPanel(true, true, true, 15); diff --git a/src/fractalzoomer/help/Fractal_Zoomer_Help.chm b/src/fractalzoomer/help/Fractal_Zoomer_Help.chm index 897358fdd444aca624f696543bd401b847737989..44970cc94ed3ee3cb23ebca8c92c59e8b3e9c077 100644 GIT binary patch delta 6413 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 bvs?j(vs?nVvs?qG"; + if(s.ots.skipTrapCheckForIterations > 0) { + overview += tab + "Skip Trap Check for the first iterations = " + s.ots.skipTrapCheckForIterations + "
"; + } + if (s.ots.trapType != Constants.SUPER_FORMULA_ORBIT_TRAP && s.ots.trapType != Constants.ATOM_DOMAIN_TRAP && s.ots.trapType != Constants.SQUARE_ATOM_DOMAIN_TRAP && s.ots.trapType != Constants.RHOMBUS_ATOM_DOMAIN_TRAP && s.ots.trapType != Constants.NNORM_ATOM_DOMAIN_TRAP && s.ots.trapType != Constants.GOLDEN_RATIO_SPIRAL_TRAP && s.ots.trapType != Constants.STALKS_TRAP) { overview += tab + "Length = " + s.ots.trapLength + "
"; } @@ -1446,7 +1450,7 @@ else if (s.sts.statisticGroup == 4){ } if (s.ots.trapType != Constants.IMAGE_TRAP) { - overview += tab + "Intesity = " + s.ots.trapIntensity + "
"; + overview += tab + "Intensity = " + s.ots.trapIntensity + "
"; overview += tab + "Height Function = " + Constants.trapHeightAlgorithms[s.ots.trapHeightFunction] + "
"; if(s.ots.invertTrapHeight) { diff --git a/src/fractalzoomer/main/Constants.java b/src/fractalzoomer/main/Constants.java index 1ea83ed85..cf6e80dab 100644 --- a/src/fractalzoomer/main/Constants.java +++ b/src/fractalzoomer/main/Constants.java @@ -25,7 +25,7 @@ * @author hrkalona2 */ public interface Constants { - public static final int VERSION = 1081; + public static final int VERSION = 1082; public static final boolean beta = false; public static final int FAST_JULIA_IMAGE_SIZE = 252; public static final int TOTAL_PALETTES = 37; diff --git a/src/fractalzoomer/main/app_settings/OrbitTrapSettings.java b/src/fractalzoomer/main/app_settings/OrbitTrapSettings.java index 3828e72eb..2ca8a94df 100644 --- a/src/fractalzoomer/main/app_settings/OrbitTrapSettings.java +++ b/src/fractalzoomer/main/app_settings/OrbitTrapSettings.java @@ -63,6 +63,8 @@ public class OrbitTrapSettings { public double sfn3; public double sfa; public double sfb; + + public int skipTrapCheckForIterations; public OrbitTrapSettings() { @@ -110,6 +112,7 @@ public OrbitTrapSettings() { showOnlyTraps = false; background = Color.BLACK; + skipTrapCheckForIterations = 0; } diff --git a/src/fractalzoomer/settings/SettingsJulia1081.java b/src/fractalzoomer/settings/SettingsJulia1081.java index 45fc5ff8d..cb841edec 100644 --- a/src/fractalzoomer/settings/SettingsJulia1081.java +++ b/src/fractalzoomer/settings/SettingsJulia1081.java @@ -4,7 +4,7 @@ import java.io.Serializable; -public class SettingsJulia1081 extends SettingsFractals1080 implements Serializable { +public class SettingsJulia1081 extends SettingsFractals1081 implements Serializable { private static final long serialVersionUID = 80132942389L; private double xJuliaCenter; private double yJuliaCenter;