perfect print #1

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4100 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
shatty
2003-07-27 06:24:05 +00:00
parent 312e206dd3
commit a50cf5ac37
+71 -37
View File
@@ -1058,50 +1058,84 @@ StyledEditWindow::PageSetup(const char *documentname)
void void
StyledEditWindow::Print(const char *documentname) StyledEditWindow::Print(const char *documentname)
{ {
status_t result = B_OK;
BPrintJob printJob(documentname); BPrintJob printJob(documentname);
if (fPrintSettings== NULL){ if (fPrintSettings == NULL) {
status_t pageSetup; result = PageSetup(fTextView->Window()->Title());
pageSetup= PageSetup(fTextView->Window()->Title()); if (result != B_NO_ERROR) {
if (pageSetup!= B_NO_ERROR)
return; return;
} }
else } else {
printJob.SetSettings(fPrintSettings); printJob.SetSettings(fPrintSettings);
}
status_t configCheck; result = printJob.ConfigJob();
configCheck= printJob.ConfigJob(); if (result != B_OK) {
if (configCheck== B_NO_ERROR){ return;
int32 currentPage= 1; }
int32 firstPage; // information from printJob
int32 lastPage; fPrintSettings = printJob.Settings();
int32 pagesInDocument; BRect paper_rect = printJob.PaperRect();
BRect pageRect; BRect printable_rect = printJob.PrintableRect();
BRect currentPageRect; int32 firstPage = printJob.FirstPage();
int32 lastPage = printJob.LastPage();
pageRect= printJob.PrintableRect();
currentPageRect= pageRect; // lines eventually to be used to compute pages to print
//not sure about this.... int32 firstLine = 0;
BRect docRect; int32 lastLine = fTextView->CountLines();
docRect= fTextView->TextRect();
pagesInDocument= (int32)(docRect.Height()+ (pageRect.Height()-1) / pageRect.Height()); // values to be computed
int32 pagesInDocument = 1;
firstPage= printJob.FirstPage(); int32 linesInDocument = fTextView->CountLines();
lastPage= printJob.LastPage();
int32 currentLine = 0;
if(lastPage> pagesInDocument) while (currentLine < linesInDocument) {
lastPage= pagesInDocument; float currentHeight = 0;
while ((currentHeight < printable_rect.Height()) && (currentLine < linesInDocument)) {
printJob.BeginJob(); currentHeight += fTextView->LineHeight(currentLine);
if (currentHeight < printable_rect.Height()) {
for(currentPage= firstPage;currentPage<= lastPage;currentPage++){ currentLine++;
currentPageRect.OffsetTo(0, currentPage* pageRect.Height()); }
printJob.DrawView(fTextView, currentPageRect, BPoint(0.0, 0.0));
printJob.SpoolPage();
} }
printJob.CommitJob(); if (currentHeight >= printable_rect.Height()) {
} pagesInDocument++;
}
if (pagesInDocument - 1 == lastPage) {
lastLine = currentLine;
}
currentLine++;
if (pagesInDocument == firstPage) {
firstLine = currentLine;
}
}
if (lastPage > pagesInDocument - 1) {
lastPage = pagesInDocument - 1;
lastLine = currentLine - 1;
}
printJob.BeginJob();
int32 printLine = firstLine;
while (printLine < lastLine) {
float currentHeight = 0;
int32 firstLineOnPage = printLine;
while ((currentHeight < printable_rect.Height()) && (printLine < lastLine)) {
currentHeight += fTextView->LineHeight(printLine);
if (currentHeight < printable_rect.Height()) {
printLine++;
}
}
float top = 0;
if (firstLineOnPage != 0) {
top = fTextView->TextHeight(0,firstLineOnPage-1);
}
float bottom = fTextView->TextHeight(0,printLine);
BRect textRect(0.0,top,printable_rect.Width(),bottom);
printJob.DrawView(fTextView,textRect,BPoint(0.0,0.0));
printJob.SpoolPage();
}
printJob.CommitJob();
}/***StyledEditWindow::Print()***/ }/***StyledEditWindow::Print()***/
bool bool