Hex view layout changed event args
Inheritance: System.EventArgs
		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);
		}
Beispiel #5
0
		void HexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) => session.Dismiss();
Beispiel #6
0
		void HexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) {
			if (e.OldViewState.ViewportHeight != e.NewViewState.ViewportHeight)
				UpdateCachedState();
		}
Beispiel #7
0
		internal void OnLayoutChanged(HexViewLayoutChangedEventArgs e) => UpdateCaretProperties();
Beispiel #8
0
		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();
		}
Beispiel #9
0
		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;
		}
Beispiel #12
0
		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();
Beispiel #14
0
		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);
		}
Beispiel #16
0
		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;
		}
Beispiel #17
0
		void WpfHexView_LayoutChanged(object sender, HexViewLayoutChangedEventArgs e) => UpdateLines(e.NewOrReformattedLines);