├── .gitignore ├── README.md ├── build.gradle ├── gradlew ├── gradlew.bat ├── out └── production │ └── resources │ └── cloud_css │ ├── ElementButton.bss │ ├── ElementButton.css │ ├── ElementFX.bss │ ├── ElementFX.css │ ├── ElementTextField.bss │ └── ElementTextField.css ├── screenshot └── screen_1.0.png ├── settings.gradle └── src ├── main ├── kotlin │ └── ink │ │ └── bluecloud │ │ └── css │ │ ├── CssResources.kt │ │ ├── ElementButton.kt │ │ └── ElementTextField.kt └── resources │ └── cloud_css │ ├── ElementButton.bss │ ├── ElementButton.css │ ├── ElementFX.bss │ ├── ElementFX.css │ ├── ElementTextField.bss │ └── ElementTextField.css └── test ├── java ├── mains.java └── test.java └── kotlin ├── BssCompiler.kt ├── devapp ├── CloudStyleGlobal.kt ├── app.kt └── treeview │ ├── TreeClass.kt │ └── Treeview.kt └── testapp └── Demo.kt /.gitignore: -------------------------------------------------------------------------------- 1 | /.gradle/ 2 | /build/ 3 | /.idea/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ElementFX 2 | 3 | ElementUi in javafx,that you can get a beautiful applications with only one line code. 4 | JavaFX版本的ElementUi,您可以仅需一行代码而轻松美化您的JavaFX应用 5 | 6 | ### Usage: 7 | 8 | For Java: 9 | ``` 10 | Button button = new Button(); 11 | ElementButtonKt.theme(button, ElementButton.grayButton); 12 | 13 | Scene scene = new Scene(root); 14 | scene.getStylesheets().add(CssResources.globalCssFile); 15 | scene.getStylesheets().add(CssResources.buttonCssFile);//可选,用于每个组件可单独调整主题 16 | 17 | /* 18 | or: 19 | CssResourcesKt.themes(scene, (strings, cssResources) -> { 20 | strings.add(CssResources.globalCssFile); 21 | strings.add(CssResources.buttonCssFile); 22 | return null; 23 | }); 24 | */ 25 | 26 | primaryStage.setScene(scene); 27 | primaryStage.setTitle("ElementForJavaFX"); 28 | primaryStage.show(); 29 | ``` 30 | For Kotlin: 31 | ``` 32 | primaryStage.run { 33 | scene = Scene(root,400.0,400.0).apply { 34 | themes { 35 | this += it.globalCssFile 36 | this += it.buttonCssFile//可选,用于每个组件可单独调整主题 37 | } 38 | } 39 | title = "ElementForJavaFX" 40 | show() 41 | } 42 | ``` 43 | 44 | ### Note: 45 | 46 | 本项目尚未在仓库中发布,您可以自行在out/production/resources/cloud_css中找到您需要的css文件通过JavaFx的api自行引入 47 | 也可以在release中下载预览版本通过本地导入的方式引用 48 | 具体用法请查看demo 49 | 50 | This project has not yet been released in the maven,but you can find the css file you need in out/production/resources/cloud_css and import it by JavaFx api. 51 | You can also download the preview version in the release and importing in locally way. 52 | Please refer to the demo for details. 53 | 54 | 55 | ## 当前支持的组件(Supported nodes): 56 | > + Button 57 | > + TextField 58 | > + ListView 59 | > + TextArea 60 | > + Label 61 | > + ComboBox 62 | > + CheckBox 63 | > + ScrollPane 64 | > + ScrollBar 65 | > + DatePicker 66 | > + TableView 67 | > + Spinner 68 | > + TabPane 69 | > + Pagination 70 | > + ContextMenu 71 | > + Slider 72 | > + ProgressBar 73 | > + TreeView 74 | 75 | #### 示例效果: 76 | ![Screen](screenshot/screen_1.0.png) 77 | Demo path is : src/test/kotlin/testapp/Demo.kt 78 | 79 | 80 | ### todo: 81 | 为每个组件单独调整主题。 82 | Change themes individually for nodes. 83 | ``` 84 | val regButton = Button("Register").apply { 85 | theme(ElementButton.orangeButton) 86 | } 87 | ``` 88 | NOTE:当前仅支持TextField和Button -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'maven-publish' 3 | id 'application' 4 | id 'org.jetbrains.kotlin.jvm' version '1.7.20' 5 | id 'org.openjfx.javafxplugin' version '0.0.12' 6 | } 7 | 8 | group = 'ink.bluecloud' 9 | version = '1.3-SNAPSHOT' 10 | 11 | repositories { 12 | mavenLocal() 13 | maven { 14 | url 'https://repo.huaweicloud.com/repository/maven/' 15 | } 16 | maven { 17 | url 'https://maven.aliyun.com/repository/central/' 18 | } 19 | maven { 20 | url 'https://maven.aliyun.com/repository/public/' 21 | } 22 | maven { 23 | url 'https://oss.sonatype.org/content/repositories/snapshots' 24 | } 25 | mavenCentral() 26 | } 27 | 28 | dependencies { 29 | testImplementation 'org.jetbrains.kotlin:kotlin-test' 30 | testImplementation group: 'no.tornado', name: 'tornadofx', version: '2.0.0-SNAPSHOT' 31 | } 32 | 33 | javafx { 34 | version = '19' 35 | modules = ['javafx.controls'] 36 | } 37 | 38 | test { 39 | useJUnitPlatform() 40 | } 41 | 42 | compileKotlin { 43 | kotlinOptions.jvmTarget = '17' 44 | // kotlinOptions.useK2 = true 45 | } 46 | 47 | compileTestKotlin { 48 | kotlinOptions.jvmTarget = '17' 49 | } 50 | 51 | application { 52 | mainClassName = 'MainKt' 53 | } 54 | 55 | publishing { 56 | publications { 57 | // 这个mavenJava可以随便填,只是一个任务名字而已 58 | // MavenPublication必须有,这个是调用的任务类 59 | mavenJava(MavenPublication) { 60 | // 这里头是artifacts的配置信息,不填会采用默认的 61 | groupId = 'ink.bluecloud' 62 | artifactId = 'elementfx' 63 | version = '1.3' 64 | 65 | from components.java 66 | } 67 | } 68 | } -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # Copyright © 2015-2021 the original authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | # 21 | # Gradle start up script for POSIX generated by Gradle. 22 | # 23 | # Important for running: 24 | # 25 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is 26 | # noncompliant, but you have some other compliant shell such as ksh or 27 | # bash, then to run this script, type that shell name before the whole 28 | # command line, like: 29 | # 30 | # ksh Gradle 31 | # 32 | # Busybox and similar reduced shells will NOT work, because this script 33 | # requires all of these POSIX shell features: 34 | # * functions; 35 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}», 36 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»; 37 | # * compound commands having a testable exit status, especially «case»; 38 | # * various built-in commands including «command», «set», and «ulimit». 39 | # 40 | # Important for patching: 41 | # 42 | # (2) This script targets any POSIX shell, so it avoids extensions provided 43 | # by Bash, Ksh, etc; in particular arrays are avoided. 44 | # 45 | # The "traditional" practice of packing multiple parameters into a 46 | # space-separated string is a well documented source of bugs and security 47 | # problems, so this is (mostly) avoided, by progressively accumulating 48 | # options in "$@", and eventually passing that to Java. 49 | # 50 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, 51 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; 52 | # see the in-line comments for details. 53 | # 54 | # There are tweaks for specific operating systems such as AIX, CygWin, 55 | # Darwin, MinGW, and NonStop. 56 | # 57 | # (3) This script is generated from the Groovy template 58 | # https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt 59 | # within the Gradle project. 60 | # 61 | # You can find Gradle at https://github.com/gradle/gradle/. 62 | # 63 | ############################################################################## 64 | 65 | # Attempt to set APP_HOME 66 | 67 | # Resolve links: $0 may be a link 68 | app_path=$0 69 | 70 | # Need this for daisy-chained symlinks. 71 | while 72 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path 73 | [ -h "$app_path" ] 74 | do 75 | ls=$( ls -ld "$app_path" ) 76 | link=${ls#*' -> '} 77 | case $link in #( 78 | /*) app_path=$link ;; #( 79 | *) app_path=$APP_HOME$link ;; 80 | esac 81 | done 82 | 83 | APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit 84 | 85 | APP_NAME="Gradle" 86 | APP_BASE_NAME=${0##*/} 87 | 88 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 89 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 90 | 91 | # Use the maximum available, or set MAX_FD != -1 to use that value. 92 | MAX_FD=maximum 93 | 94 | warn () { 95 | echo "$*" 96 | } >&2 97 | 98 | die () { 99 | echo 100 | echo "$*" 101 | echo 102 | exit 1 103 | } >&2 104 | 105 | # OS specific support (must be 'true' or 'false'). 106 | cygwin=false 107 | msys=false 108 | darwin=false 109 | nonstop=false 110 | case "$( uname )" in #( 111 | CYGWIN* ) cygwin=true ;; #( 112 | Darwin* ) darwin=true ;; #( 113 | MSYS* | MINGW* ) msys=true ;; #( 114 | NONSTOP* ) nonstop=true ;; 115 | esac 116 | 117 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 118 | 119 | 120 | # Determine the Java command to use to start the JVM. 121 | if [ -n "$JAVA_HOME" ] ; then 122 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 123 | # IBM's JDK on AIX uses strange locations for the executables 124 | JAVACMD=$JAVA_HOME/jre/sh/java 125 | else 126 | JAVACMD=$JAVA_HOME/bin/java 127 | fi 128 | if [ ! -x "$JAVACMD" ] ; then 129 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 130 | 131 | Please set the JAVA_HOME variable in your environment to match the 132 | location of your Java installation." 133 | fi 134 | else 135 | JAVACMD=java 136 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 137 | 138 | Please set the JAVA_HOME variable in your environment to match the 139 | location of your Java installation." 140 | fi 141 | 142 | # Increase the maximum file descriptors if we can. 143 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then 144 | case $MAX_FD in #( 145 | max*) 146 | MAX_FD=$( ulimit -H -n ) || 147 | warn "Could not query maximum file descriptor limit" 148 | esac 149 | case $MAX_FD in #( 150 | '' | soft) :;; #( 151 | *) 152 | ulimit -n "$MAX_FD" || 153 | warn "Could not set maximum file descriptor limit to $MAX_FD" 154 | esac 155 | fi 156 | 157 | # Collect all arguments for the java command, stacking in reverse order: 158 | # * args from the command line 159 | # * the main class name 160 | # * -classpath 161 | # * -D...appname settings 162 | # * --module-path (only if needed) 163 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. 164 | 165 | # For Cygwin or MSYS, switch paths to Windows format before running java 166 | if "$cygwin" || "$msys" ; then 167 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) 168 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) 169 | 170 | JAVACMD=$( cygpath --unix "$JAVACMD" ) 171 | 172 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 173 | for arg do 174 | if 175 | case $arg in #( 176 | -*) false ;; # don't mess with options #( 177 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath 178 | [ -e "$t" ] ;; #( 179 | *) false ;; 180 | esac 181 | then 182 | arg=$( cygpath --path --ignore --mixed "$arg" ) 183 | fi 184 | # Roll the args list around exactly as many times as the number of 185 | # args, so each arg winds up back in the position where it started, but 186 | # possibly modified. 187 | # 188 | # NB: a `for` loop captures its iteration list before it begins, so 189 | # changing the positional parameters here affects neither the number of 190 | # iterations, nor the values presented in `arg`. 191 | shift # remove old arg 192 | set -- "$@" "$arg" # push replacement arg 193 | done 194 | fi 195 | 196 | # Collect all arguments for the java command; 197 | # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of 198 | # shell script including quotes and variable substitutions, so put them in 199 | # double quotes to make sure that they get re-expanded; and 200 | # * put everything else in single quotes, so that it's not re-expanded. 201 | 202 | set -- \ 203 | "-Dorg.gradle.appname=$APP_BASE_NAME" \ 204 | -classpath "$CLASSPATH" \ 205 | org.gradle.wrapper.GradleWrapperMain \ 206 | "$@" 207 | 208 | # Use "xargs" to parse quoted args. 209 | # 210 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed. 211 | # 212 | # In Bash we could simply go: 213 | # 214 | # readarray ARGS < <( xargs -n1 <<<"$var" ) && 215 | # set -- "${ARGS[@]}" "$@" 216 | # 217 | # but POSIX shell has neither arrays nor command substitution, so instead we 218 | # post-process each arg (as a line of input to sed) to backslash-escape any 219 | # character that might be a shell metacharacter, then use eval to reverse 220 | # that process (while maintaining the separation between arguments), and wrap 221 | # the whole thing up as a single "set" statement. 222 | # 223 | # This will of course break if any of these variables contains a newline or 224 | # an unmatched quote. 225 | # 226 | 227 | eval "set -- $( 228 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | 229 | xargs -n1 | 230 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | 231 | tr '\n' ' ' 232 | )" '"$@"' 233 | 234 | exec "$JAVACMD" "$@" 235 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /out/production/resources/cloud_css/ElementButton.bss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anivie/ElementFX/ab1768d96b4787d4c07f5655e88b864c61ab5690/out/production/resources/cloud_css/ElementButton.bss -------------------------------------------------------------------------------- /out/production/resources/cloud_css/ElementButton.css: -------------------------------------------------------------------------------- 1 | .white-button { 2 | -fx-font-size: 15px; 3 | -fx-cursor: HAND; 4 | -fx-background-color: rgba(255, 255, 255, 1); 5 | -fx-border-color: rgba(220, 223, 230, 1) rgba(220, 223, 230, 1) rgba(220, 223, 230, 1) rgba(220, 223, 230, 1); 6 | -fx-border-radius: 5px 5px 5px 5px; 7 | -fx-background-radius: 5px 5px 5px 5px; 8 | } 9 | .white-button:hover { 10 | -fx-background-color: white; 11 | -fx-border-color: rgba(198, 226, 255, 1) rgba(198, 226, 255, 1) rgba(198, 226, 255, 1) rgba(198, 226, 255, 1); 12 | -fx-text-fill: rgba(64, 158, 255, 1); 13 | } 14 | .white-button:pressed { 15 | -fx-border-color: rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1); 16 | } 17 | .default-button { 18 | -fx-font-size: 15px; 19 | -fx-cursor: HAND; 20 | -fx-background-color: rgba(236, 245, 255, 1); 21 | -fx-background-radius: 5px 5px 5px 5px; 22 | -fx-border-color: rgba(179, 216, 255, 1) rgba(179, 216, 255, 1) rgba(179, 216, 255, 1) rgba(179, 216, 255, 1); 23 | -fx-border-radius: 5px 5px 5px 5px; 24 | -fx-text-fill: rgba(64, 158, 255, 1); 25 | } 26 | .default-button:hover { 27 | -fx-background-color: rgba(64, 158, 255, 1); 28 | -fx-border-color: rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1); 29 | -fx-text-fill: rgba(255, 255, 255, 1); 30 | } 31 | .default-button:pressed { 32 | -fx-background-color: rgba(58, 142, 230, 1); 33 | -fx-border-color: rgba(58, 142, 230, 1) rgba(58, 142, 230, 1) rgba(58, 142, 230, 1) rgba(58, 142, 230, 1); 34 | -fx-text-fill: rgba(255, 255, 255, 1); 35 | } 36 | .green-button { 37 | -fx-font-size: 15px; 38 | -fx-cursor: HAND; 39 | -fx-background-color: rgba(240, 249, 235, 1); 40 | -fx-background-radius: 5px 5px 5px 5px; 41 | -fx-border-color: rgba(179, 225, 157, 1) rgba(179, 225, 157, 1) rgba(179, 225, 157, 1) rgba(179, 225, 157, 1); 42 | -fx-border-radius: 5px 5px 5px 5px; 43 | -fx-text-fill: rgba(113, 198, 71, 1); 44 | } 45 | .green-button:hover { 46 | -fx-background-color: rgba(103, 194, 58, 1); 47 | -fx-border-color: rgba(103, 194, 58, 1) rgba(103, 194, 58, 1) rgba(103, 194, 58, 1) rgba(103, 194, 58, 1); 48 | -fx-text-fill: rgba(255, 255, 255, 1); 49 | } 50 | .green-button:pressed { 51 | -fx-background-color: rgba(82, 155, 46, 1); 52 | -fx-border-color: rgba(82, 155, 46, 1) rgba(82, 155, 46, 1) rgba(82, 155, 46, 1) rgba(82, 155, 46, 1); 53 | -fx-text-fill: rgba(255, 255, 255, 1); 54 | } 55 | .gray-button { 56 | -fx-font-size: 15px; 57 | -fx-cursor: HAND; 58 | -fx-background-color: rgba(244, 244, 245, 1); 59 | -fx-background-radius: 5px 5px 5px 5px; 60 | -fx-border-color: rgba(200, 201, 204, 1) rgba(200, 201, 204, 1) rgba(200, 201, 204, 1) rgba(200, 201, 204, 1); 61 | -fx-border-radius: 5px 5px 5px 5px; 62 | -fx-text-fill: rgba(153, 156, 161, 1); 63 | } 64 | .gray-button:hover { 65 | -fx-background-color: rgba(144, 147, 153, 1); 66 | -fx-border-color: rgba(144, 147, 153, 1) rgba(144, 147, 153, 1) rgba(144, 147, 153, 1) rgba(144, 147, 153, 1); 67 | -fx-text-fill: rgba(255, 255, 255, 1); 68 | } 69 | .gray-button:pressed { 70 | -fx-background-color: rgba(115, 118, 122, 1); 71 | -fx-border-color: rgba(115, 118, 122, 1) rgba(115, 118, 122, 1) rgba(115, 118, 122, 1) rgba(115, 118, 122, 1); 72 | -fx-text-fill: rgba(255, 255, 255, 1); 73 | } 74 | .orange-button { 75 | -fx-font-size: 15px; 76 | -fx-cursor: HAND; 77 | -fx-background-color: rgba(253, 246, 236, 1); 78 | -fx-background-radius: 5px 5px 5px 5px; 79 | -fx-border-color: rgba(243, 209, 158, 1) rgba(243, 209, 158, 1) rgba(243, 209, 158, 1) rgba(243, 209, 158, 1); 80 | -fx-border-radius: 5px 5px 5px 5px; 81 | -fx-text-fill: rgba(234, 175, 86, 1); 82 | } 83 | .orange-button:hover { 84 | -fx-background-color: rgba(230, 162, 60, 1); 85 | -fx-border-color: rgba(230, 162, 60, 1) rgba(230, 162, 60, 1) rgba(230, 162, 60, 1) rgba(230, 162, 60, 1); 86 | -fx-text-fill: rgba(255, 255, 255, 1); 87 | } 88 | .orange-button:pressed { 89 | -fx-background-color: rgba(184, 130, 48, 1); 90 | -fx-border-color: rgba(184, 130, 48, 1) rgba(184, 130, 48, 1) rgba(184, 130, 48, 1) rgba(184, 130, 48, 1); 91 | -fx-text-fill: rgba(255, 255, 255, 1); 92 | } 93 | .red-button { 94 | -fx-font-size: 15px; 95 | -fx-cursor: HAND; 96 | -fx-background-color: rgba(254, 240, 240, 1); 97 | -fx-background-radius: 5px 5px 5px 5px; 98 | -fx-border-color: rgba(250, 182, 182, 1) rgba(250, 182, 182, 1) rgba(250, 182, 182, 1) rgba(250, 182, 182, 1); 99 | -fx-border-radius: 5px 5px 5px 5px; 100 | -fx-text-fill: rgba(245, 113, 113, 1); 101 | } 102 | .red-button:hover { 103 | -fx-background-color: rgba(245, 108, 108, 1); 104 | -fx-border-color: rgba(245, 108, 108, 1) rgba(245, 108, 108, 1) rgba(245, 108, 108, 1) rgba(245, 108, 108, 1); 105 | -fx-text-fill: rgba(255, 255, 255, 1); 106 | } 107 | .red-button:pressed { 108 | -fx-background-color: rgba(196, 86, 86, 1); 109 | -fx-border-color: rgba(196, 86, 86, 1) rgba(196, 86, 86, 1) rgba(196, 86, 86, 1) rgba(196, 86, 86, 1); 110 | -fx-text-fill: rgba(255, 255, 255, 1); 111 | } -------------------------------------------------------------------------------- /out/production/resources/cloud_css/ElementFX.bss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anivie/ElementFX/ab1768d96b4787d4c07f5655e88b864c61ab5690/out/production/resources/cloud_css/ElementFX.bss -------------------------------------------------------------------------------- /out/production/resources/cloud_css/ElementFX.css: -------------------------------------------------------------------------------- 1 | .button { 2 | -fx-background-color: rgba(236, 245, 255, 1); 3 | -fx-background-radius: 5px 5px 5px 5px; 4 | -fx-border-color: rgba(179, 216, 255, 1) rgba(179, 216, 255, 1) rgba(179, 216, 255, 1) rgba(179, 216, 255, 1); 5 | -fx-border-radius: 5px 5px 5px 5px; 6 | -fx-text-fill: rgba(64, 158, 255, 1); 7 | -fx-font-size: 15px; 8 | -fx-padding: 5px 10px 5px 10px; 9 | -fx-cursor: HAND; 10 | } 11 | .button:hover { 12 | -fx-background-color: rgba(64, 158, 255, 1); 13 | -fx-border-color: rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1); 14 | -fx-text-fill: rgba(255, 255, 255, 1); 15 | } 16 | .button:pressed { 17 | -fx-background-color: rgba(58, 142, 230, 1); 18 | -fx-border-color: rgba(58, 142, 230, 1) rgba(58, 142, 230, 1) rgba(58, 142, 230, 1) rgba(58, 142, 230, 1); 19 | -fx-text-fill: rgba(255, 255, 255, 1); 20 | } 21 | .text-field { 22 | -fx-border-radius: 5px 5px 5px 5px; 23 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 24 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 25 | -fx-accent: rgba(46, 188, 232, 1); 26 | -fx-background-color: rgba(255, 255, 255, 1); 27 | -fx-padding: 5px 3px 5px 3px; 28 | -fx-font-size: 14px; 29 | } 30 | .text-field:focused { 31 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 32 | } 33 | .list-view { 34 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 35 | -fx-border-width: 1px 1px 1px 1px; 36 | -fx-background-insets: 0px 0px 0px 0px; 37 | } 38 | .list-view .list-cell { 39 | -fx-background-color: rgba(255, 255, 255, 1); 40 | -fx-font-size: 15px; 41 | -fx-text-fill: rgba(117, 117, 117, 1); 42 | -fx-padding: 10px 0px 10px 5px; 43 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(235, 238, 245, 1) rgba(0, 0, 0, 0); 44 | } 45 | .list-view .list-cell:odd { 46 | -fx-background-color: rgba(255, 255, 255, 1); 47 | } 48 | .list-view .list-cell:hover { 49 | -fx-background-color: rgba(245, 247, 250, 1); 50 | } 51 | .list-view:focused .list-cell:selected { 52 | -fx-background-color: rgba(236, 245, 255, 1); 53 | -fx-text-fill: rgba(117, 117, 117, 1); 54 | } 55 | .list-view .scroll-bar .decrement-arrow { 56 | -fx-min-width: 0px; 57 | -fx-min-height: 0px; 58 | -fx-pref-width: 0px; 59 | -fx-pref-height: 0px; 60 | visibility: hidden; 61 | } 62 | .list-view .scroll-bar .increment-arrow { 63 | -fx-min-width: 0px; 64 | -fx-min-height: 0px; 65 | -fx-pref-width: 0px; 66 | -fx-pref-height: 0px; 67 | visibility: hidden; 68 | } 69 | .list-view .scroll-bar .decrement-button { 70 | -fx-min-width: 0px; 71 | -fx-min-height: 0px; 72 | -fx-pref-width: 0px; 73 | -fx-pref-height: 0px; 74 | visibility: hidden; 75 | } 76 | .list-view .scroll-bar .increment-button { 77 | -fx-min-width: 0px; 78 | -fx-min-height: 0px; 79 | -fx-pref-width: 0px; 80 | -fx-pref-height: 0px; 81 | visibility: hidden; 82 | } 83 | .list-view .scroll-bar:vertical { 84 | -fx-padding: 0px 0px 0px 0px; 85 | -fx-pref-width: 9px; 86 | -fx-background-color: rgba(255, 255, 255, 1); 87 | } 88 | .list-view .scroll-bar:vertical .thumb { 89 | -fx-background-color: rgba(221, 222, 224, 1); 90 | -fx-background-insets: 0px 0px 0px 0px; 91 | -fx-background-radius: 5px 5px 5px 5px; 92 | } 93 | .list-view .scroll-bar:vertical .thumb:pressed { 94 | -fx-background-color: rgba(199, 201, 204, 1); 95 | } 96 | .list-view:focused { 97 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 98 | } 99 | .text-area { 100 | -fx-border-radius: 5px 5px 5px 5px; 101 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 102 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 103 | -fx-accent: rgba(46, 188, 232, 1); 104 | -fx-background-color: rgba(255, 255, 255, 1); 105 | -fx-padding: 5px 3px 5px 3px; 106 | -fx-font-size: 17px; 107 | } 108 | .text-area .content { 109 | -fx-background-color: rgba(255, 255, 255, 1); 110 | } 111 | .text-area:focused { 112 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 113 | } 114 | .text-area .scroll-bar .decrement-arrow { 115 | -fx-min-width: 0px; 116 | -fx-min-height: 0px; 117 | -fx-pref-width: 0px; 118 | -fx-pref-height: 0px; 119 | visibility: hidden; 120 | } 121 | .text-area .scroll-bar .increment-arrow { 122 | -fx-min-width: 0px; 123 | -fx-min-height: 0px; 124 | -fx-pref-width: 0px; 125 | -fx-pref-height: 0px; 126 | visibility: hidden; 127 | } 128 | .text-area .scroll-bar .decrement-button { 129 | -fx-min-width: 0px; 130 | -fx-min-height: 0px; 131 | -fx-pref-width: 0px; 132 | -fx-pref-height: 0px; 133 | visibility: hidden; 134 | } 135 | .text-area .scroll-bar .increment-button { 136 | -fx-min-width: 0px; 137 | -fx-min-height: 0px; 138 | -fx-pref-width: 0px; 139 | -fx-pref-height: 0px; 140 | visibility: hidden; 141 | } 142 | .text-area .scroll-bar:vertical, .text-area .scroll-bar:horizontal { 143 | -fx-padding: 0px 0px 0px 0px; 144 | -fx-pref-width: 9px; 145 | -fx-background-color: rgba(255, 255, 255, 1); 146 | } 147 | .text-area .scroll-bar:vertical .thumb, .text-area .scroll-bar:horizontal .thumb { 148 | -fx-background-color: rgba(236, 245, 255, 1); 149 | -fx-background-insets: 0px 0px 0px 0px; 150 | -fx-background-radius: 0px 0px 0px 0px; 151 | } 152 | .text-area .scroll-bar:vertical .thumb:pressed, .text-area .scroll-bar:horizontal .thumb:pressed { 153 | -fx-background-color: rgba(124, 188, 255, 1); 154 | } 155 | .label { 156 | -fx-font-size: 13px; 157 | -fx-text-fill: rgba(117, 117, 117, 1); 158 | } 159 | .combo-box { 160 | -fx-background-color: rgba(255, 255, 255, 1); 161 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 162 | -fx-border-radius: 5px 5px 5px 5px; 163 | -fx-cursor: HAND; 164 | } 165 | .combo-box > .list-cell { 166 | -fx-font-size: 17px; 167 | } 168 | .combo-box > .arrow-button > .arrow { 169 | -fx-shape: "M460.8 755.2a26.112 26.112 0 0 1-18.944-8.704L97.792 363.008a25.6 25.6 0 1 1 37.888-34.304L460.8 691.2l326.656-363.008a25.6 25.6 0 0 1 37.888 34.304L481.28 747.008a26.112 26.112 0 0 1-20.48 8.192z"; 170 | -fx-background-color: rgba(220, 223, 230, 1); 171 | -fx-pref-height: 5px; 172 | -fx-pref-width: 10px; 173 | } 174 | .combo-box > .arrow-button:pressed .arrow { 175 | -fx-background-color: rgba(103, 106, 113, 1); 176 | } 177 | .combo-box > .combo-box-popup .list-view { 178 | -fx-border-color: rgba(228, 231, 237, 1) rgba(228, 231, 237, 1) rgba(228, 231, 237, 1) rgba(228, 231, 237, 1); 179 | } 180 | .combo-box > .combo-box-popup .list-view .list-cell { 181 | -fx-background-color: rgba(255, 255, 255, 1); 182 | -fx-text-fill: rgba(0, 0, 0, 0.5); 183 | -fx-font-size: 17px; 184 | -fx-cursor: HAND; 185 | } 186 | .combo-box > .combo-box-popup .list-view .list-cell:hover { 187 | -fx-background-color: rgba(245, 247, 250, 1); 188 | } 189 | .combo-box > .combo-box-popup .list-view .list-cell:selected { 190 | -fx-text-fill: rgba(64, 158, 254, 1); 191 | -fx-background-color: rgba(245, 247, 250, 1); 192 | } 193 | .combo-box > .combo-box-popup .scroll-bar .decrement-arrow { 194 | -fx-min-width: 0px; 195 | -fx-min-height: 0px; 196 | -fx-pref-width: 0px; 197 | -fx-pref-height: 0px; 198 | visibility: hidden; 199 | } 200 | .combo-box > .combo-box-popup .scroll-bar .increment-arrow { 201 | -fx-min-width: 0px; 202 | -fx-min-height: 0px; 203 | -fx-pref-width: 0px; 204 | -fx-pref-height: 0px; 205 | visibility: hidden; 206 | } 207 | .combo-box > .combo-box-popup .scroll-bar .decrement-button { 208 | -fx-min-width: 0px; 209 | -fx-min-height: 0px; 210 | -fx-pref-width: 0px; 211 | -fx-pref-height: 0px; 212 | visibility: hidden; 213 | } 214 | .combo-box > .combo-box-popup .scroll-bar .increment-button { 215 | -fx-min-width: 0px; 216 | -fx-min-height: 0px; 217 | -fx-pref-width: 0px; 218 | -fx-pref-height: 0px; 219 | visibility: hidden; 220 | } 221 | .combo-box > .combo-box-popup .scroll-bar:vertical { 222 | -fx-padding: 0px 0px 0px 0px; 223 | -fx-pref-width: 9px; 224 | -fx-background-color: rgba(255, 255, 255, 1); 225 | } 226 | .combo-box > .combo-box-popup .scroll-bar:vertical .thumb { 227 | -fx-background-color: rgba(236, 245, 255, 1); 228 | -fx-background-insets: 0px 0px 0px 0px; 229 | -fx-background-radius: 0px 0px 0px 0px; 230 | } 231 | .combo-box > .combo-box-popup .scroll-bar:vertical .thumb:pressed { 232 | -fx-background-color: rgba(124, 188, 255, 1); 233 | } 234 | .combo-box:focused { 235 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 236 | } 237 | .combo-box:editable > .text-field { 238 | -fx-border-width: 0px 0px 0px 0px; 239 | } 240 | .combo-box:editable > .arrow-button { 241 | -fx-background-color: rgba(255, 255, 255, 1); 242 | } 243 | .check-box { 244 | -fx-font-size: 14px; 245 | -fx-cursor: HAND; 246 | -fx-text-fill: rgba(117, 117, 117, 1); 247 | } 248 | .check-box .box { 249 | -fx-background-color: rgba(255, 255, 255, 1); 250 | -fx-background-radius: 3px 3px 3px 3px; 251 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 252 | -fx-border-radius: 3px 3px 3px 3px; 253 | } 254 | .check-box:selected .box { 255 | -fx-background-color: rgba(64, 158, 255, 1); 256 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 257 | } 258 | .check-box:selected .mark { 259 | -fx-background-color: rgba(255, 255, 255, 1); 260 | -fx-shape: "M299,396l2-2,3,3,6-6,2,2-8,8Z"; 261 | } 262 | .scroll-pane { 263 | -fx-background-color: rgba(0, 0, 0, 0); 264 | } 265 | .scroll-pane .viewport { 266 | -fx-background-color: rgba(0, 0, 0, 0); 267 | } 268 | .scroll-bar .decrement-arrow { 269 | -fx-min-width: 0px; 270 | -fx-min-height: 0px; 271 | -fx-pref-width: 0px; 272 | -fx-pref-height: 0px; 273 | visibility: hidden; 274 | } 275 | .scroll-bar .increment-arrow { 276 | -fx-min-width: 0px; 277 | -fx-min-height: 0px; 278 | -fx-pref-width: 0px; 279 | -fx-pref-height: 0px; 280 | visibility: hidden; 281 | } 282 | .scroll-bar .decrement-button { 283 | -fx-min-width: 0px; 284 | -fx-min-height: 0px; 285 | -fx-pref-width: 0px; 286 | -fx-pref-height: 0px; 287 | visibility: hidden; 288 | } 289 | .scroll-bar .increment-button { 290 | -fx-min-width: 0px; 291 | -fx-min-height: 0px; 292 | -fx-pref-width: 0px; 293 | -fx-pref-height: 0px; 294 | visibility: hidden; 295 | } 296 | .scroll-bar:vertical { 297 | -fx-padding: 0px 0px 0px 0px; 298 | -fx-pref-width: 9px; 299 | -fx-background-color: rgba(255, 255, 255, 1); 300 | } 301 | .scroll-bar:vertical .thumb { 302 | -fx-background-color: rgba(236, 245, 255, 1); 303 | -fx-background-insets: 0px 0px 0px 0px; 304 | -fx-background-radius: 0px 0px 0px 0px; 305 | } 306 | .scroll-bar:vertical .thumb:pressed { 307 | -fx-background-color: rgba(124, 188, 255, 1); 308 | } 309 | .scroll-bar:horizontal { 310 | -fx-padding: 0px 0px 0px 0px; 311 | -fx-pref-height: 9px; 312 | -fx-background-color: rgba(255, 255, 255, 1); 313 | } 314 | .scroll-bar:horizontal .thumb { 315 | -fx-background-color: rgba(236, 245, 255, 1); 316 | -fx-background-insets: 0px 0px 0px 0px; 317 | -fx-background-radius: 0px 0px 0px 0px; 318 | } 319 | .scroll-bar:horizontal .thumb:pressed { 320 | -fx-background-color: rgba(124, 188, 255, 1); 321 | } 322 | .date-picker { 323 | -fx-border-color: rgba(217, 217, 217, 1) rgba(217, 217, 217, 1) rgba(217, 217, 217, 1) rgba(217, 217, 217, 1); 324 | -fx-border-radius: 3px 3px 3px 3px; 325 | -fx-background-color: rgba(255, 255, 255, 1); 326 | } 327 | .date-picker .arrow-button { 328 | -fx-background-color: rgba(255, 255, 255, 1); 329 | -fx-cursor: HAND; 330 | } 331 | .date-picker .arrow-button:hover, .date-picker .arrow-button:focused { 332 | -fx-background-color: rgba(247, 247, 247, 1); 333 | } 334 | .date-picker .arrow-button > .arrow { 335 | -fx-shape: "M896 448H128v447.957333l477.738667 0.021334L896 895.957333V448z m0-42.666667V192.042667C896 192 768 192 768 192V149.333333h128.042667A42.666667 42.666667 0 0 1 938.666667 192.042667v703.914666A42.624 42.624 0 0 1 896.064 938.666667H127.936A42.666667 42.666667 0 0 1 85.333333 895.957333V192.042667C85.333333 168.469333 104.256 149.333333 127.957333 149.333333H256v42.666667l-128 0.042667V405.333333h768zM298.666667 85.333333h42.666666v170.666667h-42.666666V85.333333z m384 0h42.666666v170.666667h-42.666666V85.333333zM384 149.333333h256v42.666667H384V149.333333z"; 336 | } 337 | .date-picker .date-picker-popup > .month-year-pane { 338 | -fx-background-color: rgba(255, 255, 255, 1); 339 | -fx-border-width: 0px 0px 1px 0px; 340 | -fx-border-color: rgba(217, 217, 217, 1) rgba(217, 217, 217, 1) rgba(217, 217, 217, 1) rgba(217, 217, 217, 1); 341 | } 342 | .date-picker .date-picker-popup > .month-year-pane .spinner > .button { 343 | -fx-cursor: HAND; 344 | -fx-background-color: rgba(255, 255, 255, 1); 345 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); 346 | } 347 | .date-picker .date-picker-popup > .month-year-pane .spinner > .label { 348 | -fx-font-weight: 700; 349 | } 350 | .date-picker .date-picker-popup > .calendar-grid { 351 | -fx-background-color: rgba(255, 255, 255, 1); 352 | } 353 | .date-picker .date-picker-popup .date-cell { 354 | -fx-background-radius: 3px 3px 3px 3px; 355 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); 356 | -fx-cursor: HAND; 357 | } 358 | .date-picker .date-picker-popup .date-cell:hover { 359 | -fx-background-color: rgba(245, 245, 245, 1); 360 | -fx-text-fill: rgba(0, 0, 0, 1); 361 | } 362 | .date-picker .date-picker-popup .date-cell:focused { 363 | -fx-background-color: rgba(24, 144, 255, 1); 364 | -fx-text-fill: rgba(255, 255, 255, 1); 365 | } 366 | .date-picker .date-picker-popup .next-month { 367 | -fx-background-color: rgba(0, 0, 0, 0); 368 | -fx-text-fill: rgba(217, 217, 217, 1); 369 | } 370 | .date-picker .date-picker-popup .next-month:hover { 371 | -fx-background-color: rgba(245, 245, 245, 1); 372 | -fx-text-fill: rgba(217, 217, 217, 1); 373 | } 374 | .date-picker .text-field { 375 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); 376 | } 377 | .date-picker:focused { 378 | -fx-border-color: rgba(64, 169, 255, 1) rgba(64, 169, 255, 1) rgba(64, 169, 255, 1) rgba(64, 169, 255, 1); 379 | } 380 | .table-view { 381 | -fx-selection-bar: rgba(255, 255, 255, 1); 382 | -fx-selection-bar-non-focused: rgba(255, 255, 255, 1); 383 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 384 | -fx-border-width: 1px 1px 1px 1px; 385 | -fx-background-insets: 0px 0px 0px 0px; 386 | } 387 | .table-view .column-header { 388 | -fx-background-color: rgba(255, 255, 255, 1); 389 | -fx-padding: 10px 5px 5px 5px; 390 | -fx-border-color: rgba(235, 238, 245, 1) rgba(235, 238, 245, 1) rgba(235, 238, 245, 1) rgba(235, 238, 245, 1); 391 | -fx-border-width: 0px 0.5px 0px 0.5px; 392 | } 393 | .table-view .filler { 394 | -fx-background-color: rgba(255, 255, 255, 1); 395 | } 396 | .table-view .table-row-cell { 397 | -fx-border-color: rgba(235, 238, 245, 1) rgba(235, 238, 245, 1) rgba(235, 238, 245, 1) rgba(235, 238, 245, 1); 398 | -fx-border-width: 0.5px 0px 0.5px 0px; 399 | } 400 | .table-view .table-row-cell:odd { 401 | -fx-background-color: rgba(250, 250, 250, 1); 402 | } 403 | .table-view .table-row-cell:hover { 404 | -fx-background-color: rgba(245, 247, 250, 1); 405 | } 406 | .table-view .table-row-cell:selected { 407 | -fx-background-color: rgba(236, 245, 255, 1); 408 | } 409 | .table-view .table-row-cell:selected .text { 410 | -fx-fill: rgba(0, 0, 0, 1); 411 | } 412 | .table-view .table-cell { 413 | -fx-padding: 10px 10px 10px 10px; 414 | -fx-font-size: 13px; 415 | } 416 | .table-view .table-cell:selected { 417 | -fx-text-fill: rgba(0, 0, 0, 1); 418 | } 419 | .table-view:focused { 420 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 421 | } 422 | .spinner { 423 | -fx-border-color: rgba(220, 223, 230, 1) rgba(220, 223, 230, 1) rgba(220, 223, 230, 1) rgba(220, 223, 230, 1); 424 | -fx-border-radius: 5px 5px 5px 5px; 425 | -fx-background-insets: 0px 0px 0px 0px; 426 | -fx-background-radius: 5px 5px 5px 5px; 427 | } 428 | .spinner .increment-arrow-button { 429 | -fx-cursor: HAND; 430 | -fx-background-color: rgba(245, 247, 250, 1); 431 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(220, 223, 230, 1) rgba(220, 223, 230, 1); 432 | } 433 | .spinner .increment-arrow-button:hover .increment-arrow { 434 | -fx-background-color: rgba(64, 158, 255, 1); 435 | } 436 | .spinner .increment-arrow-button .increment-arrow { 437 | -fx-shape: "M887.328477 617.152318 533.951458 267.007553c-0.512619-0.512619-1.216181-0.672598-1.759763-1.152533-0.127295-0.127295-0.159978-0.319957-0.287273-0.447252-12.576374-12.416396-32.831716-12.352748-45.280796 0.192662L136.511544 618.944765c-12.447359 12.576374-12.352748 32.800753 0.192662 45.248112 6.239161 6.175514 14.399785 9.280473 22.527725 9.280473 8.224271 0 16.479505-3.168606 22.720387-9.471415L509.792985 333.185325l332.480043 329.407768c6.239161 6.175514 14.368821 9.280473 22.527725 9.280473 8.255235 0 16.479505-3.168606 22.720387-9.471415C899.968499 649.85674 899.872168 629.599677 887.328477 617.152318z"; 438 | } 439 | .spinner .decrement-arrow-button { 440 | -fx-cursor: HAND; 441 | -fx-background-color: rgba(245, 247, 250, 1); 442 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(220, 223, 230, 1); 443 | } 444 | .spinner .decrement-arrow-button:hover .decrement-arrow { 445 | -fx-background-color: rgba(64, 158, 255, 1); 446 | } 447 | .spinner .decrement-arrow-button .decrement-arrow { 448 | -fx-shape: "M890.335385 330.911222c-12.576374-12.416396-32.800753-12.352748-45.248112 0.192662L517.248327 661.951458 184.831931 332.512727c-12.576374-12.447359-32.800753-12.352748-45.280796 0.192662-12.447359 12.576374-12.352748 32.831716 0.192662 45.280796l353.311652 350.112082c0.543583 0.543583 1.247144 0.672598 1.792447 1.183497 0.127295 0.127295 0.159978 0.287273 0.287273 0.416288 6.239161 6.175514 14.399785 9.280473 22.527725 9.280473 8.224271 0 16.479505-3.168606 22.720387-9.471415l350.112082-353.311652C902.975407 363.615643 902.880796 343.360301 890.335385 330.911222z"; 449 | } 450 | .spinner .text-field { 451 | -fx-border-color: rgba(255, 255, 255, 1) rgba(255, 255, 255, 1) rgba(255, 255, 255, 1) rgba(255, 255, 255, 1); 452 | } 453 | .spinner:hover { 454 | -fx-border-color: rgba(192, 196, 204, 1) rgba(192, 196, 204, 1) rgba(192, 196, 204, 1) rgba(192, 196, 204, 1); 455 | } 456 | .tab-pane { 457 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 458 | -fx-border-radius: 5px 5px 5px 5px; 459 | } 460 | .tab-pane .tab-header-background { 461 | -fx-background-color: rgba(0, 0, 0, 0); 462 | -fx-border-color: rgba(228, 231, 237, 1) rgba(228, 231, 237, 1) rgba(228, 231, 237, 1) rgba(228, 231, 237, 1); 463 | -fx-border-width: 0px 0px 3px 0px; 464 | } 465 | .tab-pane:top .tab-header-area { 466 | -fx-background-insets: 0px 0px 1px 0px; 467 | -fx-padding: 5px 2px 0px 0px; 468 | } 469 | .tab-pane .tab { 470 | -fx-padding: 5px 16px 5px 16px; 471 | -fx-cursor: HAND; 472 | -fx-background-color: rgba(0, 0, 0, 0); 473 | -fx-border-width: 0px 0px 3px 0px; 474 | -fx-border-color: rgba(228, 231, 237, 1) rgba(228, 231, 237, 1) rgba(228, 231, 237, 1) rgba(228, 231, 237, 1); 475 | } 476 | .tab-pane .tab:selected { 477 | -fx-border-color: rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1); 478 | } 479 | .tab-pane .tab:selected .tab-label { 480 | -fx-text-fill: rgba(64, 158, 255, 1); 481 | } 482 | .tab-pane .tab:hover .tab-label { 483 | -fx-text-fill: rgba(64, 158, 255, 1); 484 | } 485 | .tab-pane .tab .tab-label { 486 | -fx-font-size: 15px; 487 | } 488 | .tab-pane .tab .focus-indicator { 489 | -fx-border-width: 0px 0px 0px 0px; 490 | } 491 | .pagination .left-arrow-button { 492 | -fx-background-color: rgba(240, 242, 245, 1); 493 | -fx-background-insets: 0px 0px 0px 0px; 494 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); 495 | } 496 | .pagination .left-arrow-button:hover .left-arrow { 497 | -fx-background-color: rgba(64, 158, 255, 1); 498 | } 499 | .pagination .left-arrow-button .left-arrow { 500 | -fx-shape: "M401.066667 512l302.933333 302.933333-59.733333 59.733334L341.333333 571.733333 281.6 512 341.333333 452.266667l302.933334-302.933334 59.733333 59.733334L401.066667 512z"; 501 | } 502 | .pagination .right-arrow-button { 503 | -fx-background-color: rgba(240, 242, 245, 1); 504 | -fx-background-insets: 0px 0px 0px 0px; 505 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); 506 | } 507 | .pagination .right-arrow-button:hover { 508 | -fx-padding: 0px 0px 0px 0px; 509 | } 510 | .pagination .right-arrow-button:hover .right-arrow { 511 | -fx-background-color: rgba(64, 158, 255, 1); 512 | } 513 | .pagination .right-arrow-button .right-arrow { 514 | -fx-shape: "M584.533333 512l-302.933333 302.933333L341.333333 874.666667l302.933334-302.933334 59.733333-59.733333-59.733333-59.733333L341.333333 145.066667 281.6 209.066667l302.933333 302.933333z"; 515 | } 516 | .pagination .number-button { 517 | -fx-background-color: rgba(240, 242, 245, 1); 518 | -fx-background-insets: 0px 0px 0px 0px; 519 | -fx-background-radius: 3px 3px 3px 3px; 520 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); 521 | -fx-cursor: HAND; 522 | } 523 | .pagination .number-button:hover { 524 | -fx-text-fill: rgba(64, 158, 255, 1); 525 | } 526 | .pagination .number-button:selected { 527 | -fx-background-color: rgba(64, 158, 255, 1); 528 | -fx-text-fill: rgba(255, 255, 255, 1); 529 | } 530 | .context-menu { 531 | -fx-background-insets: 0px 0px 0px 0px; 532 | } 533 | .context-menu .menu-item:hover, .context-menu .menu-item:focused { 534 | -fx-background-color: rgba(238, 238, 238, 1); 535 | } 536 | .context-menu .menu-item .label { 537 | -fx-text-fill: rgba(0, 0, 0, 1); 538 | -fx-padding: 5px 100px 5px 5px; 539 | } 540 | .slider .track { 541 | -fx-background-color: rgba(228, 231, 237, 1); 542 | } 543 | .slider .thumb { 544 | -fx-background-color: rgba(255, 255, 255, 1); 545 | -fx-border-color: rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1); 546 | -fx-border-radius: 1em 1em 1em 1em; 547 | -fx-cursor: HAND; 548 | } 549 | .slider .thumb:pressed { 550 | -fx-background-color: rgba(228, 231, 237, 1); 551 | } 552 | .progress-bar { 553 | -fx-background-color: rgba(255, 255, 255, 1); 554 | -fx-background-insets: 0px 0px 0px 0px; 555 | -fx-padding: 0px 0px 0px 0px; 556 | } 557 | .progress-bar .track { 558 | -fx-background-color: rgba(235, 238, 245, 1); 559 | } 560 | .progress-bar .bar { 561 | -fx-background-color: rgba(64, 158, 255, 1); 562 | } 563 | .tree-view { 564 | -fx-background-color: rgba(255, 255, 255, 1); 565 | } 566 | .tree-view .tree-cell { 567 | -fx-background-color: rgba(255, 255, 255, 1); 568 | -fx-text-fill: rgba(0, 0, 0, 1); 569 | -fx-cursor: HAND; 570 | } 571 | .tree-view .tree-cell:hover { 572 | -fx-background-color: rgba(245, 247, 250, 1); 573 | } 574 | .tree-view .tree-cell:selected { 575 | -fx-background-color: rgba(245, 247, 250, 1); 576 | } 577 | .tree-view .tree-cell:empty { 578 | -fx-background-color: rgba(0, 0, 0, 0); 579 | } 580 | .tree-view .tree-cell .tree-disclosure-node .arrow { 581 | -fx-background-color: rgba(168, 171, 178, 1); 582 | } -------------------------------------------------------------------------------- /out/production/resources/cloud_css/ElementTextField.bss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anivie/ElementFX/ab1768d96b4787d4c07f5655e88b864c61ab5690/out/production/resources/cloud_css/ElementTextField.bss -------------------------------------------------------------------------------- /out/production/resources/cloud_css/ElementTextField.css: -------------------------------------------------------------------------------- 1 | .default-text-field { 2 | -fx-border-radius: 5px 5px 5px 5px; 3 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 4 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 5 | -fx-accent: rgba(46, 188, 232, 1); 6 | -fx-background-color: rgba(255, 255, 255, 1); 7 | -fx-padding: 5px 3px 5px 3px; 8 | -fx-font-size: 14px; 9 | } 10 | .default-text-field:focused { 11 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 12 | } 13 | 14 | .green-text-field { 15 | -fx-border-radius: 5px 5px 5px 5px; 16 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 17 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 18 | -fx-accent: #95d475; 19 | -fx-background-color: rgba(255, 255, 255, 1); 20 | -fx-padding: 5px 3px 5px 3px; 21 | -fx-font-size: 14px; 22 | } 23 | .green-text-field:focused { 24 | -fx-border-color: #67C23A; 25 | } 26 | 27 | .orange-text-field { 28 | -fx-border-radius: 5px 5px 5px 5px; 29 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 30 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 31 | -fx-accent: #eebe77; 32 | -fx-background-color: rgba(255, 255, 255, 1); 33 | -fx-padding: 5px 3px 5px 3px; 34 | -fx-font-size: 14px; 35 | } 36 | .orange-text-field:focused { 37 | -fx-border-color: #E6A23C; 38 | } 39 | 40 | .gray-text-field { 41 | -fx-border-radius: 5px 5px 5px 5px; 42 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 43 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 44 | -fx-accent: #b1b3b8; 45 | -fx-background-color: rgba(255, 255, 255, 1); 46 | -fx-padding: 5px 3px 5px 3px; 47 | -fx-font-size: 14px; 48 | } 49 | .gray-text-field:focused { 50 | -fx-border-color: #909399; 51 | } 52 | 53 | .red-text-field { 54 | -fx-border-radius: 5px 5px 5px 5px; 55 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 56 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 57 | -fx-accent: #f89898; 58 | -fx-background-color: rgba(255, 255, 255, 1); 59 | -fx-padding: 5px 3px 5px 3px; 60 | -fx-font-size: 14px; 61 | } 62 | .red-text-field:focused { 63 | -fx-border-color: #F56C6C; 64 | } -------------------------------------------------------------------------------- /screenshot/screen_1.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anivie/ElementFX/ab1768d96b4787d4c07f5655e88b864c61ab5690/screenshot/screen_1.0.png -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | 2 | rootProject.name = 'ElementFX' 3 | 4 | -------------------------------------------------------------------------------- /src/main/kotlin/ink/bluecloud/css/CssResources.kt: -------------------------------------------------------------------------------- 1 | package ink.bluecloud.css 2 | 3 | import javafx.scene.Scene 4 | 5 | object CssResources { 6 | const val globalCssFile = "cloud_css/ElementFX.css" 7 | const val buttonCssFile = "cloud_css/ElementButton.css" 8 | const val textFieldCssFile = "cloud_css/ElementTextField.css" 9 | } 10 | 11 | fun Scene.themes(block: CssResources.(MutableList) -> Unit) { 12 | buildList { 13 | CssResources.block(this) 14 | 15 | if (indexOf(CssResources.globalCssFile) > 0) { 16 | this -= CssResources.globalCssFile 17 | stylesheets += CssResources.globalCssFile 18 | stylesheets += this 19 | } else { 20 | stylesheets += this 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/kotlin/ink/bluecloud/css/ElementButton.kt: -------------------------------------------------------------------------------- 1 | package ink.bluecloud.css 2 | 3 | import javafx.scene.control.Button 4 | 5 | enum class ElementButton(val style: String) { 6 | whiteButton("white-button"), 7 | defaultButton("default-button"), 8 | greenButton("green-button"), 9 | grayButton("gray-button"), 10 | orangeButton("orange-button"), 11 | redButton("red-button"), 12 | } 13 | 14 | fun Button.theme(theme: ElementButton) { 15 | styleClass.first().run { 16 | styleClass.clear() 17 | styleClass += this 18 | styleClass += theme.style 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/kotlin/ink/bluecloud/css/ElementTextField.kt: -------------------------------------------------------------------------------- 1 | package ink.bluecloud.css 2 | 3 | import javafx.scene.control.TextField 4 | 5 | enum class ElementTextField(val style: String) { 6 | defaultTextField("default-text-field"), 7 | greenTextField("green-text-field"), 8 | grayTextField("gray-text-field"), 9 | orangeTextField("orange-text-field"), 10 | redTextField("red-text-field"), 11 | } 12 | 13 | fun TextField.theme(theme: ElementTextField) { 14 | styleClass.clear() 15 | styleClass += theme.style 16 | } -------------------------------------------------------------------------------- /src/main/resources/cloud_css/ElementButton.bss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anivie/ElementFX/ab1768d96b4787d4c07f5655e88b864c61ab5690/src/main/resources/cloud_css/ElementButton.bss -------------------------------------------------------------------------------- /src/main/resources/cloud_css/ElementButton.css: -------------------------------------------------------------------------------- 1 | .white-button { 2 | -fx-font-size: 15px; 3 | -fx-cursor: HAND; 4 | -fx-background-color: rgba(255, 255, 255, 1); 5 | -fx-border-color: rgba(220, 223, 230, 1) rgba(220, 223, 230, 1) rgba(220, 223, 230, 1) rgba(220, 223, 230, 1); 6 | -fx-border-radius: 5px 5px 5px 5px; 7 | -fx-background-radius: 5px 5px 5px 5px; 8 | } 9 | .white-button:hover { 10 | -fx-background-color: white; 11 | -fx-border-color: rgba(198, 226, 255, 1) rgba(198, 226, 255, 1) rgba(198, 226, 255, 1) rgba(198, 226, 255, 1); 12 | -fx-text-fill: rgba(64, 158, 255, 1); 13 | } 14 | .white-button:pressed { 15 | -fx-border-color: rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1); 16 | } 17 | .default-button { 18 | -fx-font-size: 15px; 19 | -fx-cursor: HAND; 20 | -fx-background-color: rgba(236, 245, 255, 1); 21 | -fx-background-radius: 5px 5px 5px 5px; 22 | -fx-border-color: rgba(179, 216, 255, 1) rgba(179, 216, 255, 1) rgba(179, 216, 255, 1) rgba(179, 216, 255, 1); 23 | -fx-border-radius: 5px 5px 5px 5px; 24 | -fx-text-fill: rgba(64, 158, 255, 1); 25 | } 26 | .default-button:hover { 27 | -fx-background-color: rgba(64, 158, 255, 1); 28 | -fx-border-color: rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1); 29 | -fx-text-fill: rgba(255, 255, 255, 1); 30 | } 31 | .default-button:pressed { 32 | -fx-background-color: rgba(58, 142, 230, 1); 33 | -fx-border-color: rgba(58, 142, 230, 1) rgba(58, 142, 230, 1) rgba(58, 142, 230, 1) rgba(58, 142, 230, 1); 34 | -fx-text-fill: rgba(255, 255, 255, 1); 35 | } 36 | .green-button { 37 | -fx-font-size: 15px; 38 | -fx-cursor: HAND; 39 | -fx-background-color: rgba(240, 249, 235, 1); 40 | -fx-background-radius: 5px 5px 5px 5px; 41 | -fx-border-color: rgba(179, 225, 157, 1) rgba(179, 225, 157, 1) rgba(179, 225, 157, 1) rgba(179, 225, 157, 1); 42 | -fx-border-radius: 5px 5px 5px 5px; 43 | -fx-text-fill: rgba(113, 198, 71, 1); 44 | } 45 | .green-button:hover { 46 | -fx-background-color: rgba(103, 194, 58, 1); 47 | -fx-border-color: rgba(103, 194, 58, 1) rgba(103, 194, 58, 1) rgba(103, 194, 58, 1) rgba(103, 194, 58, 1); 48 | -fx-text-fill: rgba(255, 255, 255, 1); 49 | } 50 | .green-button:pressed { 51 | -fx-background-color: rgba(82, 155, 46, 1); 52 | -fx-border-color: rgba(82, 155, 46, 1) rgba(82, 155, 46, 1) rgba(82, 155, 46, 1) rgba(82, 155, 46, 1); 53 | -fx-text-fill: rgba(255, 255, 255, 1); 54 | } 55 | .gray-button { 56 | -fx-font-size: 15px; 57 | -fx-cursor: HAND; 58 | -fx-background-color: rgba(244, 244, 245, 1); 59 | -fx-background-radius: 5px 5px 5px 5px; 60 | -fx-border-color: rgba(200, 201, 204, 1) rgba(200, 201, 204, 1) rgba(200, 201, 204, 1) rgba(200, 201, 204, 1); 61 | -fx-border-radius: 5px 5px 5px 5px; 62 | -fx-text-fill: rgba(153, 156, 161, 1); 63 | } 64 | .gray-button:hover { 65 | -fx-background-color: rgba(144, 147, 153, 1); 66 | -fx-border-color: rgba(144, 147, 153, 1) rgba(144, 147, 153, 1) rgba(144, 147, 153, 1) rgba(144, 147, 153, 1); 67 | -fx-text-fill: rgba(255, 255, 255, 1); 68 | } 69 | .gray-button:pressed { 70 | -fx-background-color: rgba(115, 118, 122, 1); 71 | -fx-border-color: rgba(115, 118, 122, 1) rgba(115, 118, 122, 1) rgba(115, 118, 122, 1) rgba(115, 118, 122, 1); 72 | -fx-text-fill: rgba(255, 255, 255, 1); 73 | } 74 | .orange-button { 75 | -fx-font-size: 15px; 76 | -fx-cursor: HAND; 77 | -fx-background-color: rgba(253, 246, 236, 1); 78 | -fx-background-radius: 5px 5px 5px 5px; 79 | -fx-border-color: rgba(243, 209, 158, 1) rgba(243, 209, 158, 1) rgba(243, 209, 158, 1) rgba(243, 209, 158, 1); 80 | -fx-border-radius: 5px 5px 5px 5px; 81 | -fx-text-fill: rgba(234, 175, 86, 1); 82 | } 83 | .orange-button:hover { 84 | -fx-background-color: rgba(230, 162, 60, 1); 85 | -fx-border-color: rgba(230, 162, 60, 1) rgba(230, 162, 60, 1) rgba(230, 162, 60, 1) rgba(230, 162, 60, 1); 86 | -fx-text-fill: rgba(255, 255, 255, 1); 87 | } 88 | .orange-button:pressed { 89 | -fx-background-color: rgba(184, 130, 48, 1); 90 | -fx-border-color: rgba(184, 130, 48, 1) rgba(184, 130, 48, 1) rgba(184, 130, 48, 1) rgba(184, 130, 48, 1); 91 | -fx-text-fill: rgba(255, 255, 255, 1); 92 | } 93 | .red-button { 94 | -fx-font-size: 15px; 95 | -fx-cursor: HAND; 96 | -fx-background-color: rgba(254, 240, 240, 1); 97 | -fx-background-radius: 5px 5px 5px 5px; 98 | -fx-border-color: rgba(250, 182, 182, 1) rgba(250, 182, 182, 1) rgba(250, 182, 182, 1) rgba(250, 182, 182, 1); 99 | -fx-border-radius: 5px 5px 5px 5px; 100 | -fx-text-fill: rgba(245, 113, 113, 1); 101 | } 102 | .red-button:hover { 103 | -fx-background-color: rgba(245, 108, 108, 1); 104 | -fx-border-color: rgba(245, 108, 108, 1) rgba(245, 108, 108, 1) rgba(245, 108, 108, 1) rgba(245, 108, 108, 1); 105 | -fx-text-fill: rgba(255, 255, 255, 1); 106 | } 107 | .red-button:pressed { 108 | -fx-background-color: rgba(196, 86, 86, 1); 109 | -fx-border-color: rgba(196, 86, 86, 1) rgba(196, 86, 86, 1) rgba(196, 86, 86, 1) rgba(196, 86, 86, 1); 110 | -fx-text-fill: rgba(255, 255, 255, 1); 111 | } -------------------------------------------------------------------------------- /src/main/resources/cloud_css/ElementFX.bss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anivie/ElementFX/ab1768d96b4787d4c07f5655e88b864c61ab5690/src/main/resources/cloud_css/ElementFX.bss -------------------------------------------------------------------------------- /src/main/resources/cloud_css/ElementFX.css: -------------------------------------------------------------------------------- 1 | .button { 2 | -fx-background-color: rgba(236, 245, 255, 1); 3 | -fx-background-radius: 5px 5px 5px 5px; 4 | -fx-border-color: rgba(179, 216, 255, 1) rgba(179, 216, 255, 1) rgba(179, 216, 255, 1) rgba(179, 216, 255, 1); 5 | -fx-border-radius: 5px 5px 5px 5px; 6 | -fx-text-fill: rgba(64, 158, 255, 1); 7 | -fx-font-size: 15px; 8 | -fx-padding: 5px 10px 5px 10px; 9 | -fx-cursor: HAND; 10 | } 11 | .button:hover { 12 | -fx-background-color: rgba(64, 158, 255, 1); 13 | -fx-border-color: rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1); 14 | -fx-text-fill: rgba(255, 255, 255, 1); 15 | } 16 | .button:pressed { 17 | -fx-background-color: rgba(58, 142, 230, 1); 18 | -fx-border-color: rgba(58, 142, 230, 1) rgba(58, 142, 230, 1) rgba(58, 142, 230, 1) rgba(58, 142, 230, 1); 19 | -fx-text-fill: rgba(255, 255, 255, 1); 20 | } 21 | .text-field { 22 | -fx-border-radius: 5px 5px 5px 5px; 23 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 24 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 25 | -fx-accent: rgba(46, 188, 232, 1); 26 | -fx-background-color: rgba(255, 255, 255, 1); 27 | -fx-padding: 5px 3px 5px 3px; 28 | -fx-font-size: 14px; 29 | } 30 | .text-field:focused { 31 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 32 | } 33 | .list-view { 34 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 35 | -fx-border-width: 1px 1px 1px 1px; 36 | -fx-background-insets: 0px 0px 0px 0px; 37 | } 38 | .list-view .list-cell { 39 | -fx-background-color: rgba(255, 255, 255, 1); 40 | -fx-font-size: 15px; 41 | -fx-text-fill: rgba(117, 117, 117, 1); 42 | -fx-padding: 10px 0px 10px 5px; 43 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(235, 238, 245, 1) rgba(0, 0, 0, 0); 44 | } 45 | .list-view .list-cell:odd { 46 | -fx-background-color: rgba(255, 255, 255, 1); 47 | } 48 | .list-view .list-cell:hover { 49 | -fx-background-color: rgba(245, 247, 250, 1); 50 | } 51 | .list-view:focused .list-cell:selected { 52 | -fx-background-color: rgba(236, 245, 255, 1); 53 | -fx-text-fill: rgba(117, 117, 117, 1); 54 | } 55 | .list-view .scroll-bar .decrement-arrow { 56 | -fx-min-width: 0px; 57 | -fx-min-height: 0px; 58 | -fx-pref-width: 0px; 59 | -fx-pref-height: 0px; 60 | visibility: hidden; 61 | } 62 | .list-view .scroll-bar .increment-arrow { 63 | -fx-min-width: 0px; 64 | -fx-min-height: 0px; 65 | -fx-pref-width: 0px; 66 | -fx-pref-height: 0px; 67 | visibility: hidden; 68 | } 69 | .list-view .scroll-bar .decrement-button { 70 | -fx-min-width: 0px; 71 | -fx-min-height: 0px; 72 | -fx-pref-width: 0px; 73 | -fx-pref-height: 0px; 74 | visibility: hidden; 75 | } 76 | .list-view .scroll-bar .increment-button { 77 | -fx-min-width: 0px; 78 | -fx-min-height: 0px; 79 | -fx-pref-width: 0px; 80 | -fx-pref-height: 0px; 81 | visibility: hidden; 82 | } 83 | .list-view .scroll-bar:vertical { 84 | -fx-padding: 0px 0px 0px 0px; 85 | -fx-pref-width: 9px; 86 | -fx-background-color: rgba(255, 255, 255, 1); 87 | } 88 | .list-view .scroll-bar:vertical .thumb { 89 | -fx-background-color: rgba(221, 222, 224, 1); 90 | -fx-background-insets: 0px 0px 0px 0px; 91 | -fx-background-radius: 5px 5px 5px 5px; 92 | } 93 | .list-view .scroll-bar:vertical .thumb:pressed { 94 | -fx-background-color: rgba(199, 201, 204, 1); 95 | } 96 | .list-view:focused { 97 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 98 | } 99 | .text-area { 100 | -fx-border-radius: 5px 5px 5px 5px; 101 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 102 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 103 | -fx-accent: rgba(46, 188, 232, 1); 104 | -fx-background-color: rgba(255, 255, 255, 1); 105 | -fx-padding: 5px 3px 5px 3px; 106 | -fx-font-size: 17px; 107 | } 108 | .text-area .content { 109 | -fx-background-color: rgba(255, 255, 255, 1); 110 | } 111 | .text-area:focused { 112 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 113 | } 114 | .text-area .scroll-bar .decrement-arrow { 115 | -fx-min-width: 0px; 116 | -fx-min-height: 0px; 117 | -fx-pref-width: 0px; 118 | -fx-pref-height: 0px; 119 | visibility: hidden; 120 | } 121 | .text-area .scroll-bar .increment-arrow { 122 | -fx-min-width: 0px; 123 | -fx-min-height: 0px; 124 | -fx-pref-width: 0px; 125 | -fx-pref-height: 0px; 126 | visibility: hidden; 127 | } 128 | .text-area .scroll-bar .decrement-button { 129 | -fx-min-width: 0px; 130 | -fx-min-height: 0px; 131 | -fx-pref-width: 0px; 132 | -fx-pref-height: 0px; 133 | visibility: hidden; 134 | } 135 | .text-area .scroll-bar .increment-button { 136 | -fx-min-width: 0px; 137 | -fx-min-height: 0px; 138 | -fx-pref-width: 0px; 139 | -fx-pref-height: 0px; 140 | visibility: hidden; 141 | } 142 | .text-area .scroll-bar:vertical, .text-area .scroll-bar:horizontal { 143 | -fx-padding: 0px 0px 0px 0px; 144 | -fx-pref-width: 9px; 145 | -fx-background-color: rgba(255, 255, 255, 1); 146 | } 147 | .text-area .scroll-bar:vertical .thumb, .text-area .scroll-bar:horizontal .thumb { 148 | -fx-background-color: rgba(236, 245, 255, 1); 149 | -fx-background-insets: 0px 0px 0px 0px; 150 | -fx-background-radius: 0px 0px 0px 0px; 151 | } 152 | .text-area .scroll-bar:vertical .thumb:pressed, .text-area .scroll-bar:horizontal .thumb:pressed { 153 | -fx-background-color: rgba(124, 188, 255, 1); 154 | } 155 | .label { 156 | -fx-font-size: 13px; 157 | -fx-text-fill: rgba(117, 117, 117, 1); 158 | } 159 | .combo-box { 160 | -fx-background-color: rgba(255, 255, 255, 1); 161 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 162 | -fx-border-radius: 5px 5px 5px 5px; 163 | -fx-cursor: HAND; 164 | } 165 | .combo-box > .list-cell { 166 | -fx-font-size: 17px; 167 | } 168 | .combo-box > .arrow-button > .arrow { 169 | -fx-shape: "M460.8 755.2a26.112 26.112 0 0 1-18.944-8.704L97.792 363.008a25.6 25.6 0 1 1 37.888-34.304L460.8 691.2l326.656-363.008a25.6 25.6 0 0 1 37.888 34.304L481.28 747.008a26.112 26.112 0 0 1-20.48 8.192z"; 170 | -fx-background-color: rgba(220, 223, 230, 1); 171 | -fx-pref-height: 5px; 172 | -fx-pref-width: 10px; 173 | } 174 | .combo-box > .arrow-button:pressed .arrow { 175 | -fx-background-color: rgba(103, 106, 113, 1); 176 | } 177 | .combo-box > .combo-box-popup .list-view { 178 | -fx-border-color: rgba(228, 231, 237, 1) rgba(228, 231, 237, 1) rgba(228, 231, 237, 1) rgba(228, 231, 237, 1); 179 | } 180 | .combo-box > .combo-box-popup .list-view .list-cell { 181 | -fx-background-color: rgba(255, 255, 255, 1); 182 | -fx-text-fill: rgba(0, 0, 0, 0.5); 183 | -fx-font-size: 17px; 184 | -fx-cursor: HAND; 185 | } 186 | .combo-box > .combo-box-popup .list-view .list-cell:hover { 187 | -fx-background-color: rgba(245, 247, 250, 1); 188 | } 189 | .combo-box > .combo-box-popup .list-view .list-cell:selected { 190 | -fx-text-fill: rgba(64, 158, 254, 1); 191 | -fx-background-color: rgba(245, 247, 250, 1); 192 | } 193 | .combo-box > .combo-box-popup .scroll-bar .decrement-arrow { 194 | -fx-min-width: 0px; 195 | -fx-min-height: 0px; 196 | -fx-pref-width: 0px; 197 | -fx-pref-height: 0px; 198 | visibility: hidden; 199 | } 200 | .combo-box > .combo-box-popup .scroll-bar .increment-arrow { 201 | -fx-min-width: 0px; 202 | -fx-min-height: 0px; 203 | -fx-pref-width: 0px; 204 | -fx-pref-height: 0px; 205 | visibility: hidden; 206 | } 207 | .combo-box > .combo-box-popup .scroll-bar .decrement-button { 208 | -fx-min-width: 0px; 209 | -fx-min-height: 0px; 210 | -fx-pref-width: 0px; 211 | -fx-pref-height: 0px; 212 | visibility: hidden; 213 | } 214 | .combo-box > .combo-box-popup .scroll-bar .increment-button { 215 | -fx-min-width: 0px; 216 | -fx-min-height: 0px; 217 | -fx-pref-width: 0px; 218 | -fx-pref-height: 0px; 219 | visibility: hidden; 220 | } 221 | .combo-box > .combo-box-popup .scroll-bar:vertical { 222 | -fx-padding: 0px 0px 0px 0px; 223 | -fx-pref-width: 9px; 224 | -fx-background-color: rgba(255, 255, 255, 1); 225 | } 226 | .combo-box > .combo-box-popup .scroll-bar:vertical .thumb { 227 | -fx-background-color: rgba(236, 245, 255, 1); 228 | -fx-background-insets: 0px 0px 0px 0px; 229 | -fx-background-radius: 0px 0px 0px 0px; 230 | } 231 | .combo-box > .combo-box-popup .scroll-bar:vertical .thumb:pressed { 232 | -fx-background-color: rgba(124, 188, 255, 1); 233 | } 234 | .combo-box:focused { 235 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 236 | } 237 | .combo-box:editable > .text-field { 238 | -fx-border-width: 0px 0px 0px 0px; 239 | } 240 | .combo-box:editable > .arrow-button { 241 | -fx-background-color: rgba(255, 255, 255, 1); 242 | } 243 | .check-box { 244 | -fx-font-size: 14px; 245 | -fx-cursor: HAND; 246 | -fx-text-fill: rgba(117, 117, 117, 1); 247 | } 248 | .check-box .box { 249 | -fx-background-color: rgba(255, 255, 255, 1); 250 | -fx-background-radius: 3px 3px 3px 3px; 251 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 252 | -fx-border-radius: 3px 3px 3px 3px; 253 | } 254 | .check-box:selected .box { 255 | -fx-background-color: rgba(64, 158, 255, 1); 256 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 257 | } 258 | .check-box:selected .mark { 259 | -fx-background-color: rgba(255, 255, 255, 1); 260 | -fx-shape: "M299,396l2-2,3,3,6-6,2,2-8,8Z"; 261 | } 262 | .scroll-pane { 263 | -fx-background-color: rgba(0, 0, 0, 0); 264 | } 265 | .scroll-pane .viewport { 266 | -fx-background-color: rgba(0, 0, 0, 0); 267 | } 268 | .scroll-bar .decrement-arrow { 269 | -fx-min-width: 0px; 270 | -fx-min-height: 0px; 271 | -fx-pref-width: 0px; 272 | -fx-pref-height: 0px; 273 | visibility: hidden; 274 | } 275 | .scroll-bar .increment-arrow { 276 | -fx-min-width: 0px; 277 | -fx-min-height: 0px; 278 | -fx-pref-width: 0px; 279 | -fx-pref-height: 0px; 280 | visibility: hidden; 281 | } 282 | .scroll-bar .decrement-button { 283 | -fx-min-width: 0px; 284 | -fx-min-height: 0px; 285 | -fx-pref-width: 0px; 286 | -fx-pref-height: 0px; 287 | visibility: hidden; 288 | } 289 | .scroll-bar .increment-button { 290 | -fx-min-width: 0px; 291 | -fx-min-height: 0px; 292 | -fx-pref-width: 0px; 293 | -fx-pref-height: 0px; 294 | visibility: hidden; 295 | } 296 | .scroll-bar:vertical { 297 | -fx-padding: 0px 0px 0px 0px; 298 | -fx-pref-width: 9px; 299 | -fx-background-color: rgba(255, 255, 255, 1); 300 | } 301 | .scroll-bar:vertical .thumb { 302 | -fx-background-color: rgba(236, 245, 255, 1); 303 | -fx-background-insets: 0px 0px 0px 0px; 304 | -fx-background-radius: 0px 0px 0px 0px; 305 | } 306 | .scroll-bar:vertical .thumb:pressed { 307 | -fx-background-color: rgba(124, 188, 255, 1); 308 | } 309 | .scroll-bar:horizontal { 310 | -fx-padding: 0px 0px 0px 0px; 311 | -fx-pref-height: 9px; 312 | -fx-background-color: rgba(255, 255, 255, 1); 313 | } 314 | .scroll-bar:horizontal .thumb { 315 | -fx-background-color: rgba(236, 245, 255, 1); 316 | -fx-background-insets: 0px 0px 0px 0px; 317 | -fx-background-radius: 0px 0px 0px 0px; 318 | } 319 | .scroll-bar:horizontal .thumb:pressed { 320 | -fx-background-color: rgba(124, 188, 255, 1); 321 | } 322 | .date-picker { 323 | -fx-border-color: rgba(217, 217, 217, 1) rgba(217, 217, 217, 1) rgba(217, 217, 217, 1) rgba(217, 217, 217, 1); 324 | -fx-border-radius: 3px 3px 3px 3px; 325 | -fx-background-color: rgba(255, 255, 255, 1); 326 | } 327 | .date-picker .arrow-button { 328 | -fx-background-color: rgba(255, 255, 255, 1); 329 | -fx-cursor: HAND; 330 | } 331 | .date-picker .arrow-button:hover, .date-picker .arrow-button:focused { 332 | -fx-background-color: rgba(247, 247, 247, 1); 333 | } 334 | .date-picker .arrow-button > .arrow { 335 | -fx-shape: "M896 448H128v447.957333l477.738667 0.021334L896 895.957333V448z m0-42.666667V192.042667C896 192 768 192 768 192V149.333333h128.042667A42.666667 42.666667 0 0 1 938.666667 192.042667v703.914666A42.624 42.624 0 0 1 896.064 938.666667H127.936A42.666667 42.666667 0 0 1 85.333333 895.957333V192.042667C85.333333 168.469333 104.256 149.333333 127.957333 149.333333H256v42.666667l-128 0.042667V405.333333h768zM298.666667 85.333333h42.666666v170.666667h-42.666666V85.333333z m384 0h42.666666v170.666667h-42.666666V85.333333zM384 149.333333h256v42.666667H384V149.333333z"; 336 | } 337 | .date-picker .date-picker-popup > .month-year-pane { 338 | -fx-background-color: rgba(255, 255, 255, 1); 339 | -fx-border-width: 0px 0px 1px 0px; 340 | -fx-border-color: rgba(217, 217, 217, 1) rgba(217, 217, 217, 1) rgba(217, 217, 217, 1) rgba(217, 217, 217, 1); 341 | } 342 | .date-picker .date-picker-popup > .month-year-pane .spinner > .button { 343 | -fx-cursor: HAND; 344 | -fx-background-color: rgba(255, 255, 255, 1); 345 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); 346 | } 347 | .date-picker .date-picker-popup > .month-year-pane .spinner > .label { 348 | -fx-font-weight: 700; 349 | } 350 | .date-picker .date-picker-popup > .calendar-grid { 351 | -fx-background-color: rgba(255, 255, 255, 1); 352 | } 353 | .date-picker .date-picker-popup .date-cell { 354 | -fx-background-radius: 3px 3px 3px 3px; 355 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); 356 | -fx-cursor: HAND; 357 | } 358 | .date-picker .date-picker-popup .date-cell:hover { 359 | -fx-background-color: rgba(245, 245, 245, 1); 360 | -fx-text-fill: rgba(0, 0, 0, 1); 361 | } 362 | .date-picker .date-picker-popup .date-cell:focused { 363 | -fx-background-color: rgba(24, 144, 255, 1); 364 | -fx-text-fill: rgba(255, 255, 255, 1); 365 | } 366 | .date-picker .date-picker-popup .next-month { 367 | -fx-background-color: rgba(0, 0, 0, 0); 368 | -fx-text-fill: rgba(217, 217, 217, 1); 369 | } 370 | .date-picker .date-picker-popup .next-month:hover { 371 | -fx-background-color: rgba(245, 245, 245, 1); 372 | -fx-text-fill: rgba(217, 217, 217, 1); 373 | } 374 | .date-picker .text-field { 375 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); 376 | } 377 | .date-picker:focused { 378 | -fx-border-color: rgba(64, 169, 255, 1) rgba(64, 169, 255, 1) rgba(64, 169, 255, 1) rgba(64, 169, 255, 1); 379 | } 380 | .table-view { 381 | -fx-selection-bar: rgba(255, 255, 255, 1); 382 | -fx-selection-bar-non-focused: rgba(255, 255, 255, 1); 383 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 384 | -fx-border-width: 1px 1px 1px 1px; 385 | -fx-background-insets: 0px 0px 0px 0px; 386 | } 387 | .table-view .column-header { 388 | -fx-background-color: rgba(255, 255, 255, 1); 389 | -fx-padding: 10px 5px 5px 5px; 390 | -fx-border-color: rgba(235, 238, 245, 1) rgba(235, 238, 245, 1) rgba(235, 238, 245, 1) rgba(235, 238, 245, 1); 391 | -fx-border-width: 0px 0.5px 0px 0.5px; 392 | } 393 | .table-view .filler { 394 | -fx-background-color: rgba(255, 255, 255, 1); 395 | } 396 | .table-view .table-row-cell { 397 | -fx-border-color: rgba(235, 238, 245, 1) rgba(235, 238, 245, 1) rgba(235, 238, 245, 1) rgba(235, 238, 245, 1); 398 | -fx-border-width: 0.5px 0px 0.5px 0px; 399 | } 400 | .table-view .table-row-cell:odd { 401 | -fx-background-color: rgba(250, 250, 250, 1); 402 | } 403 | .table-view .table-row-cell:hover { 404 | -fx-background-color: rgba(245, 247, 250, 1); 405 | } 406 | .table-view .table-row-cell:selected { 407 | -fx-background-color: rgba(236, 245, 255, 1); 408 | } 409 | .table-view .table-row-cell:selected .text { 410 | -fx-fill: rgba(0, 0, 0, 1); 411 | } 412 | .table-view .table-cell { 413 | -fx-padding: 10px 10px 10px 10px; 414 | -fx-font-size: 13px; 415 | } 416 | .table-view .table-cell:selected { 417 | -fx-text-fill: rgba(0, 0, 0, 1); 418 | } 419 | .table-view:focused { 420 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 421 | } 422 | .spinner { 423 | -fx-border-color: rgba(220, 223, 230, 1) rgba(220, 223, 230, 1) rgba(220, 223, 230, 1) rgba(220, 223, 230, 1); 424 | -fx-border-radius: 5px 5px 5px 5px; 425 | -fx-background-insets: 0px 0px 0px 0px; 426 | -fx-background-radius: 5px 5px 5px 5px; 427 | } 428 | .spinner .increment-arrow-button { 429 | -fx-cursor: HAND; 430 | -fx-background-color: rgba(245, 247, 250, 1); 431 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(220, 223, 230, 1) rgba(220, 223, 230, 1); 432 | } 433 | .spinner .increment-arrow-button:hover .increment-arrow { 434 | -fx-background-color: rgba(64, 158, 255, 1); 435 | } 436 | .spinner .increment-arrow-button .increment-arrow { 437 | -fx-shape: "M887.328477 617.152318 533.951458 267.007553c-0.512619-0.512619-1.216181-0.672598-1.759763-1.152533-0.127295-0.127295-0.159978-0.319957-0.287273-0.447252-12.576374-12.416396-32.831716-12.352748-45.280796 0.192662L136.511544 618.944765c-12.447359 12.576374-12.352748 32.800753 0.192662 45.248112 6.239161 6.175514 14.399785 9.280473 22.527725 9.280473 8.224271 0 16.479505-3.168606 22.720387-9.471415L509.792985 333.185325l332.480043 329.407768c6.239161 6.175514 14.368821 9.280473 22.527725 9.280473 8.255235 0 16.479505-3.168606 22.720387-9.471415C899.968499 649.85674 899.872168 629.599677 887.328477 617.152318z"; 438 | } 439 | .spinner .decrement-arrow-button { 440 | -fx-cursor: HAND; 441 | -fx-background-color: rgba(245, 247, 250, 1); 442 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(220, 223, 230, 1); 443 | } 444 | .spinner .decrement-arrow-button:hover .decrement-arrow { 445 | -fx-background-color: rgba(64, 158, 255, 1); 446 | } 447 | .spinner .decrement-arrow-button .decrement-arrow { 448 | -fx-shape: "M890.335385 330.911222c-12.576374-12.416396-32.800753-12.352748-45.248112 0.192662L517.248327 661.951458 184.831931 332.512727c-12.576374-12.447359-32.800753-12.352748-45.280796 0.192662-12.447359 12.576374-12.352748 32.831716 0.192662 45.280796l353.311652 350.112082c0.543583 0.543583 1.247144 0.672598 1.792447 1.183497 0.127295 0.127295 0.159978 0.287273 0.287273 0.416288 6.239161 6.175514 14.399785 9.280473 22.527725 9.280473 8.224271 0 16.479505-3.168606 22.720387-9.471415l350.112082-353.311652C902.975407 363.615643 902.880796 343.360301 890.335385 330.911222z"; 449 | } 450 | .spinner .text-field { 451 | -fx-border-color: rgba(255, 255, 255, 1) rgba(255, 255, 255, 1) rgba(255, 255, 255, 1) rgba(255, 255, 255, 1); 452 | } 453 | .spinner:hover { 454 | -fx-border-color: rgba(192, 196, 204, 1) rgba(192, 196, 204, 1) rgba(192, 196, 204, 1) rgba(192, 196, 204, 1); 455 | } 456 | .tab-pane { 457 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 458 | -fx-border-radius: 5px 5px 5px 5px; 459 | } 460 | .tab-pane .tab-header-background { 461 | -fx-background-color: rgba(0, 0, 0, 0); 462 | -fx-border-color: rgba(228, 231, 237, 1) rgba(228, 231, 237, 1) rgba(228, 231, 237, 1) rgba(228, 231, 237, 1); 463 | -fx-border-width: 0px 0px 3px 0px; 464 | } 465 | .tab-pane:top .tab-header-area { 466 | -fx-background-insets: 0px 0px 1px 0px; 467 | -fx-padding: 5px 2px 0px 0px; 468 | } 469 | .tab-pane .tab { 470 | -fx-padding: 5px 16px 5px 16px; 471 | -fx-cursor: HAND; 472 | -fx-background-color: rgba(0, 0, 0, 0); 473 | -fx-border-width: 0px 0px 3px 0px; 474 | -fx-border-color: rgba(228, 231, 237, 1) rgba(228, 231, 237, 1) rgba(228, 231, 237, 1) rgba(228, 231, 237, 1); 475 | } 476 | .tab-pane .tab:selected { 477 | -fx-border-color: rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1); 478 | } 479 | .tab-pane .tab:selected .tab-label { 480 | -fx-text-fill: rgba(64, 158, 255, 1); 481 | } 482 | .tab-pane .tab:hover .tab-label { 483 | -fx-text-fill: rgba(64, 158, 255, 1); 484 | } 485 | .tab-pane .tab .tab-label { 486 | -fx-font-size: 15px; 487 | } 488 | .tab-pane .tab .focus-indicator { 489 | -fx-border-width: 0px 0px 0px 0px; 490 | } 491 | .pagination .left-arrow-button { 492 | -fx-background-color: rgba(240, 242, 245, 1); 493 | -fx-background-insets: 0px 0px 0px 0px; 494 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); 495 | } 496 | .pagination .left-arrow-button:hover .left-arrow { 497 | -fx-background-color: rgba(64, 158, 255, 1); 498 | } 499 | .pagination .left-arrow-button .left-arrow { 500 | -fx-shape: "M401.066667 512l302.933333 302.933333-59.733333 59.733334L341.333333 571.733333 281.6 512 341.333333 452.266667l302.933334-302.933334 59.733333 59.733334L401.066667 512z"; 501 | } 502 | .pagination .right-arrow-button { 503 | -fx-background-color: rgba(240, 242, 245, 1); 504 | -fx-background-insets: 0px 0px 0px 0px; 505 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); 506 | } 507 | .pagination .right-arrow-button:hover { 508 | -fx-padding: 0px 0px 0px 0px; 509 | } 510 | .pagination .right-arrow-button:hover .right-arrow { 511 | -fx-background-color: rgba(64, 158, 255, 1); 512 | } 513 | .pagination .right-arrow-button .right-arrow { 514 | -fx-shape: "M584.533333 512l-302.933333 302.933333L341.333333 874.666667l302.933334-302.933334 59.733333-59.733333-59.733333-59.733333L341.333333 145.066667 281.6 209.066667l302.933333 302.933333z"; 515 | } 516 | .pagination .number-button { 517 | -fx-background-color: rgba(240, 242, 245, 1); 518 | -fx-background-insets: 0px 0px 0px 0px; 519 | -fx-background-radius: 3px 3px 3px 3px; 520 | -fx-border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0); 521 | -fx-cursor: HAND; 522 | } 523 | .pagination .number-button:hover { 524 | -fx-text-fill: rgba(64, 158, 255, 1); 525 | } 526 | .pagination .number-button:selected { 527 | -fx-background-color: rgba(64, 158, 255, 1); 528 | -fx-text-fill: rgba(255, 255, 255, 1); 529 | } 530 | .context-menu { 531 | -fx-background-insets: 0px 0px 0px 0px; 532 | } 533 | .context-menu .menu-item:hover, .context-menu .menu-item:focused { 534 | -fx-background-color: rgba(238, 238, 238, 1); 535 | } 536 | .context-menu .menu-item .label { 537 | -fx-text-fill: rgba(0, 0, 0, 1); 538 | -fx-padding: 5px 100px 5px 5px; 539 | } 540 | .slider .track { 541 | -fx-background-color: rgba(228, 231, 237, 1); 542 | } 543 | .slider .thumb { 544 | -fx-background-color: rgba(255, 255, 255, 1); 545 | -fx-border-color: rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1) rgba(64, 158, 255, 1); 546 | -fx-border-radius: 1em 1em 1em 1em; 547 | -fx-cursor: HAND; 548 | } 549 | .slider .thumb:pressed { 550 | -fx-background-color: rgba(228, 231, 237, 1); 551 | } 552 | .progress-bar { 553 | -fx-background-color: rgba(255, 255, 255, 1); 554 | -fx-background-insets: 0px 0px 0px 0px; 555 | -fx-padding: 0px 0px 0px 0px; 556 | } 557 | .progress-bar .track { 558 | -fx-background-color: rgba(235, 238, 245, 1); 559 | } 560 | .progress-bar .bar { 561 | -fx-background-color: rgba(64, 158, 255, 1); 562 | } 563 | .tree-view { 564 | -fx-background-color: rgba(255, 255, 255, 1); 565 | } 566 | .tree-view .tree-cell { 567 | -fx-background-color: rgba(255, 255, 255, 1); 568 | -fx-text-fill: rgba(0, 0, 0, 1); 569 | -fx-cursor: HAND; 570 | } 571 | .tree-view .tree-cell:hover { 572 | -fx-background-color: rgba(245, 247, 250, 1); 573 | } 574 | .tree-view .tree-cell:selected { 575 | -fx-background-color: rgba(245, 247, 250, 1); 576 | } 577 | .tree-view .tree-cell:empty { 578 | -fx-background-color: rgba(0, 0, 0, 0); 579 | } 580 | .tree-view .tree-cell .tree-disclosure-node .arrow { 581 | -fx-background-color: rgba(168, 171, 178, 1); 582 | } -------------------------------------------------------------------------------- /src/main/resources/cloud_css/ElementTextField.bss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anivie/ElementFX/ab1768d96b4787d4c07f5655e88b864c61ab5690/src/main/resources/cloud_css/ElementTextField.bss -------------------------------------------------------------------------------- /src/main/resources/cloud_css/ElementTextField.css: -------------------------------------------------------------------------------- 1 | .default-text-field { 2 | -fx-border-radius: 5px 5px 5px 5px; 3 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 4 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 5 | -fx-accent: rgba(46, 188, 232, 1); 6 | -fx-background-color: rgba(255, 255, 255, 1); 7 | -fx-padding: 5px 3px 5px 3px; 8 | -fx-font-size: 14px; 9 | } 10 | .default-text-field:focused { 11 | -fx-border-color: rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1) rgba(50, 150, 255, 1); 12 | } 13 | 14 | .green-text-field { 15 | -fx-border-radius: 5px 5px 5px 5px; 16 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 17 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 18 | -fx-accent: #95d475; 19 | -fx-background-color: rgba(255, 255, 255, 1); 20 | -fx-padding: 5px 3px 5px 3px; 21 | -fx-font-size: 14px; 22 | } 23 | .green-text-field:focused { 24 | -fx-border-color: #67C23A; 25 | } 26 | 27 | .orange-text-field { 28 | -fx-border-radius: 5px 5px 5px 5px; 29 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 30 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 31 | -fx-accent: #eebe77; 32 | -fx-background-color: rgba(255, 255, 255, 1); 33 | -fx-padding: 5px 3px 5px 3px; 34 | -fx-font-size: 14px; 35 | } 36 | .orange-text-field:focused { 37 | -fx-border-color: #E6A23C; 38 | } 39 | 40 | .gray-text-field { 41 | -fx-border-radius: 5px 5px 5px 5px; 42 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 43 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 44 | -fx-accent: #b1b3b8; 45 | -fx-background-color: rgba(255, 255, 255, 1); 46 | -fx-padding: 5px 3px 5px 3px; 47 | -fx-font-size: 14px; 48 | } 49 | .gray-text-field:focused { 50 | -fx-border-color: #909399; 51 | } 52 | 53 | .red-text-field { 54 | -fx-border-radius: 5px 5px 5px 5px; 55 | -fx-border-color: rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1) rgba(193, 197, 205, 1); 56 | -fx-border-width: 1.3px 1.3px 1.3px 1.3px; 57 | -fx-accent: #f89898; 58 | -fx-background-color: rgba(255, 255, 255, 1); 59 | -fx-padding: 5px 3px 5px 3px; 60 | -fx-font-size: 14px; 61 | } 62 | .red-text-field:focused { 63 | -fx-border-color: #F56C6C; 64 | } -------------------------------------------------------------------------------- /src/test/java/mains.java: -------------------------------------------------------------------------------- 1 | import ink.bluecloud.css.CssResources; 2 | import ink.bluecloud.css.ElementButton; 3 | import ink.bluecloud.css.ElementButtonKt; 4 | import javafx.application.Application; 5 | import javafx.scene.Scene; 6 | import javafx.scene.control.Button; 7 | import javafx.scene.control.TextField; 8 | import javafx.stage.Stage; 9 | 10 | class mains extends Application { 11 | @Override 12 | public void start(Stage primaryStage) throws Exception { 13 | Button button = new Button(); 14 | ElementButtonKt.theme(button, ElementButton.grayButton); 15 | Scene scene = new Scene(new TextField()); 16 | scene.getStylesheets().add(CssResources.globalCssFile); 17 | 18 | 19 | primaryStage.setScene(scene); 20 | primaryStage.setTitle("ElementForJavaFX"); 21 | primaryStage.show(); 22 | } 23 | } -------------------------------------------------------------------------------- /src/test/java/test.java: -------------------------------------------------------------------------------- 1 | import ink.bluecloud.css.CssResources; 2 | import javafx.application.Application; 3 | import javafx.scene.Scene; 4 | import javafx.scene.control.TextField; 5 | import javafx.stage.Stage; 6 | 7 | public class test { 8 | public static void main(String[] args) { 9 | Application.launch(mains.class); 10 | } 11 | } -------------------------------------------------------------------------------- /src/test/kotlin/BssCompiler.kt: -------------------------------------------------------------------------------- 1 | import javafx.css.Stylesheet 2 | import java.io.File 3 | 4 | fun main(args: Array) { 5 | /* 6 | args.forEach { 7 | val input = File(it) 8 | Stylesheet.convertToBinary(input, File(input.absolutePath.replace(".css",".bss"))) 9 | } 10 | */ 11 | 12 | File("C:\\Users\\anivi\\OneDrive\\桌面").listFiles().filter { it.extension == "css" }.forEach { 13 | val input = File(it.absolutePath) 14 | Stylesheet.convertToBinary(input, File(input.absolutePath.replace(".css",".bss"))) 15 | } 16 | } -------------------------------------------------------------------------------- /src/test/kotlin/devapp/CloudStyleGlobal.kt: -------------------------------------------------------------------------------- 1 | package devapp 2 | 3 | import javafx.scene.Cursor.HAND 4 | import javafx.scene.paint.Color.* 5 | import javafx.scene.paint.Paint 6 | import javafx.scene.text.FontWeight 7 | import tornadofx.* 8 | 9 | class CloudStyleGlobal:Stylesheet() { 10 | companion object{ 11 | val selectionBar by cssproperty>("-fx-selection-bar") 12 | val selectionBarNonFocused by cssproperty>("-fx-selection-bar-non-focused") 13 | } 14 | 15 | init { 16 | val blueBorderColor = box(c(193, 197, 205)) 17 | val blueBorderColorFocus = box(c(50, 150, 255)) 18 | 19 | button { 20 | backgroundColor += c(236,245,255) 21 | backgroundRadius += box(5.px) 22 | borderColor += box(c(179,216,255)) 23 | borderRadius += box(5.px) 24 | textFill = c(64,158,255) 25 | 26 | and(hover) { 27 | backgroundColor += c(64,158,255) 28 | borderColor += box(c(64,158,255)) 29 | textFill = WHITE 30 | } 31 | 32 | and(pressed) { 33 | backgroundColor += c(58,142,230) 34 | borderColor += box(c(58,142,230)) 35 | textFill = WHITE 36 | } 37 | 38 | fontSize = 15.px 39 | padding = box(5.px,10.px) 40 | cursor = HAND 41 | } 42 | 43 | textField { 44 | borderRadius += box(5.px) 45 | borderColor += blueBorderColor 46 | borderWidth += box(1.3.px) 47 | 48 | accentColor = c(46,188,232) 49 | 50 | backgroundColor += WHITE 51 | padding = box(5.px,3.px) 52 | fontSize = 14.px 53 | 54 | and(focused) { 55 | borderColor += blueBorderColorFocus 56 | } 57 | } 58 | 59 | listView { 60 | listCell { 61 | and(odd) { 62 | backgroundColor += WHITE 63 | } 64 | and(hover) { 65 | backgroundColor += c(245,247,250) 66 | } 67 | 68 | backgroundColor += WHITE 69 | 70 | fontSize = 15.px 71 | textFill = c(117,117,117) 72 | 73 | padding = box(10.px,0.px,10.px,5.px) 74 | borderColor += box(TRANSPARENT,TRANSPARENT,c(235,238,245),TRANSPARENT) 75 | } 76 | 77 | and(focused) { 78 | listCell { 79 | and(selected) { 80 | backgroundColor += c(236,245,255) 81 | textFill = c(117,117,117) 82 | } 83 | } 84 | } 85 | 86 | scrollBar { 87 | decrementArrow { 88 | minWidth = 0.px 89 | minHeight = 0.px 90 | prefWidth = 0.px 91 | prefHeight = 0.px 92 | visibility= FXVisibility.HIDDEN 93 | } 94 | incrementArrow{ 95 | minWidth = 0.px 96 | minHeight = 0.px 97 | prefWidth = 0.px 98 | prefHeight = 0.px 99 | visibility= FXVisibility.HIDDEN 100 | } 101 | decrementButton{ 102 | minWidth = 0.px 103 | minHeight = 0.px 104 | prefWidth = 0.px 105 | prefHeight = 0.px 106 | visibility= FXVisibility.HIDDEN 107 | } 108 | incrementButton{ 109 | minWidth = 0.px 110 | minHeight = 0.px 111 | prefWidth = 0.px 112 | prefHeight = 0.px 113 | visibility= FXVisibility.HIDDEN 114 | } 115 | 116 | and(vertical) { 117 | padding = box(0.px) 118 | prefWidth = 9.px 119 | backgroundColor += WHITE 120 | 121 | thumb{ 122 | backgroundColor += c(221,222,224) 123 | backgroundInsets += box(0.px) 124 | backgroundRadius += box(5.px) 125 | 126 | and(pressed) { 127 | backgroundColor += c(199,201,204) 128 | } 129 | } 130 | } 131 | } 132 | 133 | and(focused) { 134 | borderColor += blueBorderColorFocus 135 | } 136 | 137 | borderColor += blueBorderColor 138 | borderWidth += box(1.px) 139 | 140 | backgroundInsets += box(0.px) 141 | } 142 | 143 | textArea { 144 | content { 145 | backgroundColor += WHITE 146 | } 147 | borderRadius += box(5.px) 148 | borderColor += blueBorderColor 149 | borderWidth += box(1.3.px) 150 | 151 | accentColor = c("2EBCE8") 152 | 153 | backgroundColor += WHITE 154 | padding = box(5.px,3.px) 155 | fontSize = 17.px 156 | 157 | and(focused) { 158 | borderColor += blueBorderColorFocus 159 | } 160 | 161 | scrollBar { 162 | decrementArrow { 163 | minWidth = 0.px 164 | minHeight = 0.px 165 | prefWidth = 0.px 166 | prefHeight = 0.px 167 | visibility= FXVisibility.HIDDEN 168 | } 169 | incrementArrow{ 170 | minWidth = 0.px 171 | minHeight = 0.px 172 | prefWidth = 0.px 173 | prefHeight = 0.px 174 | visibility= FXVisibility.HIDDEN 175 | } 176 | decrementButton{ 177 | minWidth = 0.px 178 | minHeight = 0.px 179 | prefWidth = 0.px 180 | prefHeight = 0.px 181 | visibility= FXVisibility.HIDDEN 182 | } 183 | incrementButton{ 184 | minWidth = 0.px 185 | minHeight = 0.px 186 | prefWidth = 0.px 187 | prefHeight = 0.px 188 | visibility= FXVisibility.HIDDEN 189 | } 190 | 191 | and(vertical, horizontal) { 192 | padding = box(0.px) 193 | prefWidth = 9.px 194 | backgroundColor += WHITE 195 | 196 | thumb{ 197 | backgroundColor += c(236,245,255) 198 | backgroundInsets += box(0.px) 199 | backgroundRadius += box(0.px) 200 | 201 | and(pressed) { 202 | backgroundColor += c(124,188,255) 203 | } 204 | } 205 | } 206 | } 207 | } 208 | 209 | label { 210 | fontSize = 13.px 211 | textFill = c(117,117,117) 212 | } 213 | 214 | comboBox { 215 | backgroundColor += WHITE 216 | 217 | borderColor += blueBorderColor 218 | borderRadius += box(5.px) 219 | 220 | cursor = HAND 221 | 222 | child(listCell) { 223 | fontSize = 17.px 224 | } 225 | 226 | child(arrowButton) { 227 | child(arrow) { 228 | shape = "M460.8 755.2a26.112 26.112 0 0 1-18.944-8.704L97.792 363.008a25.6 25.6 0 1 1 37.888-34.304L460.8 691.2l326.656-363.008a25.6 25.6 0 0 1 37.888 34.304L481.28 747.008a26.112 26.112 0 0 1-20.48 8.192z" 229 | backgroundColor += c(220,223,230) 230 | prefHeight = 5.px 231 | prefWidth = 10.px 232 | } 233 | 234 | and(pressed) { 235 | arrow { 236 | backgroundColor += c(103, 106, 113) 237 | } 238 | } 239 | } 240 | 241 | child(comboBoxPopup) { 242 | listView { 243 | listCell { 244 | and(hover) { 245 | backgroundColor += c(245,247,250) 246 | } 247 | 248 | and(selected) { 249 | textFill = c(64,158,254) 250 | backgroundColor += c(245,247,250) 251 | } 252 | 253 | backgroundColor += WHITE 254 | textFill = c(0,0,0,0.5) 255 | fontSize = 17.px 256 | cursor = HAND 257 | } 258 | borderColor += box(c(228,231,237)) 259 | } 260 | 261 | scrollBar { 262 | decrementArrow { 263 | minWidth = 0.px 264 | minHeight = 0.px 265 | prefWidth = 0.px 266 | prefHeight = 0.px 267 | visibility= FXVisibility.HIDDEN 268 | } 269 | incrementArrow{ 270 | minWidth = 0.px 271 | minHeight = 0.px 272 | prefWidth = 0.px 273 | prefHeight = 0.px 274 | visibility= FXVisibility.HIDDEN 275 | } 276 | decrementButton{ 277 | minWidth = 0.px 278 | minHeight = 0.px 279 | prefWidth = 0.px 280 | prefHeight = 0.px 281 | visibility= FXVisibility.HIDDEN 282 | } 283 | incrementButton{ 284 | minWidth = 0.px 285 | minHeight = 0.px 286 | prefWidth = 0.px 287 | prefHeight = 0.px 288 | visibility= FXVisibility.HIDDEN 289 | } 290 | 291 | and(vertical) { 292 | padding = box(0.px) 293 | prefWidth = 9.px 294 | backgroundColor += WHITE 295 | 296 | thumb{ 297 | backgroundColor += c(236,245,255) 298 | backgroundInsets += box(0.px) 299 | backgroundRadius += box(0.px) 300 | 301 | and(pressed) { 302 | backgroundColor += c(124,188,255) 303 | } 304 | } 305 | } 306 | } 307 | } 308 | 309 | and(focused) { 310 | borderColor += blueBorderColorFocus 311 | } 312 | 313 | and(editable) { 314 | child(textField) { 315 | borderWidth += box(0.px) 316 | } 317 | 318 | child(arrowButton) { 319 | backgroundColor += WHITE 320 | } 321 | } 322 | } 323 | 324 | checkBox { 325 | box { 326 | backgroundColor += WHITE 327 | backgroundRadius += box(3.px) 328 | 329 | borderColor += blueBorderColor 330 | borderRadius += box(3.px) 331 | } 332 | 333 | and(selected) { 334 | box { 335 | backgroundColor += c(64,158,255) 336 | borderColor += blueBorderColorFocus 337 | } 338 | 339 | mark { 340 | backgroundColor += WHITE 341 | shape = "M299,396l2-2,3,3,6-6,2,2-8,8Z" 342 | } 343 | } 344 | fontSize = 14.px 345 | cursor = HAND 346 | textFill = c(117,117,117) 347 | } 348 | 349 | scrollPane { 350 | viewport { 351 | backgroundColor += TRANSPARENT 352 | } 353 | backgroundColor += TRANSPARENT 354 | } 355 | 356 | scrollBar { 357 | decrementArrow { 358 | minWidth = 0.px 359 | minHeight = 0.px 360 | prefWidth = 0.px 361 | prefHeight = 0.px 362 | visibility= FXVisibility.HIDDEN 363 | } 364 | incrementArrow{ 365 | minWidth = 0.px 366 | minHeight = 0.px 367 | prefWidth = 0.px 368 | prefHeight = 0.px 369 | visibility= FXVisibility.HIDDEN 370 | } 371 | decrementButton{ 372 | minWidth = 0.px 373 | minHeight = 0.px 374 | prefWidth = 0.px 375 | prefHeight = 0.px 376 | visibility= FXVisibility.HIDDEN 377 | } 378 | incrementButton{ 379 | minWidth = 0.px 380 | minHeight = 0.px 381 | prefWidth = 0.px 382 | prefHeight = 0.px 383 | visibility= FXVisibility.HIDDEN 384 | } 385 | 386 | and(vertical) { 387 | padding = box(0.px) 388 | prefWidth = 9.px 389 | backgroundColor += WHITE 390 | 391 | thumb{ 392 | backgroundColor += c(236,245,255) 393 | backgroundInsets += box(0.px) 394 | backgroundRadius += box(0.px) 395 | 396 | and(pressed) { 397 | backgroundColor += c(124,188,255) 398 | } 399 | } 400 | } 401 | and(horizontal) { 402 | padding = box(0.px) 403 | prefHeight = 9.px 404 | backgroundColor += WHITE 405 | 406 | thumb{ 407 | backgroundColor += c(236,245,255) 408 | backgroundInsets += box(0.px) 409 | backgroundRadius += box(0.px) 410 | 411 | and(pressed) { 412 | backgroundColor += c(124,188,255) 413 | } 414 | } 415 | } 416 | } 417 | 418 | datePicker { 419 | arrowButton { 420 | backgroundColor += WHITE 421 | cursor = HAND 422 | 423 | and(hover, focused) { 424 | backgroundColor += c(247, 247, 247) 425 | } 426 | 427 | child(arrow) { 428 | shape = "M896 448H128v447.957333l477.738667 0.021334L896 895.957333V448z m0-42.666667V192.042667C896 192 768 192 768 192V149.333333h128.042667A42.666667 42.666667 0 0 1 938.666667 192.042667v703.914666A42.624 42.624 0 0 1 896.064 938.666667H127.936A42.666667 42.666667 0 0 1 85.333333 895.957333V192.042667C85.333333 168.469333 104.256 149.333333 127.957333 149.333333H256v42.666667l-128 0.042667V405.333333h768zM298.666667 85.333333h42.666666v170.666667h-42.666666V85.333333z m384 0h42.666666v170.666667h-42.666666V85.333333zM384 149.333333h256v42.666667H384V149.333333z" 429 | } 430 | } 431 | 432 | datePickerPopup { 433 | child(monthYearPane) { 434 | spinner { 435 | child(button) { 436 | cursor = HAND 437 | backgroundColor += WHITE 438 | borderColor += box(TRANSPARENT) 439 | } 440 | 441 | child(label) { 442 | fontWeight = FontWeight.BOLD 443 | } 444 | } 445 | 446 | backgroundColor += WHITE 447 | borderWidth += box(0.px,0.px,1.px,0.px) 448 | borderColor += box(c(217,217,217)) 449 | } 450 | 451 | child(calendarGrid) { 452 | backgroundColor += WHITE 453 | } 454 | 455 | dateCell { 456 | and(hover) { 457 | backgroundColor += c(245,245,245) 458 | textFill = BLACK 459 | } 460 | and(focused) { 461 | backgroundColor += c(24,144,255) 462 | textFill = WHITE 463 | } 464 | 465 | backgroundRadius += box(3.px) 466 | borderColor += box(TRANSPARENT) 467 | cursor = HAND 468 | } 469 | 470 | nextMonth { 471 | and(hover) { 472 | backgroundColor += c(245,245,245) 473 | textFill = c(217,217,217) 474 | } 475 | 476 | backgroundColor += TRANSPARENT 477 | textFill = c(217,217,217) 478 | } 479 | } 480 | 481 | textField { 482 | borderColor += box(TRANSPARENT) 483 | } 484 | 485 | and(focused) { 486 | borderColor += box(c(64,169,255)) 487 | } 488 | 489 | borderColor += box(c(217,217,217)) 490 | borderRadius += box(3.px) 491 | 492 | backgroundColor += WHITE 493 | } 494 | 495 | tableView { 496 | columnHeader { 497 | backgroundColor += WHITE 498 | padding = box(10.px, 5.px, 5.px, 5.px) 499 | 500 | borderColor += box(c(235,238,245)) 501 | borderWidth += box(0.px, 0.5.px) 502 | } 503 | filler { 504 | backgroundColor += WHITE 505 | } 506 | 507 | tableRowCell { 508 | and(odd) { 509 | backgroundColor += c(250,250,250) 510 | } 511 | 512 | and(hover) { 513 | backgroundColor += c(245,247,250) 514 | } 515 | and(selected) { 516 | backgroundColor += c(236,245,255) 517 | text { 518 | fill = BLACK 519 | } 520 | } 521 | 522 | borderColor += box(c(235,238,245)) 523 | borderWidth += box(0.5.px, 0.px) 524 | } 525 | 526 | tableCell { 527 | and(selected) { 528 | textFill = BLACK 529 | } 530 | 531 | padding = box(10.px) 532 | fontSize = 13.px 533 | } 534 | 535 | selectionBar.value += WHITE 536 | selectionBarNonFocused.value += WHITE 537 | 538 | 539 | and(focused) { 540 | borderColor += blueBorderColorFocus 541 | } 542 | borderColor += blueBorderColor 543 | borderWidth += box(1.px) 544 | 545 | backgroundInsets += box(0.px) 546 | } 547 | 548 | spinner { 549 | incrementArrowButton { 550 | and(hover) { 551 | incrementArrow { 552 | backgroundColor += c(64,158,255) 553 | } 554 | } 555 | incrementArrow { 556 | shape = "M887.328477 617.152318 533.951458 267.007553c-0.512619-0.512619-1.216181-0.672598-1.759763-1.152533-0.127295-0.127295-0.159978-0.319957-0.287273-0.447252-12.576374-12.416396-32.831716-12.352748-45.280796 0.192662L136.511544 618.944765c-12.447359 12.576374-12.352748 32.800753 0.192662 45.248112 6.239161 6.175514 14.399785 9.280473 22.527725 9.280473 8.224271 0 16.479505-3.168606 22.720387-9.471415L509.792985 333.185325l332.480043 329.407768c6.239161 6.175514 14.368821 9.280473 22.527725 9.280473 8.255235 0 16.479505-3.168606 22.720387-9.471415C899.968499 649.85674 899.872168 629.599677 887.328477 617.152318z" 557 | } 558 | 559 | cursor = HAND 560 | backgroundColor += c(245,247,250) 561 | borderColor += box(TRANSPARENT, TRANSPARENT, c(220,223,230), c(220,223,230)) 562 | } 563 | 564 | decrementArrowButton { 565 | and(hover) { 566 | decrementArrow { 567 | backgroundColor += c(64,158,255) 568 | } 569 | } 570 | decrementArrow { 571 | shape = "M890.335385 330.911222c-12.576374-12.416396-32.800753-12.352748-45.248112 0.192662L517.248327 661.951458 184.831931 332.512727c-12.576374-12.447359-32.800753-12.352748-45.280796 0.192662-12.447359 12.576374-12.352748 32.831716 0.192662 45.280796l353.311652 350.112082c0.543583 0.543583 1.247144 0.672598 1.792447 1.183497 0.127295 0.127295 0.159978 0.287273 0.287273 0.416288 6.239161 6.175514 14.399785 9.280473 22.527725 9.280473 8.224271 0 16.479505-3.168606 22.720387-9.471415l350.112082-353.311652C902.975407 363.615643 902.880796 343.360301 890.335385 330.911222z" 572 | } 573 | 574 | cursor = HAND 575 | backgroundColor += c(245,247,250) 576 | borderColor += box(TRANSPARENT, TRANSPARENT, TRANSPARENT,c(220,223,230)) 577 | } 578 | 579 | textField { 580 | borderColor += box(WHITE) 581 | } 582 | 583 | 584 | borderColor += box(c(220,223,230)) 585 | borderRadius += box(5.px) 586 | 587 | backgroundInsets += box(0.px) 588 | backgroundRadius += box(5.px) 589 | 590 | and(hover) { 591 | borderColor += box(c(192,196,204)) 592 | } 593 | } 594 | 595 | tabPane { 596 | tabHeaderBackground { 597 | backgroundColor += TRANSPARENT 598 | borderColor += box(c(228,231,237)) 599 | borderWidth += box(0.px, 0.px, 3.px, 0.px) 600 | } 601 | 602 | and(top) { 603 | tabHeaderArea { 604 | backgroundInsets += box(0.px, 0.px, 1.px, 0.px) 605 | padding = box(5.px,2.px,0.px,0.px) 606 | } 607 | } 608 | 609 | tab { 610 | and(selected) { 611 | borderColor += box(c(64,158,255)) 612 | 613 | tabLabel { 614 | textFill = c(64,158,255) 615 | } 616 | } 617 | and(hover) { 618 | tabLabel { 619 | textFill = c(64,158,255) 620 | } 621 | } 622 | 623 | tabLabel { 624 | fontSize = 15.px 625 | } 626 | focusIndicator { 627 | borderWidth += box(0.px) 628 | } 629 | padding = box(5.0.px, 16.0.px) 630 | 631 | cursor = HAND 632 | 633 | backgroundColor += TRANSPARENT 634 | borderWidth += box(0.px, 0.px, 3.px, 0.px) 635 | borderColor += box(c(228,231,237)) 636 | } 637 | 638 | borderColor += blueBorderColor 639 | borderRadius += box(5.px) 640 | } 641 | 642 | pagination { 643 | leftArrowButton { 644 | and(hover) { 645 | leftArrow { 646 | backgroundColor += c(64, 158, 255) 647 | } 648 | } 649 | leftArrow { 650 | shape = "M401.066667 512l302.933333 302.933333-59.733333 59.733334L341.333333 571.733333 281.6 512 341.333333 452.266667l302.933334-302.933334 59.733333 59.733334L401.066667 512z" 651 | } 652 | 653 | backgroundColor += c(240, 242, 245) 654 | backgroundInsets += box(0.px) 655 | borderColor += box(TRANSPARENT) 656 | } 657 | 658 | rightArrowButton { 659 | and(hover) { 660 | rightArrow { 661 | backgroundColor += c(64, 158, 255) 662 | } 663 | padding = box(0.px) 664 | } 665 | rightArrow { 666 | shape = "M584.533333 512l-302.933333 302.933333L341.333333 874.666667l302.933334-302.933334 59.733333-59.733333-59.733333-59.733333L341.333333 145.066667 281.6 209.066667l302.933333 302.933333z" 667 | } 668 | 669 | backgroundColor += c(240, 242, 245) 670 | backgroundInsets += box(0.px) 671 | borderColor += box(TRANSPARENT) 672 | } 673 | 674 | numberButton { 675 | and(hover) { 676 | textFill = c(64,158,255) 677 | } 678 | 679 | and(selected) { 680 | backgroundColor += c(64,158,255) 681 | textFill = WHITE 682 | } 683 | backgroundColor += c(240, 242, 245) 684 | backgroundInsets += box(0.px) 685 | backgroundRadius += box(3.px) 686 | 687 | borderColor += box(TRANSPARENT) 688 | cursor = HAND 689 | } 690 | } 691 | 692 | contextMenu { 693 | backgroundInsets += box(0.px) 694 | 695 | menuItem { 696 | and(hover, focused) { 697 | backgroundColor += c(238,238,238) 698 | } 699 | 700 | label { 701 | textFill = BLACK 702 | padding = box(5.px,100.px,5.px,5.px) 703 | } 704 | } 705 | } 706 | 707 | slider { 708 | track { 709 | backgroundColor += c(228,231,237) 710 | } 711 | 712 | thumb { 713 | backgroundColor += WHITE 714 | borderColor += box(c(64,158,255)) 715 | borderRadius += box(1.em) 716 | cursor = HAND 717 | 718 | and(pressed) { 719 | backgroundColor += c(228,231,237) 720 | } 721 | } 722 | } 723 | 724 | progressBar { 725 | backgroundColor += WHITE 726 | backgroundInsets += box(0.px) 727 | padding = box(0.px) 728 | 729 | track { 730 | backgroundColor += c(235,238,245) 731 | } 732 | 733 | bar { 734 | backgroundColor += c(64,158,255) 735 | } 736 | } 737 | 738 | treeView { 739 | treeCell { 740 | and(hover) { 741 | backgroundColor += c(245,247,250) 742 | } 743 | and (selected) { 744 | backgroundColor += c(245,247,250) 745 | } 746 | and(empty) { 747 | backgroundColor += TRANSPARENT 748 | } 749 | 750 | treeDisclosureNode { 751 | arrow { 752 | backgroundColor += c(168,171,178) 753 | } 754 | } 755 | 756 | backgroundColor += WHITE 757 | textFill = BLACK 758 | cursor = HAND 759 | } 760 | 761 | backgroundColor += WHITE 762 | } 763 | } 764 | } -------------------------------------------------------------------------------- /src/test/kotlin/devapp/app.kt: -------------------------------------------------------------------------------- 1 | package devapp 2 | 3 | import devapp.treeview.treeview 4 | import javafx.application.Application 5 | import tornadofx.App 6 | import tornadofx.dumpStylesheets 7 | import tornadofx.reloadStylesheetsOnFocus 8 | import tornadofx.reloadViewsOnFocus 9 | 10 | class app:App(treeview::class) { 11 | init { 12 | reloadViewsOnFocus() 13 | reloadStylesheetsOnFocus() 14 | dumpStylesheets() 15 | } 16 | } 17 | 18 | fun main() { 19 | Application.launch(app::class.java) 20 | } -------------------------------------------------------------------------------- /src/test/kotlin/devapp/treeview/TreeClass.kt: -------------------------------------------------------------------------------- 1 | package devapp.treeview 2 | 3 | import javafx.scene.Cursor 4 | import javafx.scene.paint.Color 5 | import tornadofx.Stylesheet 6 | import tornadofx.c 7 | 8 | class TreeClass:Stylesheet() { 9 | init { 10 | treeView { 11 | treeCell { 12 | and(hover) { 13 | backgroundColor += c(245,247,250) 14 | } 15 | and (selected) { 16 | backgroundColor += c(245,247,250) 17 | } 18 | and(empty) { 19 | backgroundColor += Color.TRANSPARENT 20 | } 21 | 22 | treeDisclosureNode { 23 | arrow { 24 | backgroundColor += c(168,171,178) 25 | } 26 | } 27 | 28 | backgroundColor += Color.WHITE 29 | textFill = Color.BLACK 30 | cursor = Cursor.HAND 31 | } 32 | 33 | backgroundColor += Color.WHITE 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/test/kotlin/devapp/treeview/Treeview.kt: -------------------------------------------------------------------------------- 1 | package devapp.treeview 2 | 3 | import devapp.CloudStyleGlobal 4 | import javafx.util.StringConverter 5 | import tornadofx.* 6 | 7 | class treeview : View() { 8 | /* 9 | override val root = stackpane { 10 | val persons = listOf( 11 | Person("Mary Hanes", "Marketing"), 12 | Person("Steve Folley", "Customer Service"), 13 | Person("John Ramsy", "IT Help Desk"), 14 | Person("Erlick Foyes", "Customer Service"), 15 | Person("Erin James", "Marketing"), 16 | Person("Jacob Mays", "IT Help Desk"), 17 | Person("Larry Cable", "Customer Service") 18 | ) 19 | val departments = persons 20 | .map { 21 | it.department 22 | } 23 | .distinct() 24 | .map { 25 | Person(it, "") 26 | } 27 | 28 | treeview { 29 | // Create root item 30 | root = TreeItem(Person("Departments", "")) 31 | 32 | // Make sure the text in each TreeItem is the name of the Person 33 | cellFormat { text = it.name } 34 | 35 | // Generate items. Children of the root item will contain departments 36 | populate { parent -> 37 | if (parent == root) departments else persons.filter { it.department == parent.value.name } 38 | } 39 | } 40 | 41 | addStylesheet(TreeClass::class) 42 | addStylesheet(CloudStyleGlobal::class) 43 | } 44 | */ 45 | 46 | override val root = stackpane { 47 | combobox(values = listOf(Ports(21)).asObservable()) { 48 | converter = object : StringConverter() { 49 | override fun toString(`object`: Ports?): String { 50 | return `object`?.port.toString() 51 | } 52 | 53 | override fun fromString(string: String?): Ports { 54 | return Ports(21) 55 | } 56 | } 57 | 58 | isEditable = true 59 | } 60 | addStylesheet(CloudStyleGlobal::class) 61 | } 62 | 63 | data class Ports(val port: Int) 64 | 65 | } -------------------------------------------------------------------------------- /src/test/kotlin/testapp/Demo.kt: -------------------------------------------------------------------------------- 1 | package testapp 2 | 3 | import ink.bluecloud.css.ElementButton 4 | import ink.bluecloud.css.ElementTextField 5 | import ink.bluecloud.css.theme 6 | import ink.bluecloud.css.themes 7 | import javafx.application.Application 8 | import javafx.geometry.Insets 9 | import javafx.geometry.Pos 10 | import javafx.scene.Scene 11 | import javafx.scene.control.* 12 | import javafx.scene.layout.BorderPane 13 | import javafx.scene.layout.GridPane 14 | import javafx.scene.layout.HBox 15 | import javafx.scene.layout.Priority 16 | import javafx.scene.layout.VBox 17 | import javafx.stage.Stage 18 | 19 | class Demo:Application() { 20 | override fun start(primaryStage: Stage) { 21 | val loginButton = Button("Login").apply { 22 | maxWidth = Double.MAX_VALUE 23 | theme(ElementButton.greenButton) 24 | } 25 | val regButton = Button("Register").apply { 26 | theme(ElementButton.orangeButton) 27 | } 28 | 29 | val root = TabPane().apply { 30 | tabs += Tab("PersonalUser").apply { 31 | content = BorderPane().apply { 32 | bottom = HBox().apply { 33 | children += Button("Help?") 34 | alignment = Pos.CENTER_RIGHT 35 | padding = Insets(0.0,10.0,10.0,0.0) 36 | } 37 | 38 | center = VBox(10.0).apply { 39 | children += GridPane().apply { 40 | add(Label("Name:"),0,0) 41 | add(TextField(),1,0) 42 | 43 | add(Label("Password:"),0,1) 44 | add(TextField(),1,1) 45 | // add(Button("Help?"),2,1) 46 | 47 | 48 | add(CheckBox("Remember Password?").apply { 49 | isSelected = true 50 | },1,2) 51 | 52 | 53 | alignment = Pos.CENTER 54 | vgap = 10.0 55 | hgap = 5.0 56 | } 57 | 58 | children += HBox(5.0).apply { 59 | children += loginButton 60 | children += regButton 61 | 62 | HBox.setHgrow(loginButton,Priority.ALWAYS) 63 | HBox.setHgrow(regButton,Priority.NEVER) 64 | 65 | padding = Insets(0.0,30.0,0.0,30.0) 66 | alignment = Pos.CENTER 67 | } 68 | 69 | alignment = Pos.CENTER 70 | } 71 | } 72 | } 73 | 74 | tabs += Tab("BusinessUsers").apply { 75 | content = VBox(5.0).apply { 76 | children += TextField().apply { 77 | theme(ElementTextField.greenTextField) 78 | } 79 | children += TextField().apply { 80 | theme(ElementTextField.defaultTextField) 81 | } 82 | children += TextField().apply { 83 | theme(ElementTextField.grayTextField) 84 | } 85 | children += TextField().apply { 86 | theme(ElementTextField.orangeTextField) 87 | } 88 | children += TextField().apply { 89 | theme(ElementTextField.redTextField) 90 | } 91 | 92 | padding = Insets(10.0,10.0,0.0,10.0) 93 | } 94 | } 95 | 96 | tabClosingPolicy = TabPane.TabClosingPolicy.UNAVAILABLE 97 | style = "-fx-background-color:white" 98 | } 99 | 100 | primaryStage.init(root) 101 | } 102 | 103 | private fun Stage.init(root: TabPane) { 104 | scene = Scene(root,400.0,400.0).apply { 105 | themes { 106 | // it += globalCssFile 107 | // it += buttonCssFile 108 | } 109 | } 110 | title = "Element" 111 | show() 112 | } 113 | } 114 | 115 | fun main() { 116 | Application.launch(Demo::class.java) 117 | } 118 | --------------------------------------------------------------------------------