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