alpha
This commit is contained in:
@@ -0,0 +1,338 @@
|
||||
using Ink_Canvas.Helpers;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Ink;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media.Animation;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Xml.Linq;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace Ink_Canvas {
|
||||
public partial class MainWindow : PerformanceTransparentWin {
|
||||
private StrokeCollection[] strokeCollections = new StrokeCollection[101];
|
||||
private bool[] whiteboadLastModeIsRedo = new bool[101];
|
||||
private StrokeCollection lastTouchDownStrokeCollection = new StrokeCollection();
|
||||
|
||||
public int CurrentWhiteboardIndex = 1;
|
||||
public int WhiteboardTotalCount = 1;
|
||||
private TimeMachineHistory[][] TimeMachineHistories = new TimeMachineHistory[101][]; //最多99页,0用来存储非白板时的墨迹以便还原
|
||||
|
||||
public Color[] BoardBackgroundColors = new Color[6] {
|
||||
Color.FromRgb(39, 39, 42),
|
||||
Color.FromRgb(23, 42, 37),
|
||||
Color.FromRgb(234, 235, 237),
|
||||
Color.FromRgb(15, 23, 42),
|
||||
Color.FromRgb(181, 230, 181),
|
||||
Color.FromRgb(0, 0, 0)
|
||||
};
|
||||
|
||||
public class BoardPageSettings {
|
||||
public BlackboardBackgroundColorEnum BackgroundColor { get; set; } = BlackboardBackgroundColorEnum.White;
|
||||
public BlackboardBackgroundPatternEnum BackgroundPattern { get; set; } = BlackboardBackgroundPatternEnum.None;
|
||||
}
|
||||
|
||||
public List<BoardPageSettings> BoardPagesSettingsList = new List<BoardPageSettings>() {
|
||||
new BoardPageSettings()
|
||||
};
|
||||
|
||||
#region Board Background
|
||||
|
||||
/// <summary>
|
||||
/// 更新白板模式下每頁的背景顏色,可以直接根據當前的<c>CurrentWhiteboardIndex</c>獲取背景配置並更新,也可以自己修改當前的背景顏色
|
||||
/// </summary>
|
||||
/// <param name="id">要修改的背景顏色的ID,傳入null會根據當前的<c>CurrentWhiteboardIndex</c>去讀取有關背景顏色的配置並更新</param>
|
||||
private void UpdateBoardBackground(int? id) {
|
||||
if (id != null) BoardPagesSettingsList[CurrentWhiteboardIndex - 1].BackgroundColor = (BlackboardBackgroundColorEnum)id;
|
||||
var bgC = BoardPagesSettingsList[CurrentWhiteboardIndex - 1].BackgroundColor;
|
||||
if (bgC == BlackboardBackgroundColorEnum.BlackBoardGreen
|
||||
|| bgC == BlackboardBackgroundColorEnum.BlueBlack
|
||||
|| bgC == BlackboardBackgroundColorEnum.GrayBlack
|
||||
|| bgC == BlackboardBackgroundColorEnum.RealBlack) {
|
||||
if (inkColor == 0) lastBoardInkColor = 5;
|
||||
} else {
|
||||
if (inkColor == 5) lastBoardInkColor = 0;
|
||||
}
|
||||
CheckColorTheme(true);
|
||||
UpdateBoardBackgroundPanelDisplayStatus();
|
||||
}
|
||||
|
||||
private void BoardBackgroundColor1Border_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||
UpdateBoardBackground(0);
|
||||
}
|
||||
|
||||
private void BoardBackgroundColor2Border_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||
UpdateBoardBackground(1);
|
||||
}
|
||||
|
||||
private void BoardBackgroundColor3Border_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||
UpdateBoardBackground(2);
|
||||
}
|
||||
|
||||
private void BoardBackgroundColor4Border_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||
UpdateBoardBackground(3);
|
||||
}
|
||||
|
||||
private void BoardBackgroundColor5Border_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||
UpdateBoardBackground(4);
|
||||
}
|
||||
|
||||
private void BoardBackgroundColor6Border_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||
UpdateBoardBackground(5);
|
||||
}
|
||||
|
||||
private void UpdateBoardBackgroundPanelDisplayStatus() {
|
||||
BoardBackgroundColor1Checkbox.Visibility = Visibility.Collapsed;
|
||||
BoardBackgroundColor2Checkbox.Visibility = Visibility.Collapsed;
|
||||
BoardBackgroundColor3Checkbox.Visibility = Visibility.Collapsed;
|
||||
BoardBackgroundColor4Checkbox.Visibility = Visibility.Collapsed;
|
||||
BoardBackgroundColor5Checkbox.Visibility = Visibility.Collapsed;
|
||||
BoardBackgroundColor6Checkbox.Visibility = Visibility.Collapsed;
|
||||
|
||||
if (currentMode == 1) {
|
||||
var index = CurrentWhiteboardIndex - 1;
|
||||
var bg = BoardPagesSettingsList[index];
|
||||
if (bg.BackgroundColor == (BlackboardBackgroundColorEnum)0) BoardBackgroundColor1Checkbox.Visibility = Visibility.Visible;
|
||||
else if (bg.BackgroundColor == (BlackboardBackgroundColorEnum)1) BoardBackgroundColor2Checkbox.Visibility = Visibility.Visible;
|
||||
else if (bg.BackgroundColor == (BlackboardBackgroundColorEnum)2) BoardBackgroundColor3Checkbox.Visibility = Visibility.Visible;
|
||||
else if (bg.BackgroundColor == (BlackboardBackgroundColorEnum)3) BoardBackgroundColor4Checkbox.Visibility = Visibility.Visible;
|
||||
else if (bg.BackgroundColor == (BlackboardBackgroundColorEnum)4) BoardBackgroundColor5Checkbox.Visibility = Visibility.Visible;
|
||||
else if (bg.BackgroundColor == (BlackboardBackgroundColorEnum)5) BoardBackgroundColor6Checkbox.Visibility = Visibility.Visible;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void SaveStrokes(bool isBackupMain = false) {
|
||||
if (isBackupMain) {
|
||||
var timeMachineHistory = timeMachine.ExportTimeMachineHistory();
|
||||
TimeMachineHistories[0] = timeMachineHistory;
|
||||
timeMachine.ClearStrokeHistory();
|
||||
} else {
|
||||
var timeMachineHistory = timeMachine.ExportTimeMachineHistory();
|
||||
TimeMachineHistories[CurrentWhiteboardIndex] = timeMachineHistory;
|
||||
timeMachine.ClearStrokeHistory();
|
||||
}
|
||||
}
|
||||
|
||||
private void ClearStrokes(bool isErasedByCode) {
|
||||
_currentCommitType = CommitReason.ClearingCanvas;
|
||||
if (isErasedByCode) _currentCommitType = CommitReason.CodeInput;
|
||||
inkCanvas.Strokes.Clear();
|
||||
_currentCommitType = CommitReason.UserInput;
|
||||
}
|
||||
|
||||
private void RestoreStrokes(bool isBackupMain = false) {
|
||||
try {
|
||||
if (TimeMachineHistories[CurrentWhiteboardIndex] == null) return; //防止白板打开后不居中
|
||||
if (isBackupMain) {
|
||||
timeMachine.ImportTimeMachineHistory(TimeMachineHistories[0]);
|
||||
foreach (var item in TimeMachineHistories[0]) ApplyHistoryToCanvas(item);
|
||||
} else {
|
||||
timeMachine.ImportTimeMachineHistory(TimeMachineHistories[CurrentWhiteboardIndex]);
|
||||
foreach (var item in TimeMachineHistories[CurrentWhiteboardIndex]) ApplyHistoryToCanvas(item);
|
||||
}
|
||||
}
|
||||
catch {
|
||||
// ignored
|
||||
}
|
||||
}
|
||||
|
||||
private async void BtnWhiteBoardPageIndex_Click(object sender, EventArgs e) {
|
||||
if (sender == BtnLeftPageListWB) {
|
||||
if (BoardBorderLeftPageListView.Visibility == Visibility.Visible) {
|
||||
AnimationsHelper.HideWithSlideAndFade(BoardBorderLeftPageListView);
|
||||
} else {
|
||||
AnimationsHelper.HideWithSlideAndFade(BoardBorderRightPageListView);
|
||||
RefreshBlackBoardSidePageListView();
|
||||
AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderLeftPageListView);
|
||||
await Task.Delay(1);
|
||||
ScrollViewToVerticalTop(
|
||||
(ListViewItem)BlackBoardLeftSidePageListView.ItemContainerGenerator.ContainerFromIndex(
|
||||
CurrentWhiteboardIndex - 1), BlackBoardLeftSidePageListScrollViewer);
|
||||
}
|
||||
} else if (sender == BtnRightPageListWB)
|
||||
{
|
||||
if (BoardBorderRightPageListView.Visibility == Visibility.Visible) {
|
||||
AnimationsHelper.HideWithSlideAndFade(BoardBorderRightPageListView);
|
||||
} else {
|
||||
AnimationsHelper.HideWithSlideAndFade(BoardBorderLeftPageListView);
|
||||
RefreshBlackBoardSidePageListView();
|
||||
AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderRightPageListView);
|
||||
await Task.Delay(1);
|
||||
ScrollViewToVerticalTop(
|
||||
(ListViewItem)BlackBoardRightSidePageListView.ItemContainerGenerator.ContainerFromIndex(
|
||||
CurrentWhiteboardIndex - 1), BlackBoardRightSidePageListScrollViewer);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void BtnWhiteBoardSwitchPrevious_Click(object sender, EventArgs e) {
|
||||
if (CurrentWhiteboardIndex <= 1) return;
|
||||
|
||||
SaveStrokes();
|
||||
|
||||
ClearStrokes(true);
|
||||
CurrentWhiteboardIndex--;
|
||||
|
||||
RestoreStrokes();
|
||||
|
||||
UpdateIndexInfoDisplay();
|
||||
UpdateBoardBackground(null);
|
||||
}
|
||||
|
||||
private void BtnWhiteBoardSwitchNext_Click(object sender, EventArgs e) {
|
||||
if (Settings.Automation.IsAutoSaveStrokesAtClear &&
|
||||
inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) SaveScreenshot(true);
|
||||
if (CurrentWhiteboardIndex >= WhiteboardTotalCount) {
|
||||
BtnWhiteBoardAdd_Click(sender, e);
|
||||
return;
|
||||
}
|
||||
|
||||
SaveStrokes();
|
||||
|
||||
ClearStrokes(true);
|
||||
CurrentWhiteboardIndex++;
|
||||
|
||||
RestoreStrokes();
|
||||
|
||||
UpdateIndexInfoDisplay();
|
||||
UpdateBoardBackground(null);
|
||||
}
|
||||
|
||||
private void BtnWhiteBoardAdd_Click(object sender, EventArgs e) {
|
||||
if (WhiteboardTotalCount >= 99) return;
|
||||
if (Settings.Automation.IsAutoSaveStrokesAtClear &&
|
||||
inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) SaveScreenshot(true);
|
||||
SaveStrokes();
|
||||
ClearStrokes(true);
|
||||
|
||||
BoardPagesSettingsList.Insert(CurrentWhiteboardIndex, new BoardPageSettings() {
|
||||
BackgroundColor = Settings.Canvas.UseDefaultBackgroundColorForEveryNewAddedBlackboardPage ? Settings.Canvas.BlackboardBackgroundColor : BoardPagesSettingsList[CurrentWhiteboardIndex-1].BackgroundColor,
|
||||
BackgroundPattern = Settings.Canvas.UseDefaultBackgroundPatternForEveryNewAddedBlackboardPage ? Settings.Canvas.BlackboardBackgroundPattern : BoardPagesSettingsList[CurrentWhiteboardIndex - 1].BackgroundPattern,
|
||||
});
|
||||
|
||||
WhiteboardTotalCount++;
|
||||
CurrentWhiteboardIndex++;
|
||||
|
||||
if (CurrentWhiteboardIndex != WhiteboardTotalCount)
|
||||
for (var i = WhiteboardTotalCount; i > CurrentWhiteboardIndex; i--)
|
||||
TimeMachineHistories[i] = TimeMachineHistories[i - 1];
|
||||
|
||||
UpdateIndexInfoDisplay();
|
||||
|
||||
//if (WhiteboardTotalCount >= 99) BtnWhiteBoardAdd.IsEnabled = false;
|
||||
|
||||
if (BlackBoardLeftSidePageListView.Visibility == Visibility.Visible) {
|
||||
RefreshBlackBoardSidePageListView();
|
||||
}
|
||||
|
||||
UpdateBoardBackground(null);
|
||||
}
|
||||
|
||||
private void BtnWhiteBoardDelete_Click(object sender, RoutedEventArgs e) {
|
||||
ClearStrokes(true);
|
||||
|
||||
if (CurrentWhiteboardIndex != WhiteboardTotalCount)
|
||||
for (var i = CurrentWhiteboardIndex; i <= WhiteboardTotalCount; i++)
|
||||
TimeMachineHistories[i] = TimeMachineHistories[i + 1];
|
||||
else
|
||||
CurrentWhiteboardIndex--;
|
||||
|
||||
WhiteboardTotalCount--;
|
||||
|
||||
RestoreStrokes();
|
||||
|
||||
UpdateIndexInfoDisplay();
|
||||
|
||||
//if (WhiteboardTotalCount < 99) BtnWhiteBoardAdd.IsEnabled = true;
|
||||
}
|
||||
|
||||
private bool _whiteboardModePreviousPageButtonEnabled = false;
|
||||
private bool _whiteboardModeNextPageButtonEnabled = false;
|
||||
private bool _whiteboardModeNewPageButtonEnabled = false;
|
||||
private bool _whiteboardModeNewPageButtonMerged = false;
|
||||
|
||||
public bool WhiteboardModePreviousPageButtonEnabled {
|
||||
get => _whiteboardModePreviousPageButtonEnabled;
|
||||
set {
|
||||
_whiteboardModePreviousPageButtonEnabled = value;
|
||||
var geo = new GeometryDrawing[]
|
||||
{ BtnLeftWhiteBoardSwitchPreviousGeometry, BtnRightWhiteBoardSwitchPreviousGeometry };
|
||||
var label = new TextBlock[]
|
||||
{ BtnLeftWhiteBoardSwitchPreviousLabel, BtnRightWhiteBoardSwitchPreviousLabel };
|
||||
var border = new Border[]
|
||||
{ BtnWhiteBoardSwitchPreviousL, BtnWhiteBoardSwitchPreviousR };
|
||||
foreach (var gd in geo)
|
||||
gd.Brush = new SolidColorBrush(Color.FromArgb((byte)(value ? 255 : 127), 24, 24, 27));
|
||||
foreach (var tb in label) tb.Opacity = value ? 1 : 0.5;
|
||||
foreach (var bd in border) bd.IsHitTestVisible = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool WhiteboardModeNextPageButtonEnabled {
|
||||
get => _whiteboardModeNextPageButtonEnabled;
|
||||
set {
|
||||
_whiteboardModeNextPageButtonEnabled = value;
|
||||
var geo = new GeometryDrawing[]
|
||||
{ BtnLeftWhiteBoardSwitchNextGeometry, BtnRightWhiteBoardSwitchNextGeometry };
|
||||
var label = new TextBlock[]
|
||||
{ BtnLeftWhiteBoardSwitchNextLabel, BtnRightWhiteBoardSwitchNextLabel };
|
||||
var border = new Border[]
|
||||
{ BtnWhiteBoardSwitchNextL, BtnWhiteBoardSwitchNextR };
|
||||
foreach (var gd in geo)
|
||||
gd.Brush = new SolidColorBrush(Color.FromArgb((byte)(value ? 255 : 127), 24, 24, 27));
|
||||
foreach (var tb in label) tb.Opacity = value ? 1 : 0.5;
|
||||
foreach (var bd in border) bd.IsHitTestVisible = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool WhiteboardModeNewPageButtonEnabled {
|
||||
get => _whiteboardModeNewPageButtonEnabled;
|
||||
set {
|
||||
_whiteboardModeNewPageButtonEnabled = value;
|
||||
var geo = new GeometryDrawing[]
|
||||
{ BtnWhiteboardAddGeometryLeft, BtnWhiteboardAddGeometryRight, BtnWhiteboardAddGeometryRightSecondary };
|
||||
var label = new TextBlock[]
|
||||
{ BtnWhiteboardAddTextBlockLeft, BtnWhiteboardAddTextBlockRight, BtnWhiteboardAddTextBlockRightSecondary };
|
||||
var border = new Border[]
|
||||
{ BtnWhiteboardAddLeft, BtnWhiteboardAddRight, BtnWhiteboardAddRightSecondary };
|
||||
foreach (var gd in geo)
|
||||
gd.Brush = new SolidColorBrush(Color.FromArgb((byte)(value ? 255 : 127), 24, 24, 27));
|
||||
foreach (var tb in label) tb.Opacity = value ? 1 : 0.5;
|
||||
foreach (var bd in border) bd.IsHitTestVisible = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool WhiteboardModeNewPageButtonMerged {
|
||||
get => _whiteboardModeNewPageButtonMerged;
|
||||
set {
|
||||
_whiteboardModeNewPageButtonMerged = value;
|
||||
BtnWhiteBoardSwitchNextL.Visibility = value ? Visibility.Collapsed : Visibility.Visible;
|
||||
BtnLeftPageListWB.CornerRadius = value ? new CornerRadius(0, 5, 5, 0) : new CornerRadius(0);
|
||||
BtnWhiteBoardSwitchNextR.Visibility = value ? Visibility.Collapsed : Visibility.Visible;
|
||||
BtnRightPageListWB.CornerRadius = value ? new CornerRadius(0, 5, 5, 0) : new CornerRadius(0);
|
||||
BtnWhiteboardAddRightSecondary.Visibility = value ? Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateIndexInfoDisplay() {
|
||||
BtnLeftPageListWBTextCount.Text =
|
||||
$"{CurrentWhiteboardIndex}/{WhiteboardTotalCount}";
|
||||
BtnRightPageListWBTextCount.Text =
|
||||
$"{CurrentWhiteboardIndex}/{WhiteboardTotalCount}";
|
||||
|
||||
WhiteboardModePreviousPageButtonEnabled = CurrentWhiteboardIndex > 1;
|
||||
WhiteboardModeNextPageButtonEnabled = CurrentWhiteboardIndex < WhiteboardTotalCount;
|
||||
WhiteboardModeNewPageButtonEnabled = WhiteboardTotalCount < 99;
|
||||
WhiteboardModeNewPageButtonMerged = CurrentWhiteboardIndex == WhiteboardTotalCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user