Example #1
0
 protected void vOnTimer(Object obj) {
   int cur = m_prange_start;
   int cnt = m_prange_end;
   if (m_drawbmp) {
     while (cur < cnt) {
       if (m_pages[cur].NeedBmp()) break;
       cur++;
     }
     if (cur >= cnt) {
       m_drawbmp = false;
       cur = 0;
       while (cur < cnt) {
         m_pages[cur].DeleteBmp();
         cur++;
       }
       if (m_listener != null) m_listener.OnPDFInvalidate(false);
     }
   } else {
     while (cur < cnt) {
       if (!m_pages[cur].IsFinished()) {
         if (m_listener != null) m_listener.OnPDFInvalidate(false);
         break;
       }
       cur++;
     }
   }
 }
Example #2
0
 @Override
 public void handleMessage(Message msg) {
   switch (msg.what) // render finished.
   {
     case 0:
       if (m_listener != null) m_listener.OnPDFInvalidate(false);
       break;
     case 1: // find operation returned.
       {
         if (msg.arg1 == 1) // succeeded
         {
           PDFView.this.vFindGoto();
           if (m_listener != null) m_listener.OnPDFFound(true);
         } else {
           if (m_listener != null) m_listener.OnPDFFound(false);
         }
       }
       break;
     case 100: // timer
       if (m_scroller.isFinished() && m_pages != null && m_status != STA_ZOOM)
         vOnTimer(msg.obj);
       break;
   }
   super.handleMessage(msg);
 }
Example #3
0
 public int vFind(int dir) {
   if (m_pages == null) return -1;
   int ret = m_finder.find_prepare(dir);
   if (ret == 1) {
     if (m_listener != null) m_listener.OnPDFFound(true);
     vFindGoto();
     return 0; // succeeded
   }
   if (ret == 0) {
     if (m_listener != null) m_listener.OnPDFFound(false);
     return -1; // failed
   }
   m_thread.start_find(m_finder); // need thread operation.
   return 1;
 }
Example #4
0
 public void vRenderSync(PDFVPage page) {
   if (m_pages == null || page == null) return;
   m_thread.end_render(page);
   page.RenderPrepare();
   page.m_cache.Render();
   if (m_listener != null) m_listener.OnPDFInvalidate(false);
 }
Example #5
0
 protected void vFindGoto() {
   if (m_pages == null) return;
   int pg = m_finder.find_get_page();
   if (pg < 0 || pg >= m_doc.GetPageCount()) return;
   float pos[] = m_finder.find_get_pos();
   if (pos == null) return;
   pos[0] = m_pages[pg].ToDIBX(pos[0]) + m_pages[pg].GetX();
   pos[1] = m_pages[pg].ToDIBY(pos[1]) + m_pages[pg].GetY();
   pos[2] = m_pages[pg].ToDIBX(pos[2]) + m_pages[pg].GetX();
   pos[3] = m_pages[pg].ToDIBY(pos[3]) + m_pages[pg].GetY();
   float x = m_scroller.getCurrX();
   float y = m_scroller.getCurrY();
   if (x > pos[0] - m_w / 8) x = pos[0] - m_w / 8;
   if (x < pos[2] - m_w * 7 / 8) x = pos[2] - m_w * 7 / 8;
   if (y > pos[1] - m_h / 8) y = pos[1] - m_h / 8;
   if (y < pos[3] - m_h * 7 / 8) y = pos[3] - m_h * 7 / 8;
   if (x > m_docw - m_w) x = m_docw - m_w;
   if (x < 0) x = 0;
   if (y > m_doch - m_h) y = m_doch - m_h;
   if (y < 0) y = 0;
   m_scroller.forceFinished(true);
   m_scroller.abortAnimation();
   m_scroller.setFinalX((int) x);
   m_scroller.setFinalY((int) y);
   m_scroller.computeScrollOffset();
   if (m_listener != null) m_listener.OnPDFInvalidate(false);
 }
Example #6
0
 public void vSetPageGap(int gap) {
   m_page_gap = gap;
   PDFPos pos = vGetPos(0, 0);
   vLayout();
   vSetPos(pos, 0, 0);
   if (m_listener != null) m_listener.OnPDFInvalidate(false);
 }
Example #7
0
 public void vSetBmpFormat(Config format) {
   if (m_bmp_format == format || format == Config.ALPHA_8) return;
   m_bmp_format = format;
   if (m_bmp != null) {
     m_bmp.recycle();
     m_bmp = Bitmap.createBitmap(m_w, m_h, format);
     m_listener.OnPDFInvalidate(false);
   }
 }
Example #8
0
 public void vClearSel() {
   if (m_pages == null) return;
   int pcur = 0;
   int pcnt = m_pages.length;
   while (pcur < pcnt) {
     m_pages[pcur].ClearSel();
     pcur++;
   }
   if (m_listener != null) m_listener.OnPDFInvalidate(false);
 }
Example #9
0
 public void vResize(int w, int h) {
   if (w == 0 || h == 0 || m_lock == 4) return;
   if (m_bmp != null) m_bmp.recycle();
   m_bmp = Bitmap.createBitmap(w, h, m_bmp_format);
   m_w = w;
   m_h = h;
   vLayout();
   if (m_listener != null) {
     m_listener.OnPDFInvalidate(false);
   }
 }
Example #10
0
 public void vOpen(Document doc, int page_gap, int back_color, PDFViewListener listener) {
   vClose();
   m_doc = doc;
   m_thread = new PDFVThread(m_hand_ui);
   m_thread.start();
   m_page_gap = page_gap;
   m_back = back_color;
   m_finder = new PDFVFinder();
   m_listener = listener;
   vLayout();
   if (m_listener != null) m_listener.OnPDFInvalidate(false);
 }
Example #11
0
 private boolean motionZoom(MotionEvent event) {
   switch (event.getActionMasked()) {
     case MotionEvent.ACTION_MOVE:
       if (m_status == STA_ZOOM) {
         float dx = event.getX(0) - event.getX(1);
         float dy = event.getY(0) - event.getY(1);
         m_zoom_dis2 = Global.sqrtf(dx * dx + dy * dy);
         float scale = m_zoom_scale * m_zoom_dis2 / m_zoom_dis1;
         if (m_scale / scale > 1.0001 || m_scale / scale < 0.999) {
           m_scale = scale;
           vLayout();
           vSetPos(m_zoom_pos, (int) m_holdx, (int) m_holdy);
         }
       }
       break;
     case MotionEvent.ACTION_UP:
     case MotionEvent.ACTION_POINTER_UP:
     case MotionEvent.ACTION_CANCEL:
       if (m_status == STA_ZOOM) {
         m_status = STA_NONE;
         float dx = event.getX(0) - event.getX(1);
         float dy = event.getY(0) - event.getY(1);
         m_zoom_dis2 = Global.sqrtf(dx * dx + dy * dy);
         float scale = m_zoom_scale * m_zoom_dis2 / m_zoom_dis1;
         if (m_scale / scale > 1.0001 || m_scale / scale < 0.999) {
           m_scale = scale;
           vLayout();
           vSetPos(m_zoom_pos, (int) m_holdx, (int) m_holdy);
         }
         if (m_listener != null) {
           m_listener.OnPDFInvalidate(false);
           m_listener.OnPDFZoomEnd();
         }
         vOnZoomEnd();
       }
       break;
   }
   return true;
 }
Example #12
0
 public void vSetSel(float x1, float y1, float x2, float y2) {
   if (m_pages == null) return;
   int pcur = 0;
   int pcnt = m_pages.length;
   while (pcur < pcnt) {
     m_pages[pcur].ClearSel();
     pcur++;
   }
   PDFPos pos = vGetPos((int) x1, (int) y1);
   PDFVPage vpage = m_pages[pos.pageno];
   vpage.SetSel(x1, y1, x2, y2, m_scroller.getCurrX(), m_scroller.getCurrY());
   if (m_listener != null) m_listener.OnPDFInvalidate(false);
 }
Example #13
0
 protected void vFlushRange() {
   if (m_status == STA_ZOOM) return;
   int pageno1 = vGetPage(0, 0);
   int pageno2 = vGetPage(m_w, m_h);
   if (pageno1 >= 0 && pageno2 >= 0) {
     if (pageno1 > pageno2) {
       int tmp = pageno1;
       pageno1 = pageno2;
       pageno2 = tmp;
     }
     pageno2++;
     if (m_prange_start < pageno1) {
       int start = m_prange_start;
       int end = pageno1;
       if (end > m_prange_end) end = m_prange_end;
       while (start < end) {
         PDFVPage vpage = m_pages[start];
         m_thread.end_render(vpage);
         vpage.DeleteBmp();
         start++;
       }
     }
     if (m_prange_end > pageno2) {
       int start = pageno2;
       int end = m_prange_end;
       if (start < m_prange_start) start = m_prange_start;
       while (start < end) {
         PDFVPage vpage = m_pages[start];
         m_thread.end_render(vpage);
         vpage.DeleteBmp();
         start++;
       }
     }
   } else {
     int start = m_prange_start;
     int end = m_prange_end;
     while (start < end) {
       PDFVPage vpage = m_pages[start];
       m_thread.end_render(vpage);
       vpage.DeleteBmp();
       start++;
     }
   }
   m_prange_start = pageno1;
   m_prange_end = pageno2;
   pageno1 = vGetPage(m_w / 4, m_h / 4);
   if (m_listener != null && pageno1 != m_pageno) {
     m_listener.OnPDFPageChanged(m_pageno = pageno1);
   }
 }
Example #14
0
 public void vGotoPage(int pageno) {
   if (m_pages == null || pageno < 0 || pageno >= m_pages.length) return;
   float x = m_pages[pageno].GetX();
   float y = m_pages[pageno].GetY();
   if (x > m_docw - m_w) x = m_docw - m_w;
   if (x < 0) x = 0;
   if (y > m_doch - m_h) y = m_doch - m_h;
   if (y < 0) y = 0;
   m_scroller.forceFinished(true);
   m_scroller.abortAnimation();
   m_scroller.setFinalX((int) x);
   m_scroller.setFinalY((int) y);
   m_scroller.computeScrollOffset();
   if (m_listener != null) m_listener.OnPDFInvalidate(false);
 }
Example #15
0
 /**
  * zoom operations
  *
  * @param scale absolute scale value apply to View
  * @param fx fixed point
  * @param fy fixed point
  */
 public void vSetScale(float scale, float fx, float fy) {
   if (m_pages == null) return;
   PDFPos pos = vGetPos((int) fx, (int) fy);
   int cur = 0;
   int cnt = m_pages.length;
   while (cur < cnt) {
     m_pages[cur].CreateBmp(m_bmp_format);
     m_thread.end_render(m_pages[cur]);
     cur++;
   }
   m_drawbmp = true;
   m_scale = scale;
   vLayout();
   vSetPos(pos, (int) fx, (int) fy);
   if (m_listener != null) m_listener.OnPDFInvalidate(false);
 }
Example #16
0
 /**
  * set Position to point in view coordinate, implement in derived class.<br>
  * pass (0,0) to set position to left-top corner.
  *
  * @param pos position in PDF coordinate.
  * @param vx
  * @param vy
  */
 public void vSetPos(PDFPos pos, int vx, int vy) {
   if (pos == null || m_pages == null || pos.pageno < 0 || pos.pageno >= m_pages.length) return;
   float x = m_pages[pos.pageno].GetX() + pos.x * m_scale - vx;
   float y =
       m_pages[pos.pageno].GetY() + ((m_doc.GetPageHeight(pos.pageno) - pos.y) * m_scale) - vy;
   if (x > m_docw - m_w) x = m_docw - m_w;
   if (x < 0) x = 0;
   if (y > m_doch - m_h) y = m_doch - m_h;
   if (y < 0) y = 0;
   m_scroller.forceFinished(true);
   m_scroller.abortAnimation();
   m_scroller.setFinalX((int) x);
   m_scroller.setFinalY((int) y);
   m_scroller.computeScrollOffset();
   if (m_listener != null) m_listener.OnPDFInvalidate(false);
 }
Example #17
0
 private boolean motionSelect(MotionEvent event) {
   switch (event.getActionMasked()) {
     case MotionEvent.ACTION_DOWN:
       m_holdx = event.getX();
       m_holdy = event.getY();
       vClearSel();
       break;
     case MotionEvent.ACTION_MOVE:
       m_movex = event.getX();
       m_movey = event.getY();
       vSetSel(m_holdx, m_holdy, m_movex, m_movey);
       break;
     case MotionEvent.ACTION_UP:
     case MotionEvent.ACTION_CANCEL:
       m_movex = event.getX();
       m_movey = event.getY();
       vSetSel(m_holdx, m_holdy, m_movex, m_movey);
       if (m_listener != null) m_listener.OnPDFSelectEnd();
       break;
   }
   return true;
 }
Example #18
0
 public void vComputeScroll() {
   if (m_scroller.computeScrollOffset()) {
     if (m_listener != null) m_listener.OnPDFInvalidate(true);
   }
 }
Example #19
0
 public void vDraw(Canvas canvas) {
   if (m_pages == null) return;
   // long rec_time = System.currentTimeMillis();
   int left = m_scroller.getCurrX();
   int top = m_scroller.getCurrY();
   int left1 = left;
   int top1 = top;
   if (left1 > m_docw - m_w) left1 = m_docw - m_w;
   if (left1 < 0) left1 = 0;
   if (top1 > m_doch - m_h) top1 = m_doch - m_h;
   if (top1 < 0) top1 = 0;
   if (left1 != left) {
     m_scroller.setFinalX(left1);
     left = left1;
   }
   if (top1 != top) {
     m_scroller.setFinalY(top1);
     top = top1;
   }
   vFlushRange();
   int cur = m_prange_start;
   int end = m_prange_end;
   int sel_rect1[] = null;
   int sel_rect2[] = null;
   if (m_drawbmp) {
     if (Global.dark_mode) {
       m_bmp.eraseColor(m_back);
       Canvas bcan = new Canvas(m_bmp);
       while (cur < end) {
         PDFVPage vpage = m_pages[cur];
         if (m_status != STA_ZOOM) m_thread.start_render(vpage);
         vpage.Draw(bcan, left, top);
         if (sel_rect1 == null || sel_rect2 == null) {
           sel_rect1 = vpage.GetSelRect1(left, top);
           sel_rect2 = vpage.GetSelRect2(left, top);
         }
         if (m_finder.find_get_page() == cur) m_finder.find_draw(bcan, vpage, left, top);
         cur++;
       }
       m_draw_bmp.Create(m_bmp);
       m_draw_bmp.Invert();
       m_draw_bmp.Free(m_bmp);
       // Log.i("time_d1", String.valueOf(System.currentTimeMillis() - rec_time));
       canvas.drawBitmap(m_bmp, 0, 0, null);
       // Log.i("time_d2", String.valueOf(System.currentTimeMillis() - rec_time));
     } else {
       canvas.drawColor(m_back);
       while (cur < end) {
         PDFVPage vpage = m_pages[cur];
         if (m_status != STA_ZOOM) m_thread.start_render(vpage);
         if (sel_rect1 == null || sel_rect2 == null) {
           sel_rect1 = vpage.GetSelRect1(left, top);
           sel_rect2 = vpage.GetSelRect2(left, top);
         }
         vpage.Draw(canvas, left, top);
         if (m_finder.find_get_page() == cur) m_finder.find_draw(canvas, vpage, left, top);
         cur++;
       }
     }
   } else {
     m_bmp.eraseColor(m_back);
     // Log.i("time_d0", String.valueOf(System.currentTimeMillis() - rec_time));
     m_draw_bmp.Create(m_bmp);
     while (cur < end) {
       PDFVPage vpage = m_pages[cur];
       m_thread.start_render(vpage);
       if (sel_rect1 == null || sel_rect2 == null) {
         sel_rect1 = vpage.GetSelRect1(left, top);
         sel_rect2 = vpage.GetSelRect2(left, top);
       }
       vpage.Draw(m_draw_bmp, left, top);
       if (m_finder.find_get_page() == cur) m_finder.find_draw(m_draw_bmp, vpage, left, top);
       cur++;
     }
     if (Global.dark_mode) m_draw_bmp.Invert();
     m_draw_bmp.Free(m_bmp);
     // Log.i("time_d1", String.valueOf(System.currentTimeMillis() - rec_time));
     canvas.drawBitmap(m_bmp, 0, 0, null);
     // Log.i("time_d2", String.valueOf(System.currentTimeMillis() - rec_time));
   }
   if (m_listener != null) {
     cur = m_prange_start;
     end = m_prange_end;
     while (cur < end) {
       m_listener.OnPDFPageDisplayed(canvas, m_pages[cur]);
       cur++;
     }
     if (sel_rect1 != null && sel_rect2 != null)
       m_listener.OnPDFSelecting(canvas, sel_rect1, sel_rect2);
   }
   // Log.i("time_draw", String.valueOf(System.currentTimeMillis() - rec_time));
 }
Example #20
0
 public void vSetBackColor(int color) {
   m_back = color;
   if (m_listener != null) m_listener.OnPDFInvalidate(false);
 }
Example #21
0
 protected boolean motionNormal(MotionEvent event) {
   if (m_gesture.onTouchEvent(event)) return true;
   switch (event.getActionMasked()) {
     case MotionEvent.ACTION_DOWN:
       if (m_status == STA_NONE) {
         m_scroller.forceFinished(true);
         m_scroller.abortAnimation();
         m_holdsx = m_scroller.getCurrX();
         m_holdsy = m_scroller.getCurrY();
         m_holdx = event.getX();
         m_holdy = event.getY();
         m_status = STA_MOVING;
       }
       break;
     case MotionEvent.ACTION_MOVE:
       if (m_status == STA_MOVING) {
         m_movex = event.getX();
         m_movey = event.getY();
         int x = (int) (m_holdsx + m_holdx - m_movex);
         int y = (int) (m_holdsy + m_holdy - m_movey);
         if (m_lock == 1 || m_lock == 3) x = (int) m_holdsx;
         if (m_lock == 2 || m_lock == 3) y = (int) m_holdsy;
         if (x + m_w > m_docw) x = m_docw - m_w;
         if (x < 0) x = 0;
         if (y + m_h > m_doch) y = m_doch - m_h;
         if (y < 0) y = 0;
         m_scroller.setFinalX(x);
         m_scroller.setFinalY(y);
         if (m_listener != null) m_listener.OnPDFInvalidate(false);
       }
       break;
     case MotionEvent.ACTION_UP:
     case MotionEvent.ACTION_CANCEL:
       if (m_status == STA_MOVING) {
         m_movex = event.getX();
         m_movey = event.getY();
         int x = (int) (m_holdsx + m_holdx - m_movex);
         int y = (int) (m_holdsy + m_holdy - m_movey);
         if (m_lock == 1 || m_lock == 3) x = (int) m_holdsx;
         if (m_lock == 2 || m_lock == 3) y = (int) m_holdsy;
         if (x + m_w > m_docw) x = m_docw - m_w;
         if (x < 0) x = 0;
         if (y + m_h > m_doch) y = m_doch - m_h;
         if (y < 0) y = 0;
         m_scroller.setFinalX(x);
         m_scroller.setFinalY(y);
         m_status = STA_NONE;
         vOnMoveEnd(x, y);
         if (m_listener != null) m_listener.OnPDFInvalidate(false);
       }
       break;
     case MotionEvent.ACTION_POINTER_DOWN:
       if (event.getPointerCount() == 2 && m_status == STA_MOVING && m_lock != 5) {
         m_scroller.forceFinished(true);
         m_scroller.abortAnimation();
         m_holdx = (event.getX(0) + event.getX(1)) / 2;
         m_holdy = (event.getY(0) + event.getY(1)) / 2;
         float dx = event.getX(0) - event.getX(1);
         float dy = event.getY(0) - event.getY(1);
         m_zoom_pos = vGetPos((int) m_holdx, (int) m_holdy);
         m_zoom_dis1 = Global.sqrtf(dx * dx + dy * dy);
         m_zoom_dis2 = m_zoom_dis1;
         m_zoom_scale = m_scale;
         int cur = m_prange_start;
         int cnt = m_prange_end;
         while (cur < cnt) {
           m_pages[cur].CreateBmp(m_bmp_format);
           m_thread.end_render(m_pages[cur]);
           cur++;
         }
         m_drawbmp = true;
         m_status = STA_ZOOM;
         if (m_listener != null) m_listener.OnPDFZoomStart();
       }
       break;
   }
   return true;
 }