mirror of
https://gitlab.futo.org/keyboard/latinime.git
synced 2024-09-28 14:54:30 +01:00
Update key preview positioning and scaling, use touch origin offset for moreKey detection
This commit is contained in:
parent
9e75e45056
commit
7a01d1e6e6
@ -622,25 +622,13 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy
|
|||||||
|
|
||||||
final int[] lastCoords = CoordinateUtils.newInstance();
|
final int[] lastCoords = CoordinateUtils.newInstance();
|
||||||
tracker.getLastCoordinates(lastCoords);
|
tracker.getLastCoordinates(lastCoords);
|
||||||
final boolean keyPreviewEnabled = mKeyPreviewDrawParams.isPopupEnabled();
|
|
||||||
// The more keys keyboard is usually horizontally aligned with the center of the parent key.
|
final int bottomPadding = mKeyPreviewChoreographer.getBottomPaddingForKey(getContext(), key);
|
||||||
// If showMoreKeysKeyboardAtTouchedPoint is true and the key preview is disabled, the more
|
|
||||||
// keys keyboard is placed at the touch point of the parent key.
|
final int pointX = key.getDrawX() + key.getDrawWidth() / 2;
|
||||||
final int pointX = (mConfigShowMoreKeysKeyboardAtTouchedPoint && !keyPreviewEnabled)
|
final int pointY = key.getY() + key.getHeight() - bottomPadding;
|
||||||
? CoordinateUtils.x(lastCoords)
|
|
||||||
: key.getX() + key.getWidth() / 2;
|
moreKeysKeyboardView.showMoreKeysPanel(this, this, pointX, pointY, mKeyboardActionListener, lastCoords);
|
||||||
// The more keys keyboard is usually vertically aligned with the top edge of the parent key
|
|
||||||
// (plus vertical gap). If the key preview is enabled, the more keys keyboard is vertically
|
|
||||||
// aligned with the bottom edge of the visible part of the key preview.
|
|
||||||
// {@code mPreviewVisibleOffset} has been set appropriately in
|
|
||||||
// {@link KeyboardView#showKeyPreview(PointerTracker)}.
|
|
||||||
final int pointY;
|
|
||||||
if(key.isActionKey()) {
|
|
||||||
pointY = key.getY();
|
|
||||||
} else {
|
|
||||||
pointY = key.getY() + mKeyPreviewDrawParams.getVisibleOffset() + (keyPreviewEnabled ? key.getHeight() : key.getVerticalGap());
|
|
||||||
}
|
|
||||||
moreKeysKeyboardView.showMoreKeysPanel(this, this, pointX, pointY, mKeyboardActionListener);
|
|
||||||
return moreKeysKeyboardView;
|
return moreKeysKeyboardView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,7 +318,7 @@ public final class MoreKeysKeyboard extends Keyboard {
|
|||||||
|
|
||||||
int dimension = (int)(context.getResources().getDisplayMetrics().density * 44.5f);
|
int dimension = (int)(context.getResources().getDisplayMetrics().density * 44.5f);
|
||||||
keyWidth = getMaxKeyWidth(key, Math.min(dimension, key.getTotalWidth()), padding, paintToMeasure);
|
keyWidth = getMaxKeyWidth(key, Math.min(dimension, key.getTotalWidth()), padding, paintToMeasure);
|
||||||
rowHeight = dimension;
|
rowHeight = Math.max(key.getHeight(), dimension);
|
||||||
}
|
}
|
||||||
final int dividerWidth = 0; // TODO: Remove divider
|
final int dividerWidth = 0; // TODO: Remove divider
|
||||||
final List<MoreKeySpec> moreKeys = key.getMoreKeys();
|
final List<MoreKeySpec> moreKeys = key.getMoreKeys();
|
||||||
|
@ -121,7 +121,7 @@ public class MoreKeysKeyboardView extends KeyboardView implements MoreKeysPanel
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMoreKeysPanel(final View parentView, final Controller controller,
|
public void showMoreKeysPanel(final View parentView, final Controller controller,
|
||||||
final int pointX, final int pointY, final KeyboardActionListener listener) {
|
final int pointX, final int pointY, final KeyboardActionListener listener, final int[] touchOrigin) {
|
||||||
mController = controller;
|
mController = controller;
|
||||||
mListener = listener;
|
mListener = listener;
|
||||||
final View container = getContainerView();
|
final View container = getContainerView();
|
||||||
@ -139,8 +139,8 @@ public class MoreKeysKeyboardView extends KeyboardView implements MoreKeysPanel
|
|||||||
container.setX(panelX);
|
container.setX(panelX);
|
||||||
container.setY(panelY);
|
container.setY(panelY);
|
||||||
|
|
||||||
mOriginX = x + container.getPaddingLeft();
|
mOriginX = CoordinateUtils.x(touchOrigin) - getDefaultCoordX();
|
||||||
mOriginY = y + container.getPaddingTop();
|
mOriginY = CoordinateUtils.y(touchOrigin) - container.getMeasuredHeight();
|
||||||
controller.onShowMoreKeysPanel(this);
|
controller.onShowMoreKeysPanel(this);
|
||||||
final MoreKeysKeyboardAccessibilityDelegate accessibilityDelegate = mAccessibilityDelegate;
|
final MoreKeysKeyboardAccessibilityDelegate accessibilityDelegate = mAccessibilityDelegate;
|
||||||
if (accessibilityDelegate != null
|
if (accessibilityDelegate != null
|
||||||
|
@ -61,7 +61,7 @@ public interface MoreKeysPanel {
|
|||||||
// TODO: Currently the MoreKeysPanel is inside a container view that is added to the parent.
|
// TODO: Currently the MoreKeysPanel is inside a container view that is added to the parent.
|
||||||
// Consider the simpler approach of placing the MoreKeysPanel itself into the parent view.
|
// Consider the simpler approach of placing the MoreKeysPanel itself into the parent view.
|
||||||
public void showMoreKeysPanel(View parentView, Controller controller, int pointX,
|
public void showMoreKeysPanel(View parentView, Controller controller, int pointX,
|
||||||
int pointY, KeyboardActionListener listener);
|
int pointY, KeyboardActionListener listener, int[] touchOrigin);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dismisses the more keys panel and calls the controller's onDismissMoreKeysPanel to remove
|
* Dismisses the more keys panel and calls the controller's onDismissMoreKeysPanel to remove
|
||||||
|
@ -103,6 +103,11 @@ public final class KeyPreviewChoreographer {
|
|||||||
showKeyPreview(key, keyPreviewView, withAnimation);
|
showKeyPreview(key, keyPreviewView, withAnimation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getBottomPaddingForKey(final Context context, final Key key) {
|
||||||
|
final float density = context.getResources().getDisplayMetrics().density;
|
||||||
|
return Math.max(key.getHeight(), (int)(64.0f * density));
|
||||||
|
}
|
||||||
|
|
||||||
private void placeKeyPreview(final Key key, final KeyPreviewView keyPreviewView,
|
private void placeKeyPreview(final Key key, final KeyPreviewView keyPreviewView,
|
||||||
final KeyboardIconsSet iconsSet, final KeyDrawParams drawParams,
|
final KeyboardIconsSet iconsSet, final KeyDrawParams drawParams,
|
||||||
final int keyboardViewWidth, final int[] originCoords) {
|
final int keyboardViewWidth, final int[] originCoords) {
|
||||||
@ -110,8 +115,16 @@ public final class KeyPreviewChoreographer {
|
|||||||
keyPreviewView.measure(
|
keyPreviewView.measure(
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
mParams.setGeometry(keyPreviewView);
|
mParams.setGeometry(keyPreviewView);
|
||||||
final int previewWidth = keyPreviewView.getMeasuredWidth();
|
|
||||||
final int previewHeight = mParams.mPreviewHeight;
|
final float density = keyPreviewView.getContext().getResources().getDisplayMetrics().density;
|
||||||
|
|
||||||
|
final int bottomPadding = getBottomPaddingForKey(keyPreviewView.getContext(), key);
|
||||||
|
final int topArea = Math.max(key.getHeight(), (int)(44.0f * density));
|
||||||
|
|
||||||
|
final int previewWidth = Math.min(Math.max(key.getWidth(), (int)(34.0f * density)), (int)(80.0f * density));
|
||||||
|
final int previewHeight = topArea + bottomPadding;
|
||||||
|
keyPreviewView.setPadding(0, 0, 0, bottomPadding);
|
||||||
|
|
||||||
final int keyDrawWidth = key.getDrawWidth();
|
final int keyDrawWidth = key.getDrawWidth();
|
||||||
// The key preview is horizontally aligned with the center of the visible part of the
|
// The key preview is horizontally aligned with the center of the visible part of the
|
||||||
// parent key. If it doesn't fit in this {@link KeyboardView}, it is moved inward to fit and
|
// parent key. If it doesn't fit in this {@link KeyboardView}, it is moved inward to fit and
|
||||||
|
@ -49,7 +49,7 @@ public class KeyPreviewView extends androidx.appcompat.widget.AppCompatTextView
|
|||||||
|
|
||||||
public KeyPreviewView(final Context context, final AttributeSet attrs, final int defStyleAttr) {
|
public KeyPreviewView(final Context context, final AttributeSet attrs, final int defStyleAttr) {
|
||||||
super(context, attrs, defStyleAttr);
|
super(context, attrs, defStyleAttr);
|
||||||
setGravity(Gravity.CENTER);
|
setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPreviewVisual(final Key key, final KeyboardIconsSet iconsSet,
|
public void setPreviewVisual(final Key key, final KeyboardIconsSet iconsSet,
|
||||||
@ -64,13 +64,13 @@ public class KeyPreviewView extends androidx.appcompat.widget.AppCompatTextView
|
|||||||
|
|
||||||
setCompoundDrawables(null, null, null, null);
|
setCompoundDrawables(null, null, null, null);
|
||||||
setTextColor(drawParams.mPreviewTextColor);
|
setTextColor(drawParams.mPreviewTextColor);
|
||||||
setTextSize(TypedValue.COMPLEX_UNIT_PX, key.selectPreviewTextSize(drawParams));
|
setTextSize(TypedValue.COMPLEX_UNIT_PX, key.selectTextSize(drawParams));
|
||||||
setTypeface(key.selectPreviewTypeface(drawParams));
|
setTypeface(key.selectPreviewTypeface(drawParams));
|
||||||
// TODO Should take care of temporaryShiftLabel here.
|
// TODO Should take care of temporaryShiftLabel here.
|
||||||
setTextAndScaleX(key.getPreviewLabel());
|
setTextAndScaleX(key.getWidth(), key.getPreviewLabel());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setTextAndScaleX(final String text) {
|
private void setTextAndScaleX(int maxWidth, final String text) {
|
||||||
setTextScaleX(1.0f);
|
setTextScaleX(1.0f);
|
||||||
setText(text);
|
setText(text);
|
||||||
if (sNoScaleXTextSet.contains(text)) {
|
if (sNoScaleXTextSet.contains(text)) {
|
||||||
@ -83,8 +83,6 @@ public class KeyPreviewView extends androidx.appcompat.widget.AppCompatTextView
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
background.getPadding(mBackgroundPadding);
|
background.getPadding(mBackgroundPadding);
|
||||||
final int maxWidth = background.getIntrinsicWidth() - mBackgroundPadding.left
|
|
||||||
- mBackgroundPadding.right;
|
|
||||||
final float width = getTextWidth(text, getPaint());
|
final float width = getTextWidth(text, getPaint());
|
||||||
if (width <= maxWidth) {
|
if (width <= maxWidth) {
|
||||||
sNoScaleXTextSet.add(text);
|
sNoScaleXTextSet.add(text);
|
||||||
|
@ -229,7 +229,6 @@ class BasicThemeProvider(val context: Context, val colorScheme: KeyboardColorSch
|
|||||||
colors[R.styleable.Keyboard_Key_keyHintLabelColor] = onKeyColorHalf
|
colors[R.styleable.Keyboard_Key_keyHintLabelColor] = onKeyColorHalf
|
||||||
colors[R.styleable.Keyboard_Key_keyShiftedLetterHintInactivatedColor] = onKeyColorHalf
|
colors[R.styleable.Keyboard_Key_keyShiftedLetterHintInactivatedColor] = onKeyColorHalf
|
||||||
colors[R.styleable.Keyboard_Key_keyShiftedLetterHintActivatedColor] = onKeyColorHalf
|
colors[R.styleable.Keyboard_Key_keyShiftedLetterHintActivatedColor] = onKeyColorHalf
|
||||||
colors[R.styleable.Keyboard_Key_keyPreviewTextColor] = onSecondary
|
|
||||||
colors[R.styleable.MainKeyboardView_languageOnSpacebarTextColor] = onKeyColorHalf
|
colors[R.styleable.MainKeyboardView_languageOnSpacebarTextColor] = onKeyColorHalf
|
||||||
colors[R.styleable.MainKeyboardView_gestureTrailColor] = primary
|
colors[R.styleable.MainKeyboardView_gestureTrailColor] = primary
|
||||||
colors[R.styleable.MainKeyboardView_slidingKeyInputPreviewColor] = primary
|
colors[R.styleable.MainKeyboardView_slidingKeyInputPreviewColor] = primary
|
||||||
@ -316,11 +315,11 @@ class BasicThemeProvider(val context: Context, val colorScheme: KeyboardColorSch
|
|||||||
},
|
},
|
||||||
|
|
||||||
KeyVisualStyle.MoreKey to VisualStyleDescriptor(
|
KeyVisualStyle.MoreKey to VisualStyleDescriptor(
|
||||||
backgroundDrawable = coloredRoundedRectangle(primaryContainer, dp(24.dp)),
|
backgroundDrawable = coloredRoundedRectangle(primaryContainer, dp(8.dp)),
|
||||||
foregroundColor = onPrimaryContainer,
|
foregroundColor = onPrimaryContainer,
|
||||||
|
|
||||||
backgroundDrawablePressed = coloredRoundedRectangle(onPrimaryContainer, dp(24.dp)),
|
backgroundDrawablePressed = coloredRoundedRectangle(primary, dp(8.dp)),
|
||||||
foregroundColorPressed = primaryContainer
|
foregroundColorPressed = onPrimary
|
||||||
),
|
),
|
||||||
|
|
||||||
KeyVisualStyle.Functional to if(keyBorders) {
|
KeyVisualStyle.Functional to if(keyBorders) {
|
||||||
@ -405,28 +404,17 @@ class BasicThemeProvider(val context: Context, val colorScheme: KeyboardColorSch
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
keyFeedback = ShapeDrawable().apply {
|
keyFeedback = GradientDrawable(
|
||||||
paint.color = secondary
|
GradientDrawable.Orientation.TOP_BOTTOM,
|
||||||
shape = RoundRectShape(
|
intArrayOf(primaryContainer, primaryContainer),
|
||||||
floatArrayOf(
|
).apply {
|
||||||
dp(8.dp), dp(8.dp), dp(8.dp), dp(8.dp),
|
cornerRadius = dp(8.dp)
|
||||||
dp(8.dp), dp(8.dp), dp(8.dp), dp(8.dp),
|
|
||||||
), null, null
|
|
||||||
)
|
|
||||||
|
|
||||||
intrinsicWidth = dp(48.dp).roundToInt()
|
|
||||||
intrinsicHeight = dp(24.dp).roundToInt()
|
|
||||||
|
|
||||||
setPadding(0, 0, 0, dp(50.dp).roundToInt())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
colors[R.styleable.Keyboard_Key_keyPreviewTextColor] = onPrimaryContainer
|
||||||
|
|
||||||
moreKeysTextColor = onPrimaryContainer
|
moreKeysTextColor = onPrimaryContainer
|
||||||
moreKeysKeyboardBackground = coloredRoundedRectangle(primaryContainer, dp(28.dp)).apply {
|
moreKeysKeyboardBackground = coloredRoundedRectangle(primaryContainer, dp(8.dp))
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
||||||
val padding = dp(4.dp).roundToInt()
|
|
||||||
setPadding(padding, padding, padding, padding)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(icons.keys == KeyboardIconsSet.validIcons) {
|
assert(icons.keys == KeyboardIconsSet.validIcons) {
|
||||||
"Icons differ. Missing: ${KeyboardIconsSet.validIcons - icons.keys}, extraneous: ${icons.keys - KeyboardIconsSet.validIcons}"
|
"Icons differ. Missing: ${KeyboardIconsSet.validIcons - icons.keys}, extraneous: ${icons.keys - KeyboardIconsSet.validIcons}"
|
||||||
|
Loading…
Reference in New Issue
Block a user