修訂 | dc54606dd39f6c9dd79b919ab692ba5142aef4fa (tree) |
---|---|
時間 | 2023-01-14 13:29:05 |
作者 | Kimura Youichi <kim.upsilon@bucy...> |
Commiter | Kimura Youichi |
Merge branch 'develop' into release
@@ -22,7 +22,7 @@ using System.Runtime.InteropServices; | ||
22 | 22 | // 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です |
23 | 23 | [assembly: Guid("2d0ae0ba-adac-49a2-9b10-26fd69e695bf")] |
24 | 24 | |
25 | -[assembly: AssemblyVersion("3.0.0.0")] | |
25 | +[assembly: AssemblyVersion("3.1.0.0")] | |
26 | 26 | |
27 | 27 | [assembly: InternalsVisibleTo("OpenTween.Tests")] |
28 | 28 | [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] // for Moq |
@@ -571,18 +571,16 @@ namespace OpenTween.Properties { | ||
571 | 571 | /// <summary> |
572 | 572 | /// 更新履歴 |
573 | 573 | /// |
574 | + ///==== Ver 3.1.0(2023/01/14) | |
575 | + /// * NEW: 引用ツイートを Ctrl+Shift+L で実行するショートカットを追加 (thx @WizardOfPSG!) | |
576 | + /// * CHG: 発言一覧のフォントサイズがアイコンより大きい場合は項目の高さをフォントサイズに合わせるように変更 | |
577 | + /// * CHG: クリップボードからの画像添付時に表示していた確認ダイアログを廃止 | |
578 | + /// * FIX: 発言一覧のソート順が日付の昇順となっている場合にタブ切替時にスクロール位置が保持されない不具合を修正 | |
579 | + /// | |
574 | 580 | ///==== Ver 3.0.0(2023/01/11) |
575 | 581 | /// * OpenTween v3.0.0 からは .NET Framework 4.8 以上が必須になります |
576 | 582 | /// - .NET Framework 4.8 ランタイムは https://dotnet.microsoft.com/ja-jp/download/dotnet-framework/net48 から入手できます |
577 | - /// - Windows 10 21H1 以降には標準で .NET Framework 4.8 が含まれているため追加のインストールは不要です | |
578 | - /// * このバージョン以降の OpenTween では Windows 8.1 以下向けの対応は行いません | |
579 | - /// | |
580 | - /// * CHG: ターゲットフレームワークを .NET Framework 4.8 に変更 | |
581 | - /// | |
582 | - ///==== Ver 2.8.0(2023/01/11) | |
583 | - /// * NEW: サムネイル画像のコンテキストメニューに「画像をコピー」を追加 (thx @kzlogos!) | |
584 | - /// * NEW: Segoe UI Emoji によるカラー絵文字の描画に対応(発言詳細欄のみ) | |
585 | - /// * CH [残りの文字列は切り詰められました]"; に類似しているローカライズされた文字列を検索します。 | |
583 | + /// - Windows 10 21H1 以降には標準で .NET Framework 4.8 が含まれているため追加 [残りの文字列は切り詰められました]"; に類似しているローカライズされた文字列を検索します。 | |
586 | 584 | /// </summary> |
587 | 585 | internal static string ChangeLog { |
588 | 586 | get { |
@@ -1771,15 +1769,6 @@ namespace OpenTween.Properties { | ||
1771 | 1769 | } |
1772 | 1770 | |
1773 | 1771 | /// <summary> |
1774 | - /// クリップボードから画像を貼り付けようとしています。よろしいですか? に類似しているローカライズされた文字列を検索します。 | |
1775 | - /// </summary> | |
1776 | - internal static string PostPictureConfirm3 { | |
1777 | - get { | |
1778 | - return ResourceManager.GetString("PostPictureConfirm3", resourceCulture); | |
1779 | - } | |
1780 | - } | |
1781 | - | |
1782 | - /// <summary> | |
1783 | 1772 | /// 投稿する画像または投稿先サービスが選択されていません。 に類似しているローカライズされた文字列を検索します。 |
1784 | 1773 | /// </summary> |
1785 | 1774 | internal static string PostPictureWarn1 { |
@@ -194,7 +194,6 @@ | ||
194 | 194 | <data name="PostPictureConfirm1"><value>[投稿先: {0}] |
195 | 195 | {1} 枚の画像を投稿します。よろしいですか?</value></data> |
196 | 196 | <data name="PostPictureConfirm2"><value>画像投稿確認</value></data> |
197 | - <data name="PostPictureConfirm3"><value>クリップボードから画像を貼り付けようとしています。よろしいですか?</value></data> | |
198 | 197 | <data name="PostPictureWarn1"><value>投稿する画像または投稿先サービスが選択されていません。</value></data> |
199 | 198 | <data name="PostPictureWarn2"><value>画像投稿</value></data> |
200 | 199 | <data name="PostPictureWarn3"><value>[投稿先: {0}] |
@@ -1,5 +1,11 @@ | ||
1 | 1 | 更新履歴 |
2 | 2 | |
3 | +==== Ver 3.1.0(2023/01/14) | |
4 | + * NEW: 引用ツイートを Ctrl+Shift+L で実行するショートカットを追加 (thx @WizardOfPSG!) | |
5 | + * CHG: 発言一覧のフォントサイズがアイコンより大きい場合は項目の高さをフォントサイズに合わせるように変更 | |
6 | + * CHG: クリップボードからの画像添付時に表示していた確認ダイアログを廃止 | |
7 | + * FIX: 発言一覧のソート順が日付の昇順となっている場合にタブ切替時にスクロール位置が保持されない不具合を修正 | |
8 | + | |
3 | 9 | ==== Ver 3.0.0(2023/01/11) |
4 | 10 | * OpenTween v3.0.0 からは .NET Framework 4.8 以上が必須になります |
5 | 11 | - .NET Framework 4.8 ランタイムは https://dotnet.microsoft.com/ja-jp/download/dotnet-framework/net48 から入手できます |
@@ -42,18 +42,7 @@ namespace OpenTween | ||
42 | 42 | |
43 | 43 | public ThemeManager Theme { get; set; } |
44 | 44 | |
45 | - public MyCommon.IconSizes IconSize | |
46 | - { | |
47 | - get => this.iconSize; | |
48 | - set | |
49 | - { | |
50 | - if (this.iconSize == value) | |
51 | - return; | |
52 | - | |
53 | - this.iconSize = value; | |
54 | - this.ApplyIconSize(); | |
55 | - } | |
56 | - } | |
45 | + public MyCommon.IconSizes IconSize { get; set; } | |
57 | 46 | |
58 | 47 | private bool Use2ColumnsMode |
59 | 48 | => this.IconSize == MyCommon.IconSizes.Icon48_2; |
@@ -74,7 +63,6 @@ namespace OpenTween | ||
74 | 63 | private readonly TimelineListViewCache listViewCache; |
75 | 64 | private readonly ImageCache iconCache; |
76 | 65 | private readonly ImageList listViewImageList = new(); // ListViewItemの高さ変更用 |
77 | - private MyCommon.IconSizes iconSize; | |
78 | 66 | |
79 | 67 | public TimelineListViewDrawer( |
80 | 68 | DetailsListView listView, |
@@ -108,14 +96,18 @@ namespace OpenTween | ||
108 | 96 | this.listView.DrawSubItem -= this.ListView_DrawSubItem; |
109 | 97 | } |
110 | 98 | |
111 | - private void ApplyIconSize() | |
99 | + public void UpdateItemHeight() | |
112 | 100 | { |
113 | 101 | // ディスプレイの DPI 設定を考慮したサイズを設定する |
114 | 102 | var scaledIconHeight = this.IconSize != MyCommon.IconSizes.IconNone |
115 | 103 | ? this.listView.LogicalToDeviceUnits(this.IconSizeNumeric) |
116 | 104 | : 1; |
117 | 105 | |
118 | - this.listViewImageList.ImageSize = new(1, scaledIconHeight); | |
106 | + // アイコンサイズと発言一覧のフォントサイズのどちらか大きい方を一件分の高さとする | |
107 | + var fontHeight = this.Theme.FontReaded.Height; | |
108 | + var itemHeight = Math.Max(scaledIconHeight, fontHeight); | |
109 | + | |
110 | + this.listViewImageList.ImageSize = new(1, itemHeight); | |
119 | 111 | } |
120 | 112 | |
121 | 113 | private void DrawListViewItemIcon(DrawListViewItemEventArgs e) |
@@ -82,14 +82,14 @@ namespace OpenTween | ||
82 | 82 | this.savedSelectionState = this.SaveListViewSelection(); |
83 | 83 | } |
84 | 84 | |
85 | - public void Restore() | |
85 | + public void Restore(bool forceScroll = false) | |
86 | 86 | { |
87 | - this.RestoreScroll(); | |
87 | + this.RestoreScroll(forceScroll); | |
88 | 88 | this.RestoreSelection(); |
89 | 89 | } |
90 | 90 | |
91 | - public void RestoreScroll() | |
92 | - => this.RestoreListViewScroll(this.savedScrollState); | |
91 | + public void RestoreScroll(bool forceScroll = false) | |
92 | + => this.RestoreListViewScroll(this.savedScrollState, forceScroll); | |
93 | 93 | |
94 | 94 | public void RestoreSelection() |
95 | 95 | => this.RestoreListViewSelection(this.savedSelectionState); |
@@ -102,8 +102,9 @@ namespace OpenTween | ||
102 | 102 | var lockMode = this.GetScrollLockMode(lockScroll); |
103 | 103 | long? topItemStatusId = null; |
104 | 104 | |
105 | - if (lockMode == ScrollLockMode.FixedToItem) | |
105 | + if (lockMode == ScrollLockMode.FixedToItem || lockMode == ScrollLockMode.None) | |
106 | 106 | { |
107 | + // ScrollLockMode.None の場合も forceScroll = true の時に topItemStatusId を使用するため保存する | |
107 | 108 | var topItemIndex = this.listView.TopItem?.Index ?? -1; |
108 | 109 | if (topItemIndex != -1 && topItemIndex < this.tab.AllCount) |
109 | 110 | topItemStatusId = this.tab.GetStatusIdAt(topItemIndex); |
@@ -195,12 +196,16 @@ namespace OpenTween | ||
195 | 196 | /// <summary> |
196 | 197 | /// <see cref="SaveListViewScroll"/> によって保存されたスクロール位置を復元します |
197 | 198 | /// </summary> |
198 | - private void RestoreListViewScroll(ListViewScroll listScroll) | |
199 | + private void RestoreListViewScroll(ListViewScroll listScroll, bool forceScroll) | |
199 | 200 | { |
200 | 201 | if (this.listView.VirtualListSize == 0) |
201 | 202 | return; |
202 | 203 | |
203 | - switch (listScroll.ScrollLockMode) | |
204 | + var scrollLockMode = listScroll.ScrollLockMode; | |
205 | + if (forceScroll && scrollLockMode == ScrollLockMode.None) | |
206 | + scrollLockMode = ScrollLockMode.FixedToItem; | |
207 | + | |
208 | + switch (scrollLockMode) | |
204 | 209 | { |
205 | 210 | case ScrollLockMode.FixedToTop: |
206 | 211 | this.listView.EnsureVisible(0); |
@@ -2783,14 +2783,17 @@ namespace OpenTween | ||
2783 | 2783 | |
2784 | 2784 | this.ListTab.Alignment = newAlignment; |
2785 | 2785 | |
2786 | - currentListViewState.Restore(); | |
2786 | + currentListViewState.Restore(forceScroll: true); | |
2787 | 2787 | } |
2788 | 2788 | |
2789 | 2789 | private void ApplyListViewIconSize(MyCommon.IconSizes iconSz) |
2790 | 2790 | { |
2791 | 2791 | // アイコンサイズの再設定 |
2792 | 2792 | if (this.listDrawer != null) |
2793 | + { | |
2793 | 2794 | this.listDrawer.IconSize = iconSz; |
2795 | + this.listDrawer.UpdateItemHeight(); | |
2796 | + } | |
2794 | 2797 | |
2795 | 2798 | this.listCache?.PurgeCache(); |
2796 | 2799 | } |
@@ -4684,6 +4687,9 @@ namespace OpenTween | ||
4684 | 4687 | .OnlyWhen(() => this.CurrentTab.TabType == MyCommon.TabUsageType.PublicSearch) |
4685 | 4688 | .Do(() => this.CurrentTabPage.Controls["panelSearch"].Controls["comboSearch"].Focus()), |
4686 | 4689 | |
4690 | + ShortcutCommand.Create(Keys.Control | Keys.Shift | Keys.L) | |
4691 | + .Do(() => this.DoQuoteOfficial()), | |
4692 | + | |
4687 | 4693 | ShortcutCommand.Create(Keys.Control | Keys.Shift | Keys.S) |
4688 | 4694 | .Do(() => this.FavoriteChange(favAdd: false)), |
4689 | 4695 |
@@ -7906,7 +7912,7 @@ namespace OpenTween | ||
7906 | 7912 | var listView = this.CurrentListView; |
7907 | 7913 | |
7908 | 7914 | var currentListViewState = this.listViewState[tab.TabName]; |
7909 | - currentListViewState.Restore(); | |
7915 | + currentListViewState.Restore(forceScroll: true); | |
7910 | 7916 | |
7911 | 7917 | if (this.Use2ColumnsMode) |
7912 | 7918 | { |
@@ -7930,12 +7936,12 @@ namespace OpenTween | ||
7930 | 7936 | (this.listCache, var oldCache) = (newCache, this.listCache); |
7931 | 7937 | oldCache?.Dispose(); |
7932 | 7938 | |
7933 | - var newDrawer = new TimelineListViewDrawer(listView, tab, this.listCache, this.iconCache, this.themeManager) | |
7934 | - { | |
7935 | - IconSize = this.settings.Common.IconSize, | |
7936 | - }; | |
7939 | + var newDrawer = new TimelineListViewDrawer(listView, tab, this.listCache, this.iconCache, this.themeManager); | |
7937 | 7940 | (this.listDrawer, var oldDrawer) = (newDrawer, this.listDrawer); |
7938 | 7941 | oldDrawer?.Dispose(); |
7942 | + | |
7943 | + newDrawer.IconSize = this.settings.Common.IconSize; | |
7944 | + newDrawer.UpdateItemHeight(); | |
7939 | 7945 | } |
7940 | 7946 | |
7941 | 7947 | private void ListTab_Selecting(object sender, TabControlCancelEventArgs e) |
@@ -9223,18 +9229,9 @@ namespace OpenTween | ||
9223 | 9229 | } |
9224 | 9230 | else if (Clipboard.ContainsImage()) |
9225 | 9231 | { |
9226 | - // 画像があるので投稿処理を行う | |
9227 | - if (MessageBox.Show(Properties.Resources.PostPictureConfirm3, | |
9228 | - Properties.Resources.PostPictureWarn4, | |
9229 | - MessageBoxButtons.OKCancel, | |
9230 | - MessageBoxIcon.Question, | |
9231 | - MessageBoxDefaultButton.Button2) | |
9232 | - == DialogResult.OK) | |
9233 | - { | |
9234 | - // clipboardから画像を取得 | |
9235 | - using var image = Clipboard.GetImage(); | |
9236 | - this.ImageSelector.BeginSelection(image); | |
9237 | - } | |
9232 | + // clipboardから画像を取得 | |
9233 | + using var image = Clipboard.GetImage(); | |
9234 | + this.ImageSelector.BeginSelection(image); | |
9238 | 9235 | } |
9239 | 9236 | else if (Clipboard.ContainsFileDropList()) |
9240 | 9237 | { |
@@ -1,4 +1,4 @@ | ||
1 | -version: 2.8.0.{build} | |
1 | +version: 3.0.0.{build} | |
2 | 2 | |
3 | 3 | os: Visual Studio 2022 |
4 | 4 |