From 61f3e184c2d40de4de98c510a7449383d6bed2cc Mon Sep 17 00:00:00 2001 From: Thyphoon Date: Sun, 14 Sep 2025 16:26:07 +0200 Subject: [PATCH] Version 8.2 --- Thumbnails.pb | 47 +++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/Thumbnails.pb b/Thumbnails.pb index 2f1dad1..467000d 100644 --- a/Thumbnails.pb +++ b/Thumbnails.pb @@ -1,7 +1,7 @@ ; ******************************************************************** ; Program: Thumbnails ; Description: add a Thumbnails to select image -; Version: 8.1 +; Version: 8.2 ; Author: Thyphoon ; Date: August, 2021 ; License: Free, unrestricted, credit @@ -356,6 +356,7 @@ Module Thumbs CursorDeltaY.l ThumbsDeltaY.l ZoneClick.l ;1 ScrollBar 2;Thumbs + LastIndexSelected.i ; Last Index Selected ;DPI Aware Value _GadgetWidth.l @@ -495,9 +496,10 @@ Module Thumbs Debug "No Set CallBackLoadFromIndex" EndIf Cache::AutoLoadStart() + Else + Delay(50) EndIf - Delay(5) - ForEver + Until *Gdt\Quit=#True EndProcedure Procedure LimitIndex(GadgetId.i,IndexMax.i=-1) @@ -544,14 +546,14 @@ Module Thumbs DeltaIndex=Int(*Gdt\ThumbsDeltaY/*Gdt\_Size)* *Gdt\NbH *Gdt\Index=*Gdt\Index-DeltaIndex *Gdt\ThumbsDeltaY=*Gdt\ThumbsDeltaY%*Gdt\_Size - CreateThread(@UpdateIndexs(),GadgetId) + UpdateIndexs(GadgetId) EndIf If *Gdt\ThumbsDeltaY<=-*Gdt\_Size DeltaIndex=Abs(Int(*Gdt\ThumbsDeltaY/*Gdt\_Size)* *Gdt\NbH) *Gdt\Index=*Gdt\Index+DeltaIndex *Gdt\ThumbsDeltaY=*Gdt\ThumbsDeltaY%*Gdt\_Size - CreateThread(@UpdateIndexs(),GadgetId) + UpdateIndexs(GadgetId) EndIf ;Limit Scroll @@ -706,20 +708,20 @@ Module Thumbs If *Gdt\Index<*Gdt\IndexMax *Gdt\ThumbsDeltaY=0 *Gdt\Index=*Gdt\Index+*Gdt\NbH - CreateThread(@UpdateIndexs(),*Gdt\GadgetId) + UpdateIndexs(*Gdt\GadgetId) SignalSemaphore(*Gdt\DrawSemaphore) ; Redraw Image EndIf Case #PB_Shortcut_PageUp If *Gdt\Index>0 *Gdt\ThumbsDeltaY=0 *Gdt\Index=*Gdt\Index-*Gdt\NbH - CreateThread(@UpdateIndexs(),*Gdt\GadgetId) + UpdateIndexs(*Gdt\GadgetId) SignalSemaphore(*Gdt\DrawSemaphore) ; Redraw Image EndIf EndSelect Case #PB_EventType_Resize InitGadgetValue(*Gdt\GadgetId) - CreateThread(@UpdateIndexs(),*Gdt\GadgetId) + UpdateIndexs(*Gdt\GadgetId) SignalSemaphore(*Gdt\DrawSemaphore) ; Redraw Image Case #PB_EventType_LostFocus *Gdt\StartScroll=#False @@ -773,15 +775,26 @@ Module Thumbs Protected ny.l=(my-*Gdt\_MarginV-*Gdt\ThumbsDeltaY)/(*Gdt\_Size+*Gdt\_MarginV) Protected index.l=nx+ny**Gdt\NbH index=*Gdt\Index+index + + ;If GetGadgetAttribute(*Gdt\GadgetId,#PB_Canvas_Modifiers)=#PB_Canvas_Shift + + + LockMutex(*Gdt\ThumbPointerlistMutex) - Debug FindMapElement(*Gdt\ThumbPointerList(),Str(index)) - If FindMapElement(*Gdt\ThumbPointerList(),Str(index)) + Protected i.i + Debug "Select "+Str(*Gdt\LastIndexSelected)+" to "+Str(index) + For i=*Gdt\LastIndexSelected To index + Debug FindMapElement(*Gdt\ThumbPointerList(),Str(i)) + If FindMapElement(*Gdt\ThumbPointerList(),Str(i)) *Ptr=*Gdt\ThumbPointerList() If *Ptr>0 *Ptr\Selected=1-*Ptr\Selected - Debug "["+Str(index)+"] Selected="+Str(*Ptr\Selected) + Debug "["+Str(i)+"] Selected="+Str(*Ptr\Selected) EndIf - EndIf + EndIf + Next + ;EndIf + *Gdt\LastIndexSelected=index UnlockMutex(*Gdt\ThumbPointerlistMutex) SignalSemaphore(*Gdt\DrawSemaphore) ; Redraw Image EndIf @@ -822,9 +835,9 @@ Module Thumbs InitGadgetValue(GadgetId) If CallBack SetCallBackLoadFromIndex(GadgetId,CallBack) - CreateThread(@UpdateIndexs(),GadgetId) + UpdateIndexs(GadgetId) EndIf - CreateThread(@UpdateImage2Index(),GadgetId) + *Gdt\CallBackUpdateThread=CreateThread(@UpdateImage2Index(),GadgetId) *Gdt\ThreadDrawCanvasImage=CreateThread(@DrawCanvasImage(),GadgetId) BindGadgetEvent(GadgetId,@ThumbsEvent(),#PB_All) Else @@ -839,6 +852,7 @@ Module Thumbs *Gdt\Quit=#True WaitThread(*Gdt\ThreadDrawCanvasImage) FreeMutex(*Gdt\ThumbPointerListMutex) + WaitThread(*Gdt\CallBackUpdateThread) FreeMutex(*Gdt\CallBackMutex) FreeSemaphore(*Gdt\DrawSemaphore) FreeMap(*Gdt\ThumbPointerList()) @@ -880,7 +894,7 @@ Module Thumbs Next UnlockMutex(*Gdt\ThumbPointerlistMutex) - CreateThread(@UpdateIndexs(),GadgetId) + UpdateIndexs(GadgetId) EndProcedure EndModule @@ -986,7 +1000,8 @@ CompilerIf #PB_Compiler_IsMainFile EndIf CompilerEndIf ; IDE Options = PureBasic 6.21 (Windows - x64) -; CursorPosition = 3 +; CursorPosition = 1000 +; FirstLine = 953 ; Folding = ------ ; EnableXP ; DPIAware \ No newline at end of file