#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

101 lines
2.8 KiB

// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.TextFormatting;
using ICSharpCode.AvalonEdit.Rendering;
namespace EmbeddedImageAddIn
{
/// <summary>
/// VisualLineElement implementation for embedded images.
/// </summary>
public class ImageElement : VisualLineElement
{
readonly string imageFileName;
readonly ImageSource image;
public ImageElement(string imageFileName, ImageSource image, int documentLength) : base(1, documentLength)
{
if (imageFileName == null)
throw new ArgumentNullException("imageFileName");
if (image == null)
throw new ArgumentNullException("image");
this.imageFileName = imageFileName;
this.image = image;
}
public override TextRun CreateTextRun(int startVisualColumn, ITextRunConstructionContext context)
{
return new ImageTextRun(image, this.TextRunProperties);
}
protected override void OnMouseDown(MouseButtonEventArgs e)
{
base.OnMouseDown(e);
if (!e.Handled && e.ClickCount == 2) {
// double click on image: open the image in editor
try {
Process.Start(imageFileName);
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
}
sealed class ImageTextRun : TextEmbeddedObject
{
readonly ImageSource image;
readonly TextRunProperties properties;
public ImageTextRun(ImageSource image, TextRunProperties properties)
{
this.image = image;
this.properties = properties;
}
public override LineBreakCondition BreakBefore {
get { return LineBreakCondition.BreakPossible; }
}
public override LineBreakCondition BreakAfter {
get { return LineBreakCondition.BreakPossible; }
}
public override bool HasFixedSize {
get { return true; }
}
public override CharacterBufferReference CharacterBufferReference {
get { return new CharacterBufferReference(); }
}
public override int Length {
get { return 1; }
}
public override TextRunProperties Properties {
get { return properties; }
}
public override TextEmbeddedObjectMetrics Format(double remainingParagraphWidth)
{
return new TextEmbeddedObjectMetrics(image.Width, image.Height, image.Height);
}
public override Rect ComputeBoundingBox(bool rightToLeft, bool sideways)
{
return new Rect(0, 0, image.Width, image.Height);
}
public override void Draw(DrawingContext drawingContext, Point origin, bool rightToLeft, bool sideways)
{
drawingContext.DrawImage(image, new Rect(origin.X, origin.Y - image.Height, image.Width, image.Height));
}
}
}
}