Add gl file
This commit is contained in:
1 parent
76812c26f4
commit
2897a2fe12
67 files changed
+11664
-7
No files matched your search
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Hippo Seven
|
||||
*
|
||||
* 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 com.hippo.gl.image;
|
||||
|
||||
public class AnimatedImage extends Image {
|
||||
|
||||
private boolean mDecoded;
|
||||
private int mCurrentFrame;
|
||||
|
||||
private boolean mDirty = false;
|
||||
|
||||
protected AnimatedImage(long nativeImage, int format, int width, int height) {
|
||||
super(nativeImage, format, width, height);
|
||||
mCurrentFrame = 0;
|
||||
}
|
||||
|
||||
protected void checkDecoded() {
|
||||
if (!mDecoded) {
|
||||
throw new IllegalStateException("Call decode() first!");
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isDecoded() {
|
||||
checkRecycled();
|
||||
|
||||
return mDecoded;
|
||||
}
|
||||
|
||||
public boolean decode() {
|
||||
checkRecycled();
|
||||
|
||||
if (mDecoded) {
|
||||
return true;
|
||||
}
|
||||
if (mNativeImage != 0) {
|
||||
boolean result = nativeDecode(mNativeImage, mFormat);
|
||||
mDecoded = true;
|
||||
return result;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isAnimated() {
|
||||
checkRecycled();
|
||||
checkDecoded();
|
||||
|
||||
return getFrameCount() != 1;
|
||||
}
|
||||
|
||||
public int getFrameCount() {
|
||||
checkRecycled();
|
||||
checkDecoded();
|
||||
|
||||
return nativeGetFrameCount(mNativeImage, mFormat);
|
||||
}
|
||||
|
||||
public int getCurrentFrame() {
|
||||
checkRecycled();
|
||||
checkDecoded();
|
||||
|
||||
return mCurrentFrame;
|
||||
}
|
||||
|
||||
public void setCurrentFrame(int frame) {
|
||||
checkRecycled();
|
||||
checkDecoded();
|
||||
|
||||
int frameCount = getFrameCount();
|
||||
if (frame < 0 || frame >= frameCount) {
|
||||
throw new IndexOutOfBoundsException("Invalid frame " + frame + ", frame count is " + frameCount);
|
||||
}
|
||||
mCurrentFrame = frame;
|
||||
if (mNativeImage != 0) {
|
||||
nativeSetCurrentFrame(mNativeImage, mFormat, frame);
|
||||
mDirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void advance() {
|
||||
setCurrentFrame((mCurrentFrame + 1) % getFrameCount());
|
||||
}
|
||||
|
||||
public int getCurrentDelay() {
|
||||
return getDelay(mCurrentFrame);
|
||||
}
|
||||
|
||||
public int getDelay(int frame) {
|
||||
checkRecycled();
|
||||
checkDecoded();
|
||||
|
||||
int frameCount = getFrameCount();
|
||||
if (frame < 0 || frame >= frameCount) {
|
||||
throw new IndexOutOfBoundsException("Invalid frame " + frame + ", frame count is " + frameCount);
|
||||
}
|
||||
return nativeGetDelay(mNativeImage, mFormat, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void recycle() {
|
||||
super.recycle();
|
||||
}
|
||||
|
||||
private static native boolean nativeDecode(long nativeImage, int format);
|
||||
private static native int nativeGetFrameCount(long nativeImage, int format);
|
||||
private static native void nativeSetCurrentFrame(long nativeImage, int format, int frame);
|
||||
private static native int nativeGetDelay(long nativeImage, int format, int frame);
|
||||
}
|
||||
Reference in new issue
Block a user