/*
* Copyright (C) 2013 Chen Hui <calmer91@gmail.com>
*
* 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 master.flame.danmaku.controller;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
public class DrawHelper {
public static Paint PAINT, PAINT_FPS;
public static RectF RECT;
private static boolean USE_DRAWCOLOR_TO_CLEAR_CANVAS = true;
private static boolean USE_DRAWCOLOR_MODE_CLEAR = true;
static {
PAINT = new Paint();
PAINT.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
PAINT.setColor(Color.TRANSPARENT);
RECT = new RectF();
}
public static void useDrawColorToClearCanvas(boolean use, boolean useClearMode) {
USE_DRAWCOLOR_TO_CLEAR_CANVAS = use;
USE_DRAWCOLOR_MODE_CLEAR = useClearMode;
}
public static void drawFPS(Canvas canvas, String text) {
if (PAINT_FPS == null) {
PAINT_FPS = new Paint();
PAINT_FPS.setColor(Color.RED);
PAINT_FPS.setTextSize(30);
}
int top = canvas.getHeight() - 50;
clearCanvas(canvas, 10, top - 50, (int) (PAINT_FPS.measureText(text) + 20), canvas.getHeight());
canvas.drawText(text, 10, top, PAINT_FPS);
}
public static void clearCanvas(Canvas canvas) {
if (USE_DRAWCOLOR_TO_CLEAR_CANVAS) {
if(USE_DRAWCOLOR_MODE_CLEAR) {
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
} else {
canvas.drawColor(Color.TRANSPARENT);
}
} else {
RECT.set(0, 0, canvas.getWidth(), canvas.getHeight());
clearCanvas(canvas, RECT);
}
}
public static void fillTransparent(Canvas canvas){
canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
}
public static void clearCanvas(Canvas canvas, float left, float top, float right, float bottom) {
RECT.set(left, top, right, bottom);
clearCanvas(canvas, RECT);
}
private static void clearCanvas(Canvas canvas, RectF rect) {
if (rect.width() <= 0 || rect.height() <= 0) {
return;
}
canvas.drawRect(rect, PAINT);
}
}