BrailleIOViewRange getMainScreenCenter2Region(int left, int top, int width, int height) { BrailleIOViewRange center2 = new BrailleIOViewRange(left, top, width, height); center2.SetZoom(-1); center2.SetBorder(0); center2.SetContrastThreshold(STANDARD_CONTRAST_THRESHOLD); center2.SetMargin(7, 0); return(center2); }
// string path = ""; private void showExample() { BrailleIOScreen s = new BrailleIOScreen(); #region Center Region #region screenshot Image bmp = captureScreen(); #endregion BrailleIOViewRange center = new BrailleIOViewRange(0, 7, 120, 46, new bool[120, 40]); //center.Move(1,1); center.SetBitmap(bmp); center.SetZoom(-1); center.SetBorder(0); center.SetContrastThreshold(150); center.ShowScrollbars = true; s.AddViewRange("center", center); #endregion #region Top Reagion BrailleIOViewRange top = new BrailleIOViewRange(0, 0, 120, 7); top.SetBorder(0, 0, 1); top.SetMargin(0, 0, 1); top.SetPadding(0, 0, 1); top.SetText("ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nabcdefghijklmnopqrstuvwxyz\r\n0123456789!\"#$%&<=>?@©®\r\n*+-~:;[],.'^_`(){}/|\\r\nß\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n"); top.SetText("Tactile screen capture"); s.AddViewRange("top", top); #endregion #region Bottom Reagion BrailleIOViewRange bottom = new BrailleIOViewRange(0, 53, 120, 7); bottom.SetBorder(1, 0, 0); bottom.SetMargin(1, 0, 0); bottom.SetPadding(1, 0, 0); bottom.SetText("Detail area: status messages can be shown"); s.AddViewRange("bottom", bottom); #endregion io.AddView(BS_MAIN_NAME, s); io.ShowView(BS_MAIN_NAME); io.RenderDisplay(); }
/// <summary> /// Synchronize the zoom and x/y offset of the given view range with that of the center view range of the visible screen. /// </summary> /// <param name="vr">view range that should be syncronized with visible center</param> private void syncViewRangeWithVisibleCenterViewRange(BrailleIOViewRange vr) { BrailleIOScreen vs = GetVisibleScreen(); if (!vs.Name.Equals(BS_MINIMAP_NAME)) { BrailleIOViewRange visibleCenterVR = vs.GetViewRange(VR_CENTER_NAME); double zoom = visibleCenterVR.GetZoom(); int x = visibleCenterVR.GetXOffset(); int y = visibleCenterVR.GetYOffset(); if (visibleCenterVR.ContentHeight <= vr.ContentBox.Height && visibleCenterVR.ContentWidth <= vr.ContentBox.Width) { vr.SetZoom(-1); // für Anpassung bei kleinster Zoomstufe } else { vr.SetZoom(zoom); } vr.SetXOffset(x); vr.SetYOffset(y); } }
/// <summary> /// Shows the center region in full screen (other regions are set invisible). /// </summary> /// <param name="width">The width.</param> /// <param name="height">The height.</param> /// <returns></returns> BrailleIOScreen buildFullScreen(int width, int height) { BrailleIOScreen fullScreen = new BrailleIOScreen(BS_FULLSCREEN_NAME); BrailleIOViewRange center = new BrailleIOViewRange(0, 0, width, height); center.SetZoom(-1); center.SetBorder(0); center.SetContrastThreshold(STANDARD_CONTRAST_THRESHOLD); center.ShowScrollbars = true; fullScreen.AddViewRange(VR_CENTER_NAME, center); if (io != null) { io.AddView(BS_FULLSCREEN_NAME, fullScreen); } fullScreen.SetVisibility(false); return(fullScreen); }
void zoom(string viewName, string viewRangeName, double factor) { if (IO == null && IO.GetView(viewName) as BrailleIOScreen != null) { return; } // zoom in BrailleIOViewRange vr = ((BrailleIOScreen)IO.GetView(viewName)).GetViewRange(viewRangeName); if (vr != null) { if (vr.GetZoom() > 0) { //TODO: make zoom to center var oldZoom = vr.GetZoom(); var newZoom = oldZoom * factor; var oldvrdin = vr.ViewBox; Point oldcenter = new Point( (int)Math.Round(((double)oldvrdin.Width / 2) + (vr.GetXOffset() * -1)), (int)Math.Round(((double)oldvrdin.Height / 2) + (vr.GetYOffset() * -1)) ); Point newCenter = new Point( (int)Math.Round(oldcenter.X * newZoom / oldZoom), (int)Math.Round(oldcenter.Y * newZoom / oldZoom) ); Point newOffset = new Point( (int)Math.Round((newCenter.X - ((double)oldvrdin.Width / 2)) * -1), (int)Math.Round((newCenter.Y - ((double)oldvrdin.Height / 2)) * -1) ); vr.SetZoom(newZoom); vr.SetXOffset(newOffset.X); vr.SetYOffset(newOffset.Y); } } this. IO.RenderDisplay(); }
// string path = ""; private void showExample() { BrailleIOScreen s = new BrailleIOScreen(); #region Center Region #region screenshot Image bmp = captureScreen(); #endregion BrailleIOViewRange center = new BrailleIOViewRange(0, 0, 120, 60, new bool[120, 40]); center.SetMargin(7, 0, 0); center.Move(1, 1); center.SetBitmap(bmp); center.SetZoom(-1); center.SetBorder(0); center.SetContrastThreshold(150); s.AddViewRange("center", center); #endregion #region Top Region BrailleIOViewRange top = new BrailleIOViewRange(0, 0, 120, 7, new bool[0, 0]); top.SetBorder(0, 0, 1); top.SetMargin(0, 0, 1); top.SetPadding(0, 0, 1); top.SetText("ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nabcdefghijklmnopqrstuvwxyz\r\n0123456789!\"#$%&<=>?@©®\r\n*+-~:;[],.'^_`(){}/|\\r\nß\r\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r\n"); top.SetText("Tactile screen capture"); s.AddViewRange("top", top); #endregion IO.AddView(BS_MAIN_NAME, s); IO.ShowView(BS_MAIN_NAME); IO.RenderDisplay(); }
/// <summary> /// Set the Zooms factor of the view to the given factor. /// </summary> /// <param name="vr">The view to change the zoom factor.</param> /// <param name="factor">The new zoom-factor.</param> /// <param name="render">if set to <c>true</c> a new rendering is forced.</param> /// <returns> /// <c>true</c> if the zoom factor of the view was changed successfully. /// </returns> /// <exception cref="System.ArgumentException">Zoom-factor must be not 0! - factor</exception> /// <remarks> /// Views will change their presentation only after calling <see cref="BrailleIOMediator.Instance.RenderDisplay()" />. /// Call the <c>RenderDisplay()</c> function after you have done all your changes to see the results. /// </remarks> public static bool ZoomTo(BrailleIOViewRange vr, double factor, bool render = false) { if (factor == 0.0) { throw new ArgumentException("Zoom-factor must be not 0!", "factor"); } if (vr != null) { var oldZoom = vr.GetZoom(); var newZoom = factor; var oldvrdin = vr.ViewBox; Point oldcenter = new Point( (int)Math.Round(((double)oldvrdin.Width / 2) + (vr.GetXOffset() * -1)), (int)Math.Round(((double)oldvrdin.Height / 2) + (vr.GetYOffset() * -1)) ); Point newCenter = new Point( (int)Math.Round(oldcenter.X * newZoom / oldZoom), (int)Math.Round(oldcenter.Y * newZoom / oldZoom) ); Point newOffset = new Point( (int)Math.Round((newCenter.X - ((double)oldvrdin.Width / 2)) * -1), (int)Math.Round((newCenter.Y - ((double)oldvrdin.Height / 2)) * -1) ); vr.SetZoom(newZoom); vr.SetXOffset(newOffset.X); vr.SetYOffset(newOffset.Y); if (render && BrailleIOMediator.Instance != null) { BrailleIOMediator.Instance.RenderDisplay(); } return(oldZoom != vr.GetZoom()); } return(false); }
/// <summary> /// Zooms the given view range to the new zoom level and calculates the new offset out of the old center position. /// </summary> /// <param name="vr">view range that should be zoomed</param> /// <param name="oldZoom">old zoom of the view range</param> /// <param name="newZoom">new zoom</param> /// <returns>true, if zoom was successful</returns> private bool zoom(BrailleIOViewRange vr, double oldZoom, double newZoom) { if (vr != null) { Point oldCenter = new Point(); var oldvrdin = vr.ContentBox; bool zoomToShape = false; Point oldOffset = new Point(vr.GetXOffset(), vr.GetYOffset()); // Prüfung auf größte Zoomstufe if (newZoom > vr.MAX_ZOOM_LEVEL) { if (oldZoom == vr.MAX_ZOOM_LEVEL) { return(false); } newZoom = vr.MAX_ZOOM_LEVEL; } // Prüfung auf kleinste Zoomstufe if (vr.ContentBox.Height >= vr.ContentHeight && vr.ContentBox.Width >= vr.ContentWidth) { if (oldZoom >= newZoom) { return(false); } oldCenter = Point.Empty; // central point of focused element as center for zooming if (OoConnector.Instance != null && OoConnector.Instance.Observer != null) { OoShapeObserver shape = OoConnector.Instance.Observer.GetLastSelectedShape(); if (shape != null) { Rectangle shapeBoundingbox = shape.GetRelativeScreenBoundsByDom(); if (shapeBoundingbox != null) { // calculate shape position and size in pins (relative to document boundings on pin device) Point shapePosition = new Point((int)Math.Round(shapeBoundingbox.X * vr.GetZoom()), (int)Math.Round(shapeBoundingbox.Y * vr.GetZoom())); Size shapeSize = new Size((int)Math.Round(shapeBoundingbox.Width * vr.GetZoom()), (int)Math.Round(shapeBoundingbox.Height * vr.GetZoom())); Point shapeCenter = new Point(shapePosition.X + shapeSize.Width / 2, shapePosition.Y + shapeSize.Height / 2); oldCenter = new Point(shapeCenter.X, shapeCenter.Y); } } } if (oldCenter != Point.Empty) { zoomToShape = true; } else { oldCenter = new Point( (int)Math.Round(((double)vr.ContentWidth / 2) + (vr.GetXOffset() * -1)), (int)Math.Round(((double)vr.ContentHeight / 2) + (vr.GetYOffset() * -1)) ); } } else { oldCenter = Point.Empty; // central point of focused element as center for zooming if (OoConnector.Instance != null && OoConnector.Instance.Observer != null) { OoShapeObserver shape = OoConnector.Instance.Observer.GetLastSelectedShape(); if (shape != null) { Rectangle shapeBoundingbox = shape.GetRelativeScreenBoundsByDom(); if (shapeBoundingbox != null) { // calculate shape position and size in pins (relative to document boundings on pin device) Point shapePosition = new Point((int)Math.Round(shapeBoundingbox.X * vr.GetZoom()), (int)Math.Round(shapeBoundingbox.Y * vr.GetZoom())); Size shapeSize = new Size((int)Math.Round(shapeBoundingbox.Width * vr.GetZoom()), (int)Math.Round(shapeBoundingbox.Height * vr.GetZoom())); Point shapeCenter = new Point(shapePosition.X + shapeSize.Width / 2, shapePosition.Y + shapeSize.Height / 2); oldCenter = new Point(shapeCenter.X, shapeCenter.Y); } } } if (oldCenter != Point.Empty) { zoomToShape = true; } else { // central point of center region as center for zooming oldCenter = new Point( (int)Math.Round(((double)oldvrdin.Width / 2) + (vr.GetXOffset() * -1)), (int)Math.Round(((double)oldvrdin.Height / 2) + (vr.GetYOffset() * -1)) ); } } double zoomDivRatio = newZoom / oldZoom; if (newZoom > 0 && (vr.ContentBox.Height <= vr.ContentHeight * zoomDivRatio || vr.ContentBox.Width <= vr.ContentWidth * zoomDivRatio)) { Point newCenter = new Point( (int)Math.Round(oldCenter.X * zoomDivRatio), (int)Math.Round(oldCenter.Y * zoomDivRatio) ); Point newOffset = new Point(); if (zoomToShape) { newOffset = new Point(oldOffset.X + (oldCenter.X - newCenter.X), oldOffset.Y + (oldCenter.Y - newCenter.Y)); } else { newOffset = new Point( (int)Math.Round((newCenter.X - ((double)oldvrdin.Width / 2)) * -1), (int)Math.Round((newCenter.Y - ((double)oldvrdin.Height / 2)) * -1) ); } vr.SetZoom(newZoom); vr.MoveTo(new Point(Math.Min(newOffset.X, 0), Math.Min(newOffset.Y, 0))); } else // set to smallest zoom level { vr.SetZoom(-1); vr.SetXOffset(0); vr.SetYOffset(0); } // check for correct panning if (vr.GetXOffset() > 0) { vr.SetXOffset(0); } if (vr.GetYOffset() > 0) { vr.SetYOffset(0); } if ((vr.ContentWidth + vr.GetXOffset()) < vr.ContentBox.Width) { int maxOffset = Math.Min(0, vr.ContentBox.Width - vr.ContentWidth); vr.SetXOffset(maxOffset); } if ((vr.ContentHeight + vr.GetYOffset()) < vr.ContentBox.Height) { int maxOffset = Math.Min(0, vr.ContentBox.Height - vr.ContentHeight); vr.SetYOffset(maxOffset); } return(true); } return(false); }
/// <summary> /// Synchronize the zoom and x/y offset of the given view range with that of the center view range of the visible screen. /// </summary> /// <param name="vr">view range that should be syncronized with visible center</param> private void syncViewRangeWithVisibleCenterViewRange(BrailleIOViewRange vr) { BrailleIOScreen vs = GetVisibleScreen(); if (!vs.Name.Equals(BS_MINIMAP_NAME)) { BrailleIOViewRange visibleCenterVR = vs.GetViewRange(VR_CENTER_NAME); double zoom = visibleCenterVR.GetZoom(); int x = visibleCenterVR.GetXOffset(); int y = visibleCenterVR.GetYOffset(); if (visibleCenterVR.ContentHeight <= vr.ContentBox.Height && visibleCenterVR.ContentWidth <= vr.ContentBox.Width) { vr.SetZoom(-1); // für Anpassung bei kleinster Zoomstufe } else vr.SetZoom(zoom); vr.SetXOffset(x); vr.SetYOffset(y); } }
BrailleIOViewRange getMainScreenCenter2Region(int left, int top, int width, int height) { BrailleIOViewRange center2 = new BrailleIOViewRange(left, top, width, height); center2.SetZoom(-1); center2.SetBorder(0); center2.SetContrastThreshold(STANDARD_CONTRAST_THRESHOLD); center2.SetMargin(7, 0); return center2; }
/// <summary> /// Shows the center region in full screen (other regions are set invisible). /// </summary> /// <param name="width">The width.</param> /// <param name="height">The height.</param> /// <returns></returns> BrailleIOScreen buildFullScreen(int width, int height) { BrailleIOScreen fullScreen = new BrailleIOScreen(BS_FULLSCREEN_NAME); BrailleIOViewRange center = new BrailleIOViewRange(0, 0, width, height); center.SetZoom(-1); center.SetBorder(0); center.SetContrastThreshold(STANDARD_CONTRAST_THRESHOLD); center.ShowScrollbars = true; fullScreen.AddViewRange(VR_CENTER_NAME, center); if (io != null) io.AddView(BS_FULLSCREEN_NAME, fullScreen); fullScreen.SetVisibility(false); return fullScreen; }
/// <summary> /// Zooms the given view range to the new zoom level and calculates the new offset out of the old center position. /// </summary> /// <param name="vr">view range that should be zoomed</param> /// <param name="oldZoom">old zoom of the view range</param> /// <param name="newZoom">new zoom</param> /// <returns>true, if zoom was successful</returns> private bool zoom(BrailleIOViewRange vr, double oldZoom, double newZoom) { if (vr != null) { Point oldCenter = new Point(); var oldvrdin = vr.ContentBox; bool zoomToShape = false; Point oldOffset = new Point(vr.GetXOffset(), vr.GetYOffset()); // Prüfung auf größte Zoomstufe if (newZoom > vr.MAX_ZOOM_LEVEL) { if (oldZoom == vr.MAX_ZOOM_LEVEL) return false; newZoom = vr.MAX_ZOOM_LEVEL; } // Prüfung auf kleinste Zoomstufe if (vr.ContentBox.Height >= vr.ContentHeight && vr.ContentBox.Width >= vr.ContentWidth) { if (oldZoom >= newZoom) return false; oldCenter = Point.Empty; // central point of focused element as center for zooming if (OoConnector.Instance != null && OoConnector.Instance.Observer != null) { OoShapeObserver shape = OoConnector.Instance.Observer.GetLastSelectedShape(); if (shape != null) { Rectangle shapeBoundingbox = shape.GetRelativeScreenBoundsByDom(); if (shapeBoundingbox != null) { // calculate shape position and size in pins (relative to document boundings on pin device) Point shapePosition = new Point((int)Math.Round(shapeBoundingbox.X * vr.GetZoom()), (int)Math.Round(shapeBoundingbox.Y * vr.GetZoom())); Size shapeSize = new Size((int)Math.Round(shapeBoundingbox.Width * vr.GetZoom()), (int)Math.Round(shapeBoundingbox.Height * vr.GetZoom())); Point shapeCenter = new Point(shapePosition.X + shapeSize.Width / 2, shapePosition.Y + shapeSize.Height / 2); oldCenter = new Point(shapeCenter.X, shapeCenter.Y); } } } if (oldCenter != Point.Empty) zoomToShape = true; else { oldCenter = new Point( (int)Math.Round(((double)vr.ContentWidth / 2) + (vr.GetXOffset() * -1)), (int)Math.Round(((double)vr.ContentHeight / 2) + (vr.GetYOffset() * -1)) ); } } else { oldCenter = Point.Empty; // central point of focused element as center for zooming if (OoConnector.Instance != null && OoConnector.Instance.Observer != null) { OoShapeObserver shape = OoConnector.Instance.Observer.GetLastSelectedShape(); if (shape != null) { Rectangle shapeBoundingbox = shape.GetRelativeScreenBoundsByDom(); if (shapeBoundingbox != null) { // calculate shape position and size in pins (relative to document boundings on pin device) Point shapePosition = new Point((int)Math.Round(shapeBoundingbox.X * vr.GetZoom()), (int)Math.Round(shapeBoundingbox.Y * vr.GetZoom())); Size shapeSize = new Size((int)Math.Round(shapeBoundingbox.Width * vr.GetZoom()), (int)Math.Round(shapeBoundingbox.Height * vr.GetZoom())); Point shapeCenter = new Point(shapePosition.X + shapeSize.Width / 2, shapePosition.Y + shapeSize.Height / 2); oldCenter = new Point(shapeCenter.X, shapeCenter.Y); } } } if (oldCenter != Point.Empty) zoomToShape = true; else { // central point of center region as center for zooming oldCenter = new Point( (int)Math.Round(((double)oldvrdin.Width / 2) + (vr.GetXOffset() * -1)), (int)Math.Round(((double)oldvrdin.Height / 2) + (vr.GetYOffset() * -1)) ); } } if (newZoom > 0) { double zoomRatio = newZoom / oldZoom; Point newCenter = new Point( (int)Math.Round(oldCenter.X * zoomRatio), (int)Math.Round(oldCenter.Y * zoomRatio) ); Point newOffset = new Point(); if (zoomToShape) { newOffset = new Point(oldOffset.X + (oldCenter.X - newCenter.X), oldOffset.Y + (oldCenter.Y - newCenter.Y)); } else { newOffset = new Point( (int)Math.Round((newCenter.X - ((double)oldvrdin.Width / 2)) * -1), (int)Math.Round((newCenter.Y - ((double)oldvrdin.Height / 2)) * -1) ); } vr.SetZoom(newZoom); vr.MoveTo(new Point(Math.Min(newOffset.X, 0), Math.Min(newOffset.Y, 0))); } else // set to smallest zoom level { vr.SetZoom(-1); vr.SetXOffset(0); vr.SetYOffset(0); } // check for correct panning if (vr.GetXOffset() > 0) { vr.SetXOffset(0); } if (vr.GetYOffset() > 0) { vr.SetYOffset(0); } if ((vr.ContentWidth + vr.GetXOffset()) < vr.ContentBox.Width) { int maxOffset = Math.Min(0, vr.ContentBox.Width - vr.ContentWidth); vr.SetXOffset(maxOffset); } if ((vr.ContentHeight + vr.GetYOffset()) < vr.ContentBox.Height) { int maxOffset = Math.Min(0, vr.ContentBox.Height - vr.ContentHeight); vr.SetYOffset(maxOffset); } return true; } return false; }