Add painting overlay
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_drawing_board/flutter_drawing_board.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:pdfrx/pdfrx.dart';
|
||||
import 'package:sheetless/api.dart';
|
||||
@@ -27,6 +28,7 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
||||
late Future<bool> documentLoaded;
|
||||
PdfDocument? document;
|
||||
bool twoPageMode = true;
|
||||
bool paintMode = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -82,19 +84,11 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
||||
|
||||
return Stack(
|
||||
children: [
|
||||
Container(
|
||||
alignment: Alignment.bottomLeft,
|
||||
margin: EdgeInsets.all(10),
|
||||
child: FloatingActionButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
twoPageMode = !twoPageMode;
|
||||
});
|
||||
},
|
||||
child: Icon(twoPageMode ? Icons.filter_1 : Icons.filter_2),
|
||||
),
|
||||
),
|
||||
GestureDetector(
|
||||
Stack(
|
||||
children: [
|
||||
Visibility(
|
||||
visible: !paintMode,
|
||||
child: GestureDetector(
|
||||
onTapUp: (TapUpDetails details) {
|
||||
// Get the size of the screen
|
||||
final screenWidth = MediaQuery.of(context).size.width;
|
||||
@@ -130,7 +124,7 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
||||
key: ValueKey(page),
|
||||
document: document,
|
||||
pageNumber: page,
|
||||
alignment: Alignment.center,
|
||||
maximumDpi: 300,
|
||||
),
|
||||
Positioned.fill(
|
||||
child: Container(
|
||||
@@ -149,6 +143,7 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
||||
key: ValueKey(page),
|
||||
document: document,
|
||||
pageNumber: page + 1,
|
||||
maximumDpi: 300,
|
||||
// alignment: Alignment.center,
|
||||
),
|
||||
Positioned.fill(
|
||||
@@ -164,6 +159,77 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
// Positioned.fill(
|
||||
Visibility(
|
||||
visible: paintMode,
|
||||
child: SizedBox.expand(
|
||||
child: LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
return DrawingBoard(
|
||||
background: SizedBox(
|
||||
width: calcScaledPageWidth(
|
||||
constraints.maxHeight,
|
||||
document!.pages.elementAt(page).size,
|
||||
),
|
||||
height: constraints.maxHeight,
|
||||
child: PdfPageView(
|
||||
document: document,
|
||||
pageNumber: page,
|
||||
alignment: Alignment.center,
|
||||
),
|
||||
),
|
||||
// showDefaultTools: true,
|
||||
// showDefaultActions: true,
|
||||
boardConstrained: true,
|
||||
minScale: 1,
|
||||
maxScale: 3,
|
||||
alignment: Alignment.topRight,
|
||||
boardBoundaryMargin: EdgeInsets.all(0),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Container(
|
||||
alignment: Alignment.bottomLeft,
|
||||
margin: EdgeInsets.all(10),
|
||||
child: Column(
|
||||
spacing: 10,
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
FloatingActionButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
if (twoPageMode) {
|
||||
// TODO: notification that paint mode only in single page mode
|
||||
} else {
|
||||
paintMode = !paintMode;
|
||||
}
|
||||
});
|
||||
},
|
||||
child: Icon(Icons.brush),
|
||||
),
|
||||
FloatingActionButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
twoPageMode = !twoPageMode;
|
||||
if (twoPageMode) {
|
||||
paintMode = false;
|
||||
// TODO: notification that paint mode was deactivated since only possible in single page mode
|
||||
}
|
||||
});
|
||||
},
|
||||
child: Icon(
|
||||
twoPageMode ? Icons.filter_1 : Icons.filter_2,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
} else if (snapshot.hasError) {
|
||||
@@ -183,4 +249,8 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
double calcScaledPageWidth(double parentHeight, Size pageSize) {
|
||||
return parentHeight * pageSize.width / pageSize.height;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user