NekoX/TMessagesProj/src/main/java/org/telegram/ui/Components/CombinedDrawable.java

186 lines
4.8 KiB
Java

/*
* This is the source code of Telegram for Android v. 5.x.x.
* It is licensed under GNU GPL v. 2 or later.
* You should have received a copy of the license in this archive (see LICENSE).
*
* Copyright Nikolai Kudashov, 2013-2018.
*/
package org.telegram.ui.Components;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull;
public class CombinedDrawable extends Drawable implements Drawable.Callback {
private Drawable background;
private Drawable icon;
private int left;
private int top;
private int iconWidth;
private int iconHeight;
private int backWidth;
private int backHeight;
private int offsetX;
private int offsetY;
private boolean fullSize;
public CombinedDrawable(Drawable backgroundDrawable, Drawable iconDrawable, int leftOffset, int topOffset) {
background = backgroundDrawable;
icon = iconDrawable;
left = leftOffset;
top = topOffset;
if (iconDrawable != null) {
iconDrawable.setCallback(this);
}
}
public void setIconSize(int width, int height) {
iconWidth = width;
iconHeight = height;
}
public CombinedDrawable(Drawable backgroundDrawable, Drawable iconDrawable) {
background = backgroundDrawable;
icon = iconDrawable;
if (iconDrawable != null) {
iconDrawable.setCallback(this);
}
}
public void setCustomSize(int width, int height) {
backWidth = width;
backHeight = height;
}
public void setIconOffset(int x, int y) {
offsetX = x;
offsetY = y;
}
public Drawable getIcon() {
return icon;
}
public Drawable getBackground() {
return background;
}
public void setFullsize(boolean value) {
fullSize = value;
}
@Override
public void setColorFilter(ColorFilter colorFilter) {
icon.setColorFilter(colorFilter);
}
@Override
public boolean isStateful() {
return icon.isStateful();
}
@Override
public boolean setState(int[] stateSet) {
icon.setState(stateSet);
return true;
}
@Override
public int[] getState() {
return icon.getState();
}
@Override
protected boolean onStateChange(int[] state) {
return true;
}
@Override
public void jumpToCurrentState() {
icon.jumpToCurrentState();
}
@Override
public ConstantState getConstantState() {
return icon.getConstantState();
}
@Override
public void draw(Canvas canvas) {
background.setBounds(getBounds());
background.draw(canvas);
if (icon != null) {
if (fullSize) {
android.graphics.Rect bounds = getBounds();
if (left != 0) {
icon.setBounds(bounds.left + left, bounds.top + top, bounds.right - left, bounds.bottom - top);
} else {
icon.setBounds(bounds);
}
} else {
int x;
int y;
if (iconWidth != 0) {
x = getBounds().centerX() - iconWidth / 2 + left + offsetX;
y = getBounds().centerY() - iconHeight / 2 + top + offsetY;
icon.setBounds(x, y, x + iconWidth, y + iconHeight);
} else {
x = getBounds().centerX() - icon.getIntrinsicWidth() / 2 + left;
y = getBounds().centerY() - icon.getIntrinsicHeight() / 2 + top;
icon.setBounds(x, y, x + icon.getIntrinsicWidth(), y + icon.getIntrinsicHeight());
}
}
icon.draw(canvas);
}
}
@Override
public void setAlpha(int alpha) {
icon.setAlpha(alpha);
background.setAlpha(alpha);
}
@Override
public int getIntrinsicWidth() {
return backWidth != 0 ? backWidth : background.getIntrinsicWidth();
}
@Override
public int getIntrinsicHeight() {
return backHeight != 0 ? backHeight : background.getIntrinsicHeight();
}
@Override
public int getMinimumWidth() {
return backWidth != 0 ? backWidth : background.getMinimumWidth();
}
@Override
public int getMinimumHeight() {
return backHeight != 0 ? backHeight : background.getMinimumHeight();
}
@Override
public int getOpacity() {
return icon.getOpacity();
}
@Override
public void invalidateDrawable(@NonNull Drawable who) {
invalidateSelf();
}
@Override
public void scheduleDrawable(@NonNull Drawable who, @NonNull Runnable what, long when) {
scheduleSelf(what, when);
}
@Override
public void unscheduleDrawable(@NonNull Drawable who, @NonNull Runnable what) {
unscheduleSelf(what);
}
}