private void RefreshThumbnails() { IntPtr foregroundWindowHandle = WindowManagerNativeMethods.GetForegroundWindow(); Boolean hideAllThumbnails = (this._configuration.HideThumbnailsOnLostFocus && this.IsNonClientWindowActive(foregroundWindowHandle)) || !WindowManagerNativeMethods.DwmIsCompositionEnabled(); this.DisableViewEvents(); // Hide, show, resize and move foreach (KeyValuePair <IntPtr, IThumbnailView> entry in this._thumbnailViews) { IThumbnailView view = entry.Value; if (hideAllThumbnails || !view.IsEnabled) { if (view.IsActive) { view.Hide(); } continue; } if (this._configuration.HideActiveClientThumbnail && (view.Id == this._activeClientHandle)) { if (view.IsActive) { view.Hide(); } continue; } // No need to update Thumbnails while one of them is highlighted if (!this._isHoverEffectActive) { // Do not even move thumbnails with default caption if (view.Title != ThumbnailManager.DefaultClientTitle) { view.ThumbnailLocation = this._configuration.GetThumbnailLocation(view.Title, this._activeClientTitle, view.ThumbnailLocation); } view.SetOpacity(this._configuration.ThumbnailOpacity); view.SetTopMost(this._configuration.ShowThumbnailsAlwaysOnTop); } view.IsOverlayEnabled = this._configuration.ShowThumbnailOverlays; view.SetHighlight(this._configuration.EnableActiveClientHighlight && (view.Id == this._activeClientHandle), this._configuration.ActiveClientHighlightColor, this._configuration.ActiveClientHighlightThickness); if (!view.IsActive) { view.Show(); } else { view.Refresh(false); } } this.EnableViewEvents(); }
private void ThumbnailZoomOut(IThumbnailView view) { this.DisableViewEvents(); view.ZoomOut(); view.Refresh(false); this.EnableViewEvents(); }
private void ThumbnailZoomIn(IThumbnailView view) { this.DisableViewEvents(); view.ZoomIn(ViewZoomAnchorConverter.Convert(this._configuration.ThumbnailZoomAnchor), this._configuration.ThumbnailZoomFactor); view.Refresh(false); this.EnableViewEvents(); }
public IThumbnailView Create(IntPtr id, string title, Size size) { IThumbnailView view = this._controller.Create <IThumbnailView>(); view.Id = id; view.Title = title; view.ThumbnailSize = size; return(view); }
public IThumbnailView Create(IntPtr id, string title, Size size) { IThumbnailView view = this._isCompatibilityModeEnabled ? (IThumbnailView)this._controller.Create <StaticThumbnailView>() : (IThumbnailView)this._controller.Create <LiveThumbnailView>(); view.Id = id; view.Title = title; view.ThumbnailSize = size; return(view); }
public void RefreshThumbnails() { IntPtr foregroundWindowHandle = DwmApiNativeMethods.GetForegroundWindow(); Boolean hideAllThumbnails = (this._configuration.HideThumbnailsOnLostFocus && this.IsNonClientWindowActive(foregroundWindowHandle)) || !DwmApiNativeMethods.DwmIsCompositionEnabled(); this.DisableViewEvents(); // Hide, show, resize and move foreach (KeyValuePair <IntPtr, IThumbnailView> entry in this._thumbnailViews) { IThumbnailView view = entry.Value; if (hideAllThumbnails || !view.IsEnabled) { if (view.IsActive) { view.Hide(); } continue; } if (this._configuration.HideActiveClientThumbnail && (view.Id == this._activeClientHandle)) { if (view.IsActive) { view.Hide(); } continue; } if (!this._isHoverEffectActive) { // No need to move Thumbnails while one of them is highlighted view.ThumbnailLocation = this._configuration.GetThumbnailLocation(view.Title, this._activeClientTitle, view.ThumbnailLocation); view.SetOpacity(this._configuration.ThumbnailsOpacity); view.SetTopMost(this._configuration.ShowThumbnailsAlwaysOnTop); } view.IsOverlayEnabled = this._configuration.ShowThumbnailOverlays; if (!view.IsActive) { view.Show(); } else { view.Refresh(false); } } this.EnableViewEvents(); }
private void ThumbnailViewMoved(IntPtr id) { if (this._ignoreViewEvents) { return; } IThumbnailView view = this._thumbnailViews[id]; this._configuration.SetThumbnailLocation(view.Title, this._activeClientTitle, view.ThumbnailLocation); view.Refresh(false); }
private void ThumbnailViewResized(IntPtr id) { if (this._ignoreViewEvents) { return; } IThumbnailView view = this._thumbnailViews[id]; this.SetThumbnailsSize(view.ThumbnailSize); view.Refresh(false); }
private void ThumbnailViewLostFocus(IntPtr id) { if (!this._isHoverEffectActive) { return; } IThumbnailView view = this._thumbnailViews[id]; if (this._configuration.EnableThumbnailZoom) { this.ThumbnailZoomOut(view); } view.SetOpacity(this._configuration.ThumbnailsOpacity); this._isHoverEffectActive = false; }
private void ThumbnailViewFocused(IntPtr id) { if (this._isHoverEffectActive) { return; } this._isHoverEffectActive = true; IThumbnailView view = this._thumbnailViews[id]; view.SetTopMost(true); view.SetOpacity(1.0); if (this._configuration.EnableThumbnailZoom) { this.ThumbnailZoomIn(view); } }
private bool IsNonClientWindowActive(IntPtr windowHandle) { // We just don't know ATM if (windowHandle == IntPtr.Zero) { return(false); } foreach (KeyValuePair <IntPtr, IThumbnailView> entry in this._thumbnailViews) { IThumbnailView view = entry.Value; if (view.IsKnownHandle(windowHandle)) { return(false); } } return(true); }
private void UpdateThumbnailsList() { Process[] clientProcesses = ThumbnailManager.GetClientProcesses(); List <IntPtr> processHandles = new List <IntPtr>(clientProcesses.Length); IntPtr foregroundWindowHandle = DwmApiNativeMethods.GetForegroundWindow(); List <IThumbnailView> viewsAdded = new List <IThumbnailView>(); List <IThumbnailView> viewsUpdated = new List <IThumbnailView>(); List <IThumbnailView> viewsRemoved = new List <IThumbnailView>(); foreach (Process process in clientProcesses) { IntPtr processHandle = process.MainWindowHandle; string processTitle = process.MainWindowTitle; processHandles.Add(processHandle); IThumbnailView view; this._thumbnailViews.TryGetValue(processHandle, out view); if ((view == null) && (processTitle != "")) { view = this._thumbnailViewFactory.Create(processHandle, processTitle, this._configuration.ThumbnailSize); view.IsEnabled = true; view.IsOverlayEnabled = this._configuration.ShowThumbnailOverlays; view.SetSizeLimitations(this._configuration.ThumbnailMinimumSize, this._configuration.ThumbnailMaximumSize); view.SetTopMost(this._configuration.ShowThumbnailsAlwaysOnTop); view.SetFrames(this._configuration.ShowThumbnailFrames); view.ThumbnailLocation = this._configuration.GetThumbnailLocation(processTitle, this._activeClientTitle, view.ThumbnailLocation); view.ThumbnailResized = this.ThumbnailViewResized; view.ThumbnailMoved = this.ThumbnailViewMoved; view.ThumbnailFocused = this.ThumbnailViewFocused; view.ThumbnailLostFocus = this.ThumbnailViewLostFocus; view.ThumbnailActivated = this.ThumbnailActivated; view.RegisterHotkey(this._configuration.GetClientHotkey(processTitle)); this._thumbnailViews.Add(processHandle, view); this.ApplyClientLayout(processHandle, processTitle); viewsAdded.Add(view); } else if ((view != null) && (processTitle != view.Title)) // update thumbnail title { view.Title = processTitle; view.RegisterHotkey(this._configuration.GetClientHotkey(processTitle)); this.ApplyClientLayout(processHandle, processTitle); viewsUpdated.Add(view); } if (process.MainWindowHandle == foregroundWindowHandle) { this._activeClientHandle = process.MainWindowHandle; this._activeClientTitle = process.MainWindowTitle; } } // Cleanup IList <IntPtr> obsoleteThumbnails = new List <IntPtr>(); foreach (IntPtr processHandle in this._thumbnailViews.Keys) { if (!processHandles.Contains(processHandle)) { obsoleteThumbnails.Add(processHandle); } } foreach (IntPtr processHandle in obsoleteThumbnails) { IThumbnailView view = this._thumbnailViews[processHandle]; this._thumbnailViews.Remove(processHandle); view.UnregisterHotkey(); view.ThumbnailResized = null; view.ThumbnailMoved = null; view.ThumbnailFocused = null; view.ThumbnailLostFocus = null; view.ThumbnailActivated = null; view.Close(); viewsRemoved.Add(view); } this.ThumbnailsAdded?.Invoke(viewsAdded); this.ThumbnailsUpdated?.Invoke(viewsUpdated); this.ThumbnailsRemoved?.Invoke(viewsRemoved); }