Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 15 additions & 5 deletions Ink Canvas/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -1435,6 +1435,11 @@
Visibility="Collapsed" />
</ikw:SimpleStackPanel>
</ikw:SimpleStackPanel>
<ikw:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Foreground="#fafafa" Text="{i18n:I18n Key=Theme_ChickenSoupPosition}" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<Button Content="{i18n:I18n Key=Theme_CustomizePosition}" FontFamily="Microsoft YaHei UI" Click="ButtonCustomChickenSoupPosition_Click" />
</ikw:SimpleStackPanel>
<Line HorizontalAlignment="Center" X1="0" Y1="0" X2="400" Y2="0"
Stroke="#3f3f46" StrokeThickness="1" Margin="0,4,0,4" />
<ikw:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
Expand Down Expand Up @@ -4664,16 +4669,21 @@
Panel.ZIndex="1001"/>
</Grid>

<Canvas IsHitTestVisible="False">
<ikw:SimpleStackPanel Canvas.Left="25" Canvas.Top="15" Orientation="Vertical">
<Grid IsHitTestVisible="False" Name="WaterMarkGrid" MouseLeftButtonDown="WaterMarkGrid_MouseLeftButtonDown" Background="Transparent">
<ikw:SimpleStackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Margin="25,15,0,0" Orientation="Vertical">
<TextBlock Text="{Binding nowTime}" Name="WaterMarkTime" Visibility="Collapsed" FontSize="30"
FontWeight="Bold" Foreground="White" Opacity="0.6" />
<TextBlock Text="{Binding nowDate}" Name="WaterMarkDate" Visibility="Collapsed" Margin="2,0,0,0"
FontSize="16" Foreground="White" Opacity="0.45" />
</ikw:SimpleStackPanel>
<TextBlock Canvas.Right="25" Canvas.Top="15" Text="多一份理解,少一份抱怨" Name="BlackBoardWaterMark"
Visibility="Collapsed" FontSize="24" FontWeight="Bold" Foreground="White" Opacity="0.5" />
</Canvas>
<Grid Name="BlackBoardWaterMarkContainer" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,15,0,0" Visibility="Collapsed">
<Border Name="BlackBoardWaterMarkBorder" Background="Transparent" BorderThickness="2" BorderBrush="Transparent">
<TextBlock Text="多一份理解,少一份抱怨" Name="BlackBoardWaterMark"
FontSize="24" FontWeight="Bold" Foreground="White" Opacity="0.5" />
</Border>
<Thumb Name="BlackBoardWaterMarkThumb" DragDelta="BlackBoardWaterMark_DragDelta" Cursor="Arrow" Opacity="0" />
</Grid>
</Grid>
<Grid Visibility="{Binding ElementName=inkCanvas, Path=Visibility}">
<Grid Name="GridInkCanvasSelectionCover"
MouseDown="GridInkCanvasSelectionCover_MouseDown"
Expand Down
2 changes: 1 addition & 1 deletion Ink Canvas/MainWindow_cs/MW_AutoFold.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ private void CloseWhiteboardImmediately()
ToggleSwitchEnableTwoFingerTranslate.IsOn = false;
WaterMarkTime.Visibility = Visibility.Collapsed;
WaterMarkDate.Visibility = Visibility.Collapsed;
BlackBoardWaterMark.Visibility = Visibility.Collapsed;
BlackBoardWaterMarkContainer.Visibility = Visibility.Collapsed;
ICCWaterMarkDark.Visibility = Visibility.Collapsed;
ICCWaterMarkWhite.Visibility = Visibility.Collapsed;
BtnSwitch_Click(BtnSwitch, null);
Expand Down
8 changes: 4 additions & 4 deletions Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
Original file line number Diff line number Diff line change
Expand Up @@ -744,11 +744,11 @@ internal void ImageBlackboard_MouseUp(object sender, MouseButtonEventArgs e)

if (Settings.Appearance.EnableChickenSoupInWhiteboardMode)
{
BlackBoardWaterMark.Visibility = Visibility.Visible;
BlackBoardWaterMarkContainer.Visibility = Visibility.Visible;
}
else
{
BlackBoardWaterMark.Visibility = Visibility.Collapsed;
BlackBoardWaterMarkContainer.Visibility = Visibility.Collapsed;
}

_ = UpdateChickenSoupTextAsync().ContinueWith(t =>
Expand Down Expand Up @@ -784,7 +784,7 @@ internal void ImageBlackboard_MouseUp(object sender, MouseButtonEventArgs e)
}
catch
{
BlackBoardWaterMark.Visibility = Visibility.Collapsed;
BlackBoardWaterMarkContainer.Visibility = Visibility.Collapsed;
}
}
else if (Settings.Appearance.EnableChickenSoupInWhiteboardMode && Settings.Appearance.ChickenSoupSource == 3)
Expand Down Expand Up @@ -861,7 +861,7 @@ internal void ImageBlackboard_MouseUp(object sender, MouseButtonEventArgs e)
// if (!isInMultiTouchMode) ToggleSwitchEnableMultiTouchMode.IsOn = true;
WaterMarkTime.Visibility = Visibility.Collapsed;
WaterMarkDate.Visibility = Visibility.Collapsed;
BlackBoardWaterMark.Visibility = Visibility.Collapsed;
BlackBoardWaterMarkContainer.Visibility = Visibility.Collapsed;
ICCWaterMarkDark.Visibility = Visibility.Collapsed;
ICCWaterMarkWhite.Visibility = Visibility.Collapsed;

Expand Down
76 changes: 74 additions & 2 deletions Ink Canvas/MainWindow_cs/MW_Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1437,6 +1437,78 @@
}
}

private void UpdateChickenSoupPosition()
{
if (BlackBoardWaterMarkContainer == null) return;

if (double.IsNaN(Settings.Appearance.ChickenSoupPositionX) || double.IsNaN(Settings.Appearance.ChickenSoupPositionY))
{
// 默认右上角
BlackBoardWaterMarkContainer.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;
BlackBoardWaterMarkContainer.VerticalAlignment = System.Windows.VerticalAlignment.Top;
BlackBoardWaterMarkContainer.Margin = new Thickness(0, 15, 25, 0);
}
else
{
BlackBoardWaterMarkContainer.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
BlackBoardWaterMarkContainer.VerticalAlignment = System.Windows.VerticalAlignment.Top;
BlackBoardWaterMarkContainer.Margin = new Thickness(Settings.Appearance.ChickenSoupPositionX, Settings.Appearance.ChickenSoupPositionY, 0, 0);
}
}

private void ButtonCustomChickenSoupPosition_Click(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;

// 切换到自定义位置模式
WaterMarkGrid.IsHitTestVisible = true;
BlackBoardWaterMarkThumb.Cursor = System.Windows.Input.Cursors.SizeAll;

// 如果还未自定义过位置,先将对齐方式改为左上角,并计算当前实际位置
if (double.IsNaN(Settings.Appearance.ChickenSoupPositionX))
{
Point relativePoint = BlackBoardWaterMarkContainer.TransformToAncestor(WaterMarkGrid).Transform(new Point(0, 0));
Settings.Appearance.ChickenSoupPositionX = relativePoint.X;
Settings.Appearance.ChickenSoupPositionY = relativePoint.Y;
UpdateChickenSoupPosition();
}

// 隐藏设置面板,以便用户拖动
HideSubPanels();

// 提示用户
ShowNotification("已进入自定义位置模式,请拖动屏幕上的文本进行位置调整。再次点击任意工具栏按钮即可退出该模式。");
}

private void BlackBoardWaterMark_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
if (WaterMarkGrid.IsHitTestVisible)
{
double left = BlackBoardWaterMarkContainer.Margin.Left + e.HorizontalChange;
double top = BlackBoardWaterMarkContainer.Margin.Top + e.VerticalChange;

// 防止拖出边界
if (left < 0) left = 0;
if (top < 0) top = 0;

Settings.Appearance.ChickenSoupPositionX = left;
Settings.Appearance.ChickenSoupPositionY = top;

BlackBoardWaterMarkContainer.Margin = new Thickness(left, top, 0, 0);
SaveSettingsToFile();
}
}

private void WaterMarkGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (WaterMarkGrid.IsHitTestVisible)
{
WaterMarkGrid.IsHitTestVisible = false;
BlackBoardWaterMarkThumb.Cursor = System.Windows.Input.Cursors.Arrow;
ShowNotification("位置已保存,已退出自定义位置模式。");
}
}

private void ToggleSwitchEnableViewboxBlackBoardScaleTransform_Toggled(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Expand Down Expand Up @@ -1710,11 +1782,11 @@
{
if (ToggleSwitchEnableTimeDisplayInWhiteboardMode.IsOn)
{
BlackBoardWaterMark.Visibility = Visibility.Visible;
BlackBoardWaterMarkContainer.Visibility = Visibility.Visible;
}
else
{
BlackBoardWaterMark.Visibility = Visibility.Collapsed;
BlackBoardWaterMarkContainer.Visibility = Visibility.Collapsed;
}
}

Expand Down Expand Up @@ -5254,7 +5326,7 @@
MessageBoxImage.Warning);

Settings.Startup.UpdateChannel = oldChannel;
Dispatcher.BeginInvoke(new Action(() =>

Check warning on line 5329 in Ink Canvas/MainWindow_cs/MW_Settings.cs

View workflow job for this annotation

GitHub Actions / Build & Package (x86)

Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call.

Check warning on line 5329 in Ink Canvas/MainWindow_cs/MW_Settings.cs

View workflow job for this annotation

GitHub Actions / Build & Package (AnyCPU)

Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call.
{
_isChangingUpdateChannelInternally = true;
try
Expand Down Expand Up @@ -5305,7 +5377,7 @@
else
{
Settings.Startup.UpdateChannel = oldChannel;
Dispatcher.BeginInvoke(new Action(() =>

Check warning on line 5380 in Ink Canvas/MainWindow_cs/MW_Settings.cs

View workflow job for this annotation

GitHub Actions / Build & Package (x86)

Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call.

Check warning on line 5380 in Ink Canvas/MainWindow_cs/MW_Settings.cs

View workflow job for this annotation

GitHub Actions / Build & Package (AnyCPU)

Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call.
{
_isChangingUpdateChannelInternally = true;
try
Expand Down
1 change: 1 addition & 0 deletions Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,7 @@ private void LoadSettings(bool isStartup = false, bool skipAutoUpdateCheck = fal
try
{
ComboBoxChickenSoupSource.SelectedIndex = Settings.Appearance.ChickenSoupSource;
UpdateChickenSoupPosition();
}
finally
{
Expand Down
8 changes: 8 additions & 0 deletions Ink Canvas/Properties/Strings.en.resx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
</data>
<data name="Theme_ChickenSoupPosition" xml:space="preserve">
<value>Quote Position</value>
</data>
<data name="Theme_CustomizePosition" xml:space="preserve">
<value>Customize Position</value>
</data>
</root>
8 changes: 7 additions & 1 deletion Ink Canvas/Properties/Strings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -2626,4 +2626,10 @@
<data name="Canvas_LaunchSeewoVideoShowcaseForWhiteboardBoothHint" xml:space="preserve">
<value>开启后,点击白板工具栏「展台」将打开希沃视频展台(需已安装);关闭则使用内置展台。</value>
</data>
</root>
<data name="Theme_ChickenSoupPosition" xml:space="preserve">
<value>信仰の源显示位置</value>
</data>
<data name="Theme_CustomizePosition" xml:space="preserve">
<value>自定义位置</value>
</data>
</root>
4 changes: 4 additions & 0 deletions Ink Canvas/Resources/Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,10 @@ public class Appearance
public bool IsShowQuickPanel { get; set; } = true;
[JsonProperty("chickenSoupSource")]
public int ChickenSoupSource { get; set; } = 1;
[JsonProperty("chickenSoupPositionX")]
public double ChickenSoupPositionX { get; set; } = double.NaN;
[JsonProperty("chickenSoupPositionY")]
public double ChickenSoupPositionY { get; set; } = double.NaN;
[JsonProperty("hitokotoCategories", NullValueHandling = NullValueHandling.Ignore)]
public List<string> HitokotoCategories { get; set; }
[JsonProperty("isShowModeFingerToggleSwitch")]
Expand Down
159 changes: 159 additions & 0 deletions update_settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
import re

with open("Ink Canvas/MainWindow_cs/MW_Settings.cs", "r", encoding="utf-8") as f:
content = f.read()

old_str = """ private void UpdateChickenSoupPosition()
{
if (BlackBoardWaterMark == null) return;

if (double.IsNaN(Settings.Appearance.ChickenSoupPositionX) || double.IsNaN(Settings.Appearance.ChickenSoupPositionY))
{
// 默认右上角
BlackBoardWaterMark.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;
BlackBoardWaterMark.VerticalAlignment = System.Windows.VerticalAlignment.Top;
BlackBoardWaterMark.Margin = new Thickness(0, 15, 25, 0);
}
else
{
BlackBoardWaterMark.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
BlackBoardWaterMark.VerticalAlignment = System.Windows.VerticalAlignment.Top;
BlackBoardWaterMark.Margin = new Thickness(Settings.Appearance.ChickenSoupPositionX, Settings.Appearance.ChickenSoupPositionY, 0, 0);
}
}

private void ButtonCustomChickenSoupPosition_Click(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;

// 切换到自定义位置模式
WaterMarkGrid.IsHitTestVisible = true;
BlackBoardWaterMark.Cursor = System.Windows.Input.Cursors.SizeAll;

// 如果还未自定义过位置,先将对齐方式改为左上角,并计算当前实际位置
if (double.IsNaN(Settings.Appearance.ChickenSoupPositionX))
{
Point relativePoint = BlackBoardWaterMark.TransformToAncestor(WaterMarkGrid).Transform(new Point(0, 0));
Settings.Appearance.ChickenSoupPositionX = relativePoint.X;
Settings.Appearance.ChickenSoupPositionY = relativePoint.Y;
UpdateChickenSoupPosition();
}

// 隐藏设置面板,以便用户拖动
HideSubPanels();

// 提示用户
ShowNotification("已进入自定义位置模式,请拖动屏幕上的文本进行位置调整。再次点击任意工具栏按钮即可退出该模式。");
}

private void BlackBoardWaterMark_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
if (WaterMarkGrid.IsHitTestVisible)
{
double left = BlackBoardWaterMark.Margin.Left + e.HorizontalChange;
double top = BlackBoardWaterMark.Margin.Top + e.VerticalChange;

// 防止拖出边界
if (left < 0) left = 0;
if (top < 0) top = 0;

Settings.Appearance.ChickenSoupPositionX = left;
Settings.Appearance.ChickenSoupPositionY = top;

BlackBoardWaterMark.Margin = new Thickness(left, top, 0, 0);
SaveSettingsToFile();
}
}

private void WaterMarkGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (WaterMarkGrid.IsHitTestVisible)
{
WaterMarkGrid.IsHitTestVisible = false;
BlackBoardWaterMark.Cursor = System.Windows.Input.Cursors.Arrow;
ShowNotification("位置已保存,已退出自定义位置模式。");
}
}"""

new_str = """ private void UpdateChickenSoupPosition()
{
if (BlackBoardWaterMarkContainer == null) return;

if (double.IsNaN(Settings.Appearance.ChickenSoupPositionX) || double.IsNaN(Settings.Appearance.ChickenSoupPositionY))
{
// 默认右上角
BlackBoardWaterMarkContainer.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;
BlackBoardWaterMarkContainer.VerticalAlignment = System.Windows.VerticalAlignment.Top;
BlackBoardWaterMarkContainer.Margin = new Thickness(0, 15, 25, 0);
}
else
{
BlackBoardWaterMarkContainer.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
BlackBoardWaterMarkContainer.VerticalAlignment = System.Windows.VerticalAlignment.Top;
BlackBoardWaterMarkContainer.Margin = new Thickness(Settings.Appearance.ChickenSoupPositionX, Settings.Appearance.ChickenSoupPositionY, 0, 0);
}
}

private void ButtonCustomChickenSoupPosition_Click(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;

// 切换到自定义位置模式
WaterMarkGrid.IsHitTestVisible = true;
BlackBoardWaterMarkThumb.Cursor = System.Windows.Input.Cursors.SizeAll;

// 如果还未自定义过位置,先将对齐方式改为左上角,并计算当前实际位置
if (double.IsNaN(Settings.Appearance.ChickenSoupPositionX))
{
Point relativePoint = BlackBoardWaterMarkContainer.TransformToAncestor(WaterMarkGrid).Transform(new Point(0, 0));
Settings.Appearance.ChickenSoupPositionX = relativePoint.X;
Settings.Appearance.ChickenSoupPositionY = relativePoint.Y;
UpdateChickenSoupPosition();
}

// 隐藏设置面板,以便用户拖动
HideSubPanels();

// 提示用户
ShowNotification("已进入自定义位置模式,请拖动屏幕上的文本进行位置调整。再次点击任意工具栏按钮即可退出该模式。");
}

private void BlackBoardWaterMark_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
if (WaterMarkGrid.IsHitTestVisible)
{
double left = BlackBoardWaterMarkContainer.Margin.Left + e.HorizontalChange;
double top = BlackBoardWaterMarkContainer.Margin.Top + e.VerticalChange;

// 防止拖出边界
if (left < 0) left = 0;
if (top < 0) top = 0;

Settings.Appearance.ChickenSoupPositionX = left;
Settings.Appearance.ChickenSoupPositionY = top;

BlackBoardWaterMarkContainer.Margin = new Thickness(left, top, 0, 0);
SaveSettingsToFile();
}
}

private void WaterMarkGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (WaterMarkGrid.IsHitTestVisible)
{
WaterMarkGrid.IsHitTestVisible = false;
BlackBoardWaterMarkThumb.Cursor = System.Windows.Input.Cursors.Arrow;
ShowNotification("位置已保存,已退出自定义位置模式。");
}
}"""

# Handle both \n and \r\n
old_str_regex = re.escape(old_str).replace(r'\n', r'\r?\n')

if re.search(old_str_regex, content):
content = re.sub(old_str_regex, new_str, content)
with open("Ink Canvas/MainWindow_cs/MW_Settings.cs", "w", encoding="utf-8") as f:
f.write(content)
print("Success")
else:
print("Not found")
19 changes: 19 additions & 0 deletions update_visibility.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import os
import re

files = [
"Ink Canvas/MainWindow_cs/MW_AutoFold.cs",
"Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs",
"Ink Canvas/MainWindow_cs/MW_Settings.cs"
]

for file in files:
with open(file, "r", encoding="utf-8") as f:
content = f.read()

new_content = content.replace("BlackBoardWaterMark.Visibility = ", "BlackBoardWaterMarkContainer.Visibility = ")

if new_content != content:
with open(file, "w", encoding="utf-8") as f:
f.write(new_content)
print(f"Updated {file}")
Loading