summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2013-02-23 12:27:57 -0800
committerJeff Sharkey <jsharkey@android.com>2013-02-23 12:59:59 -0800
commit6a142b6d4831c3841b6be1705fc97c9b75a7c9d1 (patch)
tree39156dc7018ee4d4c14c964bc60fb0118551c217
parentfa50ddd49c3c1cddbf75a8b1206031cf9867b923 (diff)
downloadandroid_packages_apps_Terminal-6a142b6d4831c3841b6be1705fc97c9b75a7c9d1.tar.gz
android_packages_apps_Terminal-6a142b6d4831c3841b6be1705fc97c9b75a7c9d1.tar.bz2
android_packages_apps_Terminal-6a142b6d4831c3841b6be1705fc97c9b75a7c9d1.zip
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.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");
}