package com.beloo.widget.chipslayoutmanager.layouter;
import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.util.Pair;
import android.view.View;
import java.util.Collections;
class LeftLayouter extends AbstractLayouter {
private LeftLayouter(Builder builder) {
super(builder);
}
public static Builder newBuilder() {
return new Builder();
}
@Override
Rect createViewRect(View view) {
int left = viewRight - getCurrentViewWidth();
int viewTop = viewBottom - getCurrentViewHeight();
Rect viewRect = new Rect(left, viewTop, viewRight, viewBottom);
viewBottom = viewRect.top;
return viewRect;
}
@Override
boolean isReverseOrder() {
return true;
}
@Override
void onPreLayout() {
int topOffsetOfRow = viewBottom - getCanvasTopBorder();
viewBottom = 0;
for (Pair<Rect, View> columnViewRectPair : rowViews) {
Rect viewRect = columnViewRectPair.first;
viewRect.top = viewRect.top - topOffsetOfRow;
viewRect.bottom = viewRect.bottom - topOffsetOfRow;
viewBottom = Math.max(viewBottom, viewRect.bottom);
viewLeft = Math.min(viewLeft, viewRect.left);
viewRight = Math.max(viewRight, viewRect.right);
}
}
@Override
void onAfterLayout() {
viewBottom = getCanvasBottomBorder();
viewRight = viewLeft;
}
@Override
boolean isAttachedViewFromNewRow(View view) {
int bottomOfCurrentView = getLayoutManager().getDecoratedBottom(view);
int rightOfCurrentView = getLayoutManager().getDecoratedRight(view);
return viewLeft >= rightOfCurrentView
&& bottomOfCurrentView > viewBottom;
}
@Override
void onInterceptAttachView(View view) {
if (viewBottom != getCanvasBottomBorder() && viewBottom - getCurrentViewHeight() < getCanvasTopBorder()) {
//new column
viewBottom = getCanvasBottomBorder();
viewRight = viewLeft;
} else {
viewBottom = getLayoutManager().getDecoratedTop(view);
}
viewLeft = Math.min(viewLeft, getLayoutManager().getDecoratedLeft(view));
}
@Override
public int getStartRowBorder() {
return getViewLeft();
}
@Override
public int getEndRowBorder() {
return getViewRight();
}
@Override
public int getRowLength() {
return viewBottom - getCanvasTopBorder();
}
public static final class Builder extends AbstractLayouter.Builder {
private Builder() {
}
@NonNull
public LeftLayouter createLayouter() {
return new LeftLayouter(this);
}
}
}