void MunkHtmlPrintout::OnPreparePrinting() { int pageWidth, pageHeight, mm_w, mm_h, scr_w, scr_h, dc_w, dc_h; float ppmm_h, ppmm_v; GetPageSizePixels(&pageWidth, &pageHeight); GetPageSizeMM(&mm_w, &mm_h); ppmm_h = (float)pageWidth / mm_w; ppmm_v = (float)pageHeight / mm_h; int ppiPrinterX, ppiPrinterY; GetPPIPrinter(&ppiPrinterX, &ppiPrinterY); int ppiScreenX, ppiScreenY; GetPPIScreen(&ppiScreenX, &ppiScreenY); wxDisplaySize(&scr_w, &scr_h); GetDC()->GetSize(&dc_w, &dc_h); GetDC()->SetUserScale((double)dc_w / (double)pageWidth, (double)dc_h / (double)pageHeight); /* prepare headers/footers renderer: */ m_RendererHdr->SetDC(GetDC(), (double)ppiPrinterY / (double)ppiScreenY); m_RendererHdr->SetSize((int) (ppmm_h * (mm_w - m_MarginLeft - m_MarginRight)), (int) (ppmm_v * (mm_h - m_MarginTop - m_MarginBottom))); if (m_Headers[0] != wxEmptyString) { m_RendererHdr->SetHtmlText(TranslateHeader(m_Headers[0], 1)); m_HeaderHeight = m_RendererHdr->GetTotalHeight(); } else if (m_Headers[1] != wxEmptyString) { m_RendererHdr->SetHtmlText(TranslateHeader(m_Headers[1], 1)); m_HeaderHeight = m_RendererHdr->GetTotalHeight(); } if (m_Footers[0] != wxEmptyString) { m_RendererHdr->SetHtmlText(TranslateHeader(m_Footers[0], 1)); m_FooterHeight = m_RendererHdr->GetTotalHeight(); } else if (m_Footers[1] != wxEmptyString) { m_RendererHdr->SetHtmlText(TranslateHeader(m_Footers[1], 1)); m_FooterHeight = m_RendererHdr->GetTotalHeight(); } /* prepare main renderer: */ m_Renderer->SetDC(GetDC(), (double)ppiPrinterY / (double)ppiScreenY); m_Renderer->SetSize((int) (ppmm_h * (mm_w - m_MarginLeft - m_MarginRight)), (int) (ppmm_v * (mm_h - m_MarginTop - m_MarginBottom) - m_FooterHeight - m_HeaderHeight - ((m_HeaderHeight == 0) ? 0 : m_MarginSpace * ppmm_v) - ((m_FooterHeight == 0) ? 0 : m_MarginSpace * ppmm_v) )); m_Renderer->SetHtmlText(m_Document, m_BasePath, m_BasePathIsDir); CountPages(); }
FX_BOOL CFDE_TxtEdtEngine::MoveDown(CFX_PointF& ptCaret) { IFDE_TxtEdtPage* pPage = GetPage(m_nCaretPage); const CFX_RectF& rtContent = pPage->GetContentsBox(); if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { ptCaret.x = m_rtCaret.left + m_rtCaret.width / 2 + m_Param.fLineSpace; ptCaret.y = m_fCaretPosReserve; if (ptCaret.x >= rtContent.right()) { FX_BOOL bLineReserve = m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve; if (bLineReserve) { if (m_nCaretPage == 0) { return FALSE; } } else { if (m_nCaretPage == CountPages() - 1) { return FALSE; } } if (bLineReserve) { m_nCaretPage--; } else { m_nCaretPage++; } ptCaret.x -= rtContent.right(); IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); ptCaret.x += pCurPage->GetContentsBox().left; } } else { ptCaret.x = m_fCaretPosReserve; ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 + m_Param.fLineSpace; if (ptCaret.y >= rtContent.bottom()) { if (m_nCaretPage == CountPages() - 1) { return FALSE; } ptCaret.y -= rtContent.bottom(); m_nCaretPage++; IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); ptCaret.y += pCurPage->GetContentsBox().top; } } return TRUE; }
void CFDE_TxtEdtEngine::Inner_DeleteRange(int32_t nStart, int32_t nCount) { if (nCount == -1) { nCount = m_pTxtBuf->GetTextLength() - nStart; } int32_t nEnd = nStart + nCount - 1; ASSERT(nStart >= 0 && nEnd < m_pTxtBuf->GetTextLength()); m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); FDE_TXTEDTPARAGPOS ParagPosBgn, ParagPosEnd; TextPos2ParagPos(nStart, ParagPosBgn); TextPos2ParagPos(nEnd, ParagPosEnd); CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPosEnd.nParagIndex]; FX_BOOL bLastParag = FALSE; if (ParagPosEnd.nCharIndex == pParag->GetTextLength() - 1) { if (ParagPosEnd.nParagIndex < m_ParagPtrArray.GetSize() - 1) { ParagPosEnd.nParagIndex++; } else { bLastParag = TRUE; } } int32_t nTotalLineCount = 0; int32_t nTotalCharCount = 0; int32_t i = 0; for (i = ParagPosBgn.nParagIndex; i <= ParagPosEnd.nParagIndex; i++) { CFDE_TxtEdtParag* pTextParag = m_ParagPtrArray[i]; pTextParag->CalcLines(); nTotalLineCount += pTextParag->GetLineCount(); nTotalCharCount += pTextParag->GetTextLength(); } m_pTxtBuf->Delete(nStart, nCount); int32_t nNextParagIndex = (ParagPosBgn.nCharIndex == 0 && bLastParag) ? ParagPosBgn.nParagIndex : (ParagPosBgn.nParagIndex + 1); for (i = nNextParagIndex; i <= ParagPosEnd.nParagIndex; i++) { delete m_ParagPtrArray[nNextParagIndex]; m_ParagPtrArray.RemoveAt(nNextParagIndex); } if (!(bLastParag && ParagPosBgn.nCharIndex == 0)) { pParag = m_ParagPtrArray[ParagPosBgn.nParagIndex]; pParag->SetTextLength(nTotalCharCount - nCount); pParag->CalcLines(); nTotalLineCount -= pParag->GetTextLength(); } int32_t nParagCount = m_ParagPtrArray.GetSize(); for (i = nNextParagIndex; i < nParagCount; i++) m_ParagPtrArray[i]->DecrementStartIndex(nCount); m_nLineCount -= nTotalLineCount; UpdatePages(); int32_t nPageCount = CountPages(); if (m_nCaretPage >= nPageCount) { m_nCaretPage = nPageCount - 1; } m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0); }
int CPDF_Document::RetrievePageCount() const { CPDF_Dictionary* pPages = GetPagesDict(); if (!pPages) return 0; if (!pPages->KeyExist("Kids")) return 1; std::set<CPDF_Dictionary*> visited_pages; visited_pages.insert(pPages); return CountPages(pPages, &visited_pages); }
LRESULT CALLBACK MyPrintProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){ switch(message){ case WM_INITDIALOG: { hDialog = hDlg; SetDlgItemText(hDlg,IDC_PM_LEFT,"15"); SetDlgItemText(hDlg,IDC_PM_RIGHT,"15"); SetDlgItemText(hDlg,IDC_PM_TOP,"21"); SetDlgItemText(hDlg,IDC_PM_BOTTOM,"21"); SetDlgItemText(hDlg,IDC_BAIRITU,"100"); HWND hOk = GetDlgItem(hDlg,IDOK); if(hPrintDC == NULL){ EnableWindow(hOk,FALSE); } SendDlgItemMessage(hDlg,IDOK,WM_COMMAND,(WPARAM)(BN_DISABLE),(LPARAM)0); HWND hPreview = GetDlgItem(hDlg,IDC_PREVIEW); oldMyPrintPreviewProc = (WNDPROC)SetWindowLongPtr(hPreview,GWL_WNDPROC,(LONG)MyPrintPreviewProc); char printername[256]; GetCurrentPrinterName(printername); SetDlgItemText(hDlg,IDC_SELECTEDPRINTER,printername); } break; case WM_VSCROLL: { int iId = LOWORD(wParam); int id = GetDlgCtrlID((HWND)lParam); HWND hChange = NULL; int maximum = -1; int minimum = -1; if(id == IDC_SCR_BAIRITU){ hChange = GetDlgItem(hDlg,IDC_BAIRITU); minimum = 1; }else if(id == IDC_PM_SCR_LEFT){ hChange = GetDlgItem(hDlg,IDC_PM_LEFT); minimum = 0; }else if(id == IDC_PM_SCR_RIGHT){ hChange = GetDlgItem(hDlg,IDC_PM_RIGHT); minimum = 0; }else if(id == IDC_PM_SCR_TOP){ hChange = GetDlgItem(hDlg,IDC_PM_TOP); minimum = 0; }else if(id == IDC_PM_SCR_BOTTOM){ hChange = GetDlgItem(hDlg,IDC_PM_BOTTOM); minimum = 0; } if(hChange != NULL){ DoWhenVscroll(hChange,iId,minimum,maximum); } } break; case WM_COMMAND: { int iEvent = HIWORD(wParam); int iId = LOWORD(wParam); switch(iId){ case IDC_SETTOKYOUGI: { char buf[32]; double bai = 74.0 / (double)currentdesign.height * 600.0; sprintf(buf,"%.4f",bai); SetDlgItemText(hDlg,IDC_BAIRITU,buf); } break; case IDC_PM_LEFT: case IDC_PM_RIGHT: case IDC_PM_TOP: case IDC_PM_BOTTOM: case IDC_BAIRITU: { if(iEvent == EN_CHANGE && hPrintDC != NULL){ HWND h = GetDlgItem(hDlg,IDC_PREVIEW); InvalidateRect(h,NULL,FALSE); UpdateWindow(h); int pages = CountPages(hDlg,hPrintDC); char buf[16]; wsprintf(buf,"%d",pages); SetDlgItemText(hDlg,IDC_PAGENUM,buf); } } break; case IDC_SELPRINTER: { SelPrinter(hDlg); HWND hPreview = GetDlgItem(hDlg,IDC_PREVIEW); InvalidateRect(hPreview,NULL,TRUE); UpdateWindow(hPreview); HWND hOk = GetDlgItem(hDlg,IDOK); if(hPrintDC != NULL){ EnableWindow(hOk,TRUE); int pages = CountPages(hDlg,hPrintDC); char buf[16]; wsprintf(buf,"%d",pages); SetDlgItemText(hDlg,IDC_PAGENUM,buf); }else{ EnableWindow(hOk,FALSE); } char printername[256]; GetCurrentPrinterName(printername); SetDlgItemText(hDlg,IDC_SELECTEDPRINTER,printername); } break; case IDOK: { if(hPrintDC == NULL){ break; } char buf[512]; char printername[256]; GetCurrentPrinterName(printername); int pages = CountPages(hDlg,hPrintDC); int nCopies = GetCurrentPrinterCopies(); wsprintf(buf,"プリンタ名: [ %s ]\r\n一部当たり [ %d ページ ] で\r\n全部で [ %d 部 ] 印刷します\r\nよろしいですか?",printername,pages,nCopies); if(MessageBox(hDlg,buf,"確認",MB_YESNO)==IDYES){ ChangeDisplayColorToMax(); DOCINFO di; ZeroMemory(&di,sizeof(DOCINFO)); di.cbSize = sizeof(DOCINFO); di.lpszDocName = "KAZESOMISO"; double dotpermm_x = GetDeviceCaps(hPrintDC,LOGPIXELSX) / 25.4; double dotpermm_y = GetDeviceCaps(hPrintDC,LOGPIXELSY) / 25.4; double bairitu = GetFudaBairitu(hDlg); fudascale_x = bairitu * dotpermm_x; fudascale_y = bairitu * dotpermm_y; if(!gdiplus_useable){ fudascale = fudascale_y; }else{ fudascale = bairitu; } LoadImageToDC(hPrintDC,currentdesign); fudaunit = Gdiplus::UnitMillimeter; StartDoc(hPrintDC,&di); int rows,cols,sukima_x,sukima_y; CountOnePageFudaNum(hDlg,hPrintDC,&cols,&rows); GetFudaSukima(hDlg,hPrintDC,&sukima_x,&sukima_y); int left,right,top,bottom; GetPrintMargin(hDlg,&left,&top,&right,&bottom); int maxfudanum = 0; if(tori_or_yomi == TORI){ maxfudanum = torifuda.size(); }else{ maxfudanum = yomifuda.size(); } int fudanum = 0; for(int p = 0; p < pages; p++){ StartPage(hPrintDC); for(int i = cols -1 ; i >= 0; i --){ for(int j = 0; j < rows; j ++){ for(; fudanum < maxfudanum; fudanum++){ if(tori_or_yomi == TORI && torifuda[fudanum].saveasimage || tori_or_yomi == YOMI && yomifuda[fudanum].saveasimage ){ break; } } if(fudanum >= maxfudanum){ break; } class ToriYomiDesign design; if(tori_or_yomi == TORI){ design.simonoku = torifuda[fudanum].simonoku; design.kimariji = torifuda[fudanum].kimariji; design.tori = currentdesign.tori; }else{ design.waka = yomifuda[fudanum].waka; design.yomi = currentdesign.yomi; } design.UpdateSize(); double x,y; if(!gdiplus_useable){ x = left / bairitu + i * ( design.width + sukima_x / (bairitu * dotpermm_x) ); y = top / bairitu + j * ( design.height + sukima_y / (bairitu * dotpermm_y)); }else{ x = left / fudascale+ i * ( design.width + sukima_x / (dotpermm_x*fudascale) ); y = top / fudascale + j * ( design.height + sukima_y / (dotpermm_y*fudascale)); } MYRECT rect; rect.left = x; rect.top = y; rect.right = -1; rect.bottom = -1; DrawFuda(design,hPrintDC,&rect); fudanum++; } } EndPage(hPrintDC); } EndDoc(hPrintDC); fudaunit = Gdiplus::UnitDisplay; fudascale = -1.0; HDC hdc = GetDC(hWndMain); LoadImageToDC(hdc,currentdesign); ReleaseDC(hWndMain,hdc); MessageBox(hDlg,"プリンタに出力しました。","完了",MB_OK); } } break; case IDCANCEL: { EndDialog(hDlg,0); } break; } } break; } return FALSE; }
// Helphack switches index 11 and 5 so that the keyboard/blaze pics are reversed. void ShowArticle (const char *article, bool helphack=false) { bool newpage, firstpage; ControlInfo ci; text = article; CountPages(); if(numpages == 0) { // No pages? Show S3DNA style briefing. ShowBriefing(article); return; } VWB_Clear(GPalette.BlackIndex, 0, 0, screenWidth, screenHeight); newpage = true; firstpage = true; fontcolor = 255; textcolor = CR_UNTRANSLATED; do { if (newpage) { newpage = false; PageLayout (true, helphack); VW_UpdateScreen (); if (firstpage) { VL_FadeIn(0,255,10); firstpage = false; } } SDL_Delay(5); LastScan = 0; ReadAnyControl(&ci); Direction dir = ci.dir; switch(dir) { case dir_North: case dir_South: break; default: if(ci.button0) dir = dir_South; switch(LastScan) { case sc_UpArrow: case sc_PgUp: case sc_LeftArrow: dir = dir_North; break; case sc_Enter: case sc_DownArrow: case sc_PgDn: case sc_RightArrow: dir = dir_South; break; } break; } switch(dir) { default: break; case dir_North: case dir_West: if (pagenum>1) { BackPage (); BackPage (); newpage = true; } TicDelay(20); break; case dir_South: case dir_East: if (pagenum<numpages) { newpage = true; } TicDelay(20); break; } } while (LastScan != sc_Escape && !ci.button1); IN_ClearKeysDown (); }
void wxHtmlPrintout::OnPreparePrinting() { int pageWidth, pageHeight, mm_w, mm_h, scr_w, scr_h, dc_w, dc_h; float ppmm_h, ppmm_v; GetPageSizePixels(&pageWidth, &pageHeight); GetPageSizeMM(&mm_w, &mm_h); ppmm_h = (float)pageWidth / mm_w; ppmm_v = (float)pageHeight / mm_h; int ppiPrinterX, ppiPrinterY; GetPPIPrinter(&ppiPrinterX, &ppiPrinterY); wxUnusedVar(ppiPrinterX); int ppiScreenX, ppiScreenY; GetPPIScreen(&ppiScreenX, &ppiScreenY); wxUnusedVar(ppiScreenX); wxDisplaySize(&scr_w, &scr_h); GetDC()->GetSize(&dc_w, &dc_h); GetDC()->SetUserScale((double)dc_w / (double)pageWidth, (double)dc_h / (double)pageHeight); /* prepare headers/footers renderer: */ m_RendererHdr->SetDC(GetDC(), (double)ppiPrinterY / (double)ppiScreenY); m_RendererHdr->SetSize((int) (ppmm_h * (mm_w - m_MarginLeft - m_MarginRight)), (int) (ppmm_v * (mm_h - m_MarginTop - m_MarginBottom))); if (m_Headers[0] != wxEmptyString) { m_RendererHdr->SetHtmlText(TranslateHeader(m_Headers[0], 1)); m_HeaderHeight = m_RendererHdr->GetTotalHeight(); } else if (m_Headers[1] != wxEmptyString) { m_RendererHdr->SetHtmlText(TranslateHeader(m_Headers[1], 1)); m_HeaderHeight = m_RendererHdr->GetTotalHeight(); } if (m_Footers[0] != wxEmptyString) { m_RendererHdr->SetHtmlText(TranslateHeader(m_Footers[0], 1)); m_FooterHeight = m_RendererHdr->GetTotalHeight(); } else if (m_Footers[1] != wxEmptyString) { m_RendererHdr->SetHtmlText(TranslateHeader(m_Footers[1], 1)); m_FooterHeight = m_RendererHdr->GetTotalHeight(); } /* prepare main renderer: */ m_Renderer->SetDC(GetDC(), (double)ppiPrinterY / (double)ppiScreenY); const int printAreaW = int(ppmm_h * (mm_w - m_MarginLeft - m_MarginRight)); int printAreaH = int(ppmm_v * (mm_h - m_MarginTop - m_MarginBottom)); if ( m_HeaderHeight ) printAreaH -= int(m_HeaderHeight + m_MarginSpace * ppmm_v); if ( m_FooterHeight ) printAreaH -= int(m_FooterHeight + m_MarginSpace * ppmm_v); m_Renderer->SetSize(printAreaW, printAreaH); m_Renderer->SetHtmlText(m_Document, m_BasePath, m_BasePathIsDir); if ( CheckFit(wxSize(printAreaW, printAreaH), wxSize(m_Renderer->GetTotalWidth(), m_Renderer->GetTotalHeight())) ) { // do paginate the document CountPages(); } //else: if we don't call CountPages() m_PageBreaks remains empty and our // GetPageInfo() will return 0 as max page and so nothing will be // printed }