Пример #1
0
 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);
         }
     }
 }
Пример #2
0
        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();
        }
Пример #3
0
        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);
                 */
            }
        }
Пример #4
0
 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);
     }
 }
Пример #5
0
        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;
        }
Пример #6
0
        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
            }
        }