some fixes

This commit is contained in:
Gabriel 2024-01-11 01:47:02 -04:00
commit ebf02257cf
4 changed files with 45 additions and 23 deletions

View file

@ -24,13 +24,7 @@ import com.panda3ds.pandroid.view.PandaLayoutController;
public class GameActivity extends BaseActivity {
private final DrawerFragment drawerFragment = new DrawerFragment();
private final AlberInputListener inputListener = new AlberInputListener(() -> {
if (drawerFragment.isOpened()) {
drawerFragment.close();
} else {
drawerFragment.open();
}
});
private final AlberInputListener inputListener = new AlberInputListener(this::onBackPressed);
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@ -95,6 +89,8 @@ public class GameActivity extends BaseActivity {
public void onBackPressed() {
if (drawerFragment.isOpened()) {
drawerFragment.close();
} else {
drawerFragment.open();
}
}

View file

@ -95,8 +95,6 @@ public class CodeEditorActivity extends BaseActivity {
} else {
findViewById(R.id.keybar).setVisibility(View.GONE);
}
System.out.println(height + "/" + currentHeight);
}
private void setupReadOnlyEditor() {
@ -131,7 +129,6 @@ public class CodeEditorActivity extends BaseActivity {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
System.out.println();
if (event.getKeyCode() == KeyEvent.KEYCODE_TAB) {
if (event.getAction() == KeyEvent.ACTION_UP) {
editor.insert(TAB_CONTENT);

View file

@ -9,6 +9,7 @@ import android.graphics.Rect;
import android.text.Editable;
import android.text.Layout;
import android.util.AttributeSet;
import android.view.ViewTreeObserver;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -30,6 +31,8 @@ public class BaseEditor extends BasicTextEditor {
private int visibleHeight;
private int contentWidth;
private Layout textLayout;
private int currentWidth = -1;
private int currentHeight = -1;
private final char[] textBuffer = new char[1];
protected final int[] colors = new int[256];
@ -54,6 +57,15 @@ public class BaseEditor extends BasicTextEditor {
EditorColors.obtainColorScheme(colors, getContext());
}
@Override
protected void initialize() {
super.initialize();
getViewTreeObserver().addOnGlobalLayoutListener(() -> {
adjustScroll();
requireUpdate = true;
});
}
@SuppressLint("MissingSuperCall")
@Override
public void draw(Canvas canvas) {
@ -280,6 +292,16 @@ public class BaseEditor extends BasicTextEditor {
protected void onRefreshColorScheme(byte[] buffer, int index, int length) {
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (currentWidth != getMeasuredWidth() || currentHeight != getMeasuredHeight()) {
currentWidth = getMeasuredWidth();
currentHeight = getMeasuredHeight();
invalidateAll();
}
}
protected void invalidateAll() {
requireUpdate = true;
invalidate();

View file

@ -25,6 +25,7 @@ import com.panda3ds.pandroid.view.SimpleTextWatcher;
public class BasicTextEditor extends AppCompatEditText {
private GestureDetector gestureDetector;
private final Rect visibleRect = new Rect();
public BasicTextEditor(@NonNull Context context) {
super(context);
@ -79,7 +80,24 @@ public class BasicTextEditor extends AppCompatEditText {
}
public void setScroll(int x, int y) {
super.scrollTo(x, y);
x = Math.max(0, x);
y = Math.max(0, y);
int maxHeight = Math.round(getLineCount() * getLineHeight());
getGlobalVisibleRect(visibleRect);
maxHeight = Math.max(0, maxHeight - visibleRect.height());
int maxWidth = (int) getPaint().measureText(getText(), 0, length());
maxWidth += getPaddingLeft() + getPaddingRight();
int scrollX = x - Math.max(Math.min(maxWidth - visibleRect.width(), x), 0);
int scrollY = Math.min(maxHeight, y);
super.scrollTo(scrollX, scrollY);
}
public void adjustScroll(){
setScroll(getScrollX(), getScrollY());
}
protected void onTextChanged() {
@ -96,8 +114,6 @@ public class BasicTextEditor extends AppCompatEditText {
}
private class ScrollGesture implements GestureDetector.OnGestureListener {
private final Rect visibleRect = new Rect();
@Override
public boolean onDown(@NonNull MotionEvent e) {
return true;
@ -117,16 +133,7 @@ public class BasicTextEditor extends AppCompatEditText {
public boolean onScroll(@NonNull MotionEvent e1, @NonNull MotionEvent e2, float distanceX, float distanceY) {
int scrollX = (int) Math.max(0, getScrollX() + distanceX);
int scrollY = (int) Math.max(0, getScrollY() + distanceY);
int maxHeight = Math.round(getLineCount() * getLineHeight());
getGlobalVisibleRect(visibleRect);
maxHeight = Math.max(0, maxHeight - visibleRect.height());
int maxWidth = (int) getPaint().measureText(getText(), 0, length());
maxWidth += getPaddingLeft() + getPaddingRight();
scrollX = Math.max(Math.min(maxWidth - visibleRect.width(), scrollX), 0);
setScroll(scrollX, Math.min(maxHeight, scrollY));
setScroll(scrollX, scrollY);
return true;
}