/// <summary> /// [DONW-2] On Pointer Pressed /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <remarks> /// by Finger / Click /// </remarks> private void OnPointerPressed(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.PointerEventArgs e) { var po = _(e, this, "OnPointerPressed"); FingerCount++; po.FingerCount = FingerCount; Move = po.Clone(); //Debug.WriteLine(___(po)); if (po.DeviceType == PointerState.DeviceTypes.Mouse) { StartPosition = po.Position; po.PositionOrigin = StartPosition; KickPointerEvent("OnPointerPressed", fc => fc.OnPointerPressed(po)); } else { if (IsOnManipulationStarted) { IsWaitingManipulationDelta = true; _2ndFingerLostFollow?.Stop(); _2ndFingerLostFollow = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(100), }; _2ndFingerLostFollow.Tick += _2ndFingerLostFollow_Tick; StateAtPressed = po.Clone(); _2ndFingerLostFollow.Start(); } } IsOnPointerPressed = true; }
private void OnPorling() { if (Enabled) { if (AnchorZoomX != Pane.Zoom.X) { AnchorZoomX = Pane.Zoom.X; AnchorDate = DateTime.Now; PrevScrollX = 0; } var td = DateTime.Now - AnchorDate; var x = Hot.TimelineParts.GetScRect(TarPane, CodeRect.FromLTRB(0, -1, (int)(td.TotalSeconds * 120), -1)).Width / 120; var dx = x - PrevScrollX; PrevScrollX = x; if (dx >= 0) { Pane.Scroll = ScreenPos.FromInt(Pane.Scroll.X - dx, Pane.Scroll.Y); } else { AnchorZoomX = -1; } } Timer.AddTrigger(20, OnPorling); Pane.Invalidate(null); }
float Transform(ScreenPos pos, Size2F parent, Size2 screen, bool vertAxis) { switch (pos.PosType) { case PosType.Relative: return((vertAxis ? parent.Height : parent.Width) * (float)pos.Value * 0.01f); case PosType.RelativeWidth: return(parent.Width * (float)pos.Value * 0.01f); case PosType.RelativeHeight: return(parent.Height * (float)pos.Value * 0.01f); case PosType.Screen: return((vertAxis ? screen.Height : screen.Width) * (float)pos.Value * 0.01f); case PosType.ScreenWidth: return(screen.Width * (float)pos.Value * 0.01f); case PosType.ScreenHeight: return(screen.Height * (float)pos.Value * 0.01f); case PosType.Absolute: default: return((float)pos.Value); } }
void Update() { var s = ScreenPos.FromTransform(transform, Camera.main); Time.timeScale = s.x == 0 ? 1 : Mathf.Lerp(0, 2, s.x * s.x); motion.blurAmount = Mathf.Sqrt(s.y); }
public override void Draw(DrawProperty dp) { if (string.IsNullOrEmpty(Text)) { return; } // Yellow bar var r = dp.PaneRect.Clone(); r.LT = ScreenPos.From(r.L, 0); r.RB = ScreenPos.From(r.R, 2); dp.Graphics.FillRectangle(_(r), BackgroundColor); // Active Template name (Back ground) var tf = new CanvasTextFormat { FontFamily = "Coureir New", FontSize = 11.0f, FontWeight = FontWeights.Normal, WordWrapping = CanvasWordWrapping.NoWrap, }; r.RB = r.LT + GraphicUtil.MeasureString(dp.Canvas, Text, tf) + ScreenSize.From(10, 10); dp.Graphics.FillRectangle(_(r), BackgroundColor); // Active Template name (Text) dp.Graphics.TextAntialiasing = CanvasTextAntialiasing.ClearType; dp.Graphics.DrawText(Text, 4, 2, ColorUtil.GetNegativeColor(BackgroundColor), tf); }
/// <summary> /// Draw 7-seg image /// </summary> /// <param name="dp"></param> /// <param name="format"></param> /// <remarks> /// Format: /// 0-9 ... draw number /// * ... draw Dark 8 /// . ... draw Dot at last position /// , ... draw Dot at last position (dark) /// : ... draw colon /// ; ... draw colon(dark) /// ! ... draw half space /// _ ... draw space /// \b ... back space (1/4) /// </remarks> public void Draw(DrawProperty dp, string format, ScreenPos pos, ScreenY height) { if (LoadStatus != 1) { return; } var x = ScreenX.From(0); var sz0 = ScreenSize.From(Bitmaps['*'].SizeInPixels.Width, Bitmaps['*'].SizeInPixels.Height); var z = height / sz0.Height; var sz = sz0 * z; var sr = ScreenRect.FromLTWH(0, 0, sz.Width, sz.Height); foreach (var c in format) { if (SpaceAdjust.TryGetValue(c, out var adjust)) { x += sz.Width * adjust; } var bmp = Bitmaps.GetValueOrDefault(c, null); if (bmp != null) { dp.Graphics.DrawImage(bmp, _(sr + pos + x)); } x += sz.Width; } }
void OnLocationChosen(object sender, EventArgs e) { // Crosshair is a regular ImageView centered on the MapView, // Translate crosshair's coordinates to a position on the map var parameters = (RelativeLayout.LayoutParams)ContentView.Crosshair.LayoutParameters; var x = parameters.LeftMargin + parameters.Width / 2; var y = parameters.TopMargin + parameters.Height / 2; var screen = new ScreenPos(x, y); ContentView.MapView.ScreenToMap(screen); MapPos position = ContentView.MapView.ScreenToMap(screen); PointClient.AddUserMarker(position); // Center marker on currently visible area (partically hidden by popup) var mapBounds = new MapBounds(position, position); y = ContentView.Popup.VisibleY / 2; screen = new ScreenPos(x, y); var screenBounds = new ScreenBounds(screen, screen); ContentView.MapView.MoveToFitBounds(mapBounds, screenBounds, false, 0.2f); // Translate internal units to lat/lon position = PointClient.Projection.ToLatLong(position.X, position.Y); LocationClient.MarkerLatitude = position.X; LocationClient.MarkerLongitude = position.Y; RunOnUiThread(delegate { ContentView.Popup.Show(); }); }
public void MoveCursor(ScreenPos pos) { MakeDirty(cursor); if (pos.c >= cols) { pos.r++; pos.c = 0; } if (pos.c < 0) { pos.r--; pos.c = cols - 1; } if (pos.r >= rows) { ScrollUp(); pos.r = rows - 1; } if (pos.r < 0) { ScrollDown(); pos.r = 0; } cursor = pos; MakeDirty(cursor); }
public float Transform(ScreenPos pos, bool vertAxis) { switch (pos.PosType) { case PosType.Relative: return((vertAxis ? Bounds.Height : Bounds.Width) * (float)pos.Value * 0.01f); case PosType.RelativeWidth: return(Bounds.Width * (float)pos.Value * 0.01f); case PosType.RelativeHeight: return(Bounds.Height * (float)pos.Value * 0.01f); case PosType.Screen: return((vertAxis ? Screen.Height : Screen.Width) * (float)pos.Value * 0.01f); case PosType.ScreenWidth: return(Screen.Width * (float)pos.Value * 0.01f); case PosType.ScreenHeight: return(Screen.Height * (float)pos.Value * 0.01f); case PosType.Absolute: default: return((float)pos.Value); } }
/// <summary> /// 指定された値にズームする /// </summary> /// <param name="who"></param> public override void Start(NamedId who) { // 選択ペーンの描画領域の中心をズームのセンターの設定 var _posDown = new ScreenPos { X = _tarRps[0].GetPaneRect().LT.X + (_tarRps[0].GetPaneRect().RB.X - _tarRps[0].GetPaneRect().LT.X) / 2, //ペーンのX座標の中心 Y = _tarRps[0].GetPaneRect().LT.Y + (_tarRps[0].GetPaneRect().RB.Y - _tarRps[0].GetPaneRect().LT.Y) / 2 //ペーンのY座標の中心 }; var _scrollDown = (ScreenPos)Pane.Scroll.Clone(); //ズーム前のスクロール値 var _zoomDown = (XyBase)Pane.Zoom.Clone(); //ズーム前のズーム値 // 画面の拡大/縮小 var intZ = (int)(zoom * 100); //ズーム値の取得 Pane.Zoom = XyBase.FromInt(1000, 1000); // ズーム値の初期化 var zoomX = Pane.Zoom.X * intZ / 100; var zoomY = Pane.Zoom.Y * intZ / 100; var zoomNow = XyBase.FromInt(zoomX, zoomY); // ズーム値の算出 Pane.Zoom = zoomNow; // ズーム値の反映 // クリックした位置を基準にしてズームするように画面をスクロールする。 var ZoomRatioX = (double)zoomNow.X / _zoomDown.X; // X方向のズーム率の算出 var ZoomRatioY = (double)zoomNow.Y / _zoomDown.Y; // Y方向のズーム率の算出 var beforeDownPos = _posDown - _scrollDown - _tarRps[0].GetPaneRect().LT; // var afterDownPos = ScreenPos.FromInt((int)(ZoomRatioX * beforeDownPos.X), (int)(ZoomRatioY * beforeDownPos.Y)); Pane.Scroll = _scrollDown - (afterDownPos - beforeDownPos); //スクロール値の反映 Pane.Invalidate(null); }
public void MakeDirty(ScreenPos pos) { int idx = Index(cursor); screen[idx].dirty = true; dirty = true; }
public void Resize(int nrows, int ncols) { dirty = true; var nScreen = new Cell[nrows * ncols]; int roff = nrows - rows; ScreenPos npos = new ScreenPos(); ScreenPos opos = new ScreenPos(); for (npos.r = 0; npos.r < nrows; npos.r++) { //Console.WriteLine($"r={npos.r}"); for (npos.c = 0; npos.c < ncols; npos.c++) { opos.c = npos.c; opos.r = npos.r - roff; Cell cell; if (opos.r >= 0 && opos.r < rows && opos.c < cols) { cell = screen[Index(opos)]; cell.dirty = true; } else { cell = new Cell(' ', ActiveBgColor, ActiveFgColor, true); } nScreen[Index(npos, nrows, ncols)] = cell; } } rows = nrows; cols = ncols; screen = nScreen; }
public void OnMouseMove(MouseState e) { Pane.Scroll = ScreenPos.FromInt(Pane.Scroll.X, 12); Pane.Zoom = new XyBase { X = Pane.Zoom.X, Y = 1000, }; }
/// <summary> /// save pointer state from ManipulationCompletedRoutedEventArgs /// </summary> /// <param name="e"></param> /// <returns></returns> public static PointerState _(Windows.UI.Xaml.Input.ManipulationCompletedRoutedEventArgs e, object sender, string remarks) { var ret = new PointerState { Sender = sender, Remarks = remarks, Position = ScreenPos.From(e.Position.X, e.Position.Y), IsInContact = false, Scale = e.Cumulative.Scale, Rotation = Angle.FromDeg(e.Cumulative.Rotation), Time = DateTime.Now, }; switch (e.PointerDeviceType) { case PointerDeviceType.Pen: ret.DeviceType = PointerState.DeviceTypes.Pen; break; case PointerDeviceType.Touch: ret.DeviceType = PointerState.DeviceTypes.Touch; break; case PointerDeviceType.Mouse: ret.DeviceType = PointerState.DeviceTypes.Mouse; break; } return(ret); }
/// <summary> /// save pointer state from PointerEventArgs /// </summary> /// <param name="e"></param> /// <returns></returns> public static PointerState _(Windows.UI.Core.PointerEventArgs e, object sender, string remarks) { var ret = new PointerState { Sender = sender, Remarks = remarks, Position = ScreenPos.From(e.CurrentPoint.Position.X, e.CurrentPoint.Position.Y), WheelDelta = e.CurrentPoint.Properties.MouseWheelDelta, Time = DateTime.Now, IsInContact = e.CurrentPoint.IsInContact, IsKeyControl = (e.KeyModifiers & Windows.System.VirtualKeyModifiers.Control) != 0, IsKeyMenu = (e.KeyModifiers & Windows.System.VirtualKeyModifiers.Menu) != 0, IsKeyShift = (e.KeyModifiers & Windows.System.VirtualKeyModifiers.Shift) != 0, IsKeyWindows = (e.KeyModifiers & Windows.System.VirtualKeyModifiers.Windows) != 0, }; switch (e.CurrentPoint.PointerDevice.PointerDeviceType) { case PointerDeviceType.Mouse: ret.DeviceType = PointerState.DeviceTypes.Mouse; break; case PointerDeviceType.Pen: ret.DeviceType = PointerState.DeviceTypes.Pen; break; default: ret.DeviceType = PointerState.DeviceTypes.Touch; break; } return(ret); }
public void SetChar(ScreenPos pos, char ch) { int idx = Index(pos); var c = new Cell(ch, activeBgColor, activeFgColor, true); screen[idx] = c; dirty = true; }
void Update() { var s = ScreenPos.FromTransform(transform, Camera.main); effect.SetFloat("_Amount", Mathf.Lerp(0, 10, s.y)); r = (r + (Time.deltaTime * Mathf.Lerp(-1440, 1440, s.x)) + 360) % 360; effect.SetFloat("_RotOffset", r); }
/// <summary> /// Converet from screen to layout coodinate /// </summary> /// <param name="pane">target pane control</param> /// <param name="pos">screen position</param> /// <returns></returns> public static LayoutPos From(IDrawArea pane, ScreenPos pos) { return(new LayoutPos { X = LayoutX.From(pane, pos.X), Y = LayoutY.From(pane, pos.Y), }); }
/// <summary> /// マウスダウンイベント処理 /// </summary> /// <param name="e"></param> public virtual void OnMouseDown(MouseState e) { if (e.Attr.Equals(_trigger)) { _posDown = e.Pos; _scrollDown = Pane.Scroll; } }
/// <summary> /// title bar design /// </summary> /// <param name="dp"></param> /// <param name="sr">log panel drawing area</param> /// <returns></returns> protected virtual ScreenY drawTitleBar(DrawProperty dp, ScreenRect sr) { var _bd = new CanvasSolidColorBrush(dp.Canvas, Color.FromArgb(64, 0, 0, 0)); var titleHeight = 8; var w3 = sr.Width / 4; var pst = new ScreenPos[] { ScreenPos.From(sr.LT.X, sr.LT.Y + titleHeight + 16), ScreenPos.From(sr.LT.X, sr.LT.Y), ScreenPos.From(sr.RB.X, sr.LT.Y), }; var psb = new ScreenPos[] { ScreenPos.From(sr.RB.X, sr.LT.Y + titleHeight), ScreenPos.From(sr.RB.X - w3, sr.LT.Y + titleHeight + 2), ScreenPos.From(sr.RB.X - w3 * 2, sr.LT.Y + titleHeight + 8), ScreenPos.From(sr.RB.X - w3 * 3, sr.LT.Y + titleHeight + 16), ScreenPos.From(sr.LT.X, sr.LT.Y + titleHeight + 16), }; var ps = pst.Union(psb).ToList(); var path = new CanvasPathBuilder(dp.Canvas); path.BeginFigure(ps[0]); for (var i = 1; i < ps.Count; i++) { path.AddLine(ps[i]); } path.EndFigure(CanvasFigureLoop.Closed); var geo = CanvasGeometry.CreatePath(path); dp.Graphics.FillGeometry(geo, _bd); // edge highlight for (var i = 1; i < pst.Length; i++) { dp.Graphics.DrawLine(pst[i - 1], pst[i], Color.FromArgb(96, 255, 255, 255)); } // edge shadow for (var i = 1; i < psb.Length; i++) { dp.Graphics.DrawLine(psb[i - 1], psb[i], Color.FromArgb(96, 0, 0, 0)); } // title bar design var btr = sr.Clone(); btr.RB = ScreenPos.From(btr.LT.X + ScreenX.From(24), btr.LT.Y + ScreenY.From(12)); btr = btr + ScreenPos.From(4, 4); var imgttl = Assets.Image("LogPanelTitileDesign"); if (imgttl != null) { dp.Graphics.DrawImage(imgttl, btr.LT + ScreenSize.From(-3, -14)); } btr = btr + ScreenX.From(50); // title filter buttons var btn1 = Assets.Image("btnLogPanel"); var btn0 = Assets.Image("btnLogPanelOff"); if (btn1 != null && btn0 != null) { var ctfb = new CanvasTextFormat { FontFamily = "Arial", FontSize = 10.0f, FontWeight = FontWeights.Normal, FontStyle = FontStyle.Italic, }; foreach ((var lv, var caption) in new (LLV, string)[] { (LLV.ERR, "e"), (LLV.WAR, "w"), (LLV.INF, "i"), (LLV.DEV, "d") })
void Update() { var s = ScreenPos.FromTransform(transform, Camera.main); particles.startSize = Mathf.Lerp(0, 2.5f, s.x); var e = particles.emission; e.rate = Mathf.Lerp(0, 1200, s.y); }
public void ClearRow(int row) { var pos = new ScreenPos(row, 0); for (pos.c = 0; pos.c < cols; pos.c++) { SetChar(pos, ' '); } }
public override void Start(NamedId who) { var td = DateTime.Now - Hot.FirstSpeech; var x = Hot.TimelineParts.GetScRect(TarPane, CodeRect.FromLTRB(0, -1, (int)(td.TotalSeconds * 12), -1)).Width / 12; var p = FeatureLogPanelCustom.IsLogDrawing ? 70 : 90; Pane.Scroll = ScreenPos.FromInt(-x + Pane.GetPaneRect().Width *p / 100, Pane.Scroll.Y); Pane.Invalidate(null); }
/// <summary> /// background design /// </summary> /// <param name="dp"></param> /// <param name="sr"></param> protected virtual void drawBackground(DrawProperty dp, ScreenRect sr) { var bg = new CanvasLinearGradientBrush(dp.Canvas, Parent.BackgroundColor1, Parent.BackgroundColor2) { StartPoint = _(ScreenPos.From(sr.LT.X, sr.LT.Y)), EndPoint = _(ScreenPos.From(sr.RB.X, sr.RB.Y)), }; dp.Graphics.FillRectangle(_(dp.PaneRect), bg); }
/// <summary> /// get screen position /// </summary> /// <param name="pane"></param> /// <returns></returns> public virtual ScreenPos GetScreenPos(IDrawArea pane, CodePos <TCX, TCY> codepos) { var lpos = new LayoutPos { X = PositionerX(codepos.X, codepos.Y), Y = PositionerY(codepos.X, codepos.Y), }; return(ScreenPos.From(pane, lpos)); }
void Update() { var s = ScreenPos.FromTransform(transform, Camera.main); PhaseMult = Mathf.Lerp(-10, 10, s.x); Amplitude = Mathf.Lerp(0, 15, s.y); childRenderer.material.SetFloat("_Amplitude", Amplitude); t += Time.deltaTime * PhaseMult; childRenderer.material.SetFloat("_Phase", Mathf.Abs(Mathf.Sin(t))); }
private void Jump(int offsetSx = 0) { Box.BackColor = BgColor; var line = Box.Text; try { var cpos = Hot.TimelineParts.GetCdPos(TarPane, TarPane.GetPaneRect().LT); var tartime = Hot.FirstSpeech + TimeSpan.FromSeconds(cpos.X); var tardate = new DateTime(tartime.Year, tartime.Month, tartime.Day); var cs = line.Split(':').Select(a => a.Trim()).Where(a => !string.IsNullOrEmpty(a)).ToArray(); // Set new time text DateTime settime; switch (cs.Length) { case 1: settime = GetTime(cs[0], tartime); break; case 2: settime = GetTime(cs[0], cs[1], tartime); break; case 3: settime = GetTime(cs[0], cs[1], cs[2], tartime); break; default: settime = default; break; } // Scroll if (settime != default) { Box.Text = lastTimeText = settime.ToString(TimeUtil.FormatHMS); Box.SelectAll(); var spos = Hot.TimelineParts.GetScRect(TarPane, CodeRect.FromLTWH((int)(settime - Hot.FirstSpeech).TotalSeconds, 0, 0, 0)); Pane.Scroll = ScreenPos.FromInt(Pane.Scroll.X - spos.LT.X + offsetSx, Pane.Scroll.Y); Token.Add(FeatureAutoScroll.TokenAutoScrollOFF, this); Pane.Invalidate(null); GetRoot().FlushFeatureTriggers(); } } catch { Box.BackColor = Color.DarkRed; } }
public void OnPointerPressed(PointerState po) { //Debug.WriteLine($"{po.Time.ToString(TimeUtil.FormatYMDHMSms)} {po.DeviceType} PRESSED Pos={po.Position} Finger={po.FingerCount} Contact={po.IsInContact}, Key='{(po.IsKeyControl ? "C" : "")}{(po.IsKeyControl ? "S" : "")}{(po.IsKeyShift ? "S" : "")}{(po.IsKeyWindows ? "W" : "")}{(po.IsKeyMenu ? "M" : "")}' Scale={po.Scale} Wheel={po.WheelDelta} -------------------------------------"); if (isTrigger(po)) { if (po.Position.Y < Pane.Target.Rect.RB.Y - MarginBottom) { _sPosDown = po.Position; _lScrollDown = ScreenPos.From(Pane.Target.ScrollX, Pane.Target.ScrollY); _sZoomDown = ScreenPos.From(Pane.Target.ZoomX, Pane.Target.ZoomY); isScrolling = true; } } }
public override void Draw(DrawProperty dp) { if (string.IsNullOrEmpty(Text) || string.IsNullOrWhiteSpace(Text)) { return; } var tf = new CanvasTextFormat { FontFamily = "Segoe UI", FontSize = 11.0f, FontStyle = FontStyle.Normal, FontStretch = FontStretch.Normal, FontWeight = FontWeights.Normal, WordWrapping = CanvasWordWrapping.NoWrap, Direction = CanvasTextDirection.LeftToRightThenTopToBottom, HorizontalAlignment = CanvasHorizontalAlignment.Left, LineSpacing = 2.0f, OpticalAlignment = CanvasOpticalAlignment.Default, Options = CanvasDrawTextOptions.Default, VerticalAlignment = CanvasVerticalAlignment.Top, VerticalGlyphOrientation = CanvasVerticalGlyphOrientation.Default, }; var ssz0 = GraphicUtil.MeasureString(dp.Canvas, Text, tf); var ssz = ssz0.Clone(); var sp = ScreenPos.From(Location.X.Cx, Location.Y.Cy); if (IsUpperPositionDefault) { sp += ScreenX.From(8); sp -= ScreenY.From(32); } else { sp -= ssz.Width; // adjust tooltip position sp += ScreenY.From(24); } if (sp.X < 0) { sp.X = ScreenX.From(0); } var sr = ScreenRect.From(sp, ssz + ScreenSize.From(12, 12)); sp += ScreenPos.From(6, 4); // padding dp.Graphics.FillRectangle(_(sr), Color.FromArgb(0xee, 0xdd, 0xdd, 0xdd)); dp.Graphics.DrawRectangle(_(sr), Color.FromArgb(0xff, 0x88, 0x88, 0x88)); dp.Graphics.DrawText(Text, sp + ssz0.Height, Color.FromArgb(0xff, 0x00, 0x00, 0x00), tf); }
public void OnPointerPressed(PointerState po) { //Debug.WriteLine($"★OnPointerPressed {po.Position} finger={po.FingerCount} Scale={po.Scale}"); if (getTrigger(po) == PointerState.DeviceTypes.Mouse) { if (isZooming == false) { _sPosDown = po.Position; _lPosDown = LayoutPos.From(Pane.Target, po.Position); _sZoomDown = ScreenPos.From(Pane.Target.ZoomX, Pane.Target.ZoomY); _lScrollDown = LayoutPos.From(Pane.Target.ScrollX, Pane.Target.ScrollY); isZooming = true; } } }