mirror of https://github.com/YTVanced/VancedMicroG
106 lines
4.0 KiB
Java
106 lines
4.0 KiB
Java
/*
|
|
* Copyright 2013-2015 µg Project Team
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package org.microg.gms.maps.bitmap;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.BitmapFactory;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.ColorFilter;
|
|
import android.graphics.ColorMatrix;
|
|
import android.graphics.ColorMatrixColorFilter;
|
|
import android.graphics.Paint;
|
|
|
|
import com.google.android.gms.R;
|
|
import com.google.android.gms.dynamic.ObjectWrapper;
|
|
|
|
import org.microg.gms.maps.ResourcesContainer;
|
|
|
|
public class DefaultBitmapDescriptor extends AbstractBitmapDescriptor {
|
|
public static final DefaultBitmapDescriptor DEFAULT_DESCRIPTOR = new DefaultBitmapDescriptor(0);
|
|
public static final BitmapDescriptorImpl DEFAULT_DESCRIPTOR_IMPL = new BitmapDescriptorImpl(ObjectWrapper.wrap(DEFAULT_DESCRIPTOR));
|
|
public static final int DEGREES = 360;
|
|
|
|
private final float hue;
|
|
|
|
public DefaultBitmapDescriptor(float hue) {
|
|
this.hue = hue > 180 ? -DEGREES + hue : hue;
|
|
}
|
|
|
|
@Override
|
|
public Bitmap generateBitmap(Context context) {
|
|
Bitmap source;
|
|
if (this == DEFAULT_DESCRIPTOR) {
|
|
source = BitmapFactory.decodeResource(ResourcesContainer.get(), R.drawable.maps_default_marker);
|
|
} else {
|
|
source = DEFAULT_DESCRIPTOR.loadBitmap(context);
|
|
}
|
|
if (hue % DEGREES == 0) return source;
|
|
Paint paint = new Paint();
|
|
paint.setColorFilter(adjustHue(hue));
|
|
Bitmap bitmap = Bitmap.createBitmap(source.getWidth(), source.getHeight(), source.getConfig());
|
|
Canvas canvas = new Canvas(bitmap);
|
|
canvas.drawBitmap(source, 0, 0, paint);
|
|
return bitmap;
|
|
}
|
|
|
|
/**
|
|
* Creates a HUE ajustment ColorFilter
|
|
* <p/>
|
|
* see http://groups.google.com/group/android-developers/browse_thread/thread/9e215c83c3819953
|
|
* see http://gskinner.com/blog/archives/2007/12/colormatrix_cla.html
|
|
*
|
|
* @param value degrees to shift the hue.
|
|
*/
|
|
public static ColorFilter adjustHue(float value) {
|
|
ColorMatrix cm = new ColorMatrix();
|
|
adjustHue(cm, value);
|
|
return new ColorMatrixColorFilter(cm);
|
|
}
|
|
|
|
/**
|
|
* see http://groups.google.com/group/android-developers/browse_thread/thread/9e215c83c3819953
|
|
* see http://gskinner.com/blog/archives/2007/12/colormatrix_cla.html
|
|
*/
|
|
public static void adjustHue(ColorMatrix cm, float value) {
|
|
value = cleanValue(value, 180f) / 180f * (float) Math.PI;
|
|
if (value == 0) {
|
|
return;
|
|
}
|
|
float cosVal = (float) Math.cos(value);
|
|
float sinVal = (float) Math.sin(value);
|
|
float lumR = 0.213f;
|
|
float lumG = 0.715f;
|
|
float lumB = 0.072f;
|
|
float[] mat = new float[]{lumR + cosVal * (1 - lumR) + sinVal * (-lumR),
|
|
lumG + cosVal * (-lumG) + sinVal * (-lumG),
|
|
lumB + cosVal * (-lumB) + sinVal * (1 - lumB), 0, 0,
|
|
lumR + cosVal * (-lumR) + sinVal * (0.143f),
|
|
lumG + cosVal * (1 - lumG) + sinVal * (0.140f),
|
|
lumB + cosVal * (-lumB) + sinVal * (-0.283f), 0, 0,
|
|
lumR + cosVal * (-lumR) + sinVal * (-(1 - lumR)),
|
|
lumG + cosVal * (-lumG) + sinVal * (lumG),
|
|
lumB + cosVal * (1 - lumB) + sinVal * (lumB),
|
|
0, 0, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 0f, 0f, 1f};
|
|
cm.postConcat(new ColorMatrix(mat));
|
|
}
|
|
|
|
protected static float cleanValue(float p_val, float p_limit) {
|
|
return Math.min(p_limit, Math.max(-p_limit, p_val));
|
|
}
|
|
}
|