From d40d8e96f52033fc1495cb3b81812af98dcfa239 Mon Sep 17 00:00:00 2001 From: sirjofri Date: Wed, 3 Mar 2021 13:46:00 +0100 Subject: [PATCH 1/4] adds physical mouse support. use the last checkbox to enable the feature. it ignores all other buttons. --- .../org/echoline/drawterm/MySurfaceView.java | 31 ++++++++++++------- gui-android/res/layout/drawterm_main.xml | 4 +++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/gui-android/java/org/echoline/drawterm/MySurfaceView.java b/gui-android/java/org/echoline/drawterm/MySurfaceView.java index fe71676..57b7c41 100644 --- a/gui-android/java/org/echoline/drawterm/MySurfaceView.java +++ b/gui-android/java/org/echoline/drawterm/MySurfaceView.java @@ -44,29 +44,38 @@ public MySurfaceView(Context context, int w, int h, float ws, float hs) { @Override public boolean onTouch(View v, MotionEvent event) { + int buttons = 0; CheckBox left = (CheckBox)mainActivity.findViewById(R.id.mouseLeft); CheckBox middle = (CheckBox)mainActivity.findViewById(R.id.mouseMiddle); CheckBox right = (CheckBox)mainActivity.findViewById(R.id.mouseRight); CheckBox up = (CheckBox)mainActivity.findViewById(R.id.mouseUp); CheckBox down = (CheckBox)mainActivity.findViewById(R.id.mouseDown); - int buttons = (left.isChecked()? 1: 0) | - (middle.isChecked()? 2: 0) | - (right.isChecked()? 4: 0) | - (up.isChecked()? 8: 0) | - (down.isChecked()? 16: 0); + CheckBox mnative = (CheckBox)mainActivity.findViewById(R.id.mouseNative); + if (mnative.isChecked()){ + buttons = 0; + buttons |= event.getButtonState() == MotionEvent.BUTTON_PRIMARY ? 1 : 0; + buttons |= event.getButtonState() == MotionEvent.BUTTON_SECONDARY ? 4 : 0; + buttons |= event.getButtonState() == MotionEvent.BUTTON_TERTIARY ? 2 : 0; + } else { + buttons = (left.isChecked()? 1: 0) | + (middle.isChecked()? 2: 0) | + (right.isChecked()? 4: 0) | + (up.isChecked()? 8: 0) | + (down.isChecked()? 16: 0); + } if (event.getAction() == MotionEvent.ACTION_DOWN) { - mouse[0] = Math.round(event.getX()); - mouse[1] = Math.round(event.getY()); + mouse[0] = Math.round(event.getRawX()-v.getX()); + mouse[1] = Math.round(event.getRawY()-v.getY()); mouse[2] = buttons; mainActivity.setMouse(mouse); } else if (event.getAction() == MotionEvent.ACTION_MOVE) { - mouse[0] = Math.round(event.getX()); - mouse[1] = Math.round(event.getY()); + mouse[0] = Math.round(event.getRawX()-v.getX()); + mouse[1] = Math.round(event.getRawY()-v.getY()); mouse[2] = buttons; mainActivity.setMouse(mouse); } else if (event.getAction() == MotionEvent.ACTION_UP) { - mouse[0] = Math.round(event.getX()); - mouse[1] = Math.round(event.getY()); + mouse[0] = Math.round(event.getRawX()-v.getX()); + mouse[1] = Math.round(event.getRawY()-v.getY()); mouse[2] = 0; mainActivity.setMouse(mouse); } diff --git a/gui-android/res/layout/drawterm_main.xml b/gui-android/res/layout/drawterm_main.xml index cb5c9f3..25c4a45 100644 --- a/gui-android/res/layout/drawterm_main.xml +++ b/gui-android/res/layout/drawterm_main.xml @@ -40,5 +40,9 @@ android:text="kb" android:layout_width="wrap_content" android:layout_height="wrap_content" /> + From 279b319787946352a90c905c423c064eb3538f6c Mon Sep 17 00:00:00 2001 From: sirjofri Date: Wed, 3 Mar 2021 13:58:30 +0100 Subject: [PATCH 2/4] removes forced portrait mode this might cause issues when rotating while using the app. so, first rotate, then start app and connect. For optimal experience try to fix your desired rotation. --- gui-android/java/org/echoline/drawterm/MainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui-android/java/org/echoline/drawterm/MainActivity.java b/gui-android/java/org/echoline/drawterm/MainActivity.java index 2e9b852..585c9d8 100644 --- a/gui-android/java/org/echoline/drawterm/MainActivity.java +++ b/gui-android/java/org/echoline/drawterm/MainActivity.java @@ -279,7 +279,7 @@ public void onClick(final View view) { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); mainActivity = this; From 85217fc3d23f5216fece4fa4cb34d6823d4a0864 Mon Sep 17 00:00:00 2001 From: sirjofri Date: Thu, 4 Mar 2021 09:56:41 +0100 Subject: [PATCH 3/4] tries fixing offset bug. not optimal, but much better now. --- .../java/org/echoline/drawterm/MainActivity.java | 7 +++---- .../java/org/echoline/drawterm/MySurfaceView.java | 15 +++++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/gui-android/java/org/echoline/drawterm/MainActivity.java b/gui-android/java/org/echoline/drawterm/MainActivity.java index 585c9d8..22b3fe2 100644 --- a/gui-android/java/org/echoline/drawterm/MainActivity.java +++ b/gui-android/java/org/echoline/drawterm/MainActivity.java @@ -18,6 +18,7 @@ import android.view.Display; import android.view.MotionEvent; import android.view.View; +import android.view.Window; import android.view.Menu; import android.view.MenuItem; import android.view.WindowManager; @@ -211,10 +212,8 @@ public void onClick(final View view) { } }); - int rid = res.getIdentifier("navigation_bar_height", "dimen", "android"); - if (rid > 0) { - hp -= res.getDimensionPixelSize(rid); - } + View contentView = findViewById(Window.ID_ANDROID_CONTENT); + hp -= contentView.getTop(); LinearLayout ll = (LinearLayout)findViewById(R.id.dtButtons); hp -= ll.getHeight(); diff --git a/gui-android/java/org/echoline/drawterm/MySurfaceView.java b/gui-android/java/org/echoline/drawterm/MySurfaceView.java index 57b7c41..b502193 100644 --- a/gui-android/java/org/echoline/drawterm/MySurfaceView.java +++ b/gui-android/java/org/echoline/drawterm/MySurfaceView.java @@ -9,6 +9,7 @@ import android.view.SurfaceView; import android.view.SurfaceHolder; import android.view.View; +import android.view.Window; import android.widget.CheckBox; import android.widget.EditText; @@ -44,6 +45,8 @@ public MySurfaceView(Context context, int w, int h, float ws, float hs) { @Override public boolean onTouch(View v, MotionEvent event) { + View contentView = mainActivity.findViewById(Window.ID_ANDROID_CONTENT); + View buttonsarea = mainActivity.findViewById(R.id.dtButtons); int buttons = 0; CheckBox left = (CheckBox)mainActivity.findViewById(R.id.mouseLeft); CheckBox middle = (CheckBox)mainActivity.findViewById(R.id.mouseMiddle); @@ -51,6 +54,7 @@ public boolean onTouch(View v, MotionEvent event) { CheckBox up = (CheckBox)mainActivity.findViewById(R.id.mouseUp); CheckBox down = (CheckBox)mainActivity.findViewById(R.id.mouseDown); CheckBox mnative = (CheckBox)mainActivity.findViewById(R.id.mouseNative); + if (mnative.isChecked()){ buttons = 0; buttons |= event.getButtonState() == MotionEvent.BUTTON_PRIMARY ? 1 : 0; @@ -63,19 +67,18 @@ public boolean onTouch(View v, MotionEvent event) { (up.isChecked()? 8: 0) | (down.isChecked()? 16: 0); } + + float correction = event.getRawY()/screenHeight * contentView.getY(); + mouse[0] = Math.round(event.getRawX()-contentView.getX()); + mouse[1] = Math.round(event.getRawY()-contentView.getY()-buttonsarea.getHeight()+correction); + if (event.getAction() == MotionEvent.ACTION_DOWN) { - mouse[0] = Math.round(event.getRawX()-v.getX()); - mouse[1] = Math.round(event.getRawY()-v.getY()); mouse[2] = buttons; mainActivity.setMouse(mouse); } else if (event.getAction() == MotionEvent.ACTION_MOVE) { - mouse[0] = Math.round(event.getRawX()-v.getX()); - mouse[1] = Math.round(event.getRawY()-v.getY()); mouse[2] = buttons; mainActivity.setMouse(mouse); } else if (event.getAction() == MotionEvent.ACTION_UP) { - mouse[0] = Math.round(event.getRawX()-v.getX()); - mouse[1] = Math.round(event.getRawY()-v.getY()); mouse[2] = 0; mainActivity.setMouse(mouse); } From 3ac48bc4e933d41b43988a18e63e259f99dd740b Mon Sep 17 00:00:00 2001 From: sirjofri Date: Thu, 4 Mar 2021 12:03:28 +0100 Subject: [PATCH 4/4] more consistent mouse offset --- gui-android/java/org/echoline/drawterm/MySurfaceView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui-android/java/org/echoline/drawterm/MySurfaceView.java b/gui-android/java/org/echoline/drawterm/MySurfaceView.java index b502193..8fe9bd0 100644 --- a/gui-android/java/org/echoline/drawterm/MySurfaceView.java +++ b/gui-android/java/org/echoline/drawterm/MySurfaceView.java @@ -68,7 +68,7 @@ public boolean onTouch(View v, MotionEvent event) { (down.isChecked()? 16: 0); } - float correction = event.getRawY()/screenHeight * contentView.getY(); + float correction = (event.getRawY()-contentView.getY())/screenHeight * contentView.getY(); mouse[0] = Math.round(event.getRawX()-contentView.getX()); mouse[1] = Math.round(event.getRawY()-contentView.getY()-buttonsarea.getHeight()+correction);