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
+63 -29
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(); // lines eventually to be used to compute pages to print
currentPageRect= pageRect; int32 firstLine = 0;
//not sure about this.... int32 lastLine = fTextView->CountLines();
BRect docRect;
docRect= fTextView->TextRect();
pagesInDocument= (int32)(docRect.Height()+ (pageRect.Height()-1) / pageRect.Height());
firstPage= printJob.FirstPage(); // values to be computed
lastPage= printJob.LastPage(); int32 pagesInDocument = 1;
int32 linesInDocument = fTextView->CountLines();
if(lastPage> pagesInDocument) int32 currentLine = 0;
lastPage= pagesInDocument; while (currentLine < linesInDocument) {
float currentHeight = 0;
while ((currentHeight < printable_rect.Height()) && (currentLine < linesInDocument)) {
currentHeight += fTextView->LineHeight(currentLine);
if (currentHeight < printable_rect.Height()) {
currentLine++;
}
}
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(); printJob.BeginJob();
int32 printLine = firstLine;
for(currentPage= firstPage;currentPage<= lastPage;currentPage++){ while (printLine < lastLine) {
currentPageRect.OffsetTo(0, currentPage* pageRect.Height()); float currentHeight = 0;
printJob.DrawView(fTextView, currentPageRect, BPoint(0.0, 0.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.SpoolPage();
} }
printJob.CommitJob(); printJob.CommitJob();
}
}/***StyledEditWindow::Print()***/ }/***StyledEditWindow::Print()***/
bool bool