Commit #1 ;---]

This commit is contained in:
Bandie Yip Kojote
2017-08-10 14:40:45 +02:00
parent 0d5cee60ef
commit 73281c7926
79 changed files with 11591 additions and 0 deletions

View File

@ -0,0 +1,112 @@
/*
* Copyright (c) 2017, bandie
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package org.bandie.circleart;
import javafx.geometry.Insets;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
/**
*
* @author bandie
*/
public abstract class About {
static protected void show(Stage stage) {
boolean fscr = stage.isFullScreen();
String progname = "CircleArt";
String copyright = "\n\u00a9 2017 by Bandie Canis <bandie@bandie.org>.";
String licensetext
= "CirceArt is licensed under BSD-2-Clause:\n\n\n"
+ "Copyright \u00a9 2017, Bandie Canis"
+ "\nAll rights reserved.\n\n"
+ "Redistribution and use in source and binary forms, with or without modification, \n"
+ "are permitted provided that the following conditions are met:\n\n"
+ "1.\tRedistributions of source code must retain the above copyright notice, \n"
+ "\tthis list of conditions and the following disclaimer.\n"
+ "2.\tRedistributions in binary form must reproduce the above copyright notice, \n"
+ "\tthis list of conditions and the following disclaimer in the documentation \n"
+ "\tand/or other materials provided with the distribution.\n\n"
+ "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
ImageView imgBandie = new ImageView(About.class.getResource("BandieCanis.gif").toString());
GridPane gp = new GridPane();
BorderPane bp = new BorderPane();
Label prog = new Label(progname);
prog.setStyle("-fx-font-weight: bold");
Label copy = new Label(copyright);
TextArea license = new TextArea(licensetext);
license.setEditable(false);
license.setWrapText(true);
gp.setHgap(20.0);
gp.addColumn(0, prog, copy);
gp.addColumn(1, imgBandie);
gp.setPadding(new Insets(20, 20, 20, 20));
bp.setTop(gp);
bp.setBottom(license);
Alert alert = new Alert(AlertType.INFORMATION);
alert.setHeight(630.0);
alert.setWidth(680.0);
alert.setResizable(false);
alert.setTitle("About CircleArt");
alert.setHeaderText("About CircleArt");
alert.getDialogPane().setContent(bp);
/*
alert.widthProperty().addListener((ObservableValue<? extends Number> ov, Number t, Number t1) -> {
System.out.println("Width:" + ov.getValue());
});
alert.heightProperty().addListener((ObservableValue<? extends Number> ov, Number t, Number t1) -> {
System.out.println("Height:" + ov.getValue());
});
*/
if (fscr) {
stage.setFullScreen(false);
}
alert.showAndWait();
if (fscr) {
stage.setFullScreen(true);
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 KiB

View File

@ -0,0 +1,65 @@
/*
* Copyright (c) 2017, bandie
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package org.bandie.circleart;
import java.util.Locale;
import java.util.ResourceBundle;
import javafx.animation.PauseTransition;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.util.Duration;
/**
*
* @author bandie
*/
public class CircleArt extends Application {
static final Locale CURRENTLOCALE = Locale.getDefault();
static final ResourceBundle MSGS = ResourceBundle.getBundle("org/bandie/circleart/msgs", CURRENTLOCALE);
@Override
public void start(Stage stage) {
Stage cagStage = new Stage();
CircleArtGUI cag = new CircleArtGUI();
Splash.start();
PauseTransition delay = new PauseTransition(Duration.seconds(4));
delay.setOnFinished(ev -> {
Splash.stop();
cagStage.requestFocus();
});
delay.play();
cag.start(cagStage);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

View File

@ -0,0 +1,209 @@
/*
* Copyright (c) 2017, bandie
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package org.bandie.circleart;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.SeparatorMenuItem;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import static org.bandie.circleart.CircleArt.MSGS;
/**
*
* @author bandie
*/
public class CircleArtGUI extends Application {
private Stage stageSettingsGUI;
private SettingsGUI sg;
static final Pen P = new Pen();
@Override
public void start(Stage stage) {
final KeyCodeCombination kcNew = new KeyCodeCombination(KeyCode.N, KeyCombination.CONTROL_DOWN);
final KeyCodeCombination kcSave = new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_DOWN);
final KeyCodeCombination kcQuit = new KeyCodeCombination(KeyCode.Q, KeyCombination.CONTROL_DOWN);
final KeyCodeCombination kcFullscreen = new KeyCodeCombination(KeyCode.F, KeyCombination.CONTROL_DOWN);
BorderPane root = new BorderPane();
Pane drawPane = new Pane();
ScrollPane scrollPane = new ScrollPane(drawPane);
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
GridPane statusPane = new GridPane();
//MENU - File
MenuItem menuIFNew = new MenuItem(MSGS.getString("NEW"));
menuIFNew.setAccelerator(kcNew);
menuIFNew.setOnAction((ActionEvent t) -> {
drawPane.getChildren().clear();
});
MenuItem menuIFSave = new MenuItem(MSGS.getString("SAVE"));
menuIFSave.setAccelerator(kcSave);
menuIFSave.setOnAction((ActionEvent t) -> {
FileUtil.saveFile(stage, drawPane);
});
MenuItem menuIFQuit = new MenuItem(MSGS.getString("QUIT"));
menuIFQuit.setAccelerator(kcQuit);
menuIFQuit.setOnAction(t -> {
if (stageSettingsGUI != null) {
stageSettingsGUI.close();
}
stage.close();
});
Menu menuFile = new Menu(MSGS.getString("FILE"));
menuFile.getItems().addAll(menuIFNew, menuIFSave, new SeparatorMenuItem(), menuIFQuit);
//MENU - View
MenuItem menuIVFullscreen = new MenuItem(MSGS.getString("FULLSCREEN"));
menuIVFullscreen.setAccelerator(kcFullscreen);
menuIVFullscreen.setOnAction((ActionEvent t) -> {
toggleFullscreen(stage);
});
Menu menuView = new Menu(MSGS.getString("VIEW"));
menuView.getItems().addAll(menuIVFullscreen);
//MENU - Tools
MenuItem menuITSettings = new MenuItem(MSGS.getString("SETTINGS"));
menuITSettings.setOnAction(t -> {
sg = new SettingsGUI();
stageSettingsGUI = new Stage();
if(stage.isFullScreen())
toggleFullscreen(stage);
sg.start(stageSettingsGUI);
});
Menu menuTools = new Menu(MSGS.getString("TOOLS"));
menuTools.getItems().addAll(menuITSettings);
//MENU - Help
MenuItem menuIHAbout = new MenuItem(MSGS.getString("ABOUT"));
menuIHAbout.setOnAction((ActionEvent t) -> {
About.show(stage);
});
Menu menuHelp = new Menu(MSGS.getString("HELP"));
menuHelp.getItems().addAll(menuIHAbout);
//MENUBAR
MenuBar menu = new MenuBar();
menu.getMenus().addAll(menuFile, menuView, menuTools, menuHelp);
//Statusbar
Label lHelp = new Label(MSGS.getString("HELP_DRAWING"));
lHelp.setFont(new Font(18));
Label lStatus = new Label(MSGS.getString("DRAWING_OFF"));
lStatus.setFont(new Font(18));
lStatus.setTextFill(Color.DARKRED);
statusPane.setHgap(30);
statusPane.addColumn(1, lStatus);
statusPane.addColumn(2, lHelp);
root.setTop(menu);
root.setBottom(statusPane);
root.setCenter(scrollPane);
root.setFocusTraversable(true);
root.addEventHandler(MouseEvent.MOUSE_MOVED, (MouseEvent t) -> {
if (P.isOn()) {
double x = t.getSceneX();
double y = t.getSceneY();
drawPane.getChildren().add(new Circle(x, y,
P.getSize(x, y),
P.getColor(x, y)
)
);
}
});
Scene scene = new Scene(root);
root.addEventHandler(KeyEvent.KEY_PRESSED, (KeyEvent t) -> {
if (t.getCode() == KeyCode.D) {
if (P.toggle()) {
lStatus.setTextFill(Color.DARKGREEN);
lStatus.setText(MSGS.getString("DRAWING_ON"));
} else {
lStatus.setTextFill(Color.DARKRED);
lStatus.setText(MSGS.getString("DRAWING_OFF"));
}
}
});
stage.setOnCloseRequest(eh -> {
Platform.setImplicitExit(true);
Platform.exit();
});
stage.setWidth(800);
stage.setHeight(600);
stage.setScene(scene);
stage.setTitle("CircleArt");
stage.show();
stage.requestFocus();
scrollPane.requestFocus();
}
// Fullscreen toggle
private void toggleFullscreen(Stage stage) {
stage.setFullScreen(!stage.isFullScreen());
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

View File

@ -0,0 +1,106 @@
/*
* Copyright (c) 2017, bandie
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package org.bandie.circleart;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Paths;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.SnapshotParameters;
import javafx.scene.control.Alert;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.Pane;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javax.imageio.ImageIO;
/**
*
* @author bandie
*/
public abstract class FileUtil {
/**
*
* @param stage The main stage
* @param drawPane The pane which needs to be saved.
*/
static protected void saveFile(Stage stage, Pane drawPane) {
//FileChooser
FileChooser fc = new FileChooser();
fc.setTitle(CircleArt.MSGS.getString("SAVE_IMG"));
fc.getExtensionFilters().add(new FileChooser.ExtensionFilter("PNG File", "*.png"));
//Prevent overwriting older files
File initFile = new File("CircleArt.png");
long i = 0;
while (initFile.exists()) {
i++;
initFile = new File("CircleArt_" + i + ".png");
}
fc.setInitialFileName(initFile.getName());
File file = fc.showSaveDialog(stage);
if (file != null) {
//Screenshot
WritableImage wi = drawPane.snapshot(new SnapshotParameters(), null);
BufferedImage bi = SwingFXUtils.fromFXImage(wi, null);
try {
//Check Permissions
File path = Paths.get(file.getAbsolutePath()).getParent().toFile();
if (!path.canWrite()) {
throw new FileNotFoundException(file.getAbsoluteFile() + " (Permission denied)");
}
ImageIO.write(bi, "png", file);
} catch (IOException e) {
boolean fscr = stage.isFullScreen();
if (fscr) {
stage.setFullScreen(false);
}
Alert a = new Alert(Alert.AlertType.ERROR);
a.setTitle("Error");
a.setHeaderText("Error1!1");
a.setContentText(e.getLocalizedMessage());
a.showAndWait();
if (fscr) {
stage.setFullScreen(true);
}
}
}
}
}

View File

@ -0,0 +1,52 @@
/*
* Copyright (c) 2017, bandie
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package org.bandie.circleart;
/**
*
* @author bandie
*/
public abstract class ObjectMath {
/**
*
* @param x Mouse x
* @param y Mouse y
* @param mode Color mode
* @return 0 &gt;= color value =&lt; 255
*/
static protected int calcColor(double x, double y, Integer mode) {
switch (mode) {
case 1:
return Math.abs(((int) x - (int) y)) % 256;
case 2:
return ((int) x * (int) y) % 256;
default:
return ((int) x + (int) y) % 256;
}
}
}

View File

@ -0,0 +1,147 @@
/*
* Copyright (c) 2017, bandie
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package org.bandie.circleart;
import java.util.ArrayList;
import javafx.scene.paint.Color;
/**
*
* @author bandie
*/
public class Pen {
private boolean on;
private int[] colorMode;
private int sizeMode;
private int distance;
private boolean isUsingY;
Pen() {
this.on = false;
this.colorMode = new int[3];
this.colorMode[0] = 0;
this.colorMode[1] = 1;
this.colorMode[2] = 2;
this.sizeMode = 200;
this.distance = 100;
}
public enum RGB{
RED,
GREEN,
BLUE;
}
/**
*
* @return Shows if the pen is enabled or not
*/
protected boolean isOn() {
return on;
}
/**
*
* @return Toggled value of the pen
*/
protected boolean toggle() {
return this.on = !on;
}
protected void setColorMode(RGB rgb, int mode) {
this.colorMode[rgb.ordinal()] = mode;
}
protected Color getColor(double x, double y) {
return Color.rgb(
ObjectMath.calcColor(x, y, colorMode[0]),
ObjectMath.calcColor(x, y, colorMode[1]),
ObjectMath.calcColor(x, y, colorMode[2])
);
}
protected double getSize(double x, double y) {
if (this.isUsingY) {
return Math.abs(Math.sin(y / distance)) * sizeMode;
} else {
return Math.abs(Math.sin(x / distance)) * sizeMode;
}
}
/**
* @return the colorMode
*/
public int[] getColorMode() {
return colorMode;
}
/**
* @return the sizeMode
*/
public int getSizeMode() {
return sizeMode;
}
/**
* @param sizeMode the sizeMode to set
*/
public void setSizeMode(int sizeMode) {
this.sizeMode = sizeMode;
}
/**
* @return the isUsingY
*/
public boolean isIsUsingY() {
return isUsingY;
}
/**
* @param isUsingY the isUsingY to set
*/
public void setIsUsingY(boolean isUsingY) {
this.isUsingY = isUsingY;
}
/**
* @return the distance
*/
public int getDistance() {
return distance;
}
/**
* @param distance the distance to set
*/
public void setDistance(int distance) {
this.distance = distance;
}
}

View File

@ -0,0 +1,239 @@
/*
* Copyright (c) 2017, bandie
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package org.bandie.circleart;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.Slider;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
/**
*
* @author bandie
*/
public class SettingsGUI extends Application {
public void start(Stage stage) {
//stage.initOwner(CircleArtGUI.STAGE);
GridPane gp = new GridPane();
BorderPane bp = new BorderPane();
gp.setMaxSize(640, 480);
//Circle Size
Label lSize = new Label(CircleArt.MSGS.getString("SETTINGS_CIRC_SIZE"));
lSize.setStyle("-fx-font-weight: bold");
Label lSizePX = new Label("px");
Slider sSize = new Slider();
TextField tfSize = new TextField(Integer.toString(CircleArtGUI.P.getSizeMode()));
tfSize.setPrefColumnCount(2);
tfSize.textProperty().addListener((ov, t, t1) -> {
try {
CircleArtGUI.P.setSizeMode(Integer.parseInt(ov.getValue()));
sSize.setValue(Integer.parseInt(ov.getValue()));
} catch (NumberFormatException e) {
}
});
sSize.setMax(600);
sSize.setMin(0);
sSize.setShowTickLabels(true);
sSize.setShowTickMarks(true);
sSize.setMajorTickUnit(200);
sSize.setMinorTickCount(100);
sSize.setValue(CircleArtGUI.P.getSizeMode());
sSize.valueProperty().addListener(cl -> {
CircleArtGUI.P.setSizeMode((int) sSize.getValue());
tfSize.setText(Integer.toString(CircleArtGUI.P.getSizeMode()));
});
//Circle sin rythm
Label lDistance = new Label(CircleArt.MSGS.getString("SETTINGS_DIST"));
lDistance.setStyle("-fx-font-weight: bold");
Label lDistancePX = new Label("px");
Slider sDistance = new Slider();
TextField tfDistance = new TextField(Integer.toString(CircleArtGUI.P.getDistance()));
tfDistance.setPrefColumnCount(2);
tfDistance.textProperty().addListener((ov, t, t1) -> {
try {
CircleArtGUI.P.setDistance(Integer.parseInt(ov.getValue()));
sDistance.setValue(Integer.parseInt(ov.getValue()));
} catch (NumberFormatException e) {
}
});
sDistance.setMax(600);
sDistance.setMin(0);
sDistance.setShowTickLabels(true);
sDistance.setShowTickMarks(true);
sDistance.setMajorTickUnit(200);
sDistance.setMinorTickCount(100);
sDistance.setValue(CircleArtGUI.P.getDistance());
sDistance.valueProperty().addListener(cl -> {
CircleArtGUI.P.setDistance((int) sDistance.getValue());
tfDistance.setText(Integer.toString(CircleArtGUI.P.getDistance()));
});
//Y-Switch
Label lDir=new Label(CircleArt.MSGS.getString("SETTINGS_DIR"));
lDir.setStyle("-fx-font-weight: bold");
CheckBox cbY = new CheckBox(CircleArt.MSGS.getString("SETTINGS_Y"));
cbY.setSelected(CircleArtGUI.P.isIsUsingY());
cbY.setOnAction(eh -> {
CircleArtGUI.P.setIsUsingY(cbY.isSelected());
});
//COLORS
Label lColor = new Label(CircleArt.MSGS.getString("SETTINGS_COLOR"));
lColor.setStyle("-fx-font-weight: bold");
Label lRed = new Label(CircleArt.MSGS.getString("RED"));
lRed.setTextFill(Color.DARKRED);
Label lGreen = new Label(CircleArt.MSGS.getString("GREEN"));
lGreen.setTextFill(Color.DARKGREEN);
Label lBlue = new Label(CircleArt.MSGS.getString("BLUE"));
lBlue.setTextFill(Color.DARKBLUE);
int[] cm = CircleArtGUI.P.getColorMode();
//Red
ToggleGroup red = new ToggleGroup();
RadioButton[] r = new RadioButton[3];
r[0] = new RadioButton("(x+y) mod 256");
r[1] = new RadioButton("|x-y| mod 256");
r[2] = new RadioButton("x*y mod 256");
r[cm[0]].setSelected(true);
for (int i = 0; i < 3; i++) {
r[i].setToggleGroup(red);
}
r[0].setOnAction(eh -> {
CircleArtGUI.P.setColorMode(Pen.RGB.RED, 0);
});
r[1].setOnAction(eh -> {
CircleArtGUI.P.setColorMode(Pen.RGB.RED, 1);
});
r[2].setOnAction(eh -> {
CircleArtGUI.P.setColorMode(Pen.RGB.RED, 2);
});
//Green
ToggleGroup green = new ToggleGroup();
RadioButton[] g = new RadioButton[3];
g[0] = new RadioButton("(x+y) mod 256");
g[1] = new RadioButton("|x-y| mod 256");
g[2] = new RadioButton("x*y mod 256");
g[cm[1]].setSelected(true);
for (int i = 0; i < 3; i++) {
g[i].setToggleGroup(green);
}
g[0].setOnAction(eh -> {
CircleArtGUI.P.setColorMode(Pen.RGB.GREEN, 0);
});
g[1].setOnAction(eh -> {
CircleArtGUI.P.setColorMode(Pen.RGB.GREEN, 1);
});
g[2].setOnAction(eh -> {
CircleArtGUI.P.setColorMode(Pen.RGB.GREEN, 2);
});
//Blue
ToggleGroup blue = new ToggleGroup();
RadioButton[] b = new RadioButton[3];
b[0] = new RadioButton("(x+y) mod 256");
b[1] = new RadioButton("|x-y| mod 256");
b[2] = new RadioButton("x*y mod 256");
b[cm[2]].setSelected(true);
for (int i = 0; i < 3; i++) {
b[i].setToggleGroup(blue);
}
b[0].setOnAction(eh -> {
CircleArtGUI.P.setColorMode(Pen.RGB.BLUE, 0);
});
b[1].setOnAction(eh -> {
CircleArtGUI.P.setColorMode(Pen.RGB.BLUE, 1);
});
b[2].setOnAction(eh -> {
CircleArtGUI.P.setColorMode(Pen.RGB.BLUE, 2);
});
gp.setMinSize(320, 160);
gp.setVgap(10);
gp.setHgap(10);
//Size
gp.add(lSize, 0, 0);
gp.add(sSize, 0, 1);
gp.add(tfSize, 1, 1);
gp.add(lSizePX, 2, 1);
//Distance
gp.add(lDistance, 0, 2);
gp.add(sDistance, 0, 3);
gp.add(tfDistance, 1, 3);
gp.add(lDistancePX, 2, 3);
//Y-Switch
gp.add(lDir, 0, 4);
gp.add(cbY, 0, 5);
//RGB
gp.add(lColor, 0, 6);
gp.add(lRed, 0, 7);
gp.add(r[0], 0, 8);
gp.add(r[1], 1, 8);
gp.add(r[2], 2, 8);
gp.add(lGreen, 0, 9);
gp.add(g[0], 0, 10);
gp.add(g[1], 1, 10);
gp.add(g[2], 2, 10);
gp.add(lBlue, 0, 11);
gp.add(b[0], 0, 12);
gp.add(b[1], 1, 12);
gp.add(b[2], 2, 12);
bp.setCenter(gp);
bp.setPadding(new Insets(10));
Scene settings = new Scene(bp);
settings.addEventHandler(KeyEvent.KEY_PRESSED, eh -> {
if (eh.getCode() == KeyCode.ESCAPE) {
stage.close();
}
});
stage.setScene(settings);
stage.setTitle(CircleArt.MSGS.getString("SETTINGS_TITLE"));
stage.show();
}
}

View File

@ -0,0 +1,66 @@
/*
* Copyright (c) 2017, bandie
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package org.bandie.circleart;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
/**
*
* @author bandie
*/
public class Splash {
static final Stage STAGE = new Stage();
public static void start() {
STAGE.initStyle(StageStyle.UNDECORATED);
ImageView imgSplash = new ImageView(CircleArt.class.getResource("CircleArt_640.png").toString());
GridPane gp = new GridPane();
gp.add(imgSplash, 0, 0);
gp.setMaxSize(640, 480);
Scene splash = new Scene(gp);
Platform.runLater(() -> {
STAGE.setScene(splash);
STAGE.show();
});
}
public static void stop() {
STAGE.close();
}
}

View File

@ -0,0 +1,47 @@
# Copyright (c) 2017, bandie
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
FILE=File
QUIT=Quit
SAVE=Save
NEW=New
SAVE_IMG=Save Image
VIEW=View
FULLSCREEN=Fullscreen
TOOLS=Tools
SETTINGS=Settings
SETTINGS_TITLE=CircleArt \- Settings
SETTINGS_CIRC_SIZE=Max. circle size
SETTINGS_DIST=Distance
SETTINGS_DIR=Direction
SETTINGS_Y=Use y instead of x
SETTINGS_COLOR=Color settings
RED=Red
GREEN=Green
BLUE=Blue
HELP=Help
ABOUT=About
DRAWING_OFF=Status: Off
DRAWING_ON=Status: On
HELP_DRAWING=To switch on/off your pen, press D.

View File

@ -0,0 +1 @@
msgs_de_DE.properties

View File

@ -0,0 +1 @@
msgs_de_DE.properties

View File

@ -0,0 +1 @@
msgs_de_DE.properties

View File

@ -0,0 +1 @@
msgs_de_DE.properties

View File

@ -0,0 +1,47 @@
# Copyright (c) 2017, bandie
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
FILE=Datei
QUIT=Beenden
SAVE=Speichern
NEW=Neu
SAVE_IMG=Speichere Bild
VIEW=Ansicht
FULLSCREEN=Vollbild
TOOLS=Tools
SETTINGS=Einstellungen
SETTINGS_TITLE=CircleArt \- Einstellungen
SETTINGS_CIRC_SIZE=Max. Gr\u00f6\u00dfe der Kreise
SETTINGS_DIST=Distanz
SETTINGS_DIR=Richtung
SETTINGS_Y=Benutze y statt x
SETTINGS_COLOR=Farbeinstellungen
RED=Rot
GREEN=Gr\u00fcn
BLUE=Blau
HELP=Hilfe
ABOUT=\u00dcber
DRAWING_OFF=Status: Aus
DRAWING_ON=Status: An
HELP_DRAWING=Ein-/Ausschalten des Stiftes durch Dr\u00fccken von D.

View File

@ -0,0 +1 @@
msgs.properties

View File

@ -0,0 +1 @@
msgs.properties

View File

@ -0,0 +1 @@
msgs.properties

View File

@ -0,0 +1 @@
msgs_fr_FR.properties

View File

@ -0,0 +1 @@
msgs_fr_FR.properties

View File

@ -0,0 +1,47 @@
# Copyright (c) 2017, bandie
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
FILE=Ficher
QUIT=Quitter
SAVE=Sauvegarder
NEW=Nouveau
SAVE_IMG=Sauvegarder la peinture
VIEW=Vue
FULLSCREEN=Plein \u00e9cran
TOOLS=Outils
SETTINGS=R\u00e9glage
SETTINGS_TITLE=R\u00e9glage de CircleArt
SETTINGS_CIRC_SIZE=Maximum de les cercles
SETTINGS_DIST=Distance
SETTINGS_DIR=Direction
SETTINGS_Y=Utilise Y au lieu de X
SETTINGS_COLOR=R\u00e9glage de coleur
RED=Rouge
GREEN=Vert
BLUE=Bleu
HELP=Aider
ABOUT=\u00c0 propos de programme
DRAWING_OFF=Crayon: D\u00e9sactiv\u00e9
DRAWING_ON=Crayon: Allum\u00e9
HELP_DRAWING=Allum\u00e9/D\u00e9sactiv\u00e9 le crayon en appuyant sur la barre d'espacement.

View File

@ -0,0 +1 @@
msgs_nl_NL.properties

View File

@ -0,0 +1,47 @@
# Copyright (c) 2017, bandie
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
FILE=File
QUIT=Be\u00ebindigen
SAVE=Opslaan
NEW=Nieuw
SAVE_IMG=Afbeelding opslaan
VIEW=Inzicht
FULLSCREEN=Volledige scherm
TOOLS=Tools
SETTINGS=Instellingen
SETTINGS_TITLE=CircleArt \- Instellingen
SETTINGS_CIRC_SIZE=Max. grootte van de cirkels
SETTINGS_DIST=Afstand
SETTINGS_DIR=Richting
SETTINGS_Y=Gebruik y in plaats van x
SETTINGS_COLOR=Kleur instellingen
RED=Rood
GREEN=Groen
BLUE=Blauw
HELP=Help
ABOUT=Over dit programma
DRAWING_OFF=Status: Af
DRAWING_ON=Status: Aan
HELP_DRAWING=Je kunt de pen aan/uitschakelen door dat je D drukt.