Changeset View
Changeset View
Standalone View
Standalone View
src/ksanewidget_p.cpp
Context not available. | |||||
68 | 68 | | |||
---|---|---|---|---|---|
69 | // scanning variables | 69 | // scanning variables | ||
70 | m_isPreview = false; | 70 | m_isPreview = false; | ||
71 | m_displayLastScan = false; | ||||
71 | 72 | | |||
72 | m_saneHandle = nullptr; | 73 | m_saneHandle = nullptr; | ||
73 | m_previewThread = nullptr; | 74 | m_previewThread = nullptr; | ||
Context not available. | |||||
719 | m_previewImg.fill(0xFFFFFFFF); | 720 | m_previewImg.fill(0xFFFFFFFF); | ||
720 | 721 | | |||
721 | // set the new image | 722 | // set the new image | ||
722 | m_previewViewer->setQImage(&m_previewImg); | 723 | if (m_displayLastScan) { | ||
724 | updateAndZoom2Fit(); | ||||
725 | } else { | ||||
726 | m_previewViewer->setQImage(&m_previewImg); | ||||
727 | } | ||||
723 | } | 728 | } | ||
724 | 729 | | |||
725 | void KSaneWidgetPrivate::startPreviewScan() | 730 | void KSaneWidgetPrivate::startPreviewScan() | ||
Context not available. | |||||
883 | return; | 888 | return; | ||
884 | } | 889 | } | ||
885 | 890 | | |||
891 | QSize KSaneWidgetPrivate::currentSelectionSize() | ||||
892 | { | ||||
893 | float x1 = 0, y1 = 0, x2 = 0, y2 = 0, max_x, max_y; | ||||
894 | if ((m_optTlX != nullptr) && (m_optTlY != nullptr) && (m_optBrX != nullptr) && (m_optBrY != nullptr)) { | ||||
895 | // get maximums | ||||
896 | m_optBrX->getMaxValue(max_x); | ||||
897 | m_optBrY->getMaxValue(max_y); | ||||
898 | | ||||
899 | // read the selection from the viewer | ||||
900 | m_previewViewer->selectionAt(m_selIndex, x1, y1, x2, y2); | ||||
901 | | ||||
902 | // calculate the option values | ||||
903 | x1 *= max_x; y1 *= max_y; | ||||
904 | x2 *= max_x; y2 *= max_y; | ||||
905 | } | ||||
906 | return QSize(x2-x1, y2-y1); | ||||
907 | } | ||||
908 | | ||||
886 | void KSaneWidgetPrivate::startFinalScan() | 909 | void KSaneWidgetPrivate::startFinalScan() | ||
887 | { | 910 | { | ||
888 | if (m_scanOngoing) { | 911 | if (m_scanOngoing) { | ||
Context not available. | |||||
895 | 918 | | |||
896 | m_selIndex = 0; | 919 | m_selIndex = 0; | ||
897 | 920 | | |||
921 | if (m_displayLastScan) { | ||||
922 | m_scanImg = QImage(); | ||||
923 | updateAndZoom2Fit(); | ||||
924 | } | ||||
925 | | ||||
898 | if ((m_optTlX != nullptr) && (m_optTlY != nullptr) && (m_optBrX != nullptr) && (m_optBrY != nullptr)) { | 926 | if ((m_optTlX != nullptr) && (m_optTlY != nullptr) && (m_optBrX != nullptr) && (m_optBrY != nullptr)) { | ||
899 | // get maximums | 927 | // get maximums | ||
900 | m_optBrX->getMaxValue(max_x); | 928 | m_optBrX->getMaxValue(max_x); | ||
Context not available. | |||||
925 | setBusy(true); | 953 | setBusy(true); | ||
926 | m_updProgressTmr.start(); | 954 | m_updProgressTmr.start(); | ||
927 | m_scanThread->setImageInverted(m_invertColors->isChecked()); | 955 | m_scanThread->setImageInverted(m_invertColors->isChecked()); | ||
956 | m_scanThread->setDisplayLastScan(m_displayLastScan); | ||||
928 | m_scanThread->start(); | 957 | m_scanThread->start(); | ||
929 | } | 958 | } | ||
930 | 959 | | |||
Context not available. | |||||
933 | m_updProgressTmr.stop(); | 962 | m_updProgressTmr.stop(); | ||
934 | updateProgress(); | 963 | updateProgress(); | ||
935 | 964 | | |||
965 | if (!m_displayLastScan && !m_scanImg.isNull()) { | ||||
966 | // free m_scanImg memory in case setting was switched off while m_scanOngoing | ||||
967 | m_scanImg = QImage(); | ||||
968 | } | ||||
969 | | ||||
936 | if (m_closeDevicePending) { | 970 | if (m_closeDevicePending) { | ||
937 | setBusy(false); | 971 | setBusy(false); | ||
938 | sane_close(m_saneHandle); | 972 | sane_close(m_saneHandle); | ||
Context not available. | |||||
966 | // in batch mode only one area can be scanned per page | 1000 | // in batch mode only one area can be scanned per page | ||
967 | //qDebug() << "source == " << source; | 1001 | //qDebug() << "source == " << source; | ||
968 | m_updProgressTmr.start(); | 1002 | m_updProgressTmr.start(); | ||
1003 | m_scanThread->setDisplayLastScan(m_displayLastScan); | ||||
969 | m_scanThread->start(); | 1004 | m_scanThread->start(); | ||
970 | return; | 1005 | return; | ||
971 | } | 1006 | } | ||
Context not available. | |||||
982 | // in batch mode only one area can be scanned per page | 1017 | // in batch mode only one area can be scanned per page | ||
983 | //qDebug() << "source == \"Automatic Document Feeder\""; | 1018 | //qDebug() << "source == \"Automatic Document Feeder\""; | ||
984 | m_updProgressTmr.start(); | 1019 | m_updProgressTmr.start(); | ||
1020 | m_scanThread->setDisplayLastScan(m_displayLastScan); | ||||
985 | m_scanThread->start(); | 1021 | m_scanThread->start(); | ||
986 | return; | 1022 | return; | ||
987 | } | 1023 | } | ||
Context not available. | |||||
1023 | valReload(); | 1059 | valReload(); | ||
1024 | } | 1060 | } | ||
1025 | m_updProgressTmr.start(); | 1061 | m_updProgressTmr.start(); | ||
1062 | m_scanThread->setDisplayLastScan(m_displayLastScan); | ||||
1026 | m_scanThread->start(); | 1063 | m_scanThread->start(); | ||
1027 | return; | 1064 | return; | ||
1028 | } | 1065 | } | ||
Context not available. | |||||
1138 | } | 1175 | } | ||
1139 | } | 1176 | } | ||
1140 | } else { | 1177 | } else { | ||
1141 | if (!m_progressBar->isVisible() && (m_scanThread->saneStartDone())) { | 1178 | if (m_scanThread->saneStartDone()) { | ||
1142 | m_warmingUp->hide(); | 1179 | if (!m_progressBar->isVisible() || m_scanThread->imageResized()) { | ||
1143 | m_activityFrame->show(); | 1180 | m_warmingUp->hide(); | ||
1181 | m_activityFrame->show(); | ||||
1182 | if (isScanImageDisplayed()) { | ||||
1183 | m_scanThread->imgMutex.lock(); | ||||
1184 | m_previewViewer->setQImage(&m_scanImg, false, false); | ||||
1185 | m_previewViewer->zoom2Fit(); | ||||
1186 | m_scanThread->imgMutex.unlock(); | ||||
1187 | } | ||||
1188 | } else if (isScanImageDisplayed()) { | ||||
1189 | m_scanThread->imgMutex.lock(); | ||||
1190 | m_previewViewer->updateImage(); | ||||
1191 | m_scanThread->imgMutex.unlock(); | ||||
1192 | } | ||||
1144 | } | 1193 | } | ||
1145 | progress = m_scanThread->scanProgress(); | 1194 | progress = m_scanThread->scanProgress(); | ||
1146 | m_previewViewer->setHighlightShown(progress); | 1195 | m_previewViewer->setHighlightShown(progress); | ||
Context not available. | |||||
1173 | } | 1222 | } | ||
1174 | } | 1223 | } | ||
1175 | 1224 | | |||
1225 | void KSaneWidgetPrivate::currentTabChanged(int /*idx*/) | ||||
1226 | { | ||||
1227 | if (!isScanImageDisplayed()) { | ||||
1228 | // show preview image | ||||
1229 | m_previewViewer->setQImage(&m_previewImg, true, false); | ||||
1230 | m_previewViewer->zoom2Fit(); | ||||
1231 | } else { | ||||
1232 | // show current scan | ||||
1233 | if (m_scanImg.isNull()) { | ||||
1234 | m_scanImg = QImage(currentSelectionSize(), QImage::Format_RGB32); | ||||
1235 | m_scanImg.fill(0xFFFFFFFF); | ||||
1236 | } | ||||
1237 | m_previewViewer->setQImage(&m_scanImg, false, false); | ||||
1238 | m_previewViewer->zoom2Fit(); | ||||
1239 | } | ||||
1240 | | ||||
1241 | // must be called after new image is set | ||||
1242 | m_previewViewer->setDisplayingPreview(!isScanImageDisplayed()); | ||||
1243 | } | ||||
1244 | | ||||
1245 | void KSaneWidgetPrivate::updateAndZoom2Fit() | ||||
1246 | { | ||||
1247 | currentTabChanged(m_viewsTabWidget->currentIndex()); | ||||
1248 | } | ||||
1249 | | ||||
1250 | bool KSaneWidgetPrivate::isScanImageDisplayed() | ||||
1251 | { | ||||
1252 | return m_viewsTabWidget->currentIndex() != 0; | ||||
1253 | } | ||||
1254 | | ||||
1176 | } // NameSpace KSaneIface | 1255 | } // NameSpace KSaneIface | ||
Context not available. |