docs: private void drawPart(Canvas canvas, PagePart part) {
          // Can seem strange, but avoid lot of calls
          RectF pageRelativeBounds = part.getPageRelativeBounds();
          Bitmap renderedBitmap = part.getRenderedBitmap();
  
          // Move to the target page
          float localTranslationX = 0;
          float localTranslationY = 0;
          if (swipeVertical)
          	localTranslationY = toCurrentScale(part.getUserPage() * optimalPageHeight);
          else
          	localTranslationX = toCurrentScale(part.getUserPage() * optimalPageWidth);    	
          canvas.translate(localTranslationX, localTranslationY);
          
          Rect srcRect = new Rect(0, 0, renderedBitmap.getWidth(), //
                  renderedBitmap.getHeight());
  
          float offsetX = toCurrentScale(pageRelativeBounds.left * optimalPageWidth);
          float offsetY = toCurrentScale(pageRelativeBounds.top * optimalPageHeight);
          float width = toCurrentScale(pageRelativeBounds.width() * optimalPageWidth);
          float height = toCurrentScale(pageRelativeBounds.height() * optimalPageHeight);
  
          // If we use float values for this rectangle, there will be
          // a possible gap between page parts, especially when
          // the zoom level is high.
          RectF dstRect = new RectF((int) offsetX, (int) offsetY, //
                  (int) (offsetX + width), //
                  (int) (offsetY + height));
  
          // Check if bitmap is in the screen
          float translationX = currentXOffset + localTranslationX;
          float translationY = currentYOffset + localTranslationY;
          if (translationX + dstRect.left >= getWidth() || translationX + dstRect.right <= 0 ||
                  translationY + dstRect.top >= getHeight() || translationY + dstRect.bottom <= 0) {
              canvas.translate(-localTranslationX, -localTranslationY);
              return;
          }
  
          canvas.drawBitmap(renderedBitmap, srcRect, dstRect, paint);
  
          if (Constants.DEBUG_MODE) {
              debugPaint.setColor(part.getUserPage() % 2 == 0 ? Color.RED : Color.BLUE);
              canvas.drawRect(dstRect, debugPaint);
          }
  
          // Restore the canvas position
          canvas.translate(-localTranslationX, -localTranslationY);
  
      }