mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-16 16:16:04 -04:00
Fix drawers not being snappable
This commit is contained in:
parent
8b0db45d02
commit
b74d9bd1f4
@ -325,6 +325,25 @@ public class ControlButton extends androidx.appcompat.widget.AppCompatButton imp
|
|||||||
return super.onTouchEvent(event);
|
return super.onTouchEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Passe a series of checks to determine if the ControlButton is available to be snapped on.
|
||||||
|
*
|
||||||
|
* @param button
|
||||||
|
* @return whether or not the button
|
||||||
|
*/
|
||||||
|
protected boolean canSnap(ControlButton button){
|
||||||
|
float MIN_DISTANCE = Tools.dpToPx(8);
|
||||||
|
|
||||||
|
if(button == this) return false;
|
||||||
|
if(com.google.android.material.math.MathUtils.dist(
|
||||||
|
button.getX() + button.getWidth()/2f,
|
||||||
|
button.getY() + button.getHeight()/2f,
|
||||||
|
getX() + getWidth()/2f,
|
||||||
|
getY() + getHeight()/2f) > Math.max(button.getWidth()/2f + getWidth()/2f, button.getHeight()/2f + getHeight()/2f) + MIN_DISTANCE) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Try to snap, then align to neighboring buttons, given the provided coordinates.
|
* Try to snap, then align to neighboring buttons, given the provided coordinates.
|
||||||
* The new position is automatically applied to the View,
|
* The new position is automatically applied to the View,
|
||||||
@ -335,19 +354,14 @@ public class ControlButton extends androidx.appcompat.widget.AppCompatButton imp
|
|||||||
*/
|
*/
|
||||||
protected void snapAndAlign(float x, float y){
|
protected void snapAndAlign(float x, float y){
|
||||||
//Time to snap !
|
//Time to snap !
|
||||||
float MIN_DISTANCE = Tools.dpToPx(10);
|
float MIN_DISTANCE = Tools.dpToPx(8);
|
||||||
|
|
||||||
setX(x);
|
setX(x);
|
||||||
setY(y);
|
setY(y);
|
||||||
|
|
||||||
for(ControlButton button : ((ControlLayout) getParent()).getButtonChildren()){
|
for(ControlButton button : ((ControlLayout) getParent()).getButtonChildren()){
|
||||||
//Step 1: Filter unwanted buttons
|
//Step 1: Filter unwanted buttons
|
||||||
if(button == this) continue;
|
if(!canSnap(button)) continue;
|
||||||
if(com.google.android.material.math.MathUtils.dist(
|
|
||||||
button.getX() + button.getWidth()/2f,
|
|
||||||
button.getY() + button.getHeight()/2f,
|
|
||||||
getX() + getWidth()/2f,
|
|
||||||
getY() + getHeight()/2f) > Math.max(button.getWidth()/2f + getWidth()/2f, button.getHeight()/2f + getHeight()/2f) + MIN_DISTANCE) continue;
|
|
||||||
|
|
||||||
//Step 2: Get Coordinates
|
//Step 2: Get Coordinates
|
||||||
float button_top = button.getY();
|
float button_top = button.getY();
|
||||||
|
@ -101,6 +101,19 @@ public class ControlDrawer extends ControlButton {
|
|||||||
resizeButtons();
|
resizeButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether or not the button passed as a parameter belongs to this drawer.
|
||||||
|
*
|
||||||
|
* @param button The button to look for
|
||||||
|
* @return Whether the button is in the buttons list of the drawer.
|
||||||
|
*/
|
||||||
|
public boolean containsChild(ControlButton button){
|
||||||
|
for(ControlButton childButton : buttons){
|
||||||
|
if (childButton == button) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ControlData preProcessProperties(ControlData properties, ControlLayout layout) {
|
public ControlData preProcessProperties(ControlData properties, ControlLayout layout) {
|
||||||
ControlData data = super.preProcessProperties(properties, layout);
|
ControlData data = super.preProcessProperties(properties, layout);
|
||||||
@ -129,6 +142,11 @@ public class ControlDrawer extends ControlButton {
|
|||||||
return super.onTouchEvent(event);
|
return super.onTouchEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean canSnap(ControlButton button) {
|
||||||
|
return super.canSnap(button) && !containsChild(button);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setX(float x) {
|
public void setX(float x) {
|
||||||
super.setX(x);
|
super.setX(x);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user