protected void Render(Image image, bool useMarker, int markerLoc = -1) { image.Fill(BackColor.Value); string text = Text.Value; if(text == null) text = "null"; int length = text.Length; if(length == 0) { return; } if(!LockFont) { Point2D idealSize = new Point2D(image.Width / (Math.Max(length, lengthOverride) - Margin.Value.X * 2), image.Height - Margin.Value.Y * 2); if(CurrentFont == null || CurrentFont.Size != idealSize) { CurrentFont = Font.GetFont(idealSize, Style); } } int x = 0; int y = 0; switch(HorizontalJustify) { case Justify.MIN: x = Margin.Value.X; break; case Justify.MIDDLE: x = (image.Width / 2) - (CurrentFont.Width * length / 2); break; case Justify.MAX: x = image.Width - (CurrentFont.Width * length) - Margin.Value.X; break; } switch(VerticalJustify) { case Justify.MIN: y = Margin.Value.Y; break; case Justify.MIDDLE: y = (image.Height / 2) - (CurrentFont.Height / 2); break; case Justify.MAX: y = image.Height - CurrentFont.Height - Margin.Value.Y; break; } CurrentFont.Draw(image, x, y, text, TextColor.Value); if(useMarker) { CurrentFont.Draw(image, x + (int)((markerLoc - .5) * CurrentFont.Width), y, '|', TextColor.Value); } }
protected override void Render(Image image) { image.Fill(Color.Value); }
/// <summary> /// /// </summary> /// <param name="buildContext"></param> public override void Build( BuildContext buildContext ) { var fileNames = buildContext.ExpandAndResolveSearchPatterns( Dependencies ); var images = fileNames .Select( fn => Image.LoadTga( fn ) ) .OrderByDescending( img0 => img0.Width * img0.Height ) .ThenByDescending( img1 => img1.Width ) .ThenByDescending( img2 => img2.Height ) .ToList(); if (!images.Any()) { throw new InvalidOperationException("At least one subimage must be added to teh texture atlas"); } // // Pack atlas : // AtlasNode root = new AtlasNode(0,0, Width, Height, Padding ); foreach ( var img in images ) { var n = root.Insert( img ); if (n==null) { throw new InvalidOperationException("No enough room to place image"); } } // // Create image and fill it with atlas elements : // var targetImage = new Image( Width, Height ); targetImage.Fill( FillColor ); root.WriteImages( targetImage ); // // Save and compress : // var tgaOutput = buildContext.GetTempFileName( AssetPath, ".tga", true ); var ddsOutput = buildContext.GetTempFileName( AssetPath, ".dds", true ); Image.SaveTga( targetImage, tgaOutput ); var compression = UseDXT ? ImageFileTextureAsset.TextureCompression.BC3 : ImageFileTextureAsset.TextureCompression.RGB; ImageFileTextureAsset.RunNVCompress( buildContext, tgaOutput, ddsOutput, NoMips, false, false, true, true, false, compression ); // // Write binary blob (text + dds texture): // using ( var fs = buildContext.TargetStream( this ) ) { var bw = new BinaryWriter( fs ); bw.Write(new[]{'A','T','L','S'}); bw.Write( images.Count ); root.WriteLayout( bw ); bw.Write( (int)(new FileInfo(ddsOutput).Length) ); using ( var dds = File.OpenRead( ddsOutput ) ) { dds.CopyTo( fs ); } } }