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]); }
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); }
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); }
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; }
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); }
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); }
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); }
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); } }
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); }