/// <summary> /// 设置拼图的缩放比例。 /// </summary> /// <param name="scale">缩放比例。</param> /// <param name="point">缩放的中心点,是当前的控件坐标。</param> public void SetJigsawScale(float scale, Point center) { EventHandler <JigsawScaleChangedEventArgs> scaleChanging = this.JigsawScaleChanging; if (scaleChanging != null) { JigsawScaleChangedEventArgs eventArgs = new JigsawScaleChangedEventArgs(scale); scaleChanging(this, eventArgs); scale = eventArgs.Scale; } if (this.jigsawScale == scale) { return; } this.jigsawScale = scale; // 更新尺寸的同时移动滚动条,使缩放的中心点尽可能不变。 float oldWidth = jigsawRegion.Width; Point scroll = new Point(this.HorizontalScroll.Value + center.X, this.VerticalScroll.Value + center.Y); UpdateSize(); // 这里强制重绘一次,防止出现闪烁。 this.Invalidate(); float rate = jigsawRegion.Width / oldWidth; this.AutoScrollPosition = new Point((int)(scroll.X * rate - center.X), (int)(scroll.Y * rate - center.Y)); EventHandler scaleChanged = this.JigsawScaleChanged; if (scaleChanged != null) { scaleChanged(this, null); } }
/// <summary> /// 设置拼图的缩放比例。 /// </summary> /// <param name="scale">缩放比例。</param> /// <param name="point">缩放的中心点,是当前的控件坐标。</param> public void SetJigsawScale(float scale, Point center) { EventHandler<JigsawScaleChangedEventArgs> scaleChanging = this.JigsawScaleChanging; if (scaleChanging != null) { JigsawScaleChangedEventArgs eventArgs = new JigsawScaleChangedEventArgs(scale); scaleChanging(this, eventArgs); scale = eventArgs.Scale; } if (this.jigsawScale == scale) { return; } this.jigsawScale = scale; // 更新尺寸的同时移动滚动条,使缩放的中心点尽可能不变。 float oldWidth = jigsawRegion.Width; Point scroll = new Point(this.HorizontalScroll.Value + center.X, this.VerticalScroll.Value + center.Y); UpdateSize(); // 这里强制重绘一次,防止出现闪烁。 this.Invalidate(); float rate = jigsawRegion.Width / oldWidth; this.AutoScrollPosition = new Point((int)(scroll.X * rate - center.X), (int)(scroll.Y * rate - center.Y)); EventHandler scaleChanged = this.JigsawScaleChanged; if (scaleChanged != null) { scaleChanged(this, null); } }
/// <summary> /// 拼图的缩放比例被改变之前的事件。 /// </summary> private void renderPanel_JigsawScaleChanging(object sender, JigsawScaleChangedEventArgs e) { if (e.Scale < 0.1f) { e.Scale = 0.1f; } else if (e.Scale > 4f) { e.Scale = 4f; } float scale = e.Scale; // 更新旧的鼠标位置。 float rate = scale / pieces.Scale; lastMousePoint = new Vector2(lastMousePoint.X * rate, lastMousePoint.Y * rate); // 更新阴影的偏移。 if (scale <= 1) { JigsawEffectRenderer effectRenderer = this.renderer as JigsawEffectRenderer; if (effectRenderer != null) { effectRenderer.ShadowOffset = new Vector2(5 * scale, 5 * scale); } } // 更新缩放比例。 this.gameInfo.Scale = scale; this.pieces.Scale = scale; }