OSDN Git Service

描画時にアイコンを取得するのではなく、ListViewItem作成時に取得して、自身に保持するように変更
authoranis774 <anis774@users.sourceforge.jp>
Sat, 11 Sep 2010 16:45:31 +0000 (16:45 +0000)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sat, 18 Feb 2012 14:15:23 +0000 (23:15 +0900)
git-svn-id: http://svn.sourceforge.jp/svnroot/tween/trunk@848 e39ad16e-3079-482e-bb30-4b4d378143b6

Tween/ImageCacheDictionary.vb
Tween/ImageListViewItem.vb [new file with mode: 0644]
Tween/Tween.vb
Tween/Tween.vbproj

index 6d35fc9..7df3b72 100644 (file)
@@ -60,11 +60,13 @@ Public Class ImageCacheDictionary
                 Me.sortedKeyList.Add(key)
                 If Me.sortedKeyList.Count > Me.memoryCacheCount Then
                     Dim imgObj As CachedImage = Me.innerDictionary(Me.sortedKeyList(Me.sortedKeyList.Count - Me.memoryCacheCount - 1))
-                    Me.fileCacheProcList.Enqueue(Sub()
-                                                     If Me.innerDictionary.ContainsValue(imgObj) Then
-                                                         imgObj.Chache()
-                                                     End If
-                                                 End Sub)
+                    If Not imgObj.Cached Then
+                        Me.fileCacheProcList.Enqueue(Sub()
+                                                         If Me.innerDictionary.ContainsValue(imgObj) Then
+                                                             imgObj.Chache()
+                                                         End If
+                                                     End Sub)
+                    End If
                 End If
                 Return Me.innerDictionary(key).Image
             End SyncLock
@@ -255,6 +257,14 @@ Public Class ImageCacheDictionary
             End SyncLock
         End Sub
 
+        Public ReadOnly Property Cached As Boolean
+            Get
+                SyncLock Me
+                    Return Me.tmpFilePath IsNot Nothing
+                End SyncLock
+            End Get
+        End Property
+
         Public Sub Dispose() Implements IDisposable.Dispose
             SyncLock Me
                 If Me.img IsNot Nothing Then
diff --git a/Tween/ImageListViewItem.vb b/Tween/ImageListViewItem.vb
new file mode 100644 (file)
index 0000000..1b8d082
--- /dev/null
@@ -0,0 +1,9 @@
+Public Class ImageListViewItem
+    Inherits ListViewItem
+
+    Public Sub New(ByVal items() As String, ByVal imageKey As String)
+        MyBase.New(items, imageKey)
+    End Sub
+
+    Public Property Image As Image
+End Class
index 73227ab..b2242e6 100644 (file)
@@ -3690,14 +3690,19 @@ Public Class TweenMain
         If Post.IsMark Then mk += "♪"
         If Post.IsProtect Then mk += "Ю"
         If Post.InReplyToId > 0 Then mk += "⇒"
-        Dim itm As ListViewItem
+        Dim itm As ImageListViewItem
         If Post.RetweetedId = 0 Then
             Dim sitem() As String = {"", Post.Nickname, Post.Data, Post.PDate.ToString(SettingDialog.DateTimeFormat), Post.Name, "", mk, Post.Source}
-            itm = New ListViewItem(sitem, Post.ImageUrl)
+            itm = New ImageListViewItem(sitem, Post.ImageUrl)
         Else
             Dim sitem() As String = {"", Post.Nickname, Post.Data, Post.PDate.ToString(SettingDialog.DateTimeFormat), Post.Name + "(RT:" + Post.RetweetedBy + ")", "", mk, Post.Source}
-            itm = New ListViewItem(sitem, Post.ImageUrl)
+            itm = New ImageListViewItem(sitem, Post.ImageUrl)
+        End If
+
+        If tw.DetailIcon.ContainsKey(Post.ImageUrl) Then
+            itm.Image = tw.DetailIcon(Post.ImageUrl)
         End If
+
         Dim read As Boolean = Post.IsRead
         '未読管理していなかったら既読として扱う
         If Not _statuses.Tabs(Tab.Text).UnreadManage OrElse _
@@ -3840,9 +3845,11 @@ Public Class TweenMain
             End If
         Next
 
-        If TIconDic.ContainsKey(e.Item.ImageKey) Then
+        Dim item As ImageListViewItem = DirectCast(e.Item, ImageListViewItem)
+
+        If item.Image IsNot Nothing Then
             e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.High
-            e.Graphics.DrawImage(tw.DetailIcon(e.Item.ImageKey), New Rectangle(x, e.Bounds.Top, Math.Min(_iconSz, e.Item.ListView.Columns(0).Width), _iconSz))
+            e.Graphics.DrawImage(item.Image, New Rectangle(x, e.Bounds.Top, Math.Min(_iconSz, e.Item.ListView.Columns(0).Width), _iconSz))
         End If
     End Sub
 
index 3fa093d..168ac08 100644 (file)
     </Compile>
     <Compile Include="HookGlobalHotkey.vb" />
     <Compile Include="ImageCacheDictionary.vb" />
+    <Compile Include="ImageListViewItem.vb" />
     <Compile Include="InputTabName.Designer.vb">
       <DependentUpon>InputTabName.vb</DependentUpon>
     </Compile>