Skip to content

Commit

Permalink
diffmap: import new colors, increase scroll size
Browse files Browse the repository at this point in the history
  • Loading branch information
kirillp committed Dec 17, 2024
1 parent a068843 commit a48f61c
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 19 deletions.
40 changes: 32 additions & 8 deletions demo-edit/src/main/java/org/sudu/experiments/editor/DiffImage.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,31 @@
import org.sudu.experiments.diff.LineDiff;
import org.sudu.experiments.editor.ui.colors.DiffColors;
import org.sudu.experiments.math.Color;
import org.sudu.experiments.math.V4i;

class DiffImage {

static final int debug = 0;

static GL.ImageData diffImage(
LineDiff[] model, int height, DiffColors colors
) {
GL.ImageData img = new GL.ImageData(1, height);
byte[] map = diffMap(model, height);
if (debug > 0) {
V4i s = stats(map);
System.out.println("codeMap built: l=" + map.length
+ ",del: " + s.x + ", ins: " + s.y
+ ", change: " + s.z + ", unmod: " + s.w);
if (debug > 1) {
System.out.println("colors DiffTypes.DELETED = "
+ colors.getDiffColor(DiffTypes.DELETED, null).toHexString());
System.out.println("colors DiffTypes.INSERTED = "
+ colors.getDiffColor(DiffTypes.INSERTED, null).toHexString());
System.out.println("colors DiffTypes.EDITED = "
+ colors.getDiffColor(DiffTypes.EDITED, null).toHexString());
}
}
blurDiffImage(map);
applyDiffPalette(map, img, colors);
return img;
Expand Down Expand Up @@ -71,6 +88,19 @@ static void blurDiffImage(byte[] image) {
}
}

public static V4i stats(byte[] image) {
V4i r = new V4i();
for (byte b : image) {
switch (b) {
case DiffTypes.DELETED -> r.x++;
case DiffTypes.INSERTED -> r.y++;
case DiffTypes.EDITED -> r.z++;
default -> r.w++;
}
}
return r;
}

static void applyDiffPalette(
byte[] diffMap, GL.ImageData img, DiffColors colors
) {
Expand All @@ -82,17 +112,11 @@ static void applyDiffPalette(
Color c0 = new Color(0, 0, 0, 0);
for (int i = 0, p = 0; i < diffMap.length; i++) {
byte type = diffMap[i];
if (type == 0) {
c0.a = 0;
}
if (type != 0) {
c0.a = 0;
}
Color c = colors.getDiffColor(type, c0);
data[p++] = (byte) c.r;
data[p++] = (byte) c.g;
data[p++] = (byte) c.g;
data[p++] = (byte) (type == 0 ? 0 : -1);
data[p++] = (byte) c.b;
data[p++] = (byte) c.a;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ public class EditorComponent extends View implements
static final int vLineXDp = 80;
static final int vLineWDp = 1;
static final int vLineLeftDeltaDp = 10;
static final int codeMapWidthDp = 16;
static final int codeMapWidthDp = 15;
static final float scrollBarWidthDp = 13;

int vLineX;
int vLineW;
Expand Down Expand Up @@ -170,6 +171,7 @@ private void internalLayout() {
vLineX = toPx(vLineXDp) + mergeWidth;
vLineW = toPx(vLineWDp);
vLineLeftDelta = toPx(vLineLeftDeltaDp);
scrollBarWidth = toPx(scrollBarWidthDp);

int lineNumbersWidth = lineNumbersWidth();
int lineNumbersX = mirrored ? pos.x + size.x - lineNumbersWidth : pos.x;
Expand Down Expand Up @@ -307,7 +309,6 @@ private void setFont(String name, float pixelSize) {
lrContext.setFonts(name, pixelSize, g);
font = lrContext.font;
lineHeight = lrContext.setLineHeight(EditorConst.LINE_HEIGHT_MULTI, g);
scrollBarWidth = Numbers.iRnd(lrContext.font.WWidth);
caret.setHeight(lrContext.font.caretHeight(lineHeight));

Debug.consoleInfo("editor font: " + name + " " + pixelSize
Expand Down Expand Up @@ -1808,10 +1809,8 @@ public void setMergeButtons(Runnable[] actions, int[] lines) {
void buildDiffMap() {
if (codeMap == null)
codeMap = g.createTexture();
var img = DiffImage.diffImage(model.diffModel, size.y, colors.codeDiffBg);
var img = DiffImage.diffImage(model.diffModel, size.y, colors.codeMapBg);
codeMap.setContent(img);
System.out.println("codeMap built: " + codeMap);

}

void clearCodeMap() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ public class DiffColors {
// edited element on edited region
public Color editedColor2;

public DiffColors(DiffColors c) {
this(c.deletedColor, c.insertedColor, c.editedColor, c.editedColor2);
}

DiffColors(Color deletedColor, Color insertedColor, Color editedColor) {
this(deletedColor, insertedColor, editedColor, editedColor);
}
Expand All @@ -26,6 +30,14 @@ public class DiffColors {
this.editedColor2 = editedColor2;
}

public static DiffColors codeMapVSCode() {
return new DiffColors(
new Color("#f14c4c"),
new Color("#487e01"),
new Color("#1b81a8")
);
}

public static DiffColors codeDiffDarcula() {
return new DiffColors(
new Color("#484A4A"),
Expand All @@ -44,6 +56,23 @@ public static DiffColors codeDiffDark() {
);
}

public static DiffColors codeMapDark() {
return new DiffColors(
new Color("#656E76"),
new Color("#447152"),
new Color("#43698D"));
}
public static DiffColors codeMapDarcula() {
return codeMapDark();
}

public static DiffColors codeMapLight() {
return new DiffColors(
new Color("#C8C8C8"),
new Color("#AADEAA"),
new Color("#B6D2F2"));
}

public static DiffColors codeDiffLight() {
return new DiffColors(
new Color("#D6D6D6"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ public class EditorColorScheme {
public final CodeElementColor[] codeElement;
public final LineNumbersColors lineNumber;
public final DiffColors codeDiffBg;
public final DiffColors codeMapBg;
public BackgroundHoverColors hoverColors;

private static final float defaultFontSize = 15;
Expand All @@ -75,7 +76,9 @@ public static EditorColorScheme darculaIdeaColorScheme() {
IdeaCodeColors.codeElementColorsDarcula(),
LineNumbersColors.darcula(),
Themes.darculaColorScheme(),
DiffColors.codeDiffDarcula());
DiffColors.codeDiffDarcula(),
DiffColors.codeMapDarcula()
);
}

public static EditorColorScheme darkIdeaColorScheme() {
Expand All @@ -85,7 +88,9 @@ public static EditorColorScheme darkIdeaColorScheme() {
IdeaCodeColors.codeElementColorsDark(),
LineNumbersColors.dark(),
Themes.darkColorScheme(),
DiffColors.codeDiffDark());
DiffColors.codeDiffDark(),
DiffColors.codeMapDark()
);
}

public static EditorColorScheme lightIdeaColorScheme() {
Expand All @@ -95,7 +100,8 @@ public static EditorColorScheme lightIdeaColorScheme() {
IdeaCodeColors.codeElementColorsLight(),
LineNumbersColors.light(),
Themes.lightColorScheme(),
DiffColors.codeDiffLight()
DiffColors.codeDiffLight(),
DiffColors.codeMapLight()
);
}

Expand All @@ -104,10 +110,11 @@ private EditorColorScheme(
CodeElementColor[] codeElement,
LineNumbersColors lineNumber,
DialogItemColors dialogItem,
DiffColors codeDiffBg
DiffColors codeDiffBg,
DiffColors codeMapBg
) {
this(editor, fileTreeView, codeElement, lineNumber, dialogItem,
codeDiffBg,
codeDiffBg, codeMapBg,
new UiFont(defaultFont, defaultMenuFontSize),
new UiFont(defaultUsagesFont, defaultFontSize),
new UiFont(defaultFont, defaultFontSize),
Expand All @@ -123,6 +130,7 @@ private EditorColorScheme(
LineNumbersColors lineNumber,
DialogItemColors dialogItem,
DiffColors codeDiffBg,
DiffColors codeMapBg,
UiFont popupMenuFont,
UiFont usagesFont,
UiFont fileViewFont,
Expand All @@ -139,6 +147,7 @@ private EditorColorScheme(
}
this.dialogItem = dialogItem;
this.codeDiffBg = codeDiffBg;
this.codeMapBg = codeMapBg;
this.popupMenuFont = popupMenuFont;
this.usagesFont = usagesFont;
this.fileViewFont = fileViewFont;
Expand All @@ -151,7 +160,7 @@ private EditorColorScheme(
public EditorColorScheme withFontModified(float fontSize) {
return new EditorColorScheme(
editor, fileTreeView, codeElement,
lineNumber, dialogItem, codeDiffBg,
lineNumber, dialogItem, codeDiffBg, codeMapBg,
popupMenuFont.withSize(fontSize),
usagesFont.withSize(fontSize),
fileViewFont.withSize(fontSize),
Expand Down

0 comments on commit a48f61c

Please sign in to comment.