mirror of https://github.com/NekoX-Dev/NekoX.git
186 lines
4.8 KiB
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);
|
|
}
|
|
}
|