FormatTotalRep() 공개 정적인 메소드

public static FormatTotalRep ( int rep ) : string
rep int
리턴 string
예제 #1
0
파일: Templates.cs 프로젝트: tms/StackFlair
        public override Image GenerateImage()
        {
            // Gravatar
            string gravatarUrl = string.Format("http://www.gravatar.com/avatar/{0}?s={1}&d=identicon&=PG", Data.DisplayHash,
                                               TemplateOptions.GravatarSize);

            byte[] gravatarBytes = new WebClient().DownloadData(gravatarUrl);
            Image  gravatarImage = Image.FromStream(new MemoryStream(gravatarBytes));

            // Favicons
            List <Image> favicons = new List <Image>();

            foreach (var site in Data.Sites.Take(Utility.MaxSites).ToList())
            {
                var favicon = GetFavicon(site.SiteName);
                favicons.Add(favicon);
            }

            //calculate the size first
            int minWidth = TemplateOptions.BorderWidth + TemplateOptions.Spacing + TemplateOptions.GravatarSize +
                           ((TemplateOptions.Spacing + favicons[0].Width) * favicons.Count) + TemplateOptions.Spacing +
                           TemplateOptions.BorderWidth;
            int actualWidth = 0;
            int topLine     = TemplateOptions.BorderWidth + TemplateOptions.Spacing;
            int middleLine  = TemplateOptions.GravatarSize / 3 + topLine;
            int bottomLine  = TemplateOptions.GravatarSize / 3 + middleLine;
            int leftCol     = topLine;
            int rightCol    = leftCol + TemplateOptions.GravatarSize + TemplateOptions.Spacing;
            int height      = TemplateOptions.BorderWidth + TemplateOptions.Spacing + TemplateOptions.GravatarSize +
                              TemplateOptions.Spacing + TemplateOptions.BorderWidth;
            var      bitmap   = new Bitmap(2000, 200);
            Graphics graphics = Graphics.FromImage(bitmap);

            graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

            //draw border
            Brush brush = new SolidBrush(TemplateOptions.BackgroundColor);

            graphics.FillRectangle(brush, 1, 1, 2000, height);

            //draw gravatar
            graphics.DrawImage(gravatarImage, topLine, topLine);

            //draw username
            int topX      = rightCol;
            int maxHeight = 0;

            foreach (Image img in GlitterizeImage(Data.DisplayName))
            {
                graphics.DrawImage(img, topX, topLine);
                topX += img.Width;
                if (img.Height > maxHeight)
                {
                    maxHeight = img.Height;
                }
            }
            topX += TemplateOptions.Spacing;
            //draw rep
            string rep = Utility.FormatTotalRep(Data.TotalRep);

            foreach (Image img in GlitterizeImage(rep))
            {
                graphics.DrawImage(img, topX, topLine);
                topX += img.Width;
                if (img.Height > maxHeight)
                {
                    maxHeight = img.Height;
                }
            }

            middleLine = maxHeight + TemplateOptions.Spacing;
            maxHeight  = 0;
            //draw mod and badges
            int middleX = rightCol;

            if (Data.ModCount > 0)
            {
                string modString = Data.ModCount.ToString();
                Font   modFont   = new Font(TemplateOptions.FontFamily, 25f);
                Brush  modBrush  = new SolidBrush(TemplateOptions.ModColor);
                graphics.DrawString("♦", modFont, modBrush, middleX, middleLine + 10);
                middleX += (int)graphics.MeasureString("♦", modFont).Width;
                foreach (Image img in GlitterizeImage(modString))
                {
                    graphics.DrawImage(img, middleX, middleLine);
                    middleX += img.Width;
                    if (img.Height + middleLine > maxHeight)
                    {
                        maxHeight = img.Height + middleLine;
                    }
                }
            }
            middleX += TemplateOptions.Spacing;
            if (Data.TotalBadges.Gold > 0)
            {
                string goldString = "●" + Data.TotalBadges.Gold.ToString();
                Font   goldFont   = new Font(TemplateOptions.FontFamily, 25f);
                Brush  goldBrush  = new SolidBrush(TemplateOptions.GoldColor);
                graphics.DrawString("●", goldFont, goldBrush, middleX, middleLine + 10);
                middleX += (int)graphics.MeasureString("●", goldFont).Width;
                foreach (Image img in GlitterizeImage(goldString))
                {
                    graphics.DrawImage(img, middleX, middleLine);
                    middleX += img.Width;
                    if (img.Height + middleLine > maxHeight)
                    {
                        maxHeight = img.Height + middleLine;
                    }
                }
            }

            middleX += TemplateOptions.Spacing;
            if (Data.TotalBadges.Silver > 0)
            {
                string silverString = "●" + Data.TotalBadges.Silver.ToString();
                Font   silverFont   = new Font(TemplateOptions.FontFamily, 25f);
                Brush  silverBrush  = new SolidBrush(TemplateOptions.SilverColor);
                graphics.DrawString("●", silverFont, silverBrush, middleX, middleLine + 10);
                middleX += (int)graphics.MeasureString("●", silverFont).Width;
                foreach (Image img in GlitterizeImage(silverString))
                {
                    graphics.DrawImage(img, middleX, middleLine);
                    middleX += img.Width;
                    if (img.Height + middleLine > maxHeight)
                    {
                        maxHeight = img.Height + middleLine;
                    }
                }
            }

            middleX += TemplateOptions.Spacing;
            if (Data.TotalBadges.Bronze > 0)
            {
                string bronzeString = "●" + Data.TotalBadges.Bronze.ToString();
                Font   bronzeFont   = new Font(TemplateOptions.FontFamily, 25f);
                Brush  bronzeBrush  = new SolidBrush(TemplateOptions.BronzeColor);
                graphics.DrawString("●", bronzeFont, bronzeBrush, middleX, middleLine + 10);
                middleX += (int)graphics.MeasureString("●", bronzeFont).Width;
                foreach (Image img in GlitterizeImage(bronzeString))
                {
                    graphics.DrawImage(img, middleX, middleLine);
                    middleX += img.Width;
                    if (img.Height + middleLine > maxHeight)
                    {
                        maxHeight = img.Height + middleLine;
                    }
                }
            }

            actualWidth = Math.Max(topX, middleX);

            bottomLine = maxHeight + TemplateOptions.Spacing;
            //draw favicons
            int bottomX = TemplateOptions.BorderWidth + TemplateOptions.Spacing + TemplateOptions.GravatarSize + TemplateOptions.Spacing;

            foreach (var favicon in favicons)
            {
                graphics.DrawImage(favicon, bottomX, bottomLine, 32, 32);
                bottomX += 32 + TemplateOptions.Spacing * 5;
            }

            int backgroundWidth  = actualWidth - 2 * TemplateOptions.BorderWidth;
            int backgroundHeight = height - 2 * TemplateOptions.BorderWidth;

            graphics.DrawRectangle(new Pen(TemplateOptions.BorderColor, TemplateOptions.BorderWidth), TemplateOptions.BorderWidth, TemplateOptions.BorderWidth, backgroundWidth, backgroundHeight);
            bitmap = bitmap.Clone(new Rectangle(0, 0, actualWidth, height), PixelFormat.DontCare);
            return(bitmap);
        }
예제 #2
0
파일: Templates.cs 프로젝트: tms/StackFlair
        public virtual string GenerateHtml()
        {
            string html = "";
            string css  = @"<style type=""text/css"">" +
                          "	.stackFlair > .details { font-family: " + TemplateOptions.FontFamily + "; font-size: " + TemplateOptions.TopLineSize + "pt }" +
                          "	.stackFlair a { color: #" + TemplateOptions.NameColor.ToHex() + "; }" +
                          "	.stackFlair { line-height:" + TemplateOptions.GravatarSize / 3 + "px; white-space:nowrap; background-color:#" + TemplateOptions.BackgroundColor.ToHex() + "; float:left; border:" + TemplateOptions.BorderWidth + "px solid #" + TemplateOptions.BorderColor.ToHex() + "; padding:" + TemplateOptions.Spacing + "px; }" +
                          "	.stackFlair > .gravatar { float: left; height:" + TemplateOptions.GravatarSize + "px; width:" + TemplateOptions.GravatarSize + "px; margin-right:" + TemplateOptions.Spacing + "px; }" +
                          "	.stackFlair > .details { float: left; }" +
                          "	.stackFlair a { text-decoration:none; font-weight:bold;}" +
                          "	.stackFlair img { border:none; }" +
                          "	.stackFlair .modFlair { color:#" + TemplateOptions.ModColor.ToHex() + "; }" +
                          "	.stackFlair .reputation { color: #" + TemplateOptions.RepColor.ToHex() + "; float:right; font-weight:bold; padding-left:" + TemplateOptions.Spacing + "px; }" +
                          "	.stackFlair .badges { margin-left:" + TemplateOptions.Spacing + "px; font-size:" + TemplateOptions.MiddleLineSize + "pt; }" +
                          "	.stackFlair .goldBadge { color:#" + TemplateOptions.GoldColor.ToHex() + "; }" +
                          "	.stackFlair .silverBadge { color:#" + TemplateOptions.SilverColor.ToHex() + "; }" +
                          "	.stackFlair .bronzeBadge { color:#" + TemplateOptions.BronzeColor.ToHex() + "; }" +
                          "	.stackFlair .sites img {padding:" + TemplateOptions.Spacing / 2 + "px; }​" +
                          "	.stackFlair .cl { clear:both; height:0px; }" + " .stackFlair { border-radius:5px; }" +
                          "</style>";
            string gravatarDiv = String.Format(@"<div class=""gravatar""><a href=""{0}/users/{1}/{2}""><img src=""http://www.gravatar.com/avatar/{3}?s={4}&d=identicon&=PG""></a></div>", Data.DisplayUrl, Data.DisplayId, Data.DisplayName, Data.DisplayHash, TemplateOptions.GravatarSize);

            string userInfo = String.Format(@"<a href=""{0}/users/{1}/{2}"">{2}</a>", Data.DisplayUrl, Data.DisplayId, Data.DisplayName);

            userInfo = String.Format(@"<span class=""reputation"" title=""{0:n0} reputation across all sites"">{1:n0}</span>", Data.TotalRep, Utility.FormatTotalRep(Data.TotalRep)) + userInfo;

            string modAndBadges = @"<span class=""badges"">";

            if (Data.ModCount > 0)
            {
                modAndBadges += String.Format(@" <span class=""modFlair"" title=""moderator on {0} other site{1}"">♦{0}</span>", Data.ModCount, (Data.ModCount > 1 ? "s" : ""));
            }

            if (Data.TotalBadges.Gold > 0)
            {
                modAndBadges += String.Format(@" <span class=""goldBadge"" title=""{0} gold badges across all sites"">●{0}</span>", Data.TotalBadges.Gold);
            }
            if (Data.TotalBadges.Silver > 0)
            {
                modAndBadges += String.Format(@" <span class=""silverBadge"" title=""{0} silver badges across all sites"">●{0}</span>", Data.TotalBadges.Silver);
            }
            if (Data.TotalBadges.Bronze > 0)
            {
                modAndBadges += String.Format(@" <span class=""bronzeBadge"" title=""{0} bronze badges across all sites"">●{0}</span>", Data.TotalBadges.Bronze);
            }
            modAndBadges += "</span>";

            string siteIcons = Data.Sites.Take(Utility.MaxSites).Aggregate(@"", (current, site) => current + String.Format(@"<a href=""{0}/users/{1}/""><img src=""{0}/favicon.ico"" title=""{2} reputation: {3:n0}""></a>", site.Url, site.UserId, site.SiteName, site.Reputation));

            siteIcons = String.Format(@"<div class=""sites"">{0}</div>", siteIcons);

            string userDetails = @"<div class=""details"">" + userInfo + "<br/>" + modAndBadges + "<br/>" + siteIcons + @"</div><div class=""cl"">&nbsp;</div>";

            html = String.Format(@"<div class=""stackFlair"">{0}{1}</div>", gravatarDiv, userDetails);

            return(css + html);
        }
예제 #3
0
파일: Templates.cs 프로젝트: tms/StackFlair
        public virtual Image GenerateImage()
        {
            // Gravatar
            string gravatarUrl   = string.Format("http://www.gravatar.com/avatar/{0}?s={1}&d=identicon&=PG", Data.DisplayHash, TemplateOptions.GravatarSize);
            Image  gravatarImage = DownloadImage(gravatarUrl);

            //calculate the size first
            int faviconSize = 16;
            int minWidth    = TemplateOptions.BorderWidth + TemplateOptions.Spacing + TemplateOptions.GravatarSize +
                              ((TemplateOptions.Spacing + faviconSize) * Math.Min(Data.Sites.Count, Utility.MaxSites)) + TemplateOptions.Spacing + TemplateOptions.BorderWidth;
            int      actualWidth = 0;
            int      topLine     = TemplateOptions.BorderWidth + TemplateOptions.Spacing;
            int      middleLine  = TemplateOptions.GravatarSize / 3 + topLine;
            int      bottomLine  = TemplateOptions.GravatarSize / 3 + middleLine;
            int      leftCol     = topLine;
            int      rightCol    = leftCol + TemplateOptions.GravatarSize + TemplateOptions.Spacing;
            int      height      = TemplateOptions.BorderWidth + TemplateOptions.Spacing + TemplateOptions.GravatarSize + TemplateOptions.Spacing + TemplateOptions.BorderWidth;
            var      bitmap      = new Bitmap(1000, 200);
            Graphics graphics    = Graphics.FromImage(bitmap);

            graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
            graphics.CompositingMode   = CompositingMode.SourceOver;


            //draw border
            Brush brush = new SolidBrush(TemplateOptions.BackgroundColor);

            graphics.FillRectangle(brush, 1, 1, 1000, height);

            //draw gravatar
            graphics.DrawImage(gravatarImage, topLine, topLine);

            //draw username
            Font  topLineFont   = new Font(TemplateOptions.FontFamily, TemplateOptions.TopLineSize, FontStyle.Bold);
            Brush usernameBrush = new SolidBrush(TemplateOptions.NameColor);

            graphics.DrawString(Data.DisplayName, topLineFont, usernameBrush, rightCol, topLine);
            int usernameWidth = (int)graphics.MeasureString(Data.DisplayName, topLineFont).Width;

            //draw rep
            string rep         = Utility.FormatTotalRep(Data.TotalRep);
            int    repWidth    = (int)graphics.MeasureString(rep, topLineFont).Width;
            int    neededWidth = rightCol + usernameWidth + TemplateOptions.Spacing + repWidth + TemplateOptions.Spacing + TemplateOptions.BorderWidth;

            actualWidth = Math.Max(neededWidth, minWidth);
            Brush repBrush = new SolidBrush(TemplateOptions.RepColor);

            graphics.DrawString(rep, topLineFont, repBrush, actualWidth - TemplateOptions.Spacing - repWidth, topLine);

            //draw mod and badges
            int  x            = rightCol;
            Font modBadgeFont = new Font(TemplateOptions.FontFamily, TemplateOptions.MiddleLineSize, FontStyle.Regular, GraphicsUnit.Point, Convert.ToByte(2));

            if (Data.ModCount > 0)
            {
                Brush  modBrush  = new SolidBrush(TemplateOptions.ModColor);
                string modString = "♦" + Data.ModCount;
                graphics.DrawString(modString, modBadgeFont, modBrush, x, middleLine);
                x += (int)graphics.MeasureString(modString, modBadgeFont).Width;
            }

            if (Data.TotalBadges.Gold > 0)
            {
                Brush  goldBrush  = new SolidBrush(TemplateOptions.GoldColor);
                string goldString = "●" + Data.TotalBadges.Gold.ToString();
                graphics.DrawString(goldString, modBadgeFont, goldBrush, x, middleLine);
                x += (int)graphics.MeasureString(goldString, modBadgeFont).Width;
            }

            if (Data.TotalBadges.Silver > 0)
            {
                Brush  silverBrush  = new SolidBrush(TemplateOptions.SilverColor);
                string silverString = "●" + Data.TotalBadges.Silver.ToString();
                graphics.DrawString(silverString, modBadgeFont, silverBrush, x, middleLine);
                x += (int)graphics.MeasureString(silverString, modBadgeFont).Width;
            }

            if (Data.TotalBadges.Bronze > 0)
            {
                Brush  bronzeBrush  = new SolidBrush(TemplateOptions.BronzeColor);
                string bronzeString = "●" + Data.TotalBadges.Bronze.ToString();
                graphics.DrawString(bronzeString, modBadgeFont, bronzeBrush, x, middleLine);
                x += (int)graphics.MeasureString(bronzeString, modBadgeFont).Width;
            }

            //draw favicons
            x = TemplateOptions.BorderWidth + TemplateOptions.Spacing + TemplateOptions.GravatarSize + TemplateOptions.Spacing;

            // Favicons
            List <Image> favicons = new List <Image>();

            foreach (var site in Data.Sites.Take(Utility.MaxSites).ToList())
            {
                var favicon = GetFavicon(site.SiteName);
                favicons.Add(favicon);
                graphics.DrawImage(favicon, x, bottomLine);
                x += favicon.Width + TemplateOptions.Spacing;
            }


            graphics.DrawRectangle(new Pen(TemplateOptions.BorderColor, TemplateOptions.BorderWidth), TemplateOptions.BorderWidth, TemplateOptions.BorderWidth, actualWidth - 2 * TemplateOptions.BorderWidth, height - 2 * TemplateOptions.BorderWidth);
            bitmap = bitmap.Clone(new Rectangle(0, 0, actualWidth, height), PixelFormat.DontCare);

            gravatarImage.Dispose();
            foreach (var favicon in favicons)
            {
                favicon.Dispose();
            }

            return(bitmap);
        }