Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
 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 );
                }
            }
        }