diff options
-rw-r--r-- | jni/com_android_terminal_Terminal.cpp | 17 | ||||
-rw-r--r-- | src/com/android/terminal/Terminal.java | 10 | ||||
-rw-r--r-- | src/com/android/terminal/TerminalCallbacks.java | 12 | ||||
-rw-r--r-- | src/com/android/terminal/TerminalView.java | 18 |
4 files changed, 34 insertions, 23 deletions
diff --git a/jni/com_android_terminal_Terminal.cpp b/jni/com_android_terminal_Terminal.cpp index e195913..9133e46 100644 --- a/jni/com_android_terminal_Terminal.cpp +++ b/jni/com_android_terminal_Terminal.cpp @@ -139,7 +139,8 @@ static int term_prescroll(VTermRect rect, void *user) { return 0; } - return env->CallIntMethod(term->getCallbacks(), prescrollMethod); + return env->CallIntMethod(term->getCallbacks(), prescrollMethod, rect.start_row, rect.end_row, + rect.start_col, rect.end_col); } static int term_moverect(VTermRect dest, VTermRect src, void *user) { @@ -152,7 +153,9 @@ static int term_moverect(VTermRect dest, VTermRect src, void *user) { return 0; } - return env->CallIntMethod(term->getCallbacks(), moveRectMethod); + return env->CallIntMethod(term->getCallbacks(), moveRectMethod, + dest.start_row, dest.end_row, dest.start_col, dest.end_col, + src.start_row, src.end_row, src.start_col, src.end_col); } static int term_movecursor(VTermPos pos, VTermPos oldpos, int visible, void *user) { @@ -165,7 +168,8 @@ static int term_movecursor(VTermPos pos, VTermPos oldpos, int visible, void *use return 0; } - return env->CallIntMethod(term->getCallbacks(), moveCursorMethod); + return env->CallIntMethod(term->getCallbacks(), moveCursorMethod, pos.row, + pos.col, oldpos.row, oldpos.col, visible); } static int term_settermprop(VTermProp prop, VTermValue *val, void *user) { @@ -249,8 +253,7 @@ Terminal::Terminal(jobject callbacks, int rows, int cols) : mVts = vterm_obtain_screen(mVt); vterm_screen_enable_altscreen(mVts, 1); vterm_screen_set_callbacks(mVts, &cb, this); - // TODO: switch back to VTERM_DAMAGE_SCROLL? - vterm_screen_set_damage_merge(mVts, VTERM_DAMAGE_CELL); + vterm_screen_set_damage_merge(mVts, VTERM_DAMAGE_SCROLL); vterm_screen_reset(mVts, 1); } @@ -335,6 +338,8 @@ int Terminal::run() { } vterm_push_bytes(mVt, buffer, bytes); + + vterm_screen_flush_damage(mVts); } return 1; @@ -482,7 +487,7 @@ int register_com_android_terminal_Terminal(JNIEnv* env) { android::prescrollMethod = env->GetMethodID(terminalCallbacksClass, "prescroll", "(IIII)I"); android::moveRectMethod = env->GetMethodID(terminalCallbacksClass, "moveRect", "(IIIIIIII)I"); android::moveCursorMethod = env->GetMethodID(terminalCallbacksClass, "moveCursor", - "(IIIIIIIII)I"); + "(IIIII)I"); android::setTermPropBooleanMethod = env->GetMethodID(terminalCallbacksClass, "setTermPropBoolean", "(IZ)I"); android::setTermPropIntMethod = env->GetMethodID(terminalCallbacksClass, "setTermPropInt", diff --git a/src/com/android/terminal/Terminal.java b/src/com/android/terminal/Terminal.java index 9701fab..ff325a8 100644 --- a/src/com/android/terminal/Terminal.java +++ b/src/com/android/terminal/Terminal.java @@ -50,6 +50,8 @@ public class Terminal { public interface TerminalClient { public void damage(int startRow, int endRow, int startCol, int endCol); + public void moveRect(int destStartRow, int destEndRow, int destStartCol, int destEndCol, + int srcStartRow, int srcEndRow, int srcStartCol, int srcEndCol); public void bell(); } @@ -70,13 +72,9 @@ public class Terminal { @Override public int moveRect(int destStartRow, int destEndRow, int destStartCol, int destEndCol, int srcStartRow, int srcEndRow, int srcStartCol, int srcEndCol) { - // TODO: arg, this isn't right if (mClient != null) { - final int startRow = Math.min(destStartRow, srcStartRow); - final int endRow = Math.max(destEndRow, srcEndRow); - final int startCol = Math.min(destStartCol, srcStartCol); - final int endCol = Math.max(destEndCol, srcEndCol); - mClient.damage(startRow, endRow, startCol, endCol); + mClient.moveRect(destStartRow, destEndRow, destStartCol, destEndCol, srcStartRow, + srcEndRow, srcStartCol, srcEndCol); } return 1; } diff --git a/src/com/android/terminal/TerminalCallbacks.java b/src/com/android/terminal/TerminalCallbacks.java index cafaec0..b449075 100644 --- a/src/com/android/terminal/TerminalCallbacks.java +++ b/src/com/android/terminal/TerminalCallbacks.java @@ -17,22 +17,20 @@ package com.android.terminal; public abstract class TerminalCallbacks { - public int damage(int start_row, int end_row, int start_col, int end_col) { + public int damage(int startRow, int endRow, int startCol, int endCol) { return 1; } - public int prescroll(int start_row, int end_row, int start_col, int end_col) { + public int prescroll(int startRow, int endRow, int startCol, int endCol) { return 1; } - public int moveRect(int dest_start_row, int dest_end_row, int dest_start_col, int dest_end_col, - int src_start_row, int src_end_row, int src_start_col, int src_end_col) { + public int moveRect(int destStartRow, int destEndRow, int destStartCol, int destEndCol, + int srcStartRow, int srcEndRow, int srcStartCol, int srcEndCol) { return 1; } - public int moveCursor(int dest_start_row, int dest_end_row, int dest_start_col, - int dest_end_col, int src_start_row, int src_end_row, int src_start_col, - int src_end_col, int visible) { + public int moveCursor(int posRow, int posCol, int oldPosRow, int oldPosCol, int visible) { return 1; } diff --git a/src/com/android/terminal/TerminalView.java b/src/com/android/terminal/TerminalView.java index ea5e1b1..79b5bb4 100644 --- a/src/com/android/terminal/TerminalView.java +++ b/src/com/android/terminal/TerminalView.java @@ -59,16 +59,28 @@ public class TerminalView extends View { private TerminalClient mClient = new TerminalClient() { @Override public void damage(int startRow, int endRow, int startCol, int endCol) { + Log.d(TAG, "damage(" + startRow + ", " + endRow + ", " + startCol + ", " + endCol + ")"); + + // Invalidate region on screen final int top = startRow * mCharHeight; final int bottom = (endRow + 1) * mCharHeight; final int left = startCol * mCharWidth; final int right = (endCol + 1) * mCharWidth; - - // Invalidate region on screen postInvalidate(left, top, right, bottom); } @Override + public void moveRect(int destStartRow, int destEndRow, int destStartCol, int destEndCol, + int srcStartRow, int srcEndRow, int srcStartCol, int srcEndCol) { + // Treat as normal damage and perform full redraw + final int startRow = Math.min(destStartRow, srcStartRow); + final int endRow = Math.max(destEndRow, srcEndRow); + final int startCol = Math.min(destStartCol, srcStartCol); + final int endCol = Math.max(destEndCol, srcEndCol); + damage(startRow, endRow, startCol, endCol); + } + + @Override public void bell() { Log.i(TAG, "DING!"); } @@ -197,8 +209,6 @@ public class TerminalView extends View { } } - mTerm.flushDamage(); - final long delta = SystemClock.elapsedRealtime() - start; Log.d(TAG, "onDraw() took " + delta + "ms"); } |