Beispiel #1
0
    static void string_width(Font.Instance font)
    {
        OS.Coord result_offset = new OS.Coord();
        int      result_index, result_count;

        Console.WriteLine("Calling SWI \"Font_SetFont\"");
        Font.SetFont(font);

        string string_to_split = "The quick brown fox jumped over the lazy dog.";

        Console.WriteLine("Calling SWI \"Font_StringWidth\" to split a string");
        Console.WriteLine("String to split is \"{0}\"", string_to_split);
        Console.WriteLine("Splitting on a space character at 300 OS units.");
        result_index = Font.StringWidth(string_to_split,
                                        Font.ConvertToPoints(300, 0),
                                        ' ',                    // Split on a space
                                        string_to_split.Length, // Consider all the string
                                        result_offset,
                                        out result_count);
        Font.ConvertToOS(result_offset, result_offset);
        Console.WriteLine("Result is:");
        Console.WriteLine("Split at offset {0},{1} OS units", result_offset.X, result_offset.Y);
        Console.WriteLine("Number of split characters is {0}", result_count);
        Console.WriteLine("Split was at index {0} between characters '{1}' and '{2}'\n",
                          result_index,
                          string_to_split[result_index - 1],
                          string_to_split[result_index + 1]);
    }
Beispiel #2
0
    static void read_info(Font.Instance font)
    {
        OS.Rect bbox;

        Console.WriteLine("Calling SWI \"XFont_ReadInfo\" to read font bounding box:");
        bbox = font.ReadInfo();
        Console.WriteLine("Result is:");
        Console.WriteLine("Minimum X {0}", bbox.MinX);
        Console.WriteLine("Minimum Y {0}", bbox.MinY);
        Console.WriteLine("Maximum X {0}", bbox.MaxX);
        Console.WriteLine("Maximum Y {0}\n", bbox.MaxY);
    }
Beispiel #3
0
    static void char_bbox(Font.Instance font)
    {
        OS.Rect bbox;

        Console.WriteLine("Calling SWI \"Font_CharBBox\" to find bounding box of character 'A'");
        bbox = font.CharBBox('A', Font.PlotType.OSUnits);          // return OS units
        Console.WriteLine("Result is:");
        Console.WriteLine("Minimum X {0}", bbox.MinX);
        Console.WriteLine("Minimum Y {0}", bbox.MinY);
        Console.WriteLine("Maximum X {0}", bbox.MaxX);
        Console.WriteLine("Maximum Y {0}\n", bbox.MaxY);
    }
Beispiel #4
0
            public TextDocument(uint objectID) : base(objectID)
            {
                // Set the window title via its Title property.
                Title = "CSharp Toolbox Window - Scale: " + Scale + "%";

                DocMenu = Toolbox.Object.CreateInstance <DocumentMenu> ("WindowMenu");
                // Attach the menu to the window.
                Menu = DocMenu;

                font = new Font.Instance(FontID,
                                         ((FontHeight * FontAspectRatio) / 100) << 4,
                                         FontHeight << 4);

                DocMenu.SaveAsDBox.FileType           = 0xfff;
                DocMenu.SaveAsDBox.SelectionAvailable = false;
                DocMenu.SaveAsDBox.SaveToFile        += save_data;
                DocMenu.SaveAsDBox.FillBuffer        += fill_buffer;

                DocMenu.FileInfoDBox.AboutToBeShown += fileinfo_Show;

                // The AboutToBeShown events for ColourMenu and ColourDialogue don't seem to
                // be reliable, so use the SubMenuShow events instead. This is a Toolbox issue,
                // not a Mono/C# issue.
                DocMenu.ColourDBoxEntry.SubMenu += colourdbox_SubMenuShow;
                DocMenu.ColourMenuEntry.SubMenu += colourmenu_SubMenuShow;

                Toolbox.ColourDialogue colour_dbox =
                    DocMenu.ColourDBoxEntry.GetSubMenuShow <Toolbox.ColourDialogue> ();
                colour_dbox.ColourSelected += colourdbox_Selected;

                Toolbox.ColourMenu colour_menu =
                    DocMenu.ColourMenuEntry.GetSubMenuShow <Toolbox.ColourMenu> ();
                colour_menu.Selection += colourmenu_Selected;

                DocMenu.FontDBox.AboutToBeShown += fontdbox_Show;
                DocMenu.FontDBox.ApplyFont      += fontdbox_ApplyFont;

                DocMenu.FontMenu.AboutToBeShown += fontmenu_Show;
                DocMenu.FontMenu.FontSelection  += fontmenu_Selection;

                DocMenu.ScaleDBox.AboutToBeShown += scaledbox_Shown;
                DocMenu.ScaleDBox.ApplyFactor    += scaledbox_ApplyFactor;

                DocMenu.PrintDBox.ClickSave  += printdbox_SavePrint;
                DocMenu.PrintDBox.ClickPrint += printdbox_SavePrint;
            }
Beispiel #5
0
    static void read_full_def(Font.Instance font)
    {
        OS.Coord size, res;
        int      age, usage_count;
        string   ID;

        size = new OS.Coord();
        res  = new OS.Coord();

        Console.WriteLine("Calling SWI \"XFont_ReadDefn\" to read full definition of font:");
        ID = font.ReadFullDefn(size, res, out age, out usage_count);
        Console.WriteLine("Result is:");
        Console.WriteLine("Identifier \"{0}\"", ID);
        Console.WriteLine("Size: {0}x{1} points", size.X >> 4, size.Y >> 4);
        Console.WriteLine("Resolution: {0}x{1} dpi", res.X, res.Y);
        Console.WriteLine("Age: {0}", age);
        Console.WriteLine("Usage count: {0}\n", usage_count);
    }
Beispiel #6
0
    static void scan_string(Font.Instance font)
    {
        OS.Coord result_offset = new OS.Coord();
        int      result_index, result_count;

        string string_to_scan = "The quick brown fox jumped over the lazy dog.";

        Console.WriteLine("Calling SWI \"Font_ScanString\" to find caret position using no matrix or coordinate block");
        Console.WriteLine("String to scan is \"{0}\"", string_to_scan);
        Console.WriteLine("Mouse position is 300, 10 OS units.");
        result_index = font.ScanString(string_to_scan,
                                       Font.PlotType.GivenLength |
                                       Font.PlotType.ReturnSplitCount |
                                       Font.PlotType.ReturnCaretPos,
                                       Font.ConvertToPoints(300, 10),
                                       string_to_scan.Length,          // Consider all the string
                                       result_offset,
                                       out result_count);
        Font.ConvertToOS(result_offset, result_offset);
        Console.WriteLine("Result is:");
        Console.WriteLine("Caret is at offset {0},{1} OS units", result_offset.X, result_offset.Y);
        Console.WriteLine("Caret is at index {0}, character '{1}'\n",
                          result_index,
                          string_to_scan[result_index]);

        Console.WriteLine("Calling SWI \"Font_ScanString\" to find string bounding box using no matrix.");
        Console.WriteLine("Coordinate block used for returned results.");
        Font.ScanCoordBlock coord_block = new Font.ScanCoordBlock();
        result_index = font.ScanString(string_to_scan,
                                       Font.PlotType.GivenLength |
                                       Font.PlotType.ReturnBBox,
                                       new OS.Coord(-1, -1),
                                       coord_block,
                                       string_to_scan.Length,          // Consider all the string
                                       result_offset,
                                       out result_count);
        Console.WriteLine("Bounding box (in millipoints) is:");
        Console.WriteLine("Minimum X {0}", coord_block.BoundingBox.MinX);
        Console.WriteLine("Minimum Y {0}", coord_block.BoundingBox.MinY);
        Console.WriteLine("Maximum X {0}", coord_block.BoundingBox.MaxX);
        Console.WriteLine("Maximum Y {0}\n", coord_block.BoundingBox.MaxY);
    }
Beispiel #7
0
    static Font.Instance open_non_existent_font()
    {
        Font.Instance myfont = null;

        try
        {
            Console.WriteLine("Deliberately opening non-existent font.");

            // Deliberate typo. Test failure to find font.
            myfont = new Font.Instance("Trinity.edium", 16 << 4, 16 << 4);

            Console.WriteLine("Test failed. Exception was not thrown.\n");
        }
        catch (OS.ErrorException ex)
        {
            Console.WriteLine("Test passed. Exception was thrown, error details are:");
            Console.WriteLine("error number = {0}, error string = {1}\n",
                              ex.OSError.Number,
                              ex.OSError.Message);
        }

        return(myfont);
    }
Beispiel #8
0
    public static void Main(string[] args)
    {
        Font.Instance myfont;

        try
        {
            call_cache_addr();

            open_non_existent_font();

            Console.WriteLine("Calling SWI \"XFont_FindFont\" for Trinity.Medium.Italic.");
            myfont = new Font.Instance("Trinity.Medium.Italic");
            Console.WriteLine("Font was found and given the handle {0}\n", myfont.Handle);

            Console.WriteLine("Calling SWI \"XFont_ReadDefn\" to read back font identifier:");
            Console.WriteLine("Result is \"{0}\"\n", myfont.ReadIdentifier());

            read_full_def(myfont);

            read_info(myfont);

            string_width(myfont);

            char_bbox(myfont);

            scan_string(myfont);

            list_fonts();
        }
        catch (OS.ErrorException ex)
        {
            Console.WriteLine("error number = {0}, error string = {1}",
                              ex.OSError.Number,
                              ex.OSError.Message);
        }
    }
Beispiel #9
0
    public void Init()
    {
        int[] mess_list = { 0 };

        Initialise(350, "Test App", mess_list);

        main_font = new Font.Instance("Trinity.Bold", 24 << 4, 24 << 4);

        var win_attr = new Wimp.WindowAttributes("CSharp Window");

        win_attr.WorkArea    = new OS.Rect(0, 0, 2000, 2000);
        win_attr.UserRedrawn = true;
        win_attr.ButtonType  = Wimp.WindowButtonType.ClickDrag;

        var window = new Wimp.Window(win_attr);

        // Register the event handlers for the window.
        window.Paint        += redraw_main_window;
        window.Closed       += close_main_window;
        window.MouseClick   += mouse_click;
        window.MsgDataLoad  += window_DataLoad;
        window.GainCaret    += gain_caret;
        window.PointerEnter += pointer_enter;
        window.PointerLeave += pointer_leave;

        UserDragEnd += drag_end;

        // Create an icon in the window.
        var icon_attr = new Wimp.IconAttributes("C# Button", "R5,3");

        icon_attr.BoundingBox      = new OS.Rect(150, 12, 350, 60);
        icon_attr.Flags.ButtonType = Wimp.IconButtonType.Click;
        Button = window.CreateIcon(icon_attr);

        icon_attr                  = new Wimp.IconAttributes("", 30);
        icon_attr.BoundingBox      = new OS.Rect(400, 12, 700, 60);
        icon_attr.Flags.ButtonType = Wimp.IconButtonType.GainInputFocus;
        icon_attr.Flags.BGColour   = OS.DesktopColour.White;
        WritableField              = window.CreateIcon(icon_attr);

        window.Open(new OS.Rect(100, 100, 1000, 1000),                  // Visible area
                    new OS.Coord(0, 0),                                 // Scroll offsets
                    Wimp.WindowStackPosition.Top);

        WritableField.SetText(DateTime.Now.ToString());
        WritableField.SetCaretPosition(3);

        rename_menu = new Wimp.Menu("New name:");
        // Rename writable menu item is created with "Default" as its initial
        // text and a buffer size of 30 characters. The validation string is
        // set to the command to accept digits and upper/lower case letters of
        // the alphabet.
        rename_menuitem          = rename_menu.AddItem("Default", 30, "A0-9a-zA-Z");
        rename_menuitem.Writable = true;

        file_menu     = new Wimp.Menu("File");
        save_menuitem = file_menu.AddItem("Save");

        edit_menu = new Wimp.Menu("Edit");
        edit_menu.AddItem("Rename").SubMenu = rename_menu;

        main_menu = new Wimp.Menu("CSharp Menu");
        main_menu.AddItem("File").SubMenu = file_menu;
        Wimp.MenuItem item = main_menu.AddItem("Edit");
        item.SubMenu    = edit_menu;
        item.DottedLine = true;
        main_menu.AddItem("Quit");

        // Push the text 100 OS units up a 45 degree angle.
        matrix.Translate(100, 0);
        matrix.Rotate(45);
    }