/// <summary> /// 指定量のズームを行う /// </summary> /// <param name="value"></param> private void zoom(int x, int y) { // 選択ペーンの描画領域の中心をズームのセンターの設定 var _posDown = new ScreenPos { X = _tarPane.GetPaneRect().LT.X + _tarPane.GetPaneRect().Width / 2 - _tarPane.GetPaneRect().LT.X, Y = _tarPane.GetPaneRect().LT.Y + _tarPane.GetPaneRect().Height / 2 - _tarPane.GetPaneRect().LT.Y }; var _scrollDown = (ScreenPos)Pane.Scroll.Clone(); var _zoomDown = (XyBase)Pane.Zoom.Clone(); // 画面の拡大/縮小 XyBase zoomNow; if (_isX && !_isY) { zoomNow = Pane.Zoom + XyBase.FromInt(x, 0); // ズーム値の算出 } else if (!_isX && _isY) { zoomNow = Pane.Zoom + XyBase.FromInt(0, y); // ズーム値の算出 } else { zoomNow = Pane.Zoom + x; // ズーム値の算出 } // ズーム値を規定範囲内に収める if (zoomNow.X > 4000) { zoomNow.X = 4000; } if (zoomNow.Y > 4000) { zoomNow.Y = 4000; } if (zoomNow.X < 5) { zoomNow.X = 5; } if (zoomNow.Y < 5) { zoomNow.Y = 5; } Pane.Zoom = (XyBase)zoomNow.Clone(); // ズーム値の反映 // クリックした位置を基準にしてズームするように画面をスクロールする。 var ZoomRatioX = (double)zoomNow.X / _zoomDown.X; // X方向のズーム率の算出 var ZoomRatioY = (double)zoomNow.Y / _zoomDown.Y; // Y方向のズーム率の算出 var beforeDownPos = _posDown - _scrollDown - _tarPane.GetPaneRect().LT; // var afterDownPos = ScreenPos.FromInt((int)(ZoomRatioX * beforeDownPos.X), (int)(ZoomRatioY * beforeDownPos.Y)); Pane.Scroll = _scrollDown - (afterDownPos - beforeDownPos); Pane.Invalidate(null); }
/// <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(); } }
/// <summary> /// 値を指定してインスタンスを作る /// </summary> /// <param name="v1">値1</param> /// <param name="v2">値2</param> /// <returns>インスタンス</returns> public static new XyBase FromInt(int v1, int v2) { var ret = new XyBase { _v1 = v1, _v2 = v2 }; return(ret); }
private void editText(PartsTextBase parts, IRichPane rp) { _tarParts = parts; _tarPane = rp; var sr = parts.GetScRect(rp); sr.Deflate(XyBase.FromInt(5, 2)); sr -= XyBase.FromInt(2, 0); textBox1 = new TextBox { BackColor = ColorUtil.DeleteAlpha(parts.BackColor) }; if (ColorUtil.IsNearColor(textBox1.BackColor, ColorUtil.DeleteAlpha(parts.FontColor))) { textBox1.ForeColor = ColorUtil.GetNegativeColor(textBox1.BackColor); } else { textBox1.ForeColor = parts.FontColor; } if (parts.Text == Mes.Current["RequestInput.Short"] || parts.Text == Mes.Current["RequestInput"]) { textBox1.Text = ""; } else { textBox1.Text = parts.Text; } textBox1.Multiline = true; // parts.IsMultiLine; textBox1.AcceptsReturn = parts.IsMultiLine; textBox1.ImeMode = parts.ImeMode; textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; textBox1.Location = sr.LT; textBox1.Name = "textBox1"; textBox1.KeyDown += new KeyEventHandler(textBox1_KeyDown); textBox1.Font = parts.LastFont; textBox1.Size = new System.Drawing.Size(sr.Width, sr.Height); textBox1.TabIndex = 1; textBox1.TextAlign = HorizontalAlignment.Left; Pane.Control.Controls.Add(textBox1); textBox1.Focus(); textBox1.Select(0, textBox1.Text.Length); TKeyEnabler.Enable = false; }
/// <summary> /// モーションズームする値を設定する /// </summary> /// <param name="pane"></param> /// <param name="zoom"></param> /// <param name="step"></param> public void SetMotionZoomValue(IRichPane pane, XyBase zoom, int step) { _motionZoom[pane] = new ZoomCommand(zoom, step); }
/// <summary> /// 描画 /// </summary> /// <param name="rp"></param> /// <returns></returns> public override bool Draw(IRichPane rp) { if (Visible) { var sr = rp.GetPaneRect(); sr.LT.X += _margin.LT.X; sr.RB.X -= _margin.RB.X; sr.RB.Y -= _margin.RB.Y; if (Rect.Height < 1) { return(true); } #region 領域の矩形 var lgb = createLogPanelBG(sr); sr.LT.Y = sr.RB.Y - Rect.Height; rp.Graphics.DrawLine(_pRegionShadow, sr.RB.X, sr.LT.Y, sr.RB.X, sr.RB.Y); rp.Graphics.DrawLine(_pRegionShadow, sr.LT.X, sr.RB.Y, sr.RB.X, sr.RB.Y); rp.Graphics.FillRectangle(lgb, sr); lgb.Dispose(); #endregion #region タイトルボーダー Brush _bd = new SolidBrush(Color.FromArgb(64, 0, 0, 0)); var b = 8; var w3 = sr.Width / 4; var pst = new Point[] { new Point(sr.LT.X, sr.LT.Y + b + 16), new Point(sr.LT.X, sr.LT.Y), new Point(sr.RB.X, sr.LT.Y), }; var psb = new Point[] { new Point(sr.RB.X, sr.LT.Y + b), new Point(sr.RB.X - w3, sr.LT.Y + b + 2), new Point(sr.RB.X - w3 * 2, sr.LT.Y + b + 8), new Point(sr.RB.X - w3 * 3, sr.LT.Y + b + 16), new Point(sr.LT.X, sr.LT.Y + b + 16), }; var ps = new Point[pst.Length + psb.Length]; int i; for (i = 0; i < pst.Length; i++) { ps[i] = pst[i]; } for (var j = 0; j < psb.Length; j++) { ps[i++] = psb[j]; } rp.Graphics.FillPolygon(_bd, ps); _bd.Dispose(); // ハイライト using (var p = new Pen(Color.FromArgb(96, 255, 255, 255))) { rp.Graphics.DrawLines(p, pst); } // シャドウ using (var p = new Pen(Color.FromArgb(96, 0, 0, 0))) { rp.Graphics.DrawLines(p, psb); } #endregion // タイトルメッセージ var btr = sr.Clone() as ScreenRect; btr.RB.X = btr.LT.X + 24; btr.RB.Y = btr.LT.Y + 12; btr += XyBase.FromInt(4, 4); var titlestr = Mes.Current["LogGroupPanel", "Title"]; rp.Graphics.DrawString(titlestr, _fontTitle, new SolidBrush(Color.FromArgb(192, 192, 255)), btr.LT.X, btr.LT.Y); btr += XyBase.FromInt((int)rp.Graphics.MeasureString(titlestr, _fontTitle).Width + 8, 0); // 表示レベルボタン _clickArea.Clear(); ScreenPos pos; pos = savePos(LLV.ERR, btr.LT + XyBase.FromInt(0 - (int)(LOG.JumpErr.R / 2), LOG.JumpErr.Y)); rp.Graphics.DrawImage(LOG.ErrSw ? Properties.Resources.lp_Err_on : Properties.Resources.lp_Err_off, pos.X, pos.Y, (float)(LOG.JumpErr.R + Properties.Resources.lp_Err_on.Width), (float)(LOG.JumpErr.R + Properties.Resources.lp_Err_on.Height)); pos = savePos(LLV.WAR, btr.LT + XyBase.FromInt(22 - (int)(LOG.JumpWar.R / 2), LOG.JumpWar.Y)); rp.Graphics.DrawImage(LOG.WarSw ? Properties.Resources.lp_War_on : Properties.Resources.lp_War_off, pos.X, pos.Y, (float)(LOG.JumpWar.R + Properties.Resources.lp_War_on.Width), (float)(LOG.JumpWar.R + Properties.Resources.lp_War_on.Height)); pos = savePos(LLV.INF, btr.LT + XyBase.FromInt(44 - (int)(LOG.JumpInf.R / 2), LOG.JumpInf.Y)); rp.Graphics.DrawImage(LOG.InfSw ? Properties.Resources.lp_Inf_on : Properties.Resources.lp_Inf_off, pos.X, pos.Y, (float)(LOG.JumpInf.R + Properties.Resources.lp_Inf_on.Width), (float)(LOG.JumpInf.R + Properties.Resources.lp_Inf_on.Height)); pos = savePos(LLV.DEV, btr.LT + XyBase.FromInt(66 - (int)(LOG.JumpDev.R / 2), LOG.JumpDev.Y)); rp.Graphics.DrawImage(LOG.DevSw ? Properties.Resources.lp_Dev_on : Properties.Resources.lp_Dev_off, pos.X, pos.Y, (float)(LOG.JumpDev.R + Properties.Resources.lp_Dev_on.Width), (float)(LOG.JumpDev.R + Properties.Resources.lp_Dev_on.Height)); // クローズボタン pos = savePos(0, btr.LT + XyBase.FromInt(100 - (int)(LOG.JumpDev.R / 2), LOG.JumpDev.Y)); rp.Graphics.DrawImage(LOG.DevSw ? Properties.Resources.Cancel : Properties.Resources.Cancel, (float)pos.X, pos.Y, 16, 16); // テキスト表示領域のみ sr.Deflate(2); sr.LT.X += 16; sr.LT.Y += b + 16; // for test rp.Graphics.DrawLine(Pens.White, sr.LT, sr.RB); // メッセージ表示 var ms = rp.Graphics.MeasureString("AX08iIay", _font); float lm = 2; // 行間 var y1 = ms.Height + lm; var dispLineN = (int)(sr.Height / y1); float curN = LOG.GetCurrentCount(); float btY; if (curN < dispLineN) { btY = sr.RB.Y - (int)(dispLineN - curN + 1) * y1; } else { btY = sr.RB.Y - y1; } var lu = LOG.GetCurrentLast(); for (; ;) { if (btY < sr.LT.Y - 2 || lu == null) { break; } var br = _bInf; switch (lu.Value.Level) { case LLV.WAR: br = _bWar; break; case LLV.ERR: br = _bErr; break; case LLV.DEV: br = _bDev; break; case LLV.INF: br = _bInf; break; case LLV.TODO: br = _bTodo; break; } rp.Graphics.DrawString(lu.Value.Mes, _font, br, new PointF(sr.LT.X, btY)); rp.Graphics.DrawLine(_pLine, sr.LT.X, btY + y1 - 3, sr.RB.X, btY + y1 - 3); if (lu.Value.Icon != null) { rp.Graphics.DrawImageUnscaled(lu.Value.Icon, sr.LT.X - 17, (int)(btY - 1)); } btY -= y1; lu = lu.Previous; } } return(true); }
/// <summary> /// ボタンUpイベント /// </summary> /// <param name="e"></param> public virtual void OnMouseUp(MouseState e) { _posDown = null; _zoomDown = null; _scrollDown = null; }
/// <summary> /// マウスMoveイベント /// </summary> /// <param name="e"></param> public virtual void OnMouseMove(MouseState e) { if (_posDown == null || _zoomDown == null || _scrollDown == null || e.Pane == null) { return; } if (e.Attr.Equals(_trigger)) { // 画面の拡大/縮小 ScreenPos movePos = e.Pos - _posDown; // カーソルの移動量の計算 ScreenPos pdBak = (ScreenPos)_posDown.Clone(); if (_isCenterLock) { _posDown.X = e.Pane.GetPaneRect().LT.X + (e.Pane.GetPaneRect().RB.X - e.Pane.GetPaneRect().LT.X) / 2; _posDown.Y = e.Pane.GetPaneRect().LT.Y + (e.Pane.GetPaneRect().RB.Y - e.Pane.GetPaneRect().LT.Y) / 2; } XyBase zoomNow = _zoomDown + movePos * 3; // ズーム値の算出 速度変更(高解像度に伴い) 2016.11.15 Tono 2→3 // ズーム値を規定範囲内に収める if (zoomNow.X > 4000) { zoomNow.X = 4000; } if (zoomNow.Y > 4000) { zoomNow.Y = 4000; } if (zoomNow.X < 5) { zoomNow.X = 5; } if (zoomNow.Y < 5) { zoomNow.Y = 5; } if (_isSameXY) { zoomNow.Y = zoomNow.X; } Pane.Zoom = (XyBase)zoomNow.Clone(); // ズーム値の反映 // クリックした位置を基準にしてズームするように画面をスクロールする。 double ZoomRatioX = (double)zoomNow.X / _zoomDown.X; // X方向のズーム率の算出 double ZoomRatioY = (double)zoomNow.Y / _zoomDown.Y; // Y方向のズーム率の算出 ScreenPos beforeDownPos = _posDown - _scrollDown - e.Pane.GetPaneRect().LT; // ScreenPos afterDownPos = ScreenPos.FromInt((int)(ZoomRatioX * beforeDownPos.X), (int)(ZoomRatioY * beforeDownPos.Y)); if (_noscrollmove.value == false) { Pane.Scroll = _scrollDown - (afterDownPos - beforeDownPos); } else { _noscrollmove.value = false; } Pane.Invalidate(null); _posDown = pdBak; } else { OnMouseUp(e); } }