Darklaf - A themeable swing Look and Feel based on Darcula-Laf
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
8.0 KiB

5 years ago
# Darklaf - A Darcula Look and Feel
[![CI Status](https://github.com/weisJ/darklaf/workflows/CI/badge.svg?branch=master)](https://github.com/weisJ/darklaf/actions)
5 years ago
[![Native Libraries](https://github.com/weisJ/darklaf/workflows/Build%20Native%20Libraries/badge.svg)](https://github.com/weisJ/darklaf/actions?query=workflow%3A%22Build+Native+Libraries%22)
![Autostyle](https://github.com/weisJ/darklaf/workflows/Autostyle/badge.svg)
[![Maven Central](https://img.shields.io/maven-central/v/com.github.weisj/darklaf-core?label=Maven%20Central)](https://search.maven.org/artifact/com.github.weisj/darklaf-core)
5 years ago
5 years ago
This project is based on the [darcula](https://github.com/bulenkov/Darcula) look and feel for Swing.
5 years ago
# Screenshots
5 years ago
| | |
|:-:|:-:|
|![IntelliJ](https://github.com/weisJ/darklaf/blob/master/img/file_chooser/intellij.png)|![Darcula](https://github.com/weisJ/darklaf/blob/master/img/file_chooser/darcula.png)|
|![Solarized Light](https://github.com/weisJ/darklaf/blob/master/img/file_chooser/solatized_light.png)|![Solarized Dark](https://github.com/weisJ/darklaf/blob/master/img/file_chooser/solarized_dark.png)|
|![High Contrast Light](https://github.com/weisJ/darklaf/blob/master/img/file_chooser/high_constrast_light.png)|![High Contrast Dark](https://github.com/weisJ/darklaf/blob/master/img/file_chooser/high_constrast_dark.png)|
5 years ago
5 years ago
# Usage & [Features](https://github.com/weisJ/darklaf/wiki/Features)
A list of all features can be found [here](https://github.com/weisJ/darklaf/wiki/Features).
5 years ago
The LaF is compatible with Java >=1.8 (you need >=1.9 to get proper scaling).
5 years ago
You can find all property values on [weisj.github.io/darklaf-docs](https://weisj.github.io/darklaf-docs/)
5 years ago
5 years ago
This project is available on Maven Central:
5 years ago
### Maven
5 years ago
````xml
<dependency>
<groupId>com.github.weisj</groupId>
5 years ago
<artifactId>darklaf-core</artifactId>
5 years ago
<version>[2.0.3,)</version>
5 years ago
</dependency>
<dependency>
<!-- For the themes-->
<groupId>com.github.weisj</groupId>
5 years ago
<artifactId>darklaf-theme</artifactId>
5 years ago
<version>[2.0.3,)</version>
5 years ago
</dependency>
````
5 years ago
### Gradle
5 years ago
````kotlin
5 years ago
implementation("com.github.weisj:darklaf-core:[2.0.3,)")
implementation("com.github.weisj:darklaf-theme:[2.0.3,)") // For the themes
5 years ago
````
5 years ago
## Installation
5 years ago
The LookAndFeel can be easily installed using the `LafManager`
5 years ago
````java
5 years ago
LafManager.install(); // For default theme (IntelliJ)
5 years ago
````
or
````java
5 years ago
LafManager.install(new DarculaTheme()); // Specify the used theme.
5 years ago
````
5 years ago
or by using the UIManager
````java
LafManager.setTheme(new DarculaTheme());
UIManager.setLookAndFeel(DarkLaf.class.getCanonicalName());
````
5 years ago
5 years ago
**Note**: The recommended method is using the `LafManager` as it automatically handles reloading the ui.
5 years ago
### Choosing a theme
5 years ago
It is highly encouraged to provide users more than one theme. Forcing users to use a light/dark theme because of personal preferences might be degrading their experience in certain situations.
For the visually impaired darklaf provides a set of high contrast themes, `HighContrastThemeLight` and `HighContrastThemeDark`.
5 years ago
5 years ago
Darklaf supports detecting the system theme on macOS and Windows with the ability to automatically change the theme if the settings change.
5 years ago
5 years ago
````java
5 years ago
// This returns the preferred theme of the system settings.
LafManager.themeForPreferredStyle(getPreferredThemeStyle());
````
5 years ago
The following settings are picked up by darklaf:
5 years ago
| Windows | macOS | Setting |
|:-------------------------:|:-----------------------:|:--------------------|
5 years ago
| :ballot_box_with_check: | :ballot_box_with_check: | Light/Dark mode |
| :ballot_box_with_check: | :ballot_box_with_check: | High contrast mode |
| :ballot_box_with_check: | :ballot_box_with_check: | Accent color |
| | :ballot_box_with_check: | Selection color |
| :ballot_box_with_check: | | Font size |
5 years ago
5 years ago
You can use the `ThemeSettings` class with `ThemeSettings#showSettingsDialog` or `ThemeSettings#getSettingsPanel` to provide the user
the most possible customization.
5 years ago
## Example
````java
5 years ago
import com.github.weisj.darklaf.LafManager;
5 years ago
import javax.swing.*;
import java.awt.*;
public class DarklafDemo {
public static void main(final String[] args) {
5 years ago
SwingUtilities.invokeLater(() -> {
5 years ago
LafManager.install();
5 years ago
5 years ago
JFrame frame = new JFrame("Darklaf - A themeable LaF for Swing");
5 years ago
frame.setSize(600, 400);
JButton button = new JButton("Click here!");
JPanel content = new JPanel();
content.add(button);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(content);
frame.setVisible(true);
});
}
}
````
5 years ago
All custom component-variants and settings can be enabled by setting the appropriate client
5 years ago
property of the component.
5 years ago
They can be found [here](https://github.com/weisJ/darklaf/wiki/Features#alternative-visualsbehaviour-for-components).
5 years ago
5 years ago
This LookAndFeel supports custom window decorations (only on Windows at this point). In contrast to most other LaFs the native window behaviour is not compromised giving a seamless experience that still looks native.
5 years ago
# Build
./gradlew build
When building on Windows, you need a C++ toolchain installed to build native extension.
5 years ago
When building on macOS you need to have XCode (or the command line tools) installed to build the native extension.
5 years ago
If you want to build for platforms different from your machine you can download the respective native libraries
from the latest successful run of the [Build Native Libraries Action](https://github.com/weisJ/darklaf/actions?query=workflow%3A%22Build+Native+Libraries%22+branch%3Amaster) and place it in the corresponding `<variant>/libraries` folder.
Further details can be found in the respective `library.md` file. The libraries are then automatically included in the jar
when building the project.
When building the project there will be a message for every library that needs to be manually included.
5 years ago
**Note**: You can still build the project without the libraries, but then custom decorations won't be supported.
5 years ago
# Contribute
Here is a list of things that currently are not finished or need refinement. This list is a work in progress and being updated regulary. If you find any problems with the LaF feel free to submit an issue:
5 years ago
- [Native window decorations on Linux.](https://github.com/weisJ/darklaf/issues/2)
* See [/windows](https://github.com/weisJ/darklaf/tree/master/windows) for the Windows implementation.
* See [/macos(https://github.com/weisJ/darklaf/tree/master/macos) for the macOS implementation.
5 years ago
- Localization:
* Theme preferences panel. [here](https://github.com/weisJ/darklaf/blob/master/core/src/main/resources/theme_settings.properties)
* Other properties:
* [Windows title pane](https://github.com/weisJ/darklaf/blob/master/windows/src/main/java/com/github/weisj/darklaf/platform/windows/ui/WindowsTitlePane.java)
This also needs to have a bundle created in the first place.
5 years ago
# Artifacts
- Group ID: `com.github.weisj`
5 years ago
- Version: `2.0.3`
5 years ago
- Artifact IDs:
- `darklaf-core` The LaF itself. Include this in your project to use the LaF. Includes all other artifacts.
5 years ago
- `darklaf-theme` The themes to use with the LaF.
- `darklaf-property-loader` Library to load and parse property files and icon.
- `darklaf-utils` Shared utility classes for other modules.
- `darklaf-native-utils` Loading of native libraries.
5 years ago
- `darklaf-platform-base` Common classes for the platform modules.
- `darklaf-windows` Code specific to Windows.
- `darklaf-macos` Code specific to macOS.
5 years ago
5 years ago
# Projects using Darklaf
5 years ago
5 years ago
- [JMeter](https://github.com/apache/jmeter)
- [Litiengine](https://github.com/gurkenlabs/litiengine)
- [BoofVC](https://github.com/lessthanoptimal/BoofCV)
- [threadtear](https://github.com/GraxCode/threadtear)
5 years ago
5 years ago
Please send me your project and I'll add it here.
5 years ago
# License
This project is licensed under the [MIT license](https://github.com/weisJ/darklaf/blob/master/LICENSE).