Esempio n. 1
0
  /** Updates bitmaps for page meshes. */
  private void updatePages() {
    Log.d("artbook", ">>>>>update page(s): " + Thread.currentThread());
    if (mPageProvider == null || mPageBitmapWidth <= 0 || mPageBitmapHeight <= 0) {
      return;
    }

    // Remove meshes from renderer.
    mRenderer.removeCurlMesh(mPageLeft);
    mRenderer.removeCurlMesh(mPageRight);
    mRenderer.removeCurlMesh(mPageCurl);

    int leftIdx = mCurrentIndex - 1;
    int rightIdx = mCurrentIndex;
    int curlIdx = -1;
    if (mCurlState == CURL_LEFT) {
      curlIdx = leftIdx;
      --leftIdx;
    } else if (mCurlState == CURL_RIGHT) {
      curlIdx = rightIdx;
      ++rightIdx;
    }

    if (rightIdx >= 0 && rightIdx < mPageProvider.getPageCount()) {
      updatePage(mPageRight.getTexturePage(), rightIdx);
      mPageRight.setFlipTexture(false);
      mPageRight.setRect(mRenderer.getPageRect(CurlRenderer.PAGE_RIGHT));
      mPageRight.reset();
      mRenderer.addCurlMesh(mPageRight);
    }
    if (leftIdx >= 0 && leftIdx < mPageProvider.getPageCount()) {
      updatePage(mPageLeft.getTexturePage(), leftIdx);
      mPageLeft.setFlipTexture(true);
      mPageLeft.setRect(mRenderer.getPageRect(CurlRenderer.PAGE_LEFT));
      mPageLeft.reset();
      if (mRenderLeftPage) {
        mRenderer.addCurlMesh(mPageLeft);
      }
    }
    if (curlIdx >= 0 && curlIdx < mPageProvider.getPageCount()) {
      updatePage(mPageCurl.getTexturePage(), curlIdx);

      if (mCurlState == CURL_RIGHT) {
        mPageCurl.setFlipTexture(true);
        mPageCurl.setRect(mRenderer.getPageRect(CurlRenderer.PAGE_RIGHT));
      } else {
        mPageCurl.setFlipTexture(false);
        mPageCurl.setRect(mRenderer.getPageRect(CurlRenderer.PAGE_LEFT));
      }

      mPageCurl.reset();
      mRenderer.addCurlMesh(mPageCurl);
    }
  }
Esempio n. 2
0
  /** Switches meshes and loads new bitmaps if available. Updated to support 2 pages in landscape */
  private void startCurl(int page) {
    switch (page) {

        // Once right side page is curled, first right page is assigned into
        // curled page. And if there are more bitmaps available new bitmap is
        // loaded into right side mesh.
      case CURL_RIGHT:
        {
          // Remove meshes from renderer.
          mRenderer.removeCurlMesh(mPageLeft);
          mRenderer.removeCurlMesh(mPageRight);
          mRenderer.removeCurlMesh(mPageCurl);

          // We are curling right page.
          CurlMesh curl = mPageRight;
          mPageRight = mPageCurl;
          mPageCurl = curl;

          if (mCurrentIndex > 0) {
            mPageLeft.setFlipTexture(true);
            mPageLeft.setRect(mRenderer.getPageRect(CurlRenderer.PAGE_LEFT));
            mPageLeft.reset();
            if (mRenderLeftPage) {
              mRenderer.addCurlMesh(mPageLeft);
            }
          }
          if (mCurrentIndex < mPageProvider.getPageCount() - 1) {
            updatePage(mPageRight.getTexturePage(), mCurrentIndex + 1);
            mPageRight.setRect(mRenderer.getPageRect(CurlRenderer.PAGE_RIGHT));
            mPageRight.setFlipTexture(false);
            mPageRight.reset();
            mRenderer.addCurlMesh(mPageRight);
          }

          // Add curled page to renderer.
          mPageCurl.setRect(mRenderer.getPageRect(CurlRenderer.PAGE_RIGHT));
          mPageCurl.setFlipTexture(false);
          mPageCurl.reset();
          mRenderer.addCurlMesh(mPageCurl);

          mCurlState = CURL_RIGHT;
          break;
        }

        // On left side curl, left page is assigned to curled page. And if
        // there are more bitmaps available before currentIndex, new bitmap
        // is loaded into left page.
      case CURL_LEFT:
        {
          // Remove meshes from renderer.
          mRenderer.removeCurlMesh(mPageLeft);
          mRenderer.removeCurlMesh(mPageRight);
          mRenderer.removeCurlMesh(mPageCurl);

          // We are curling left page.
          CurlMesh curl = mPageLeft;
          mPageLeft = mPageCurl;
          mPageCurl = curl;

          if (mCurrentIndex > 1) {
            updatePage(mPageLeft.getTexturePage(), mCurrentIndex - 2);
            mPageLeft.setFlipTexture(true);
            mPageLeft.setRect(mRenderer.getPageRect(CurlRenderer.PAGE_LEFT));
            mPageLeft.reset();
            if (mRenderLeftPage) {
              mRenderer.addCurlMesh(mPageLeft);
            }
          }

          // If there is something to show on right page add it to renderer.
          if (mCurrentIndex < mPageProvider.getPageCount()) {
            mPageRight.setFlipTexture(false);
            mPageRight.setRect(mRenderer.getPageRect(CurlRenderer.PAGE_RIGHT));
            mPageRight.reset();
            mRenderer.addCurlMesh(mPageRight);
          }

          // How dragging previous page happens depends on view mode.
          if (mViewMode == SHOW_ONE_PAGE
              || (mCurlState == CURL_LEFT && mViewMode == SHOW_TWO_PAGES)) {
            mPageCurl.setRect(mRenderer.getPageRect(CurlRenderer.PAGE_RIGHT));
            mPageCurl.setFlipTexture(false);
          } else {
            mPageCurl.setRect(mRenderer.getPageRect(CurlRenderer.PAGE_LEFT));
            mPageCurl.setFlipTexture(true);
          }
          mPageCurl.reset();
          mRenderer.addCurlMesh(mPageCurl);

          mCurlState = CURL_LEFT;
          break;
        }
    }
  }