public static void drawText(Graphics g, int x, int y, string text, Font font, FontInfo info, StringFormat fmt, bool allwhite) { //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; if (info.outline == 1 || info.outline == 3) { g.TranslateTransform(-1.0f, -1.0f); g.DrawString(text, font, allwhite ? Brushes.White : Brushes.Black, x, y, fmt); g.TranslateTransform(1.0f, 1.0f); g.TranslateTransform(0.0f, -1.0f); g.DrawString(text, font, allwhite ? Brushes.White : Brushes.Black, x, y, fmt); g.TranslateTransform(0.0f, 1.0f); g.TranslateTransform(-1.0f, 0.0f); g.DrawString(text, font, allwhite ? Brushes.White : Brushes.Black, x, y, fmt); g.TranslateTransform(1.0f, 0.0f); } if (info.outline == 2 || info.outline == 3) { g.TranslateTransform(1.0f, 1.0f); g.DrawString(text, font, allwhite ? Brushes.White : Brushes.Black, x, y, fmt); g.TranslateTransform(-1.0f, -1.0f); g.TranslateTransform(0.0f, 1.0f); g.DrawString(text, font, allwhite ? Brushes.White : Brushes.Black, x, y, fmt); g.TranslateTransform(0.0f, -1.0f); g.TranslateTransform(1.0f, 0.0f); g.DrawString(text, font, allwhite ? Brushes.White : Brushes.Black, x, y, fmt); g.TranslateTransform(-1.0f, 0.0f); } if (info.shadow != 0) { g.TranslateTransform(3.0f, 3.0f); SolidBrush b = new SolidBrush(Color.FromArgb((int)(info.shadow * 0.25 * 255), allwhite ? Color.White : Color.Black)); g.DrawString(text, font, b, x, y, fmt); g.TranslateTransform(-3.0f, -3.0f); } Brush brush = null; if (info.fill == 0 || allwhite) brush = Brushes.White; else if (info.fill == 1) brush = new LinearGradientBrush(new Point(x, y), new Point(x, y + font.Height), Color.White, Color.Gray); else if (info.fill == 2) brush = new LinearGradientBrush(new Point(x, y), new Point(x, y + font.Height), Color.Gray, Color.White); else if (info.fill == 3) brush = new HatchBrush(HatchStyle.NarrowHorizontal, Color.LightGray, Color.White); g.DrawString(text, font, brush, x, y, fmt); }
protected bool readSettings(Stream strm, out int ver_major, out int ver_minor) { StreamReader rdr = new StreamReader(strm, Encoding.GetEncoding(1252)); string str = rdr.ReadLine(); ver_major = Int32.Parse(str.Substring(0, 1)); ver_minor = Int32.Parse(str.Substring(2, 1)); mVerMajor = ver_major; mVerMinor = ver_minor; if (str.Substring(4) != "Point&Click Project File. DO NOT MODIFY!!") return false; str = rdr.ReadLine(); PlatformID pid = Environment.OSVersion.Platform; bool onUnix = (int)pid == 4 || (int)pid == 128; if (ver_major > 1) mAdv.Settings.Directory = rdr.ReadLine(); else mAdv.Settings.Directory = ""; str = rdr.ReadLine(); if (str == "Resolution X : 640") { mAdv.Settings.Resolution = new Vec2i(640, 480); } else if (str == "Resolution X : 800") { mAdv.Settings.Resolution = new Vec2i(800, 600); } else if (str == "Resolution X : 320") { mAdv.Settings.Resolution = new Vec2i(320, 240); } else { throw new UnexpectedValueException("Resolution is invalid"); } string font = rdr.ReadLine(); while (font.Substring(0, 11) != "GameFont : ") { string[] fontparts = font.Split(';'); FontInfo info = new FontInfo(); info.name = fontparts[0]; info.bold = Convert.ToInt32(fontparts[1]) == -1; info.italic = Convert.ToInt32(fontparts[2]) == -1; info.size = Convert.ToInt32(fontparts[3]); info.outline = Convert.ToInt32(fontparts[4]); if (ver_major > 1) info.charset = Convert.ToInt32(fontparts[5]); else info.charset = 0; if (ver_major > 2 || (ver_major == 2 && ver_minor > 0)) { info.shadow = Convert.ToInt32(fontparts[6]); info.fill = Convert.ToInt32(fontparts[7]); info.fading = Convert.ToInt32(fontparts[8]); } else { info.shadow = 0; info.fill = 0; info.fading = 0; } if (ver_major > 3 || (ver_major == 3 && ver_minor >= 5)) info.spacing = Convert.ToInt32(fontparts[9]); else info.spacing = 0; mAdv.Settings.Fonts.Add(info); font = rdr.ReadLine(); } str = rdr.ReadLine(); str = rdr.ReadLine(); str = rdr.ReadLine(); str = rdr.ReadLine(); str = rdr.ReadLine(); str = rdr.ReadLine(); if (ver_major > 1) { mAdv.Settings.GameIcon = str.Substring(11); str = rdr.ReadLine(); if (ver_major > 3 || (ver_major == 3 && ver_minor >= 5)) { string[] data = str.Split(';'); mAdv.Settings.LoadingImage = data[0]; mAdv.Settings.SettingsPicture = data[1]; } else mAdv.Settings.LoadingImage = str; str = rdr.ReadLine(); mAdv.Settings.TsUseBgImage = str == "-1"; mAdv.Settings.TsBackground = rdr.ReadLine(); } else { mAdv.Settings.GameIcon = ""; mAdv.Settings.LoadingImage = ""; mAdv.Settings.TsUseBgImage = false; mAdv.Settings.TsBackground = ""; } str = rdr.ReadLine(); if (str.Substring(0, 14) != "Startskript : ") { throw new UnexpectedValueException("expected Startskript : "); } mAdv.Settings.Startscript = str.Substring(14); mAdv.Settings.Mainscript = rdr.ReadLine(); mAdv.Settings.AnywhereRoom = rdr.ReadLine(); str = rdr.ReadLine(); mAdv.Settings.ScreenChange = (ScreenChange)Convert.ToInt32(str.Substring(15)); str = rdr.ReadLine().Substring(9); mAdv.Settings.TextOnOff = str[0] == '1'; mAdv.Settings.DrawDraggedItemIcons = str[1] == '1'; mAdv.Settings.ActionText = str[2] == '1'; mAdv.Settings.ShowTaskbar = str[3] == '1'; if (ver_major > 2 || (ver_major == 2 && ver_minor > 0)) { mAdv.Settings.NotAntialiased = str[4] == '1'; mAdv.Settings.TaskbarFromTop = str[5] == '1'; } else { mAdv.Settings.NotAntialiased = false; mAdv.Settings.TaskbarFromTop = false; } if (ver_major >= 3) { mAdv.Settings.GroupItems = str[6] == '1'; mAdv.Settings.ProtectGameFile = str[7] == '1'; } else{ mAdv.Settings.GroupItems = false; mAdv.Settings.ProtectGameFile = false; } if (ver_major > 3 || (ver_major == 3 && ver_minor >= 5)) { mAdv.Settings.Is16to9 = str[8] == '1'; } else { mAdv.Settings.Is16to9 = false; } if (ver_major > 2 || (ver_major == 2 && ver_minor > 0)) { str = rdr.ReadLine(); mAdv.Settings.ActionTextHeight = Convert.ToInt32(str); } else { mAdv.Settings.ActionTextHeight = 0; } str = rdr.ReadLine(); mAdv.Settings.CustomMenu = str == "-1"; mAdv.Settings.CustomMenuRoom = rdr.ReadLine(); str = rdr.ReadLine(); mAdv.Settings.TaskHeight = Convert.ToInt32(str.Substring(13)); str = rdr.ReadLine(); mAdv.Settings.TaskRoom = str.Substring(11); str = rdr.ReadLine(); mAdv.Settings.TaskPopup = Convert.ToInt32(str.Substring(12)); str = rdr.ReadLine(); string addBools = str.Substring(8, 2); mAdv.Settings.SilentDelete = addBools[0] == '1'; mAdv.Settings.InfoLine = addBools[1] == '1'; if (ver_major > 1) { string taskshow = str.Substring(11, 4); if (taskshow == "hide") mAdv.Settings.TaskHideCompletely = true; else mAdv.Settings.TaskHideCompletely = false; mAdv.Settings.RightClick = Convert.ToInt32(str.Substring(16)); } else{ mAdv.Settings.TaskHideCompletely = false; mAdv.Settings.RightClick = 0; } if (ver_major > 2 || (ver_major == 2 && ver_minor > 0)) { str = rdr.ReadLine(); mAdv.Settings.UseMouseWheel = (str == "-1"); str = rdr.ReadLine(); mAdv.Settings.MenuFading = Convert.ToInt32(str); str = rdr.ReadLine(); mAdv.Settings.TextSceneFading = Convert.ToInt32(str); str = rdr.ReadLine(); mAdv.Settings.AnywhereTransparency = Convert.ToInt32(str); } else { mAdv.Settings.UseMouseWheel = false; mAdv.Settings.MenuFading = 0; mAdv.Settings.TextSceneFading = 0; mAdv.Settings.AnywhereTransparency = 0; } str = rdr.ReadLine(); mAdv.Settings.TargaColor = Convert.ToUInt32(str.Substring(13)); str = rdr.ReadLine(); mAdv.Settings.BorderColor = Convert.ToUInt32(str.Substring(14)); str = rdr.ReadLine(); mAdv.Settings.BackgroundColor = Convert.ToUInt32(str.Substring(18)); str = rdr.ReadLine(); mAdv.Settings.TextColor = Convert.ToUInt32(str.Substring(12)); str = rdr.ReadLine().Substring(15); string[] colors = str.Split(';'); mAdv.Settings.OffspeechColor = Convert.ToUInt32(colors[0]); if (ver_major > 1) mAdv.Settings.InfotextColor = Convert.ToUInt32(colors[1]); else mAdv.Settings.InfotextColor = 16777215; str = rdr.ReadLine(); mAdv.Settings.TsStyle = Convert.ToInt32(str) - 1; str = rdr.ReadLine(); mAdv.Settings.TsBorderStyle = Convert.ToInt32(str) - 1; str = rdr.ReadLine(); mAdv.Settings.TsBorderColor = Convert.ToUInt32(str); str = rdr.ReadLine(); mAdv.Settings.TsAreaColor = Convert.ToUInt32(str); str = rdr.ReadLine(); mAdv.Settings.TsSelectionColor = Convert.ToUInt32(str); str = rdr.ReadLine(); mAdv.Settings.TsTextColor = Convert.ToUInt32(str); if (ver_major >= 3 || (ver_major >= 2 && ver_minor >= 7)) { str = rdr.ReadLine(); mAdv.Settings.TsUseSymbols = str == "-1"; str = rdr.ReadLine(); mAdv.Settings.MuteMusicWhenSpeech = str == "-1"; str = rdr.ReadLine(); mAdv.Settings.CoinActivated = str == "-1"; str = rdr.ReadLine(); mAdv.Settings.CoinAutoPopup = str == "-1"; mAdv.Settings.CoinRoom = rdr.ReadLine(); str = rdr.ReadLine(); mAdv.Settings.CoinFading = Convert.ToInt32(str); str = rdr.ReadLine(); mAdv.Settings.CoinCenter.y = Convert.ToInt32(str); str = rdr.ReadLine(); mAdv.Settings.CoinCenter.x = Convert.ToInt32(str); } if (ver_major > 3 || (ver_major == 3 && ver_minor >= 5)) { //dsp effects for (int i = 0; i < 25; ++i) { str = rdr.ReadLine(); string [] header = str.Split(';'); DSPEffect effect = new DSPEffect(); effect.name = header[2]; int etype = Convert.ToInt32(header[3]); effect.type = (DSPEffect.Type)etype; for (int line = 0; line < 6; ++line) { str = rdr.ReadLine(); string[] vals = str.Split(';'); for (int num = 0; num < 6; ++num) { effect.param[line, num] = Convert.ToInt32(vals[num]); } } if (etype > 0) mAdv.Settings.DSPEffects.Add(effect); } } str = rdr.ReadLine(); mAdv.Settings.LinkText = str.Substring(11); str = rdr.ReadLine(); mAdv.Settings.GiveLink = str.Substring(11); str = rdr.ReadLine(); mAdv.Settings.WalkText = str.Substring(11); str = rdr.ReadLine(); if (str == "Booleans :") { mAdv.Settings.Booleans = new Dictionary<string, bool>(); str = rdr.ReadLine(); while (str != "Commands :") { string name; string val = str.Substring(str.Length - 1); if (val == "1") name = str.Substring(0, str.Length - 2); else name = str.Substring(0, str.Length - 1); mAdv.Settings.Booleans.Add(name, val == "1"); str = rdr.ReadLine(); } } if (str == "Commands :") { mAdv.Settings.Commands = new Dictionary<string, string>(); str = rdr.ReadLine(); while (str != "Mediapool :") { string pretty_name = rdr.ReadLine(); mAdv.Settings.Commands.Add(str, pretty_name); str = rdr.ReadLine(); } } str = rdr.ReadLine(); TreeNode root = new TreeNode("Mediapool"); TreeNode node = root; mMediaPool.Nodes.Add(node); while (str != "Gamepool :") { node = insertTreeElement(mMediaPool.Nodes, str, node, node.Level-1); str = rdr.ReadLine(); } TreeNode[] arr = new TreeNode[root.Nodes.Count]; root.Nodes.CopyTo(arr, 0); mMediaPool.Nodes.Clear(); mMediaPool.Nodes.AddRange(arr); str = rdr.ReadLine(); root = new TreeNode("Gamepool"); node = root; mGamePool.Nodes.Add(node); while (str != "Images :") { node = insertTreeElement(mGamePool.Nodes, str, node, node.Level - 1); str = rdr.ReadLine(); } arr = new TreeNode[root.Nodes.Count]; root.Nodes.CopyTo(arr, 0); mGamePool.Nodes.Clear(); mGamePool.Nodes.AddRange(arr); if (str == "Images :") { str = rdr.ReadLine(); while (str != "Sounds :") { string filename = rdr.ReadLine(); if (onUnix){ filename = filename.Replace("\\", "/"); if (filename[1] == ':') filename = filename.Remove(0, 2); } mAdv.Images.Add(str.ToLower(), filename); str = rdr.ReadLine(); } } if (str == "Sounds :") { str = rdr.ReadLine(); while (str != "Music :") { string filename = rdr.ReadLine(); mAdv.Sounds.Add(str.ToLower(), filename); str = rdr.ReadLine(); } } if (str == "Music :") { str = rdr.ReadLine(); while (str != "Movie :") { string filename = rdr.ReadLine(); mAdv.Music.Add(str.ToLower(), filename); str = rdr.ReadLine(); } } if (str == "Movie :") { str = rdr.ReadLine(); while (!rdr.EndOfStream) { string filename = rdr.ReadLine(); mAdv.Videos.Add(str.ToLower(), filename); str = rdr.ReadLine(); } } return true; }
public static void drawText(Graphics g, int x, int y, string text, Font font) { FontInfo info = new FontInfo(); info.fill = 0; info.outline = 3; info.shadow = 0; StringFormat fmt = new StringFormat(); drawText(g, x, y, text, font, info, fmt, false); }
public int[] createBitmapFont(int idx, out Bitmap[] images, out Bitmap[] alphaimages, out Vec2i dims, out Vec2i numchars) { //font setup mCurrInfo = (FontInfo)mData.Settings.Fonts[idx - 1]; mCurrFont = new Font(mCurrInfo.name, mCurrInfo.size); if (mCurrInfo.bold) mCurrFont = new Font(mCurrFont, FontStyle.Bold); if (mCurrInfo.italic) mCurrFont = new Font(mCurrFont, FontStyle.Italic); int outlinethickness = 0; int shadowthickness = 0; if (mCurrInfo.outline == 1 || mCurrInfo.outline == 2) outlinethickness = 1; else if (mCurrInfo.outline == 3) outlinethickness = 2; if (mCurrInfo.shadow != 0) shadowthickness = 3; //character dimension measuring Bitmap bmp = new Bitmap(256, 256); Graphics g = Graphics.FromImage(bmp); g.SmoothingMode = SmoothingMode.AntiAlias; g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; int maxwidth = 0, maxheight = 0; int[] charwidths = new int[224]; StringFormat fmt = new StringFormat(); fmt.FormatFlags = StringFormatFlags.NoClip; CharacterRange[] range = new CharacterRange[1]; range[0] = new CharacterRange(0,1); fmt.SetMeasurableCharacterRanges(range); Encoding enc = Encoding.GetEncoding(1252); byte [] b = new byte[1]; for (int i = 0; i < 224; ++i) { b[0] = (byte)(i + 0x20); char[] chs = enc.GetChars(b); char ch = chs[0]; Region[] reg = g.MeasureCharacterRanges(new string(ch, 1), mCurrFont, new RectangleF(0,0,256,256), fmt); RectangleF rect = reg[0].GetBounds(g); int width = (int)rect.Width;///*Math.Ceiling(*/ f.Width;//); if (width == 0) { SizeF f = g.MeasureString(new string(ch, 1), mCurrFont); width = (int)f.Width; } charwidths[i] = width+outlinethickness+mCurrInfo.spacing; maxwidth = Math.Max(maxwidth, (int)(rect.Width+rect.X)); int height = (int)(rect.Height + rect.Y); if (height > 256) continue; maxheight = Math.Max(maxheight, height); } if (maxheight == 0) maxheight = maxwidth;//a crappy workaround to compensate for crappy fonts int charwidth = maxwidth+outlinethickness+shadowthickness; int charheight = maxheight+2+outlinethickness+shadowthickness; int charsperrow = 256 / charwidth; int numrows = 256 / charheight; int numtextures = (int)Math.Ceiling(224.0 / (charsperrow * numrows)); //allocate bitmaps images = new Bitmap[numtextures]; alphaimages = new Bitmap[numtextures]; int currtexture = -1; Graphics g2 = null; //render bitmap font for (int i = 0; i < 224; ++i) { b[0] = (byte)(i + 0x20); char[] chs = enc.GetChars(b); char ch = chs[0]; int texture = i / (numrows * charsperrow); if (texture != currtexture) { images[texture] = new Bitmap(256, 256, PixelFormat.Format16bppRgb565); g.Dispose(); g = Graphics.FromImage(images[texture]); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; g.SmoothingMode = SmoothingMode.AntiAlias; g.Clear(Color.Black); alphaimages[texture] = new Bitmap(256, 256, PixelFormat.Format16bppRgb565); if (g2 != null) g2.Dispose(); g2 = Graphics.FromImage(alphaimages[texture]); g2.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; g2.SmoothingMode = SmoothingMode.AntiAlias; g2.Clear(Color.Black); currtexture = texture; } int row = i / charsperrow - texture*numrows; int column = i % charsperrow; drawText(g, column * charwidth, row * charheight, new string(ch, 1), fmt); drawText(g2, column * charwidth, row * charheight, new string(ch, 1), fmt, true); } g.Dispose(); g2.Dispose(); dims = new Vec2i(charwidth, charheight); numchars = new Vec2i(charsperrow, numrows); return charwidths; }
private void setListName(int idx, FontInfo info) { if (idx < 0) return; fontlist.Items[idx] = (idx+1)+" - "+info.name + " ("+info.size+")"; }
void fontlist_SelectedIndexChanged(object sender, EventArgs e) { if (fontlist.SelectedIndex == -1) return; FontInfo info = (FontInfo)mFonts[fontlist.SelectedIndex]; mCurrInfo = info; mCurrFont = new Font(info.name, info.size); if (info.bold) mCurrFont = new Font(mCurrFont, FontStyle.Bold); if (info.italic) mCurrFont = new Font(mCurrFont, FontStyle.Italic); font.SelectedItem = info.name; charset.SelectedIndex = info.charset; bold.Checked = info.bold; italic.Checked = info.italic; fontsize.SelectedItem = Convert.ToString(info.size); letterspacing.SelectedItem = Convert.ToString(info.spacing); switch (info.outline) { case 0: ol_none.Checked = true; break; case 1: ol_shadow_a.Checked = true; break; case 2: ol_shadow_b.Checked = true; break; case 3: ol_shadow_ab.Checked = true; break; } switch (info.shadow) { case 0: sh_none.Checked = true; break; case 1: sh_25.Checked = true; break; case 2: sh_50.Checked = true; break; case 3: sh_75.Checked = true; break; } switch (info.fill) { case 0: fill_normal.Checked = true; break; case 1: fill_falloff_1.Checked = true; break; case 2: fill_falloff_2.Checked = true; break; case 3: fill_scanlines.Checked = true; break; } fading.Value = info.fading; preview.Invalidate(); }
private void button1_Click(object sender, EventArgs e) { FontInfo info = new FontInfo(); info.name = "Arial"; info.size = 12; mFonts.Add(info); fontlist.Items.Add(info.name); fontlist.SelectedIndex = fontlist.Items.Count - 1; }