Пример #1
0
        /// <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;
        }
Пример #2
0
 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);
 }
Пример #3
0
        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);
            }
        }
Пример #4
0
    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);
    }
Пример #5
0
        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);
        }
Пример #6
0
        /// <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();
            });
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
            }
        }
Пример #10
0
        /// <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);
        }
Пример #11
0
        public void MakeDirty(ScreenPos pos)
        {
            int idx = Index(cursor);

            screen[idx].dirty = true;
            dirty             = true;
        }
Пример #12
0
        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;
        }
Пример #13
0
 public void OnMouseMove(MouseState e)
 {
     Pane.Scroll = ScreenPos.FromInt(Pane.Scroll.X, 12);
     Pane.Zoom   = new XyBase {
         X = Pane.Zoom.X, Y = 1000,
     };
 }
Пример #14
0
        /// <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);
        }
Пример #15
0
        /// <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);
        }
Пример #16
0
        public void SetChar(ScreenPos pos, char ch)
        {
            int idx = Index(pos);
            var c   = new Cell(ch, activeBgColor, activeFgColor, true);

            screen[idx] = c;
            dirty       = true;
        }
Пример #17
0
    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);
    }
Пример #18
0
 /// <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),
     });
 }
Пример #19
0
 /// <summary>
 /// マウスダウンイベント処理
 /// </summary>
 /// <param name="e"></param>
 public virtual void OnMouseDown(MouseState e)
 {
     if (e.Attr.Equals(_trigger))
     {
         _posDown    = e.Pos;
         _scrollDown = Pane.Scroll;
     }
 }
Пример #20
0
        /// <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") })
Пример #21
0
    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);
    }
Пример #22
0
        public void ClearRow(int row)
        {
            var pos = new ScreenPos(row, 0);

            for (pos.c = 0; pos.c < cols; pos.c++)
            {
                SetChar(pos, ' ');
            }
        }
Пример #23
0
        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);
        }
Пример #24
0
        /// <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);
        }
Пример #25
0
        /// <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));
        }
Пример #26
0
    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)));
    }
Пример #27
0
        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;
            }
        }
Пример #28
0
 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;
         }
     }
 }
Пример #29
0
        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);
        }
Пример #30
0
 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;
         }
     }
 }