diff options
author | Jeff Sharkey <jsharkey@android.com> | 2013-02-23 12:27:57 -0800 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2013-02-23 12:59:59 -0800 |
commit | 6a142b6d4831c3841b6be1705fc97c9b75a7c9d1 (patch) | |
tree | 39156dc7018ee4d4c14c964bc60fb0118551c217 | |
parent | fa50ddd49c3c1cddbf75a8b1206031cf9867b923 (diff) | |
download | Terminal-6a142b6d4831c3841b6be1705fc97c9b75a7c9d1.tar.gz |
Working damage!
Flushing damage to the UI is now driven by the read() thread, and
moverect() data is now passed across JNI. TerminalView currently
treats moverect() as invalidating the union of the two rects, which
repaints everything correctly, yay!
Change-Id: I0d38e5c7755d3da06a23802c03fd2e2839aa1a02
-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"); } |