-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
59 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,59 @@ | ||
# Color Scheme | ||
# Color Scheme | ||
Color scheme (`EditorColorScheme`) manages the colors of editor. | ||
|
||
Color types are represented by distinct integer IDs. `EditorColorScheme` internally maintains a map of color type ID to actual color. Built-in color types are defined as static integer constants in the class. | ||
|
||
Unlike `Language`, single `EditorColorScheme` instance can be applied to multiple editors. Color scheme will notify all the editor it serves, to update their appearance. You can manage appearance of your editors easily by using shared color scheme instance. Editor will detached from its color scheme when `CodeEditor#release` is invoked. | ||
|
||
The class holds editor by `WeakReference`, so editors can be safely recycled. | ||
|
||
## Update Color Scheme | ||
Get the color scheme of an editor by `CodeEditor#getColorScheme`. | ||
|
||
Use `EditorColorScheme#setColor(int, int)` to apply new colors to the editor. | ||
|
||
Example: | ||
::: code-group | ||
```Kotlin | ||
val scheme = editor.colorScheme | ||
scheme.setColor(EditorColorScheme.KEYWORD, Color.RED) | ||
``` | ||
```Java | ||
var scheme = editor.getColorScheme(); | ||
scheme.setColor(EditorColorScheme.KEYWORD, Color.RED); | ||
``` | ||
::: | ||
Be careful that multiple editors can share the same color scheme. Changing color scheme of one editor may lead to color changes in other editors, too. | ||
|
||
## Extend the Color Scheme | ||
Sometimes we need to extend the class to better define your own color scheme. | ||
### Override Default Colors | ||
Subclasses are expected to override `applyDefault()` to apply its default colors, though other methods are not final. | ||
|
||
After overriding this method, you will have to call super class's `applyDefault()` and then a series of setColor(int, int) calls to apply your colors. Sometimes we add new color types in the editor library. If super method is not called, some vital colors can be missing. | ||
### Add New Color Types | ||
You can use color IDs that are not in pre-defined ID pool for custom languages. We recommend adding a base offset for your custom color IDs. For example, first custom color type ID is `256`. This leaves enough space for editor's future built-in colors. | ||
|
||
The last pre-defined color type ID is `EditorColorScheme.END_COLOR_ID`. | ||
## Default Color Scheme | ||
By default, newly-created editor uses the global default color scheme. The default color scheme is shared by those editors, and can be obtained from `EditorColorScheme#getDefault`. | ||
|
||
You can update global default color scheme by `EditorColorScheme#setDefault`. | ||
* Update global default color scheme. Newly-created editor will use the new default color scheme. | ||
::: code-group | ||
```Kotlin | ||
EditorColorScheme.setDefault(MyColorScheme()) | ||
``` | ||
```Java | ||
EditorColorScheme.setDefault(new MyColorScheme()); | ||
``` | ||
::: | ||
* Update global default color scheme, and also apply to editors that are using the old default color scheme | ||
::: code-group | ||
```Kotlin | ||
EditorColorScheme.setDefault(MyColorScheme(), true) | ||
``` | ||
```Java | ||
EditorColorScheme.setDefault(new MyColorScheme(), true); | ||
``` | ||
::: |