@@ -47,6 +47,7 @@ wchar_t m_szTitle[256] = L"WinIMerge";
4747wchar_t m_szWindowClass[256 ] = L" WinIMergeClass" ;
4848IImgMergeWindow *m_pImgMergeWindow = NULL ;
4949IImgToolWindow *m_pImgToolWindow = NULL ;
50+ static const int INTERVALS[] = { 200 , 400 , 600 , 800 , 1000 , 1200 , 1500 , 2000 , 3000 , 4000 };
5051
5152#define IMAGES_FILE_FILTER_WILDCARDS L" *.3fr;*.ari;*.arw;*.avci;*.avcs;*.avif;*.avifs;*.bay;*.bmp;*.cap;*.cr2;*.cr3;*.crw;*.cur;*.dcr;*.dcs;*.dds;*.dib;*.dng;*.drf;*.eip;*.erf;*.exif;*.fff;*.gif;*.heic;*.heics;*.heif;*.heifs;*.hif;*.ico;*.icon;*.iiq;*.jfif;*.jpe;*.jpeg;*.jpg;*.jxl;*.jxr;*.k25;*.kdc;*.mef;*.mos;*.mrw;*.nef;*.nrw;*.orf;*.ori;*.pef;*.png;*.ptx;*.pxn;*.raf;*.raw;*.rle;*.rw2;*.rwl;*.sr2;*.srf;*.srw;*.tif;*.tiff;*.wdp;*.webp;*.x3f;*.tga;*.psd;*.svg;*.emf;*.pdf"
5253static wchar_t const ImagesFileFilter[] = L" Images (" IMAGES_FILE_FILTER_WILDCARDS L" )\0 " IMAGES_FILE_FILTER_WILDCARDS L" \0 " ;
@@ -208,6 +209,7 @@ void UpdateMenuState(HWND hWnd)
208209{
209210 HMENU hMenu = GetMenu (hWnd);
210211 CheckMenuItem (hMenu, ID_VIEW_VIEWDIFFERENCES, m_pImgMergeWindow->GetShowDifferences () ? MF_CHECKED : MF_UNCHECKED);
212+ CheckMenuItem (hMenu, ID_VIEW_BLINKDIFFERENCES, m_pImgMergeWindow->GetBlinkDifferences () ? MF_CHECKED : MF_UNCHECKED);
211213 CheckMenuItem (hMenu, ID_VIEW_SPLITHORIZONTALLY, m_pImgMergeWindow->GetHorizontalSplit () ? MF_CHECKED : MF_UNCHECKED);
212214 CheckMenuRadioItem (hMenu, ID_VIEW_INSERTIONDELETIONDETECTION_NONE, ID_VIEW_INSERTIONDELETIONDETECTION_HORIZONTAL,
213215 m_pImgMergeWindow->GetInsertionDeletionDetectionMode () + ID_VIEW_INSERTIONDELETIONDETECTION_NONE, MF_BYCOMMAND);
@@ -438,6 +440,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
438440 MoveWindow (m_hwndStatusBar, rc.left , rc.bottom , rc.right , rc.bottom + rcStatusBar.bottom , TRUE );
439441 break ;
440442 }
443+ case WM_INITMENUPOPUP:
444+ UpdateMenuState (hWnd);
445+ break ;
441446 case WM_COMMAND:
442447 {
443448 int wmId = LOWORD (wParam);
@@ -557,32 +562,38 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
557562 case ID_VIEW_ZOOM_50:
558563 case ID_VIEW_ZOOM_25:
559564 m_pImgMergeWindow->SetZoom (pow (2.0 , (wmId - ID_VIEW_ZOOM_100)));
565+ m_pImgToolWindow->Sync ();
560566 break ;
561567 case ID_VIEW_ZOOMIN:
562568 m_pImgMergeWindow->SetZoom (m_pImgMergeWindow->GetZoom () + 0.1 );
569+ m_pImgToolWindow->Sync ();
563570 break ;
564571 case ID_VIEW_ZOOMOUT:
565572 m_pImgMergeWindow->SetZoom (m_pImgMergeWindow->GetZoom () - 0.1 );
566573 break ;
567574 case ID_VIEW_OVERLAY_NONE:
568575 m_pImgMergeWindow->SetOverlayMode (IImgMergeWindow::OVERLAY_NONE);
569- UpdateMenuState (hWnd );
576+ m_pImgToolWindow-> Sync ( );
570577 break ;
571578 case ID_VIEW_OVERLAY_ALPHABLEND:
572579 m_pImgMergeWindow->SetOverlayMode (IImgMergeWindow::OVERLAY_ALPHABLEND);
573- UpdateMenuState (hWnd );
580+ m_pImgToolWindow-> Sync ( );
574581 break ;
575582 case ID_VIEW_OVERLAY_ALPHABLEND_ANIM:
576583 m_pImgMergeWindow->SetOverlayMode (IImgMergeWindow::OVERLAY_ALPHABLEND_ANIM);
577- UpdateMenuState (hWnd );
584+ m_pImgToolWindow-> Sync ( );
578585 break ;
579586 case ID_VIEW_OVERLAY_XOR:
580587 m_pImgMergeWindow->SetOverlayMode (IImgMergeWindow::OVERLAY_XOR);
581- UpdateMenuState (hWnd );
588+ m_pImgToolWindow-> Sync ( );
582589 break ;
583590 case ID_VIEW_VIEWDIFFERENCES:
584591 m_pImgMergeWindow->SetShowDifferences (!m_pImgMergeWindow->GetShowDifferences ());
585- UpdateMenuState (hWnd);
592+ m_pImgToolWindow->Sync ();
593+ break ;
594+ case ID_VIEW_BLINKDIFFERENCES:
595+ m_pImgMergeWindow->SetBlinkDifferences (!m_pImgMergeWindow->GetBlinkDifferences ());
596+ m_pImgToolWindow->Sync ();
586597 break ;
587598 case ID_VIEW_DIFFBLOCKSIZE_1:
588599 case ID_VIEW_DIFFBLOCKSIZE_2:
@@ -591,11 +602,11 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
591602 case ID_VIEW_DIFFBLOCKSIZE_16:
592603 case ID_VIEW_DIFFBLOCKSIZE_32:
593604 m_pImgMergeWindow->SetDiffBlockSize (1 << (wmId - ID_VIEW_DIFFBLOCKSIZE_1));
594- UpdateMenuState (hWnd );
605+ m_pImgToolWindow-> Sync ( );
595606 break ;
596607 case ID_VIEW_THRESHOLD_0:
597608 m_pImgMergeWindow->SetColorDistanceThreshold (0 );
598- UpdateMenuState (hWnd );
609+ m_pImgToolWindow-> Sync ( );
599610 break ;
600611 case ID_VIEW_THRESHOLD_2:
601612 case ID_VIEW_THRESHOLD_4:
@@ -604,25 +615,23 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
604615 case ID_VIEW_THRESHOLD_32:
605616 case ID_VIEW_THRESHOLD_64:
606617 m_pImgMergeWindow->SetColorDistanceThreshold ((1 << (wmId - ID_VIEW_THRESHOLD_2)) * 2.0 );
607- UpdateMenuState (hWnd );
618+ m_pImgToolWindow-> Sync ( );
608619 break ;
609620 case ID_VIEW_INSERTIONDELETIONDETECTION_NONE:
610621 case ID_VIEW_INSERTIONDELETIONDETECTION_VERTICAL:
611622 case ID_VIEW_INSERTIONDELETIONDETECTION_HORIZONTAL:
612623 m_pImgMergeWindow->SetInsertionDeletionDetectionMode (static_cast <IImgMergeWindow::INSERTION_DELETION_DETECTION_MODE>(wmId - ID_VIEW_INSERTIONDELETIONDETECTION_NONE));
613- UpdateMenuState (hWnd );
624+ m_pImgToolWindow-> Sync ( );
614625 break ;
615626 case ID_VIEW_DIFF_ALGORITHM_MYERS:
616627 case ID_VIEW_DIFF_ALGORITHM_MINIMAL:
617628 case ID_VIEW_DIFF_ALGORITHM_PATIENCE:
618629 case ID_VIEW_DIFF_ALGORITHM_HISTOGRAM:
619630 case ID_VIEW_DIFF_ALGORITHM_NONE:
620631 m_pImgMergeWindow->SetDiffAlgorithm (static_cast <IImgMergeWindow::DIFF_ALGORITHM>(wmId - ID_VIEW_DIFF_ALGORITHM_MYERS));
621- UpdateMenuState (hWnd);
622632 break ;
623633 case ID_VIEW_SPLITHORIZONTALLY:
624634 m_pImgMergeWindow->SetHorizontalSplit (!m_pImgMergeWindow->GetHorizontalSplit ());
625- UpdateMenuState (hWnd);
626635 break ;
627636 case ID_VIEW_PAGE_NEXTPAGE:
628637 {
@@ -643,7 +652,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
643652 case ID_VIEW_DRAGGINGMODE_HORIZONTAL_WIPE:
644653 case ID_VIEW_DRAGGINGMODE_RECTANGLE_SELECT:
645654 m_pImgMergeWindow->SetDraggingMode (static_cast <IImgMergeWindow::DRAGGING_MODE>(wmId - ID_VIEW_DRAGGINGMODE_NONE));
646- UpdateMenuState (hWnd);
647655 break ;
648656 case ID_VIEW_USEBACKCOLOR:
649657 {
@@ -669,7 +677,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
669677 {
670678 m_pImgMergeWindow->SetUseBackColor (useBackColor);
671679 }
672- UpdateMenuState (hWnd);
673680 break ;
674681 }
675682 case ID_VIEW_VECTORIMAGESCALING_400:
@@ -679,6 +686,36 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
679686 case ID_VIEW_VECTORIMAGESCALING_25:
680687 m_pImgMergeWindow->SetVectorImageZoomRatio (static_cast <float >(pow (2.0 , (wmId - ID_VIEW_VECTORIMAGESCALING_100))));
681688 break ;
689+ case ID_VIEW_BLINKINTERVAL_200:
690+ case ID_VIEW_BLINKINTERVAL_400:
691+ case ID_VIEW_BLINKINTERVAL_600:
692+ case ID_VIEW_BLINKINTERVAL_800:
693+ case ID_VIEW_BLINKINTERVAL_1000:
694+ case ID_VIEW_BLINKINTERVAL_1200:
695+ case ID_VIEW_BLINKINTERVAL_1500:
696+ case ID_VIEW_BLINKINTERVAL_2000:
697+ case ID_VIEW_BLINKINTERVAL_3000:
698+ case ID_VIEW_BLINKINTERVAL_4000:
699+ {
700+ m_pImgMergeWindow->SetBlinkInterval (INTERVALS[wmId - ID_VIEW_BLINKINTERVAL_200]);
701+ m_pImgToolWindow->Sync ();
702+ break ;
703+ }
704+ case ID_VIEW_OVERLAYANIMINTERVAL_200:
705+ case ID_VIEW_OVERLAYANIMINTERVAL_400:
706+ case ID_VIEW_OVERLAYANIMINTERVAL_600:
707+ case ID_VIEW_OVERLAYANIMINTERVAL_800:
708+ case ID_VIEW_OVERLAYANIMINTERVAL_1000:
709+ case ID_VIEW_OVERLAYANIMINTERVAL_1200:
710+ case ID_VIEW_OVERLAYANIMINTERVAL_1500:
711+ case ID_VIEW_OVERLAYANIMINTERVAL_2000:
712+ case ID_VIEW_OVERLAYANIMINTERVAL_3000:
713+ case ID_VIEW_OVERLAYANIMINTERVAL_4000:
714+ {
715+ m_pImgMergeWindow->SetOverlayAnimationInterval (INTERVALS[wmId - ID_VIEW_OVERLAYANIMINTERVAL_200]);
716+ m_pImgToolWindow->Sync ();
717+ break ;
718+ }
682719 case ID_VIEW_EXTRACTTEXT:
683720 {
684721 int pane = m_pImgMergeWindow->GetActivePane ();
0 commit comments