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)); }