Skip to content

Commit

Permalink
MergeButtons preview
Browse files Browse the repository at this point in the history
  • Loading branch information
kirillp committed Aug 13, 2024
1 parent 0751c13 commit 14ba27d
Show file tree
Hide file tree
Showing 26 changed files with 802 additions and 193 deletions.
7 changes: 4 additions & 3 deletions demo-edit/src/main/java/org/sudu/experiments/diff/Diff0.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ public void sendToDiff() {
this::onDiffResult, api.window.worker());
}

private void onDiffResult(DiffInfo result) {
protected void onDiffResult(DiffInfo result) {
diffModel = result;
editor1.setDiffModel(diffModel.lineDiffsL);
editor2.setDiffModel(diffModel.lineDiffsR);
Expand Down Expand Up @@ -289,8 +289,9 @@ boolean onContextMenu(MouseEvent event) {

@Override
public boolean onMouseMove(MouseEvent event) {
boolean b1 = editor1.hitTest(event.position) && editor1.onMouseMove(event);
boolean b2 = editor2.hitTest(event.position) && editor2.onMouseMove(event);
var cur = uiContext.windowCursor;
boolean b1 = editor1.hitTest(event.position) && editor1.onMouseMove(event, cur);
boolean b2 = editor2.hitTest(event.position) && editor2.onMouseMove(event, cur);
return b1 || b2;
}

Expand Down
23 changes: 23 additions & 0 deletions demo-edit/src/main/java/org/sudu/experiments/diff/Diff1.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.sudu.experiments.diff;

import org.sudu.experiments.SceneApi;
import org.sudu.experiments.editor.test.MergeButtonsTestModel;
import org.sudu.experiments.editor.worker.diff.DiffInfo;

public class Diff1 extends Diff0 {
public Diff1(SceneApi api) {
super(api);
}

@Override
protected void onDiffResult(DiffInfo result) {
super.onDiffResult(result);

int l1 = editor1.model().document.length();
int l2 = editor2.model().document.length();
var m1 = new MergeButtonsTestModel(l1);
var m2 = new MergeButtonsTestModel(l2);
editor1.setMergeButtons(m1.actions, m1.lines);
editor2.setMergeButtons(m2.actions, m2.lines);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,13 @@ public void drawText(WglGraphics g, GL.Texture texture, int xPos, int yPos, V4f
g.drawText(xPos, yPos, size, tRegion,
texture, colorF, bgColor, cleartype);
}

public void drawIcon(
WglGraphics g, GL.Texture icon,
int xPos, int yPos, V4f bgColor, V4f colorF
) {
tRegion.set(0, 0, icon.width(), icon.height());
size.set(icon.size());
drawText(g, icon, xPos, yPos, colorF, bgColor);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.sudu.experiments.editor;

import org.sudu.experiments.SceneApi;
import org.sudu.experiments.editor.test.MergeButtonsTestModel;
import org.sudu.experiments.fonts.Fonts;
import org.sudu.experiments.input.KeyCode;
import org.sudu.experiments.input.KeyEvent;
Expand All @@ -11,9 +12,15 @@ public Editor1(SceneApi api) {
super(api);
StartFile.apply(editor);

setMergeModel();
api.input.onKeyPress.add(this::onKeyPress);
}

private void setMergeModel() {
var m = new MergeButtonsTestModel(document().length());
editor.setMergeButtons(m.actions, m.lines);
}

boolean onKeyPress(KeyEvent event) {
if (event.keyCode == KeyCode.F10) {
api.window.addChild("child", Editor1::new);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ public class EditorComponent extends View implements

// line numbers
LineNumbersComponent lineNumbers = new LineNumbersComponent();
MergeButtons mergeButtons;
//int lineNumLeftMargin = 10;

String tabIndent = " ";
Expand Down Expand Up @@ -160,9 +161,11 @@ private void internalLayout(V2i pos, V2i size, float dpr) {

int lineNumbersX = mirrored ? pos.x + size.x - lineNumbersWidth() : pos.x;

context.v2i1.set(lineNumbersX, pos.y);
lineNumbers.setPos(context.v2i1,
lineNumbers.setPosition(lineNumbersX, pos.y,
Math.min(lineNumbersWidth(), size.x), size.y, dpr);
if (mergeButtons != null) {
layoutMergeButtons();
}

if (1<0) DebugHelper.dumpFontsSize(g);
caret.setWidth(DprUtil.toPx(Caret.defaultWidth, dpr));
Expand Down Expand Up @@ -224,6 +227,8 @@ void toggleMirrored() {
lineNumbers = new LineNumbersComponent();
updateLineNumbersFont();
internalLayout(pos, size, context.dpr);
if (mergeButtons != null && lineHeight != 0)
setMergeButtonsFont();
}

private void toggleTopTextRenderMode() {
Expand Down Expand Up @@ -309,6 +314,9 @@ public void onTextRenderingSettingsChange() {
CodeLineRenderer.makeContentDirty(lines);

lineNumbers.dispose();
if (mergeButtons != null) {
mergeButtons.onTextRenderingSettingsChange();
}
updateLineNumbersFont();
}

Expand All @@ -319,16 +327,16 @@ private void doChangeFont(String name, float virtualSize) {
lineNumbers.dispose();
invalidateFont();
setFont(name, newPixelFontSize);
afterFontChanged();
model.caretPos = caretCodeLine().computePixelLocation(model.caretCharPos, g.mCanvas, fonts);
if (mergeButtons != null) {
setMergeButtonsFont();
layoutMergeButtons();
}
adjustEditorScrollToCaret();
updateLineNumbersFont();
}
}

private void afterFontChanged() {
model.caretPos = caretCodeLine().computePixelLocation(model.caretCharPos, g.mCanvas, fonts);
adjustEditorScrollToCaret();
}

private void invalidateFont() {
// Debug.consoleInfo("invalidateFont");

Expand All @@ -340,6 +348,7 @@ public void dispose() {
CodeLineRenderer.disposeLines(lines);
lrContext.dispose();
lineNumbers.dispose();
mergeButtons = Disposable.assign(mergeButtons, null);
}

int editorVirtualHeight() {
Expand Down Expand Up @@ -521,6 +530,12 @@ else if (diffModel != null && i < diffModel.length && diffModel[i] != null && !d
g.disableScissor();

drawLineNumbers(firstLine, lastLine);
if (mergeButtons != null) {
mergeButtons.setScrollPos(vScrollPos);
mergeButtons.draw(
firstLine, lastLine, model.caretLine,
g, colors, lrContext);
}

// g.checkError("paint complete");
if (0>1) {
Expand Down Expand Up @@ -578,7 +593,7 @@ private void drawLineNumbers(int firstLine, int lastLine) {
int caretLine = diff != null && !diff.isDefault()
? -1
: model.caretLine;
lineNumbers.draw(editorBottom, textHeight, vScrollPos, firstLine, lastLine, caretLine, g, colors);
lineNumbers.draw(textHeight, vScrollPos, firstLine, lastLine, caretLine, g, colors);
}

public int getFirstLine() {
Expand All @@ -598,7 +613,6 @@ public int lineToPos(int line) {

private void updateLineNumbersFont() {
lineNumbers.setFont(lrContext.font, lineHeight, context.cleartype);
// lineNumbers.initTextures(g, getFirstLine(), editorHeight());
}

private CodeLineRenderer lineRenderer(int i) {
Expand Down Expand Up @@ -868,6 +882,7 @@ public void openFile(FileHandle f, Runnable onComplete) {
private void onNewModel() {
externalHighlights = null;
lineNumbers.setColors(null);
if (mergeButtons != null) mergeButtons.setColors(lineNumbers.colors());
}

boolean arrowUpDown(int amount, boolean ctrl, boolean alt, boolean shiftPressed) {
Expand Down Expand Up @@ -1219,6 +1234,8 @@ public boolean onScroll(MouseEvent event, float dX, float dY) {
}

public boolean onMouseUp(MouseEvent event, int button) {
if (mergeButtons != null && mergeButtons.onMouseUp(event, button))
return true;
selection().isSelectionStarted = false;
return true;
}
Expand All @@ -1228,12 +1245,19 @@ public Consumer<MouseEvent> onMouseDown(MouseEvent event, int button) {
context.setFocus(this);

if (button == MOUSE_BUTTON_LEFT) {
if (mergeButtons != null) {
var lock = mergeButtons.onMouseDown(event, button, context.windowCursor);
if (lock != null) return lock;
}
var lock = vScroll.onMouseDown(event.position, vScrollHandler, true);
if (lock != null) return lock;

lock = hScroll.onMouseDown(event.position, hScrollHandler, false);
if (lock != null) return lock;

if (lineNumbers.hitTest(event.position))
return MouseListener.Static.emptyConsumer;

saveToNavStack();
V2i eventPosition = event.position;
Pos pos = computeCharPos(eventPosition);
Expand All @@ -1252,8 +1276,15 @@ public Consumer<MouseEvent> onMouseDown(MouseEvent event, int button) {
return null;
}

private boolean hitMergeButtons(V2i pos) {
return mergeButtons != null && mergeButtons.hitTest(pos);
}

public boolean onMouseClick(MouseEvent event, int button, int clickCount) {
if (button == MOUSE_BUTTON_LEFT) {
if (lineNumbers.hitTest(event.position)
|| hitMergeButtons(event.position))
return true;
switch (clickCount) {
case 1 -> onClickText(event);
case 2 -> onDoubleClickText(event.position);
Expand All @@ -1263,11 +1294,17 @@ public boolean onMouseClick(MouseEvent event, int button, int clickCount) {
return true;
}

@Override
public boolean onMouseMove(MouseEvent event) {
SetCursor setCursor = context.windowCursor;
return onMouseMove(event, context.windowCursor);
}

public boolean onMouseMove(MouseEvent event, SetCursor setCursor) {
if (vScroll.onMouseMove(event.position, setCursor)) return true;
if (hScroll.onMouseMove(event.position, setCursor)) return true;
if (lineNumbers.onMouseMove(event.position, setCursor)) return true;
if (mergeButtons != null &&
mergeButtons.onMouseMove(event, setCursor)) return true;
if (lineNumbers.onMouseMove(event, setCursor)) return true;

if (isInsideText(event.position)) {
if (event.ctrl) {
Expand Down Expand Up @@ -1617,9 +1654,11 @@ public void updateLineNumbersColors() {
c[i] = ld != null ? (byte) ld.type : 0;
}
lineNumbers.setColors(c);
if (mergeButtons != null) mergeButtons.setColors(c);
} else {
System.out.println("deleteDiffModel");
lineNumbers.setColors(null);
if (mergeButtons != null) mergeButtons.setColors(lineNumbers.colors());
}
}

Expand Down Expand Up @@ -1661,4 +1700,29 @@ public String toString() {
String s = super.toString();
return uri != null ? s + " - " + uri.path : s;
}

private void setMergeButtonsFont() {
mergeButtons.setFont(lineHeight, !mirrored);
}

private void layoutMergeButtons() {
int w = Math.min(
Numbers.iDivRound(lineHeight, 15, 16),
lineNumbers.size.x);
int x = mirrored ? lineNumbers.pos.x
: lineNumbers.pos.x + lineNumbers.size.x - w;
mergeButtons.setPosition(x, lineNumbers.pos.y, w, lineNumbers.size.y, dpr);
mergeButtons.setScrollPos(vScrollPos);
}

public void setMergeButtons(Runnable[] actions, int[] lines) {
if (mergeButtons == null) {
mergeButtons = new MergeButtons();
if (dpr != 0)
setMergeButtonsFont();
layoutMergeButtons();
}
mergeButtons.setModel(actions, lines);
mergeButtons.setColors(lineNumbers.colors());
}
}
Loading

0 comments on commit 14ba27d

Please sign in to comment.