public ChangeFont(RadioCommand mainRadio, CharacterHandler handler, BitFont font) { this.Controller = mainRadio; this.Handler = handler; this.Font = font; ID = string.Format("{0}{1}", ActionID, font.ID); MenuText = font.Name; //string.Format ("{0} {1}x{2}", font.Name, font.Width, font.Height); //Text = string.Format ("CP {0} {1}x{2}", font.Encoding.CodePage, font.Width, font.Height); //Name = "Change Font"; if (Handler != null) { if (Handler.Client != null) { this.Enabled = Handler.Client.CurrentUser.Level >= this.Level; this.Checked = font.Equals(Handler.CurrentPage.Font); } else if (Handler.ClientDelegate.EditMode) { this.Checked = font.Equals(Handler.CurrentPage.Font); } else { this.Checked = font.Equals(Info.SelectedFont); } } }
public FontTextBox(CharacterHandler handler, Size?size, BitFont font = null, Palette palette = null) { this.font = font; this.palette = palette; this.handler = handler; this.Canvas = new MemoryCanvas(size ?? Size.Empty); cursor = Point.Empty; UpdateCanvasSize(); }
void MoveVertical(Point pos, int ydir) { CharacterHandler handler = Handler as CharacterHandler; IViewer viewer = handler.Viewer; if (viewer != null) { Canvas canvas = handler.CurrentPage.Canvas; BitFont font = handler.CurrentPage.Font; Point newCursor = pos; float fontHeight = ((float)font.Height) * handler.ZoomRatio.Height; int verticalOffset = (int)((viewer.ViewSize.Height + fontHeight - 1) / fontHeight); newCursor.Y += verticalOffset * ydir; if (newCursor.Y > canvas.Height - 1) { newCursor.Y = canvas.Height - 1; } if (newCursor.Y < 0) { newCursor.Y = 0; } //Rectangle rect = handler.SelectedRegion; handler.CursorPosition = newCursor; /*handler.SetCursorPosition(newCursor, false); * handler.InvalidateCharacterRegion(new Rectangle(pos, new Size(1,1))); * rect.Normalize(); * rect.Width++; * rect.Height++; * * handler.InvalidateCharacterRegion(rect); */ Point scrollPos = viewer.ScrollPosition; scrollPos.Y += (int)Math.Round(verticalOffset * fontHeight) * ydir; if (scrollPos.Y < 0) { scrollPos.Y = 0; } viewer.ScrollPosition = scrollPos; /* * handler.InvalidateCharacterRegion(new Rectangle(newCursor, new Size(1,1))); * rect = handler.SelectedRegion; * rect.Normalize(); * rect.Width++; * rect.Height++; * * handler.InvalidateCharacterRegion(rect); */ } }
public static BitFont GetCGUpperFont() { using (var fontStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Pablo.Formats.Character.Fonts.cg-upper.fnt")) { BitFont f = null; var br = new BinaryReader(fontStream); f = new BitFont(256, 8, 8, BitFont.StandardCodePage); f.Load(br); f.Resize(16, 16, true); fontStream.Close(); return(f); } }
public CharacterSelection(CharacterHandler handler) { this.Title = "Select Character"; this.CharacterHandler = handler; font = CharacterHandler.CurrentPage.Font; var layout = new DynamicLayout(); layout.AddCentered(Preview(), verticalCenter: false); layout.AddCentered(CharNum(), verticalCenter: false); layout.Add(Characters()); layout.BeginVertical(Padding.Empty); layout.AddRow(null, CancelButton(), OkButton()); layout.EndVertical(); Content = layout; }
public override void Load(Stream fs, CharacterDocument document, CharacterHandler handler) { var page = document.Pages[0]; var br = new BinaryReader(fs); try { var header = new XBinHeader(br); if (header.XBinID != XBinHeader.XBIN_ID) { throw new FileLoadException("not a valid XBIN file"); } var loadSize = new Size(0, 0); var canvas = page.Canvas; document.ICEColours = header.NonBlink; ResizeCanvasWidth(fs, document, canvas, header); loadSize.Width = (document.EditMode && header.Width > canvas.Size.Width) ? canvas.Size.Width : header.Width; loadSize.Height = (document.EditMode && header.Height > canvas.Size.Height) ? canvas.Size.Height : header.Height; if (header.Palette) { page.Palette.Load(br, 16, 2); } if (header.Font) { var f = new BitFont(header.Font512 ? 512 : 256, 8, header.FontSize, BitFont.StandardCodePage); f.Load(br); #if DEBUG /* Used to save an XBIN font for use in PabloDraw * * Stream s = new FileStream("c:\\font.fnt", FileMode.Create); * BinaryWriter bw = new BinaryWriter(s); * f.Save(bw); * bw.Close(); * s.Close(); * /* */ #endif page.Font = f; } ResizeCanvasHeight(document, canvas, loadSize.Height); var ce = new CanvasElement(32, 7); var args = new WaitEventArgs(); if (header.Compress) { for (int y = 0; y < loadSize.Height; y++) { int x = 0; while (x < header.Width) { document.OnWait(args); if (args.Exit) { break; } int countbyte = br.ReadByte(); if (countbyte == -1) { break; } int runlength = (countbyte & 0x3F) + 1; switch ((CompressionType)(countbyte & 0xc0)) { case CompressionType.NoCompression: while (runlength > 0) { ce.Character = br.ReadByte(); ce.Attribute = br.ReadByte(); if (x < canvas.Size.Width) { canvas[x, y] = ce; } x++; runlength--; } break; case CompressionType.Character: ce.Character = br.ReadByte(); while (runlength > 0) { ce.Attribute = br.ReadByte(); if (x < canvas.Size.Width) { canvas[x, y] = ce; } x++; runlength--; } break; case CompressionType.Attribute: ce.Attribute = br.ReadByte(); while (runlength > 0) { ce.Character = br.ReadByte(); if (x < canvas.Size.Width) { canvas[x, y] = ce; } x++; runlength--; } break; case CompressionType.Both: ce.Character = br.ReadByte(); ce.Attribute = br.ReadByte(); while (runlength > 0) { if (x < canvas.Size.Width) { canvas[x, y] = ce; } x++; runlength--; } break; } } } } else { for (int y = 0; y < loadSize.Height; y++) { for (int x = 0; x < header.Width; x++) { document.OnWait(args); if (args.Exit) { break; } ce.Character = br.ReadByte(); ce.Attribute = br.ReadByte(); if (x < canvas.Size.Width) { canvas[x, y] = ce; } } } } } catch (EndOfStreamException) { // reached end of file, so we're okay } }