change two-page turn to happen after half of pdf page
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
@@ -9,6 +11,7 @@ import 'package:sheetless/bt_pedal_shortcuts.dart';
|
||||
import 'package:sheetless/sheet.dart';
|
||||
import 'package:sheetless/storage_helper.dart';
|
||||
import 'package:flutter_fullscreen/flutter_fullscreen.dart';
|
||||
import 'package:sheetless/utility.dart';
|
||||
|
||||
class SheetViewerPage extends StatefulWidget {
|
||||
final Sheet sheet;
|
||||
@@ -224,19 +227,25 @@ class TouchablePages extends StatelessWidget {
|
||||
|
||||
final touchAreaWidth = mediaQuery.size.width;
|
||||
|
||||
final (leftPageSize, rightPageSize) = pages.calcPageSizesScaled(
|
||||
mediaQuery.size,
|
||||
);
|
||||
|
||||
if (details.localPosition.dy < 2 * pixelsPerCm &&
|
||||
details.localPosition.dx >= touchAreaWidth - 2 * pixelsPerCm &&
|
||||
pages.config.fullscreen) {
|
||||
onExitSheetViewer();
|
||||
} else if (details.localPosition.dy < 2 * pixelsPerCm) {
|
||||
onToggleFullscreen();
|
||||
} else if (details.localPosition.dx < touchAreaWidth / 4 &&
|
||||
pages.config.twoPageMode) {
|
||||
} else if (pages.config.twoPageMode &&
|
||||
details.localPosition.dx <
|
||||
touchAreaWidth / 2 - leftPageSize.width / 2) {
|
||||
onTurnPage(-2);
|
||||
} else if (details.localPosition.dx < touchAreaWidth / 2) {
|
||||
onTurnPage(-1);
|
||||
} else if (details.localPosition.dx > touchAreaWidth * 3 / 4 &&
|
||||
pages.config.twoPageMode) {
|
||||
} else if (pages.config.twoPageMode &&
|
||||
details.localPosition.dx >
|
||||
touchAreaWidth / 2 + rightPageSize!.width / 2) {
|
||||
onTurnPage(2);
|
||||
} else {
|
||||
onTurnPage(1);
|
||||
@@ -258,7 +267,7 @@ class PaintablePages extends StatelessWidget {
|
||||
child: LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
final maxSize = Size(constraints.maxWidth, constraints.maxHeight);
|
||||
final pageSizeScaled = pages.calcCurrentPageSizeScaled(maxSize);
|
||||
final (pageSizeScaled, _) = pages.calcPageSizesScaled(maxSize);
|
||||
return DrawingBoard(
|
||||
background: SizedBox(
|
||||
width: pageSizeScaled.width,
|
||||
@@ -328,7 +337,7 @@ class Pages extends StatelessWidget {
|
||||
child: Stack(
|
||||
children: [
|
||||
PdfPageView(
|
||||
key: ValueKey(currentPageNumber),
|
||||
key: ValueKey(currentPageNumber + 1),
|
||||
document: document,
|
||||
pageNumber: currentPageNumber + 1,
|
||||
maximumDpi: 300,
|
||||
@@ -350,12 +359,37 @@ class Pages extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
Size calcCurrentPageSizeScaled(Size parentSize) {
|
||||
return _calcScaledPageSize(parentSize, _getCurrentPageSizeUnscaled());
|
||||
(Size, Size?) calcPageSizesScaled(Size parentSize) {
|
||||
if (config.twoPageMode) {
|
||||
Size leftPageSizeUnscaled = _getPageSizeUnscaled(currentPageNumber);
|
||||
Size rightPageSizeUnscaled = _getPageSizeUnscaled(currentPageNumber + 1);
|
||||
Size combinedPageSizesUnscaled = Size(
|
||||
leftPageSizeUnscaled.width + rightPageSizeUnscaled.width,
|
||||
max(leftPageSizeUnscaled.height, rightPageSizeUnscaled.height),
|
||||
);
|
||||
Size combinedPageSizesScaled = _calcScaledPageSize(
|
||||
parentSize,
|
||||
combinedPageSizesUnscaled,
|
||||
);
|
||||
double scaleFactor =
|
||||
combinedPageSizesScaled.width / combinedPageSizesUnscaled.width;
|
||||
return (
|
||||
leftPageSizeUnscaled * scaleFactor,
|
||||
rightPageSizeUnscaled * scaleFactor,
|
||||
);
|
||||
} else {
|
||||
return (
|
||||
_calcScaledPageSize(
|
||||
parentSize,
|
||||
_getPageSizeUnscaled(currentPageNumber),
|
||||
),
|
||||
null,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Size _getCurrentPageSizeUnscaled() {
|
||||
return document.pages.elementAt(currentPageNumber).size;
|
||||
Size _getPageSizeUnscaled(int pageNumber) {
|
||||
return document.pages.elementAt(pageNumber).size;
|
||||
}
|
||||
|
||||
Size _calcScaledPageSize(Size parentSize, Size pageSize) {
|
||||
|
||||
Reference in New Issue
Block a user