void WpfHexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) { if (Width != wpfHexView.VisualElement.ActualWidth || Height != wpfHexView.VisualElement.ActualHeight) { Width = wpfHexView.VisualElement.ActualWidth; Height = wpfHexView.VisualElement.ActualHeight; if (layerKind == HexLayerKind.Normal) { // Needed when HW acceleration isn't enabled (virtual machine or remote desktop). // https://msdn.microsoft.com/en-us/library/system.windows.media.visual.visualscrollableareaclip(VS.100).aspx // It's ignored if HW acceleration is enabled. // This will reduce the number of bytes sent over the network and should speed up the display // if it's a slow connection. VisualScrollableAreaClip = new Rect(0, 0, Width, Height); } } if (layerKind == HexLayerKind.Normal) { foreach (var layer in adornmentLayers) layer.OnLayoutChanged(e); } }
internal void OnLayoutChanged(HexViewLayoutChangedEventArgs e) { for (int i = adornmentLayerElements.Count - 1; i >= 0; i--) { var elem = adornmentLayerElements[i]; // All adornments that exist in spans that have been removed or in reformatted lines are always removed. if (elem.VisualSpan != null && (!HexView.HexViewLines.IntersectsBufferSpan(elem.VisualSpan.Value) || GetLine(e.NewOrReformattedLines, GetOverlapsWithSpan(elem.VisualSpan.Value)) != null)) { adornmentLayerElements.RemoveAt(i); canvas.Children.RemoveAt(i); elem.RemovedCallback?.Invoke(elem.Tag, elem.Adornment); continue; } switch (elem.Behavior) { case VSTE.AdornmentPositioningBehavior.OwnerControlled: break; case VSTE.AdornmentPositioningBehavior.ViewportRelative: Canvas.SetTop(elem.Adornment, ToDefault(Canvas.GetTop(elem.Adornment), 0) + e.NewViewState.ViewportTop - e.OldViewState.ViewportTop); Canvas.SetLeft(elem.Adornment, ToDefault(Canvas.GetLeft(elem.Adornment), 0) + e.NewViewState.ViewportLeft - e.OldViewState.ViewportLeft); break; case VSTE.AdornmentPositioningBehavior.TextRelative: Debug.Assert(elem.VisualSpan != null); var translatedLine = GetLine(e.TranslatedLines, GetOverlapsWithSpan(elem.VisualSpan.Value)); if (translatedLine != null) { // Only y is updated, x is owner controlled Canvas.SetTop(elem.Adornment, ToDefault(Canvas.GetTop(elem.Adornment), 0) + translatedLine.DeltaY); } break; default: throw new InvalidOperationException(); } } }
void UpdateLineElementPositions(HexViewLayoutChangedEventArgs e) { var d = e.NewViewState.ViewportTop - e.OldViewState.ViewportTop; if (Math.Abs(d) <= 0.001) return; foreach (var lineElement in lineElements) Canvas.SetTop(lineElement, Canvas.GetTop(lineElement) + d); }
void WpfHexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) { bool recreate = false; if (latestBufferLines != wpfHexView.BufferLines) recreate = true; else if (e.OldViewState.ViewportHeight != e.NewViewState.ViewportHeight) recreate = true; if (recreate) RecreateColumnLines(); else UpdateLineElementPositions(e); }
void HexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) => session.Dismiss();
void HexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) { if (e.OldViewState.ViewportHeight != e.NewViewState.ViewportHeight) UpdateCachedState(); }
internal void OnLayoutChanged(HexViewLayoutChangedEventArgs e) => UpdateCaretProperties();
void WpfHexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) { Debug.Assert(IsSearchControlVisible); if (!IsSearchControlVisible) return; if (e.OldViewState.ViewportWidth != e.NewViewState.ViewportWidth) RepositionControl(true); else if (e.OldViewState.ViewportHeight != e.NewViewState.ViewportHeight) RepositionControl(true); if (e.OldVersion != e.NewVersion) CancelIncrementalSearchAndUpdateMarkers(); }
void HexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) { if (e.OldViewState.ViewportTop != e.NewViewState.ViewportTop) Canvas.SetTop(iconCanvas, -wpfHexViewHost.HexView.ViewportTop); OnNewLayout(e.NewOrReformattedLines, e.TranslatedLines); }
void WpfHexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) { if (e.OldViewState.ViewportWidth != e.NewViewState.ViewportWidth) UpdateImagePosition(); else if (e.OldViewState.ViewportHeight != e.NewViewState.ViewportHeight) UpdateImagePosition(); }
void HexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) { theScrollBar.LargeChange = wpfHexViewHost.HexView.ViewportWidth; theScrollBar.ViewportSize = wpfHexViewHost.HexView.ViewportWidth; UpdateMaximum(); theScrollBar.Value = wpfHexViewHost.HexView.ViewportLeft; }
void TextView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) { if (e.NewOrReformattedLines.Count > 0 || e.TranslatedLines.Count > 0 || e.VerticalTranslation) SetNewSelection(); }
void WpfHexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) => PositionLineElement();
void RaiseLayoutChanged(double effectiveViewportWidth, double effectiveViewportHeight, HexViewLine[] newOrReformattedLines, HexViewLine[] translatedLines) { if (IsClosed) return; Debug.Assert(!raisingLayoutChanged); raisingLayoutChanged = true; var newViewState = new HexViewState(this, effectiveViewportWidth, effectiveViewportHeight); var layoutChangedEventArgs = new HexViewLayoutChangedEventArgs(oldViewState, newViewState, newOrReformattedLines, translatedLines); LayoutChanged?.Invoke(this, layoutChangedEventArgs); oldViewState = newViewState; foreach (var p in visiblePhysicalLines) { foreach (var l in p.Lines) { l.SetChange(VSTF.TextViewLineChange.None); l.SetDeltaY(0); } } Debug.Assert(raisingLayoutChanged); raisingLayoutChanged = false; mouseHoverHelper.OnLayoutChanged(); if (ShouldQueueSpaceReservationStackRefresh(layoutChangedEventArgs)) QueueSpaceReservationStackRefresh(); }
void UpdateRectanglesPositions(HexViewLayoutChangedEventArgs e) { var d = e.NewViewState.ViewportTop - e.OldViewState.ViewportTop; if (Math.Abs(d) <= 0.001) return; foreach (var rectElem in rectangleElements) Canvas.SetTop(rectElem, Canvas.GetTop(rectElem) + d); }
bool ShouldQueueSpaceReservationStackRefresh(HexViewLayoutChangedEventArgs e) { // These checks are necessary or the completion listbox will flicker. Try pressing // eg. F followed by backspace quickly and you'll be able to see the code in the // background (because the completion listbox gets hidden and then shown). if (e.OldViewState.ViewportLeft != e.NewViewState.ViewportLeft) return true; if (e.OldViewState.ViewportTop != e.NewViewState.ViewportTop) return true; if (e.OldViewState.ViewportWidth != e.NewViewState.ViewportWidth) return true; if (e.OldViewState.ViewportHeight != e.NewViewState.ViewportHeight) return true; return false; }
void WpfHexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) => UpdateLines(e.NewOrReformattedLines);