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/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.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/sheet.dart';
|
||||||
import 'package:sheetless/storage_helper.dart';
|
import 'package:sheetless/storage_helper.dart';
|
||||||
import 'package:flutter_fullscreen/flutter_fullscreen.dart';
|
import 'package:flutter_fullscreen/flutter_fullscreen.dart';
|
||||||
|
import 'package:sheetless/utility.dart';
|
||||||
|
|
||||||
class SheetViewerPage extends StatefulWidget {
|
class SheetViewerPage extends StatefulWidget {
|
||||||
final Sheet sheet;
|
final Sheet sheet;
|
||||||
@@ -224,19 +227,25 @@ class TouchablePages extends StatelessWidget {
|
|||||||
|
|
||||||
final touchAreaWidth = mediaQuery.size.width;
|
final touchAreaWidth = mediaQuery.size.width;
|
||||||
|
|
||||||
|
final (leftPageSize, rightPageSize) = pages.calcPageSizesScaled(
|
||||||
|
mediaQuery.size,
|
||||||
|
);
|
||||||
|
|
||||||
if (details.localPosition.dy < 2 * pixelsPerCm &&
|
if (details.localPosition.dy < 2 * pixelsPerCm &&
|
||||||
details.localPosition.dx >= touchAreaWidth - 2 * pixelsPerCm &&
|
details.localPosition.dx >= touchAreaWidth - 2 * pixelsPerCm &&
|
||||||
pages.config.fullscreen) {
|
pages.config.fullscreen) {
|
||||||
onExitSheetViewer();
|
onExitSheetViewer();
|
||||||
} else if (details.localPosition.dy < 2 * pixelsPerCm) {
|
} else if (details.localPosition.dy < 2 * pixelsPerCm) {
|
||||||
onToggleFullscreen();
|
onToggleFullscreen();
|
||||||
} else if (details.localPosition.dx < touchAreaWidth / 4 &&
|
} else if (pages.config.twoPageMode &&
|
||||||
pages.config.twoPageMode) {
|
details.localPosition.dx <
|
||||||
|
touchAreaWidth / 2 - leftPageSize.width / 2) {
|
||||||
onTurnPage(-2);
|
onTurnPage(-2);
|
||||||
} else if (details.localPosition.dx < touchAreaWidth / 2) {
|
} else if (details.localPosition.dx < touchAreaWidth / 2) {
|
||||||
onTurnPage(-1);
|
onTurnPage(-1);
|
||||||
} else if (details.localPosition.dx > touchAreaWidth * 3 / 4 &&
|
} else if (pages.config.twoPageMode &&
|
||||||
pages.config.twoPageMode) {
|
details.localPosition.dx >
|
||||||
|
touchAreaWidth / 2 + rightPageSize!.width / 2) {
|
||||||
onTurnPage(2);
|
onTurnPage(2);
|
||||||
} else {
|
} else {
|
||||||
onTurnPage(1);
|
onTurnPage(1);
|
||||||
@@ -258,7 +267,7 @@ class PaintablePages extends StatelessWidget {
|
|||||||
child: LayoutBuilder(
|
child: LayoutBuilder(
|
||||||
builder: (context, constraints) {
|
builder: (context, constraints) {
|
||||||
final maxSize = Size(constraints.maxWidth, constraints.maxHeight);
|
final maxSize = Size(constraints.maxWidth, constraints.maxHeight);
|
||||||
final pageSizeScaled = pages.calcCurrentPageSizeScaled(maxSize);
|
final (pageSizeScaled, _) = pages.calcPageSizesScaled(maxSize);
|
||||||
return DrawingBoard(
|
return DrawingBoard(
|
||||||
background: SizedBox(
|
background: SizedBox(
|
||||||
width: pageSizeScaled.width,
|
width: pageSizeScaled.width,
|
||||||
@@ -328,7 +337,7 @@ class Pages extends StatelessWidget {
|
|||||||
child: Stack(
|
child: Stack(
|
||||||
children: [
|
children: [
|
||||||
PdfPageView(
|
PdfPageView(
|
||||||
key: ValueKey(currentPageNumber),
|
key: ValueKey(currentPageNumber + 1),
|
||||||
document: document,
|
document: document,
|
||||||
pageNumber: currentPageNumber + 1,
|
pageNumber: currentPageNumber + 1,
|
||||||
maximumDpi: 300,
|
maximumDpi: 300,
|
||||||
@@ -350,12 +359,37 @@ class Pages extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Size calcCurrentPageSizeScaled(Size parentSize) {
|
(Size, Size?) calcPageSizesScaled(Size parentSize) {
|
||||||
return _calcScaledPageSize(parentSize, _getCurrentPageSizeUnscaled());
|
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() {
|
Size _getPageSizeUnscaled(int pageNumber) {
|
||||||
return document.pages.elementAt(currentPageNumber).size;
|
return document.pages.elementAt(pageNumber).size;
|
||||||
}
|
}
|
||||||
|
|
||||||
Size _calcScaledPageSize(Size parentSize, Size pageSize) {
|
Size _calcScaledPageSize(Size parentSize, Size pageSize) {
|
||||||
|
|||||||
Reference in New Issue
Block a user