diff --git a/.project b/.project index 88cb5e0e6..ec9200712 100644 --- a/.project +++ b/.project @@ -5,6 +5,12 @@ + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + com.android.ide.eclipse.adt.ResourceManagerBuilder @@ -25,9 +31,19 @@ + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + com.android.ide.eclipse.adt.AndroidNature org.eclipse.jdt.core.javanature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature diff --git a/src/com/hippo/ehviewer/data/Data.java b/src/com/hippo/ehviewer/data/Data.java index 332b4ea49..ba6a69451 100644 --- a/src/com/hippo/ehviewer/data/Data.java +++ b/src/com/hippo/ehviewer/data/Data.java @@ -396,7 +396,8 @@ public class Data { while (!cursor.isAfterLast()) { int gid = cursor.getInt(0); GalleryInfo galleryInfo = getGallery(gid); - mLocalFavourites.add(galleryInfo); + if (galleryInfo != null) + mLocalFavourites.add(galleryInfo); cursor.moveToNext(); } } diff --git a/src/com/hippo/ehviewer/gallery/GalleryView.java b/src/com/hippo/ehviewer/gallery/GalleryView.java index 815589d8b..99a9a704e 100644 --- a/src/com/hippo/ehviewer/gallery/GalleryView.java +++ b/src/com/hippo/ehviewer/gallery/GalleryView.java @@ -28,12 +28,14 @@ import android.view.animation.OvershootInterpolator; import com.hippo.ehviewer.AppHandler; import com.hippo.ehviewer.R; import com.hippo.ehviewer.gallery.data.ImageSet; +import com.hippo.ehviewer.gallery.glrenderer.BasicTexture; import com.hippo.ehviewer.gallery.glrenderer.BitmapTexture; import com.hippo.ehviewer.gallery.glrenderer.GLCanvas; import com.hippo.ehviewer.gallery.glrenderer.GLPaint; +import com.hippo.ehviewer.gallery.glrenderer.ImageTexture; import com.hippo.ehviewer.gallery.glrenderer.MovieTexture; import com.hippo.ehviewer.gallery.glrenderer.StringTexture; -import com.hippo.ehviewer.gallery.glrenderer.UploadedTexture; +import com.hippo.ehviewer.gallery.image.Image; import com.hippo.ehviewer.gallery.ui.GLView; import com.hippo.ehviewer.gallery.ui.GestureRecognizer; import com.hippo.ehviewer.gallery.util.GalleryUtils; @@ -297,11 +299,15 @@ public class GalleryView extends GLView mContext.getString(R.string.read_image_error)); } else { if (res instanceof Bitmap) { - BitmapImage bi = new BitmapImage(); + BitmapItem bi = new BitmapItem(); bi.load((Bitmap)res); showItems[targetIndex] = bi; - } else { - MovieImage mi = new MovieImage(); + } else if(res instanceof Image) { + ImageItem ii = new ImageItem(); + ii.load((Image)res); + showItems[targetIndex] = ii; + } else { + MovieItem mi = new MovieItem(); mi.load((Movie)res); showItems[targetIndex] = mi; } @@ -348,6 +354,9 @@ public class GalleryView extends GLView canvas.drawLine(right, top, right, bottom, paint); } + private ImageTexture nt; + + @Override protected synchronized void render(GLCanvas canvas) { // If it is not render thread, do not render @@ -360,7 +369,7 @@ public class GalleryView extends GLView item = showItems[CUR_TARGET_INDEX]; if (item != null) item.draw(canvas); - if (item instanceof MovieImage) + if (item instanceof MovieItem) hasMovie |= true; break; @@ -369,13 +378,13 @@ public class GalleryView extends GLView item = showItems[PRE_TARGET_INDEX]; if (item != null) item.draw(canvas, scrollXOffset, scrollYOffset); - if (item instanceof MovieImage) + if (item instanceof MovieItem) hasMovie |= true; item = showItems[CUR_TARGET_INDEX]; if (item != null) item.draw(canvas, scrollXOffset, scrollYOffset); - if (item instanceof MovieImage) + if (item instanceof MovieItem) hasMovie |= true; break; @@ -384,13 +393,13 @@ public class GalleryView extends GLView item = showItems[CUR_TARGET_INDEX]; if (item != null) item.draw(canvas, scrollXOffset, scrollYOffset); - if (item instanceof MovieImage) + if (item instanceof MovieItem) hasMovie |= true; item = showItems[NEXT_TARGET_INDEX]; if (item != null) item.draw(canvas, scrollXOffset, scrollYOffset); - if (item instanceof MovieImage) + if (item instanceof MovieItem) hasMovie |= true; break; } @@ -402,6 +411,14 @@ public class GalleryView extends GLView // TODO Mask to reduce brightness //canvas.fillRect(0, 0, mScreenWidth, mScreenHeight, MASK_COLOR); + + //if (nt == null) + //nt = new ImageTexture(); + + // nt.draw(canvas, 0, 0); + // Log.d(TAG, "nt.draw"); + + if (hasMovie) invalidate(); } @@ -442,8 +459,8 @@ public class GalleryView extends GLView rect.top = yOffset; rect.right = rect.left + text.width; rect.bottom = rect.top + text.height; - } else if (showItem instanceof Image) { - Image image = (Image)showItem; + } else if (showItem instanceof BasicItem) { + BasicItem image = (BasicItem)showItem; // Set scale int showWidth = 0; @@ -684,9 +701,9 @@ public class GalleryView extends GLView ShowItem curShowItem; curShowItem = showItems[CUR_TARGET_INDEX]; - if (curShowItem == null || !(curShowItem instanceof Image)) + if (curShowItem == null || !(curShowItem instanceof BasicItem)) return false; - Image image = (Image)curShowItem; + BasicItem image = (BasicItem)curShowItem; float newScale; if (mode) { newScale = image.imageScale * 1.1f; @@ -905,7 +922,7 @@ public class GalleryView extends GLView private final TimeRunner mDoubleTapRunner = new TimeRunner() { - private Image image; + private BasicItem image; private float startScale; private float endScale; private final Point startPosition = new Point(); @@ -929,11 +946,11 @@ public class GalleryView extends GLView @Override protected void onStart() { ShowItem showItem = showItems[CUR_TARGET_INDEX]; - if (showItem == null || !(showItem instanceof Image)) { + if (showItem == null || !(showItem instanceof BasicItem)) { mDoubleTapRunner.cancel(); return; } - image = (Image)showItem; + image = (BasicItem)showItem; int width = image.width; int height = image.height; if (width == -1 || height == -1) { @@ -1073,7 +1090,7 @@ public class GalleryView extends GLView return true; ShowItem curShowItem = showItems[CUR_TARGET_INDEX]; - if (curShowItem == null || !(curShowItem instanceof Image)) + if (curShowItem == null || !(curShowItem instanceof BasicItem)) return true; mDoubleTapAnimating = true; @@ -1121,7 +1138,7 @@ public class GalleryView extends GLView Rect rect = curShowItem.mRect; // Check change page or not - if (curShowItem == null || !(curShowItem instanceof Image)) + if (curShowItem == null || !(curShowItem instanceof BasicItem)) changePage = true; else{ if ( Math.abs(totalX/totalY) > 1 && ((totalX > CHANGE_PAGE_OFFSET && dx < 0 && rect.left >= 0) @@ -1265,10 +1282,10 @@ public class GalleryView extends GLView } ShowItem curShowItem = showItems[CUR_TARGET_INDEX]; - if (curShowItem == null || !(curShowItem instanceof Image)) + if (curShowItem == null || !(curShowItem instanceof BasicItem)) return true; - Image image = (Image)curShowItem; + BasicItem image = (BasicItem)curShowItem; float newScale = image.imageScale * scale; if (newScale > SCALE_MAX || newScale < SCALE_MIN) @@ -1392,15 +1409,17 @@ public class GalleryView extends GLView public abstract void recycle(); } - private abstract class Image extends ShowItem{ - private UploadedTexture mTexture; + private abstract class BasicItem extends ShowItem{ + private BasicTexture mTexture; public float imageScale = 1; + private final RectF source = new RectF(); + private final RectF target = new RectF(); /** * You must call init before draw * @param texture */ - public void init(UploadedTexture texture) { + public void init(BasicTexture texture) { mTexture = texture; imageScale = 1; } @@ -1441,8 +1460,6 @@ public class GalleryView extends GLView // Only show what in the own box // TODO only what can be seen if (left < leftBound || top < topBound || right > rightBound || bottom > bottomBound) { - RectF source = new RectF(); - RectF target = new RectF(); if (left < leftBound) { target.left = leftBound; @@ -1486,7 +1503,7 @@ public class GalleryView extends GLView } } - private class BitmapImage extends Image{ + private class BitmapItem extends BasicItem{ private BitmapTexture mTexture; private Bitmap mContextBmp; @@ -1514,7 +1531,30 @@ public class GalleryView extends GLView } } - private class MovieImage extends Image{ + private class ImageItem extends BasicItem { + private ImageTexture mTexture; + + public void load(Image image) { + mTexture = new ImageTexture(image); + width = mTexture.getWidth(); + height = mTexture.getHeight(); + + super.init(mTexture); + } + + @Override + public void draw(GLCanvas canvas, int xOffset, int yOffset) { + super.draw(canvas, xOffset, yOffset); + } + + + @Override + public void recycle() { + mTexture.recycle(); + } + } + + private class MovieItem extends BasicItem { private MovieTexture mTexture; private Movie mContextMovie; diff --git a/src/com/hippo/ehviewer/gallery/data/ImageSet.java b/src/com/hippo/ehviewer/gallery/data/ImageSet.java index d16b2e565..c92bf2693 100644 --- a/src/com/hippo/ehviewer/gallery/data/ImageSet.java +++ b/src/com/hippo/ehviewer/gallery/data/ImageSet.java @@ -22,14 +22,16 @@ import java.io.FileNotFoundException; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; +import javax.microedition.khronos.opengles.GL11; + import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.Movie; import android.util.SparseArray; import com.hippo.ehviewer.AppHandler; import com.hippo.ehviewer.ehclient.ExDownloader; import com.hippo.ehviewer.ehclient.ExDownloaderManager; +import com.hippo.ehviewer.gallery.image.Image; import com.hippo.ehviewer.util.AutoExpandArray; import com.hippo.ehviewer.util.Config; import com.hippo.ehviewer.util.EhUtils; @@ -207,7 +209,8 @@ public class ImageSet implements ExDownloader.ListenerForImageSet { try { fis = new FileInputStream(new File(mDir, filename)); if (isGif) { - res = Movie.decodeStream(fis); + //res = Movie.decodeStream(fis); + res = Image.decodeStream(fis, GL11.GL_RGB); } else { BitmapFactory.Options opt = new BitmapFactory.Options(); // TODO why only ARGB_8888 always work well, other may slit image diff --git a/src/com/hippo/ehviewer/network/HttpHelper.java b/src/com/hippo/ehviewer/network/HttpHelper.java index 4dd8b5f9a..7b9e85831 100644 --- a/src/com/hippo/ehviewer/network/HttpHelper.java +++ b/src/com/hippo/ehviewer/network/HttpHelper.java @@ -271,7 +271,7 @@ public class HttpHelper { throw new RedirectionException(); } catch (Exception e) { mException = e; - e.printStackTrace(); + //e.printStackTrace(); // For download, if need stop, just stop if (mException instanceof StopRequestException) break;