Пример #1
0
            public override bool Draw(IRichPane rp)
            {
                if (IsMasking)
                {
                    var sr = rp.GetPaneRect();
                    rp.Graphics.DrawString("PAUSE", _font, Brushes.DarkGray, sr.LT.X + 48, sr.RB.Y - 42);
                }
                else
                {
                    // Left side RED curtain
                    var sr  = rp.GetPaneRect();
                    var W   = 240;
                    var rc1 = ScreenRect.FromLTWH(sr.LT.X, sr.LT.Y, W, sr.Height);
                    rp.Graphics.FillRectangle(new LinearGradientBrush(new Point(0, 0), new PointF(W, 0), Color.FromArgb(128, 255, 0, 0), Color.FromArgb(0, 255, 0, 0)), rc1);

                    // Now pointer RED curtain
                    var now = DateTime.Now;
                    now = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second);
                    var rc2 = GetScRect(rp, CodeRect.FromLTRB((int)(now - Hot.FirstSpeech).TotalSeconds, 0, 0, 0));
                    rc2 = ScreenRect.FromLTRB(rc2.LT.X, sr.LT.Y, sr.RB.X, sr.RB.Y);
                    rp.Graphics.FillRectangle(new LinearGradientBrush(new Point(rc2.LT.X, rc2.LT.Y), new PointF(rc2.RB.X, rc2.RB.Y), Color.FromArgb(8, 255, 0, 0), Color.FromArgb(96, 255, 0, 0)), rc2);

                    // REC LABEL
                    if (++_cnt % 2 == 0)
                    {
                        rp.Graphics.DrawString("REC", _font, Brushes.Yellow, sr.LT.X + 48, sr.RB.Y - 42);
                    }
                }
                return(true);
            }
Пример #2
0
 /// <summary>
 /// 追加処理
 /// </summary>
 /// <param name="target"></param>
 /// <param name="value"></param>
 /// <param name="layerLevel"></param>
 private void _addProc(IRichPane target, PartsBase value, int layerLevel)
 {
     try
     {
         if (!_data.TryGetValue(target, out var layers))
         {
             // ペーンを登録
             _data.Add(target, new Layers());    // TONO
             _addProc(target, value, layerLevel);
             return;
         }
         if (!layers.TryGetValue(layerLevel, out var ps))
         {
             // レイヤーを登録
             makeNewLayer(target, layerLevel, layers);
             _addProc(target, value, layerLevel);
             return;
         }
         ps.Add(value);
     }
     catch (System.NullReferenceException)
     {
         _data[target] = new Layers();
         _addProc(target, value, layerLevel);
     }
 }
Пример #3
0
        /// <summary>
        /// 指定座標が描画クリップ内かどうか識別する
        /// </summary>
        /// <param name="rp">ペーン</param>
        /// <returns>true = 調査範囲が描画クリップ内 / false = そうでない</returns>
        public bool isInClip(IRichPane rp)
        {
            var rect = GetScRect(rp, Rect);
            var r    = rect & rp.GetPaneRect();

            return(r != null);
        }
Пример #4
0
 /// <summary>
 /// 初期化コンストラクタ
 /// </summary>
 public PartsCollection(IRichPane pane, ICollection <PartsBase> tars) : base()
 {
     foreach (var pt in tars)
     {
         Add(pane, pt);
     }
 }
Пример #5
0
        /// <summary>
        /// 指定したパーツコレクションから、該当するパーツを検索する
        /// </summary>
        /// <param name="pos"></param>
        /// <param name="pane"></param>
        /// <param name="isSelectableOnly"></param>
        /// <param name="pcol"></param>
        /// <param name="rp">ペーンを返す(イリュージョンプロジェクタのペーンが返るので、paneと異なる場合がある)</param>
        /// <returns></returns>
        private PartsBase getparts(ScreenPos pos, IRichPane pane, bool isSelectableOnly, IList pcol, out IRichPane rp)
        {
            for (var pidx = pcol.Count - 1; pidx >= 0; pidx--)
            {
                var dp = (PartsBase)pcol[pidx];

                if (dp is IPartsVisible)
                {
                    if (((IPartsVisible)dp).Visible == false)
                    {
                        continue;
                    }
                }
                if (isSelectableOnly)
                {
                    if (dp is IPartsSelectable == false)
                    {
                        continue;
                    }
                }
                // プロジェクタを通して、パーツ座標を調査する
                foreach (IRichPane pp in PartsIllusionProjector.GetEnumerator(pane, getProjectors(pane, false), dp))
                {
                    if (dp.IsOn(pos, pp) != PartsBase.PointType.Outside)
                    {
                        rp = pp;
                        return(dp);
                    }
                }
            }
            rp = null;
            return(null);
        }
Пример #6
0
 public override void Add(IRichPane target, PartsBase value, int layerLevel)
 {
     lock (SyncRoot)
     {
         base.Add(target, value, layerLevel);
     }
 }
Пример #7
0
        /// <summary>
        /// 使用するペーンを指定する
        /// 記述例:  Pane=Resource
        /// </summary>
        /// <param name="param"></param>
        public override void ParseParameter(string param)
        {
            base.ParseParameter(param);
            var coms = new List <string>(StrUtil.SplitTrim(param, ";"));

            foreach (var com in coms)
            {
                var ops = new List <string>(StrUtil.SplitTrim(com, "="));
                if (ops.Count == 2)
                {
                    if (ops[0].ToUpper() == "PANE")
                    {
                        _tarPane = Pane.GetPane(ops[1]);
                    }
                    if (ops[0].ToUpper() == "SPEED")
                    {
                        try
                        {
                            _speed = double.Parse(ops[1]);
                            if (_speed == 0.0 || Math.Abs(_speed) > 1000)
                            {
                                throw new Exception();
                            }
                        }
                        catch (Exception e)
                        {
                            Debug.Assert(false, GetType().Name + " : 'Speed' Parameter syntax error\r\nusage : Speed=<value>\r\nvalue> 1.0=Normal speed / 0.5=Half.(max 1000)");
                            throw e.InnerException;
                        }
                    }
                }
            }
        }
Пример #8
0
 /// <summary>
 /// BMPキャッシュ機能を追加したレイヤー描画
 /// </summary>
 /// <param name="pane"></param>
 /// <param name="layerid"></param>
 /// <param name="pts"></param>
 protected override void drawLayer(IRichPane pane, int layerid, IEnumerable <PartsBase> pts)
 {
     if (_enabledLayers.ContainsKey(layerid))
     {
         if (bmps.ContainKeys(pane, layerid) == false)
         {
             var pr = MotherPane.GetPaneRect();
             bmps[pane, layerid] = new Bitmap(pr.Width, pr.Height);
         }
         var bmp = bmps[pane, layerid];
         if (EnableShot == false)
         {
             var rp = RichPaneCustomGraphicsBinder.CreateCopy(MotherPane, Graphics.FromImage(bmp));
             rp.SetParent(MotherPane);
             rp.Graphics.Clear(Color.Transparent);
             base.drawLayer(rp, layerid, pts);
             var sr = pane.GetPaneRect();
             MotherPane.Graphics.DrawImageUnscaledAndClipped(bmp, sr);
             panebak[pane, layerid] = rp;
         }
         else
         {
             var sr    = pane.GetPaneRect();
             var rpbak = panebak[pane, layerid];
             //					pane.Graphics.SetClip(sr);
             sr += ScreenPos.FromInt(pane.Scroll.X - rpbak.Scroll.X, pane.Scroll.Y - rpbak.Scroll.Y);
             MotherPane.Graphics.DrawImageUnscaledAndClipped(bmp, sr);
         }
     }
     else
     {
         base.drawLayer(pane, layerid, pts);
     }
 }
Пример #9
0
 /// <summary>
 /// フィーチャー初期化
 /// </summary>
 public override void OnInitInstance()
 {
     base.OnInitInstance();
     _tarPane = Pane.GetPane("Resource");        // デフォルト。ParseParameterで指定してください
     _bar     = createScrollBarPart();
     Parts.Add(_tarPane, _bar, Const.Layer.StaticLayers.ScrollBarH);
 }
Пример #10
0
        /// <summary>
        /// パラメータを取得する
        /// </summary>
        /// <param name="param"></param>
        public override void ParseParameter(string param)
        {
            base.ParseParameter(param);
            foreach (var c1 in StrUtil.SplitTrim(param, ";"))
            {
                var com = StrUtil.SplitTrim(c1, "=");
                if (com.Length != 2)
                {
                    continue;
                }

                if (com[0].Equals("Pane", StringComparison.CurrentCultureIgnoreCase))
                {
                    _tarPane = Pane.GetPane(com[1]);
                }
                if (com[0].Equals("MarginL", StringComparison.CurrentCultureIgnoreCase))
                {
                    _margin.LT.X = int.Parse(com[1]);
                }
                if (com[0].Equals("MarginT", StringComparison.CurrentCultureIgnoreCase))
                {
                    _margin.LT.Y = int.Parse(com[1]);
                }
                if (com[0].Equals("MarginR", StringComparison.CurrentCultureIgnoreCase))
                {
                    _margin.RB.X = int.Parse(com[1]);
                }
                if (com[0].Equals("MarginB", StringComparison.CurrentCultureIgnoreCase))
                {
                    _margin.RB.Y = int.Parse(com[1]);
                }
            }
        }
Пример #11
0
 /// <summary>
 /// モーションスクロールする位置を設定する
 /// </summary>
 /// <param name="pane">スクロールしたいペーン</param>
 /// <param name="pos">スクロール目的地</param>
 /// <param name="step">モーションステップ数 20位をセットするとちょうど良い</param>
 public void SetMotionScrollPosition(IRichPane pane, ScreenPos pos, int step)
 {
     lock (_motionScroll)
     {
         _motionScroll[pane] = new ScrollCommand(pos, step);
     }
 }
Пример #12
0
            public override bool Draw(IRichPane rp)
            {
#if true
                base.Draw(rp);
                IsLogDrawing = true;
#endif
                return(true);
            }
Пример #13
0
        /// <summary>
        /// パラメータ解析
        /// </summary>
        /// <param name="param"></param>
        public override void ParseParameter(string param)
        {
            base.ParseParameter(param);

            var coms = param.Split(new char[] { ';' });

            foreach (var com in coms)
            {
                var od = com.Split(new char[] { '=' });
                if (od.Length < 2)
                {
                    continue;
                }

                if (od[0].ToLower() == "pane")
                {
                    _filterPane = Pane.GetPane(od[1]);
                }
                if (od[0].ToLower() == "layer")
                {
                    _filterLayer = int.Parse(od[1]);
                }
                if (od[0].ToLower() == "avoid")
                {
                    var ts = od[1].Split(new char[] { ',' });
                    foreach (var tt in ts)
                    {
                        var t = tt.Trim().ToLower();
                        switch (t)
                        {
                        case "top":
                            _isTop = false;
                            break;

                        case "left":
                            _isLeft = false;
                            break;

                        case "right":
                            _isRight = false;
                            break;

                        case "bottom":
                            _isBottom = false;
                            break;

                        case "inside":
                            _isInside = false;
                            break;

                        case "move":
                            _isMove = false;
                            break;
                        }
                    }
                }
            }
        }
Пример #14
0
        /// <summary>
        /// パーツを追加する
        /// </summary>
        /// <param name="target"></param>
        /// <param name="value">追加するパーツ</param>
        /// <param name="layerLevel"></param>
        public override void Add(IRichPane target, PartsBase value, int layerLevel)
        {
            lock (_data)
            {
                base.Add(target, value, layerLevel);    // 必須

                _addProc(target, value, layerLevel);
            }
        }
Пример #15
0
 /// <summary>
 /// ボタンDownイベント
 /// </summary>
 /// <param name="e"></param>
 public virtual void OnMouseDown(MouseState e)
 {
     if (e.Attr.Equals(_trigger))
     {
         _posDown    = (ScreenPos)e.Pos.Clone();
         _paneDown   = Pane;
         _zoomDown   = (XyBase)Pane.Zoom.Clone();
         _scrollDown = (ScreenPos)Pane.Scroll.Clone();
     }
 }
Пример #16
0
        /// <summary>
        /// レイヤーを指定してパーツを取得する
        /// </summary>
        /// <param name="layer">指定レイヤー</param>
        /// <param name="pane">指定ペーン</param>
        /// <returns></returns>
        public virtual IList <PartsBase> GetLayerParts(int layer, IRichPane pane)
        {
            var layers = _data[pane];

            if (layers.TryGetValue(layer, out var ret))
            {
                return(ret);
            }
            return(new List <PartsBase>());
        }
Пример #17
0
 /// <summary>
 /// 指定ペーンのパーツを削除する
 /// </summary>
 public override void Clear(IRichPane targetPane)
 {
     lock (_data)
     {
         if (_data.TryGetValue(targetPane, out var ls))
         {
             ls.Clear();
             targetPane.Invalidate(targetPane.GetPaneRect());    // 削除した様子を再描画
         }
     }
 }
Пример #18
0
        /// <summary>
        /// シリアライズ用に実体としてインスタンスを生成する(_parentの参照もコピーする)
        /// </summary>
        /// <param name="value">元になるIRichPane</param>
        /// <returns>新しいインスタンス</returns>
        public static RichPaneBinder CreateCopyComplete(IRichPane value)
        {
            var ret = new RichPaneBinder
            {
                _parent = value,
                _zoom   = value.Zoom,
                _scroll = value.Scroll,
                _idtext = value.IdText
            };

            return(ret);
        }
Пример #19
0
        /// <summary>
        /// イリュージョンプロジェクタを登録する
        /// </summary>
        /// <param name="original">投影元</param>
        /// <param name="idtext"></param>
        /// <returns></returns>
        public PartsIllusionProjector AddIllusionProjector(IRichPane original, string idtext)
        {
            var ret = new PartsIllusionProjector(original, idtext);

            if (_projectors.TryGetValue(original, out var prs) == false)
            {
                _projectors.Add(original, prs = new Illustios());
            }
            prs.Add(ret);
            _projectorsRevKey.Add(ret.ScreenPane, original);
            return(ret);
        }
Пример #20
0
        /// <summary>
        /// 指定領域から特定位置のパーツを探す
        /// </summary>
        /// <param name="pos">位置</param>
        /// <param name="pane">検索ペーン</param>
        /// <param name="layer">検索レイヤー</param>
        /// <param name="isSelectableOnly">選択可能のみ</param>
        /// <returns>取得できたパーツ / null=なし</returns>
        public override PartsBase GetPartsAt(ScreenPos pos, IRichPane pane, int layer, bool isSelectableOnly)
        {
            PartsBase ret = null;

            if (_data.TryGetValue(pane, out var layers))
            {
                if (layers.TryGetValue(layer, out var pcol))
                {
                    ret = getparts(pos, pane, isSelectableOnly, pcol, out var rp);
                }
            }
            return(ret);
        }
Пример #21
0
        /// <summary>
        /// Graphicsを指定したインスタンスを構築
        /// </summary>
        /// <param name="value"></param>
        /// <param name="g"></param>
        /// <returns></returns>
        public static RichPaneCustomGraphicsBinder CreateCopy(IRichPane value, Graphics g)
        {
            var ret = new RichPaneCustomGraphicsBinder
            {
                _parent   = null,
                _zoom     = value.Zoom,
                _scroll   = value.Scroll,
                _idtext   = value.IdText,
                _graphics = g
            };

            return(ret);
        }
Пример #22
0
        /// <summary>
        /// 描画
        /// </summary>
        /// <param name="rp"></param>
        public override bool Draw(IRichPane rp)
        {
            var pos = GetScRect(rp);        // 位置を取得する

            // InClipをすると右下がりの線しか描画できない為、InClipはやらない
            //if( isInClip(rp, pos) == false )	// 描画不要であれば、なにもしない
            //{
            //	return false;
            //}
            //Mask(rp, eMask.Specification);	// 特定マスクのみで表示
            rp.Graphics.DrawLine(_pen, pos.LT, pos.RB);
            return(true);
        }
Пример #23
0
 /// <summary>
 /// 選択領域の矩形を描画する
 /// </summary>
 /// <param name="rp"></param>
 /// <returns></returns>
 public override bool Draw(IRichPane rp)
 {
     if (_isVisible)
     {
         var spos = GetScRect(rp);
         if (isInClip(rp, spos) == false)    // 描画不要であれば、なにもしない
         {
             return(false);
         }
         rp.Graphics.FillRectangle(_maskBG, spos);
         rp.Graphics.DrawRectangle(_maskPen, spos);
     }
     return(true);
 }
Пример #24
0
 /// <summary>
 /// 領域更新を予約する(プロジェクタをサポートしているので、これを使用してください)
 /// </summary>
 /// <param name="parts">更新するパーツ</param>
 /// <param name="rp">使用するペーン</param>
 public override void Invalidate(PartsBase parts, IRichPane rp)
 {
     try
     {
         foreach (IRichPane pp in PartsIllusionProjector.GetEnumerator(rp, getProjectors(rp, false), parts))
         {
             base.Invalidate(parts, pp);
         }
     }
     catch (Exception e)
     {
         System.Diagnostics.Debug.WriteLine(e.Message);
     }
 }
Пример #25
0
 /// <summary>
 /// Enumeratorを構築する
 /// </summary>
 /// <param name="parent">targetが0件の時に適用されるペーン</param>
 /// <param name="target">dfPartsIllusionProjector型のリスト</param>
 /// <param name="parts">参照中のパーツ</param>
 internal PaneEnumerator(IRichPane parent, IList target, PartsBase parts)
 {
     _parent = parent;
     _dat    = target;
     if (_dat != null)
     {
         if (_dat.Count > 0)
         {
             _parent = ((PartsIllusionProjector)_dat[0]).OriginalPane;
         }
     }
     _parts = parts;
     Reset();
 }
Пример #26
0
 /// <summary>
 /// レイヤーを指定してパーツを取得する
 /// (最初にみつかったペーンのみ)
 /// </summary>
 /// <param name="layer"></param>
 /// <param name="retPane">指定レイヤーが属するペーンが返る</param>
 /// <returns>パーツコレクション</returns>
 public virtual IList <PartsBase> GetLayerParts(int layer, out IRichPane retPane)
 {
     foreach (var de in _data)
     {
         var layers = de.Value;
         if (layers.TryGetValue(layer, out var ret))
         {
             retPane = de.Key;
             return(ret);
         }
     }
     retPane = null;
     return(new List <PartsBase>());
 }
Пример #27
0
        /// <summary>
        /// スクロール変更イベント転送
        /// </summary>
        /// <param name="target"></param>
        public virtual void ScrollChanged(IRichPane target)
        {
            //lock(_children.SyncRoot)	// 途中でAddChildしないので、スレッドセーフ。途中でAddChildしてしまうと下のループでAssertされる
            {
                foreach (var c in _children)
                {
                    if (c is FeatureBase && ((FeatureBase)c).Enabled == false)
                    {
                        continue;
                    }

                    if (c is IScrollListener)
                    {
                        foreach (var t in ((IScrollListener)c).ScrollEventTargets)
                        {
                            if (target == null || t == target)
                            {
#if DEBUG
                                if (c is FeatureBase)
                                {
                                    TimeKeeper.SetStart(TimeKeeper.RecordType.ScrollChanged, ((FeatureBase)c).ID);
                                }
#endif
#if DEBUG == false
                                try
#endif
                                {
                                    ((IScrollListener)c).ScrollChanged(target);
                                }
#if DEBUG == false
                                catch (Exception ex)
                                {
                                    LOG.WriteLineException(ex);
                                }
#endif
#if DEBUG
                                if (c is FeatureBase)
                                {
                                    TimeKeeper.SetEnd(TimeKeeper.RecordType.ScrollChanged, ((FeatureBase)c).ID);
                                }
#endif
                            }
                        }
                    }
                }
            }
            checkAndFireDataChanged();  // パーツ削除イベント
        }
Пример #28
0
        /// <summary>
        /// レイヤーを変更する
        /// </summary>
        /// <param name="pane"></param>
        /// <param name="layer_from"></param>
        /// <param name="parts"></param>
        /// <param name="layer_to"></param>
        public void MovePartsLayer(IRichPane pane, int layer_from, PartsBase parts, int layer_to)
        {
            var ls = _data[pane];

            if (ls.TryGetValue(layer_from, out var listf) == false)
            {
                listf = new List <PartsBase>();
            }
            if (ls.TryGetValue(layer_to, out var listt) == false)
            {
                listt = makeNewLayer(pane, layer_to, ls);
            }
            listf.Remove(parts);
            listt.Remove(parts);
            listt.Add(parts);
        }
Пример #29
0
        /// <summary>
        /// パーツを指定してインスタンスを初期化する
        /// </summary>
        /// <param name="parts"></param>
        /// <param name="pane"></param>
        public void AddParts(PartsBase parts, IRichPane pane, CodePos offset)
        {
            _lastDevelpType = DevelopType.Unknown;

            var p = new Pos3
            {
                OrgPane = RichPaneBinder.CreateCopyComplete(pane),
                NowPane = pane,
                Org     = (CodeRect)parts.Rect.Clone(), // 符号化の座標(符号しない場合、単なるパーツ座標)
                                                        //p.Org = (uCdRect)parts.Rect.Clone() - parts.GetCdPos(pane, _prevShift); // 符号化の座標(符号しない場合、単なるパーツ座標)
                Pre    = (CodeRect)parts.Rect.Clone(),  // 符号化の座標(符号しない場合、単なるパーツ座標)
                Now    = (CodeRect)parts.Rect.Clone(),  // 符号化の座標(符号しない場合、単なるパーツ座標)
                Offset = (CodePos)offset.Clone()
            };

            base[parts] = p;
        }
Пример #30
0
        public override bool Draw(IRichPane rp)
        {
            var sr = GetScRect(rp);

            if (sr.RB.X < 0)
            {
                return(true);
            }

            var srf = new RectangleF(sr.LT.X, sr.LT.Y, sr.Width, sr.Height);
            var tf  = new StringFormat
            {
                Alignment     = StringAlignment.Far,
                LineAlignment = StringAlignment.Center,
                Trimming      = StringTrimming.EllipsisCharacter,
            };
            var brush = new SolidBrush(BarColor);

            if (IsCancelled)
            {
                if (sr.Width > 2)
                {
                    rp.Graphics.FillRectangle(brush, sr);
                    rp.Graphics.DrawString(Text, FontTalk, brush, srf, tf);
                }
            }
            else
            {
                rp.Graphics.FillRectangle(brush, sr);
                rp.Graphics.DrawString(Text, FontTalk, Brushes.White, srf, tf);
                if (IsSelected)
                {
                    foreach (var col in new[] {
                        Color.Yellow,
                        Color.FromArgb(160, Color.LightGreen),
                        Color.FromArgb(120, Color.Blue),
                    })
                    {
                        rp.Graphics.DrawRectangle(new Pen(col), sr);
                        sr.Inflate(1);
                    }
                }
            }
            return(true);
        }