/* * Copyright (C) 2013 FooProject * * This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System; using System.Collections.Generic; using Windows.Graphics.Display; using Windows.UI.Text; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Media.Imaging; using SharpDX; using DXGI = SharpDX.DXGI; using D2D = SharpDX.Direct2D1; using DW = SharpDX.DirectWrite; using D3D = SharpDX.Direct3D; using D3D11 = SharpDX.Direct3D11; using FooEditEngine.Metro; namespace FooEditEngine { class D2DRenderBase: D2DRenderCommon,IDisposable { public const int MiniumeWidth = 40; //これ以上ないと誤操作が起こる protected DXGI.Device DXGIDevice; protected D3D11.Device1 D3DDevice; Windows.UI.Color ForegroundColor, BackgroundColor, HilightColor, Keyword1Color, Keyword2Color, LiteralColor, UrlColor, ControlCharColor, CommentColor, InsertCaretColor, OverwriteCaretColor, LineMarkerColor,UpdateAreaColor; FontFamily fontFamily; FontStyle fontStyle = FontStyle.Normal; FontWeight fontWeigth; double fontSize; public D2DRenderBase() { var creationFlags = SharpDX.Direct3D11.DeviceCreationFlags.VideoSupport | SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport; D3D.FeatureLevel[] featureLevels ={D3D.FeatureLevel.Level_11_1, D3D.FeatureLevel.Level_11_0, D3D.FeatureLevel.Level_10_1, D3D.FeatureLevel.Level_10_0, D3D.FeatureLevel.Level_9_3, D3D.FeatureLevel.Level_9_2, D3D.FeatureLevel.Level_9_1}; using (var device = new D3D11.Device(D3D.DriverType.Hardware, creationFlags, featureLevels)) { this.D3DDevice = device.QueryInterface(); } this.DXGIDevice = this.D3DDevice.QueryInterface(); } public void InitTextFormat(string fontName, double size) { base.InitTextFormat(fontName, (float)size); this.fontSize = size; } public void InitTextFormat(FontFamily font, double size) { base.InitTextFormat(font.Source, (float)size); this.fontFamily = font; this.fontSize = size; } public override void Dispose() { if (this.DXGIDevice != null) this.DXGIDevice.Dispose(); if (this.D3DDevice != null) this.D3DDevice.Dispose(); base.Dispose(); } public FontFamily FontFamily { get { return this.fontFamily; } set { this.fontFamily = value; this.InitTextFormat(this.fontFamily.Source, (float)this.fontSize, this.GetDWFontWeigth(this.fontWeigth), this.GetDWFontStyle(this.fontStyle)); this.TabWidthChar = this.TabWidthChar; } } public double FontSize { get { return this.fontSize; } set { this.fontSize = value; this.InitTextFormat(this.fontFamily.Source, (float)this.fontSize, this.GetDWFontWeigth(this.fontWeigth), this.GetDWFontStyle(this.fontStyle)); this.TabWidthChar = this.TabWidthChar; } } public FontWeight FontWeigth { get { return this.fontWeigth; } set { this.fontWeigth = value; this.InitTextFormat(this.fontFamily.Source, (float)this.fontSize, this.GetDWFontWeigth(value), this.GetDWFontStyle(this.fontStyle)); } } public FontStyle FontStyle { get { return this.fontStyle; } set { this.fontStyle = value; this.InitTextFormat(this.fontFamily.Source, (float)this.fontSize, this.GetDWFontWeigth(this.fontWeigth), this.GetDWFontStyle(this.fontStyle)); } } DW.FontStyle GetDWFontStyle(FontStyle style) { return (DW.FontStyle)Enum.Parse(typeof(DW.FontStyle), style.ToString()); } DW.FontWeight GetDWFontWeigth(FontWeight weigth) { if (weigth.Weight == 0) return (DW.FontWeight)400; else return (DW.FontWeight)weigth.Weight; } public static Color4 ToColor4(Windows.UI.Color color) { return new Color4(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f, color.A / 255.0f); } protected PreDrawOneLineHandler PreDrawOneLine; public override void CacheContent() { } public override void DrawCachedBitmap(Rectangle rect) { } public override bool IsVaildCache() { return false; } public void DrawOneLine(Document doc,LineToIndexTable lti, int row, double x, double y) { this.DrawOneLine(doc, lti, row, x, y, this.PreDrawOneLine); } } }