summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jni/com_android_terminal_Terminal.cpp17
-rw-r--r--src/com/android/terminal/Terminal.java10
-rw-r--r--src/com/android/terminal/TerminalCallbacks.java12
-rw-r--r--src/com/android/terminal/TerminalView.java18
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");
}