mirror of https://github.com/termux/termux-app
91 lines
3.5 KiB
Java
91 lines
3.5 KiB
Java
package com.termux.terminal;
|
|
|
|
/**
|
|
* <p>
|
|
* Encodes effects, foreground and background colors into a 64 bit long, which are stored for each cell in a terminal
|
|
* row in {@link TerminalRow#mStyle}.
|
|
* </p>
|
|
* <p>
|
|
* The bit layout is:
|
|
* </p>
|
|
* - 16 flags (11 currently used).
|
|
* - 24 for foreground color (only 9 first bits if a color index).
|
|
* - 24 for background color (only 9 first bits if a color index).
|
|
*/
|
|
public final class TextStyle {
|
|
|
|
public final static int CHARACTER_ATTRIBUTE_BOLD = 1;
|
|
public final static int CHARACTER_ATTRIBUTE_ITALIC = 1 << 1;
|
|
public final static int CHARACTER_ATTRIBUTE_UNDERLINE = 1 << 2;
|
|
public final static int CHARACTER_ATTRIBUTE_BLINK = 1 << 3;
|
|
public final static int CHARACTER_ATTRIBUTE_INVERSE = 1 << 4;
|
|
public final static int CHARACTER_ATTRIBUTE_INVISIBLE = 1 << 5;
|
|
public final static int CHARACTER_ATTRIBUTE_STRIKETHROUGH = 1 << 6;
|
|
/**
|
|
* The selective erase control functions (DECSED and DECSEL) can only erase characters defined as erasable.
|
|
* <p>
|
|
* This bit is set if DECSCA (Select Character Protection Attribute) has been used to define the characters that
|
|
* come after it as erasable from the screen.
|
|
* </p>
|
|
*/
|
|
public final static int CHARACTER_ATTRIBUTE_PROTECTED = 1 << 7;
|
|
/** Dim colors. Also known as faint or half intensity. */
|
|
public final static int CHARACTER_ATTRIBUTE_DIM = 1 << 8;
|
|
/** If true (24-bit) color is used for the cell for foreground. */
|
|
private final static int CHARACTER_ATTRIBUTE_TRUECOLOR_FOREGROUND = 1 << 9;
|
|
/** If true (24-bit) color is used for the cell for foreground. */
|
|
private final static int CHARACTER_ATTRIBUTE_TRUECOLOR_BACKGROUND= 1 << 10;
|
|
|
|
public final static int COLOR_INDEX_FOREGROUND = 256;
|
|
public final static int COLOR_INDEX_BACKGROUND = 257;
|
|
public final static int COLOR_INDEX_CURSOR = 258;
|
|
|
|
/** The 256 standard color entries and the three special (foreground, background and cursor) ones. */
|
|
public final static int NUM_INDEXED_COLORS = 259;
|
|
|
|
/** Normal foreground and background colors and no effects. */
|
|
final static long NORMAL = encode(COLOR_INDEX_FOREGROUND, COLOR_INDEX_BACKGROUND, 0);
|
|
|
|
static long encode(int foreColor, int backColor, int effect) {
|
|
long result = effect & 0b111111111;
|
|
if ((0xff000000 & foreColor) == 0xff000000) {
|
|
// 24-bit color.
|
|
result |= CHARACTER_ATTRIBUTE_TRUECOLOR_FOREGROUND | ((foreColor & 0x00ffffffL) << 40L);
|
|
} else {
|
|
// Indexed color.
|
|
result |= (foreColor & 0b111111111L) << 40;
|
|
}
|
|
if ((0xff000000 & backColor) == 0xff000000) {
|
|
// 24-bit color.
|
|
result |= CHARACTER_ATTRIBUTE_TRUECOLOR_BACKGROUND | ((backColor & 0x00ffffffL) << 16L);
|
|
} else {
|
|
// Indexed color.
|
|
result |= (backColor & 0b111111111L) << 16L;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public static int decodeForeColor(long style) {
|
|
if ((style & CHARACTER_ATTRIBUTE_TRUECOLOR_FOREGROUND) == 0) {
|
|
return (int) ((style >>> 40) & 0b111111111L);
|
|
} else {
|
|
return 0xff000000 | (int) ((style >>> 40) & 0x00ffffffL);
|
|
}
|
|
|
|
}
|
|
|
|
public static int decodeBackColor(long style) {
|
|
if ((style & CHARACTER_ATTRIBUTE_TRUECOLOR_BACKGROUND) == 0) {
|
|
return (int) ((style >>> 16) & 0b111111111L);
|
|
} else {
|
|
return 0xff000000 | (int) ((style >>> 16) & 0x00ffffffL);
|
|
}
|
|
}
|
|
|
|
public static int decodeEffect(long style) {
|
|
return (int) (style & 0b11111111111);
|
|
}
|
|
|
|
}
|