Formatted Text Control Has a New Home and is Open Sourced

One of the biggest shortcomings of Xojo is the lack of a full word processor control. The built-in TextArea doesn’t support images, hyperlinks, full RTF support, page layout view, and so much more. For many Xojo developers it’s a major missing piece. Early on in our consulting projects we found this shortcoming to be a major hindrance so we needed to find a solution.

Like most Xojo developers we turned to the third-party market and found Formatted Text Control that had been developed by Brendan Murphy of True North Software. When Brendan decided to leave the community we purchased the rights to Formatted Text Control and continued its development.

FTC was originally based on the Canvas control and when Xojo was updated to support Cocoa the canvas no longer did proper keyboard handling in macOS. After butting heads with Xojo they released the Text Input Canvas (as open sourced and to this day not properly documented) we had to scramble to update FTC to use it rather than the Canvas. Then we added Retina support, fixed any number of bugs and added features that I’d have to look in git to remember.

And then, like so many things in life, we didn’t use FTC in practically any projects. For years. And when that happens you tend to forget about it and it’s no longer an important thing.

In 2019 we made some serious effort to update FTC but it never went beyond some proof of concept projects and research. By the end of 2019 we recognized that consulting was slowing down to the point it was time to get a full-time job. Obviously all work on FTC stopped. In March of 2020 I found a full-time job (still doing Xojo development) and since then I’ve been slowly selling off products when I found a good home for them.

Today, I’m pleased to announce that Formatted Text Control has found a new home and will become open sourced! Dr. Brian Gaines has been an FTC user since before we purchased it in 2007 and it’s the basis for his suite of conceptual modeling tools. Since those tools will be open source in the near future, FTC will be open source as well. More information can be found at https://pages.cpsc.ucalgary.ca/~gaines/repplus/Code/

I believe that under the stewardship of Dr. Gaines and the open source community FTC will grow and change in ways that I never envisioned. It’s such an important tool for Xojo developers that I envision a lot of interest in it.

I thank Dr. Gaines for purchasing the rights to FTC and for open sourcing it. I want to thank everyone in the community that used FTC over the years, submitted bug reports, and asked those challenging questions on what FTC can and can’t do.

Happy coding!

The Advantages of a Job versus Consulting

For the past 20 years readers have heard me talk about consulting and the joys and challenges therein.  Those blog posts aren’t wrong but for the past nine months I’ve had a full time job and my perspective has changed.  Here are some things I’ve learned.

I’ve told friends that I have a ‘real job’ now.  In reality, it’s way easier than consulting.  While I was consulting I was always worried about where the next consulting project was going to come from.  I didn’t realize how much pressure and anxiety that introduced.  As my youngest child (now a junior in college) will tell you we talked about work (i.e. consulting) ALL the time because it was an all-consuming thing.  We either talked about the current jobs, the jobs we were bidding on, or whatever hassles we were dealing with in regards to employees, insurance, cash-flow, etc.

With a full time job I don’t have to worry about the next gig.  Now I just worry about the next project my bosses give me.  Well, it’s not worry, really, since we have an awesome team of developers but it’s more intrigue and wondering how deep of a rabbit hole I’m going to go down since we deal with some pretty arcane stuff.  Not worrying about the future is a huge relief (as much as anyone can feel safe during a global pandemic).

Along with the full time job I have all the benefits that is tough with your own business.  A steady income is an incredibly good thing since as a consultant you’re either rolling in dough (figuratively) or have none.  Having a 401k is a big relief as I go into the later part of my career.  Paid time off is another huge benefit since as a consultant you don’t make any money if you’re not working.  I don’t have to worry about health insurance now either and as a small business you get totally screwed over when it comes to health insurance in the United States.  As a business it was our number one expense after payroll and it was a nightmare to deal with since practically every year there was a 20% (or more) increase in premiums unless you switch plans which is a huge pain in the ass since you worry about is the new plan the same or worse than the old one and how will it affect you and your employees.

I’ve always been thankful that Carol was wiling and able to do the HR, payroll, accounting, and contract side of the business as well as being an awesome project manager and data goddess (DBA) on top of all that.  Without that help there’s no way I would have lasted 20 years.  Me as a developer will always tell the client that ‘sure we can do that’ but it’s helpful to have the project manager say, ‘yeah, and this is how much extra it will cost.’  Someone has to be the bad guy with the client and it’s nice when it’s not you.

Consulting is very much a ‘drinking from the firehose’ type business.  You either have too much work or not enough.  There is no such thing as the perfect amount of business.  As a solo developer there’s only so many hours you can work so then you start thinking of having employees.  We were extremely lucky to have found the employees we had since most lasted five or more years and were exceptionally productive.  But dealing with employees is hard when it comes to hiring and firing (we had a handful that didn’t last 90 days for one reason or another).  They all had their strengths and weaknesses and some you can put in front of a client and others are less than ideal. Some are great at debugging and others are not. Some are great a developing new code and others are not.

I always felt that our employees were an asset to us.  I always tried to hire people that were smarter than I am (some would say this is a very low bar, I know) and some competitors were aghast that I would ‘train my future competitors’.  Having a good consulting employee is not the same as creating a future competitor.  If they were going to have their own business they’d have had one already.  I guess that’s always been one of my beefs is that people think that having a business is the same as having a job and they are far from the same (see all the arguments above).

Do I have as much time flexibility in my job as I did consulting?  It’s really hard to say during a pandemic since all of the robotics programs I’ve been a part of are on (hopefully) temporary hiatus, the music festivals we usually go to were cancelled, and we aren’t meeting in-person with the groups we usually do, and travel was restricted for most of 2020.  The company I’m with has people scattered across four timezones so there is a lot of flexibility in when people start and end work and we’re all remote anyway.  As long as the work gets done no one minds much when you start and stop or if you work weekends (I have quite a few coworkers that are being their kids teacher at this point and keeping them going via Zoom with their school teachers – honestly I have no idea how they do it).  But honestly, as a consultant I worked most weekends and did a fair amount of work at night too so I think I’m working a more reasonable and balanced workload now than when I was a consultant.

Consulting was fun and rewarding.  It has perks that are amazing if you have a good accountant and follow the rules and have multiple people that can help split the work load and responsibilities and you’re willing to put in the work (like writing blogs and developing products!).  The pain of consulting is oftentimes not worth the hassle.  Before you leave your full time job for consulting think long and hard about doing it and maybe think about all the negatives.  Maybe give me a shout to try and talk you out of it.

BKeeney Shorts Has a New Home at Varcess

Reporting is one of those things that when you need it you want something that does 80%-90% of the work for you. For us, and many other Xojo developers, the reporting tool that’s built-in to Xojo just isn’t very powerful. So we built our own and used it practically in all of our consulting projects over the last 10 years.

Shorts has a report designer component that lets developers embed a report designer in their desktop projects. The banded report designer allows the user to change the fields, fonts, layout, etc. of a report as well as do some sorting, grouping, and also allow the user to ask for criteria before the report is generated. The report viewer component has versions for desktop and web v1. And if the report design can’t handle a report, you can fall back to doing extremely complex reports via code.

It seems like a lifetime ago, but Shorts was the winner of the 2018 Xojo Design Awards for Best Developer Tool. It was an honor to get the award and I’m always ecstatic hearing from Xojo developers on how they use Shorts and how happy they are with it.

Since I took a full-time job in the spring I’ve been looking for a new home for Shorts with developers that can take pride in its development and take it to new heights. I’m proud to announce that BKeeney Shorts has a new home at varcess. They use Shorts extensively in their own products and have already announced some new and exciting additions to it.

The developers at varcess are close to finishing inheritable report designs and a XojoScript debugger. Future Versions will add API 2.0, Web 2.0 support, sub-reporting, and a REST API reporting server. Whew! That’s a ton of new features and I can’t wait to see what Xojo developers do with them.

Stay tuned and check the xojo forum for future announcements. Existing Shorts customers will be informed via email and will receive a discount when updating to the next new version.

Please visit https://www.varcess.com for more information and to get updated demos in the future.

What About Bob?

A number of recent forum threads and blog posts have invoked my name.  I mostly didn’t respond to those individual posts and decided to write one big post.

I’m still in the community:  Sort of.  I took a full-time job just before the pandemic hit the US and I’m so thankful that I’m able to provide for my family in a stable and hopefully long-term position.  Xojo consulting wasn’t keeping me very active and that’s even after it was just me doing the Xojo consulting.  You can chalk this up to a variety of issues that all revolve around Xojo.

Consulting leads just don’t show up like they used to:  At the height of BKS we had 4 full-time developers and a DBA/Project manager.  That means we picked up at least two big projects a year and a ton of smaller filler projects.  Those just don’t show up any more.  Do cross-platform apps now use a different language?  Is it because of Xojo quality issues?  Is it because of bad press?  Is it because I expressed my displeasure with Xojo?  A global pandemic that greatly accelerated a looming recession? Sure.  All of the above probably.  But I know other consultants that are in the same boat though a select few have flourished during this period too.  So maybe it’s an ebb and flow thing.

The whole API 2 fiasco:  API 2 is of dubious quality for existing projects.  If you have a couple hundred thousands of lines of code in classic API code you simply do not have the time or resources to convert.  What’s worse, is that I have several Windows apps that crash (as in poof!  No crash log or catchable exception) in any version of Xojo that uses API 2.  This one thing keeps me using 2019 R1.1.  (Update, this was resolved in one app that used WebKit for the HTMLViewer renderer and is marked as fixed for 2020 R1.1).

If you want proof of this statement ask anyone at Xojo when the entire IDE is going to be converted to API 2.  That alone is a multi-year project and I don’t care what Geoff says – they are NOT eating their own dog food when it comes to API 2.  They decided that it wasn’t worth converting to API 2 for existing work.  That says volumes if you ask me.

More targets less engineers:  Xojo used to have only desktop targets which meant that everyone on the development team focused on desktop.  Since then they’ve lost/fired engineers and created more targets.  How much time and effort has gone into iOS, and now Android development?  You simply cannot tell me that they are adequately staffed to handle all of these targets.  Web has been a multi-year project as has Android.  In the meantime they touched every single class in Xojo for API 2.0 and given the results I’m not sure the platform as a whole is better for it.  As far as I know they have no *dedicated* compiler engineer and that seems to be an issue with 64-bit debugging.

Locking of threads and banning of users on the forums:  It’s their sandbox and their tools so they can do whatever they want with their forum.  But it sure seems like a lot of threads get locked (by non-Xojo employees!) and posts get deleted rather quickly.  Look, I get it, they want to present a consistent look to the world but the almost fanatical control of the forum feels…desperate. Banning of users should be the very last resort.

The comical stance that professional developers are not the core users of Xojo:  Xojo will deny this, of course, but I’ve been around for 20 years in this community.  I’ve seen a lot of developers come and go.  There’s the hey, this product is very cool phase.  Then there’s the now I’m going to do something hard with this tool phase.  Some get through it.  Many don’t.  With the many dealings with former Xojo users not once have I heard of Xojo contacting them on why they left.  

Hell, maybe the users that know Xojo the best are the hardest ones to please.  Maybe it *is* easier to find new buyers than to appease existing customers for renewals.  But it’s the existing users that are the best marketing tool of the company in my opinion.  How many times have I promoted Xojo over the past 20 years?  Many people accused me of working for Xojo and being a shill.

Trust is Earned:  One of the things that we, as developers, need is trust in our tool of choice.  For many developers that have been around a long time that trust was earned a decade ago.  The API 2 fiasco and the many new targets has eroded and downright sheared off the goodwill for many of Xojo’s most ardent supporters.  I don’t know how the company recovers from those hits without being brutally honest with users and themselves.  They simply cannot be everything to everybody.  With Swift getting ported to Windows and .NET Maui on the horizon, in addition to other tools that are making big strides in cross-platform development Xojo needs to be laser focused on quality releases or they might find themselves in the dustbin of history.  Earn back our trust and I think they’ll be rewarded.  Keep mucking around with the above issues and the future doesn’t look bright.  Again, in my opinion.

Where I’m at:  I’m still doing Xojo programming for a living.  I am not doing much consulting because I don’t desire to.  I’ve always tried to do the best for my clients and, frankly, Xojo is not living up to my expectations for my clients.  I think they’ve forgotten where they came from and what developers LOVED about the product.  I’m sure there are some people that find Xojo because of web apps or iOS but I can’t imagine it’s a lot of new users.  I could be wrong on that but I’ve wondered for many years who is Xojo’s audience.

My products, the ones I’m still selling, are getting minimal to no effort on my part simply because I’m not doing much consulting.  These products were things I used on a regular basis and with no consulting there’s no usage and no need to update.  I’m looking for homes for them because they deserve to have a developer that cares about them.  Some in the community have suggested open sourcing them and I can tell you right now there is no freaking way that’s going to happen.  No argument in the world is going to convince me otherwise so just stop sending me that recommendation.  I’m not asking for much (in my opinion) to get these products but perhaps that’s also indicative of how poor the Xojo 3rd party market is right now and an overall indicator of the health of Xojo.

I wish nothing but the best for Xojo.  This last year and half has soured my outlook to the point where I just can’t recommend it to anyone that’s serious about a commercial desktop applications.  I haven’t done a web project in well over a year and it’s been many years since I’ve done an iOS project in Xojo.  Without outstanding desktop support I’m left in limbo and wondering why the hell I keep renewing a license.

I know I’m not the only one with these thoughts and ideas.  Feel free to add comments below.  Please try to be respectful towards Xojo employees and each other.

BKeeney Cyber Weekend

BKeeney Software is offering a special discount for Cyber Weekend this year! From Friday, November 29 through Monday, December 2 we’re offering 20% off our products. Now is the perfect time to pick up the Xojo Design Award winning BKeeney Shorts; or make a database driven project easy with ActiveRecord and ARGen 3.

No coupon code is necessary! Some of our top products include:

ARGen 3 – Create ActiveRecord classes and UI for database driven applications made fast.

BKS Shorts – Create and render reports in your Xojo Desktop and Web applications. Renders to screen, printer, HTML, CSV, and PDF formats.

BKS Tab Control – A classic “tabs control” for Xojo Desktop applications.

Formatted Text Control – A TextArea replacement that allows inline pictures, hyperlinks, and much more.

Task Timer 6 – If you aren’t tracking your time you’re missing out on a key metric on how well you estimate and where you spend more of your time.

Task Timer 6

We are pleased to announce the newest version of Task Timer. It has been four years since our last update to Task Timer, so we’ve started from the ground up. Task Timer 6 is faster than ever before and ready for the future!

Never lose money again! Track your time accurately with Task Timer. Get back lost time by knowing how much time was spent on any project. Use historical time tracking data to improve your estimates. Never again find yourself guessing at billing.

Projects and timers are now easier to manage, start, and stop. Managing time sessions is now faster and easier to do. The events manager no longer blocks the main window, and we fixed a couple bugs along the way.

Version 6 will automatically import and convert all existing Task Timer 5 data. You won’t miss a beat. Stop all timers in Task Timer 5 and close Task Timer 5. Then simply open Task Timer 6 and import.

Task Timer 6 is a crucial update. Unfortunately, the previous version is near it’s lifecycle end by more than one cause. We regret that we will be unable to support Task Timer 5 in any way due to the final closure of the commercial licensing server we were using.

To encourage everyone to upgrade, the Task Timer 6 software will automatically offer an upgrade discount. If there are any troubles with the automatic process, please don’t hesitate to contact us at support@bkeeney.com!

Download Task Timer 6 today! https://bkeeney.com/tasktimer

BKeeney Celebrates Bikini Day!

Happy fourth! Happy fifth! Happy holidays! July 5th is National BKeeney… er Bikini Day. We like to celebrate the holiday with a discount on our products! Save 20% with the coupon BKINI-DAY

Use these handy links to apply the discount automatically:

ARGen – Create ActiveRecord classes and UI for database driven applications made fast.

BKS Shorts – Create and render reports in your Xojo Desktop and Web applications. Renders to screen, printer, HTML, CSV, and PDF formats.

BKS Tab Control – A classic “tabs control” for Xojo Desktop applications.

BKS WebSplitter – Splitter Control for Xojo Web Apps

Formatted Text Control – A TextArea replacement that allows inline pictures, hyperlinks, and much more.

Task Timer 6 – If you aren’t tracking your time you’re missing out on a key metric on how well you estimate and where you spend more of your time.

Xojo Trainer (Download Only) – Learn Xojo (offline) from Xojo professionals with over 15 years of Xojo development experience.

Formatted Text Control 3.2.1

BKeeney Software has released version 3.2.1 of the Formatted Text Control, a canvas based word processing control for Xojo Mac OS X and Windows applications. The FTC is an alternative to the built-in TextArea control and allows for in-line graphics, hyperlinks, custom components, better RTF support and much more. The demo project has quite a few examples, including a Masked Text Field, XojoScript example, Embedded FTC (in your own canvas), as well as a word processor with page view.

The Formatted Text Control costs $150 and is 100% unencrypted Xojo code. Version 3 and above requires the use of the Text Input Canvas plugin (included in package) to allow for proper text handling in Cocoa builds.

Download links and more information at http://www.bkeeney.com/formatted-text-control/ 

This version has a number of bug fixes reported by users since release. It is recommended for all users. Registered users should be receiving an email from our automated distribution system.

Bug Fixes:

  • Fixed issue where all StyleRuns after a hyperlink will also be marked as hyperlink
  • Issue #4074: RTF clipboard ignores hyperlinks with umlauts and cuts them
  • Issue #4087: missing RTF space after “\kerning0” keyword
  • Issue #4130: FTXojoScriptField: Left part of the text is hidden by the section of the line number.
  • Issue #4135: Migrating texts from a TextArea to the FTC (Ich migrieren Texte aus einer TextArea in das FTC)
  • Issue #4196: Remove GOTO calls from FTC

ARGen 3.0.3

BKeeney Software Inc. is proud to announce an update to ARGen, our ActiveRecord Generator utility for Xojo developers. This minor update includes dark mode support, speed improvements, and important updates for generated projects. Updating to 3.0.3 is recommended for all ARGen users.

ARGen is available for macOS and Windows. It can be used for free in limited mode, and is priced at $99.95 to unlock all features. Existing version 2.x users will automatically be provided an upgrade opportunity when launching version 3.

3.0.3 Release Notes:

Changes:

  • Added Dark Mode support
  • Simplified manual relationship management
  • Selecting a different SQLite database now clears the password field
  • kMaxReturn is now a protected constant for cleaner code
  • DBUpdates module code is now cleaner
  • Improved instructions in some locations
  • Base project templates optimized
  • Preferences module no longer writes to SpecialFolder.Preferences
  • iOS Create Data Sources defaults to true
  • Updated links to Xojo documentation
  • Generated localization module constants are now protected

Fixes:

  • DBUpdates.SetDBVersion no longer uses a BKS extension synonym for str()
  • Fixed return statement for iOS apps using 2018r2
  • Projects with empty name now have default save name
  • BKS Created/Modified overrides no longer generate properties that fail to Register
  • Corrected minor UI bug on Windows
  • Project listing loads faster
  • Speed improvements throughout the software
  • Projects created but never saved are no longer retained when closed
  • Checking for updates at launch now works
  • Preferences window will show the last update check time

Pricing, examples, and more details can be found at the project homepage at https://bkeeney.com/argen/ 

Formatted Text 3.2

Lenexa, KS (February 12th 2019) — BKeeney Software Inc. releases a major update to Formatted Text Control. Developers can now implement tab leaders, change character spacing, implement text drop shadows, and use standard keyboard handling in their applications that require a robust word processing control. This version contains dozens of new, changed, and updated items.

Formatted Text Control (FTC) is a set of classes that offer developers word processing capabilities for their Mac and Windows desktop applications. FTC has several viewing modes that gives users a choice of Page View, Edit View, or Single Line view. FTC supports inline graphics, hyperlinks, and text formatting that the built-in Xojo TextArea control just can’t do. Users can import and save text, RTF, and XML format documents.

FTC version 3.2.0 is a free update to all 3.x users and is recommended. Existing users should be notified via FileShare but can contact BKeeney Software at support@bkeeney.com if they have any questions.

FTC is sold as unencrypted source code and costs $150 USD. More information and demo projects are available at https://www.bkeeney.com/formatted-text-control/ .

Complete change list:
New Items:

  • Contains code from the ImagePlay Effects Library – http://imageplay.sourceforge.net 
  • Tab Leaders implemented
  • Issue #3832: Implement Control + Up/Down Arrow Key Handling
  • Issue #3833: Implement paragraph moving via keyboard handling
  • Issue #3700: Drop Shadow available on Windows and Linux
  • Issue #3795: The FTDocument properties characterStyles and paragraphStyles need to be accessible to subclasses.

Added CharacterStyles and ParagraphStyles getter/setters so developers can create their own style editor.
* Character Spacing implemented (requires Xojo >= 2015.4)

Bug Fixes:

  • Issue #3650: CustomObjects Demo: Added FTFile.Clone method so it works with FTIterator propertly.
  • Issue #3653: macOS: “getDoubleClickTime” – Cocoa replacement for old CarbonLib call
  • Issue #3699: Add Win64 Declares
  • Issue #3654: Hi-DPI Mode: FTPicture – Handles drawn incorrect and matches wrong.
  • Issue #3702: DragRect is half height in HiDPI
  • Fixed an issue with FTParagraph clones that have a different ID after going through the FTIterator
  • Issue #2007/3605: Candidate Window Shows up in Wrong Location
  • Issue #3646: FTParagraph.getXML saves wrong TabStop Properties
  • Issue #3709: FTPicture ignores Nudge property
  • Issue #3748: FTDocument.selectionBold,Italic, shadow, strikethrough, subscript, superscript, underline now works properly
  • Issue #3752: FTRBScript: Fix for printing line numbers
  • Issue #3763: RTFReader/FtcRtfReader ignored the left/right margin and first indent of paragraphs.
  • Issue #3764: RTFReader ignored “\sb” SpaceBefore of paragraphs.
  • Win64 Issue: Modified FTCUndoPaste.constructor and FTCUndoManager.savePaste to allow pasting (Xojo Compiler Issue. Feedback 53967)
  • Issue #3750: Suggestion & comparison of the Office applications for the display optimization of the paragraph background color
  • Issue #3775: Implement Corner Color Property in Formatted Text (Switch between Light/DarkMode – Xojo Version >= 2018.3)
  • Issue #3777: Implement Page Shadow Property in Formatted Text (Switch between Light/DarkMode – Xojo Version >= 2018.3)
  • Issue #3755: Printing has the side-effect of scrolling the editing window to the top
  • Issue #3794: FTDocument.getSelectedParagraphs returns first paragraph of multi-paragraph doc regardless of insertion point
  • Issue #3796: FTStyleRun.copyStyleData does not copy background color
  • Issue #3820: RTFWriter missed “\par” after the last Paragraph
  • Issue #3774: FormattedText — changeParagraphMargins method name changeParagraphMarigns
  • Issue #3762: FTDocument.selectionFontColor returns sameColor false when it should be true
  • Issue #3842: FTStyleRun.updateWith Style sets textColor black when undefined
  • Issue #3806: FTDocument.addParagraphStyle and addCharacterStyle bypassed by insertXML and cannot be overridden in subclass
  • Issue #3818: Print RB Code Editor: Unwanted positive y-offset of the content compared to its line number
  • Issue #3637: FTCParagraphStyle.backgroundColor won’t set correctly
  • Issue #3910: RTF-Reader ignores local value for first line indent in paragraphs
  • Issue #3914: First Paragraph on Page with Background Color ignores Before Space
  • Issue #3917: Paragraphs Background Color ignores Hanging Indent

Changes:

  • Renamed FormattedText.xDisplayPosition to FormattedText.hScrollValue to better reflect what it is.
  • Renamed FormattedText.lastXDisplayPosition to FormattedText.lastHScrollValue
  • Renamed FormattedText.yDisplayPosition to FormattedText.vScrollValue to better reflect what it is.
  • Renamed FormattedText.lastYDisplayPosition to FormattedText.lastVScrollValue
  • Renamed FormattedText.GetResolution to FormattedText.GetMonitorPixelsPerInch to better reflect what it does.
  • Renamed FTDocument.SetResolution to FTDocument.setMonitorPixelsPerInch
  • Renamed FTDocument.GetResolution to FTDocument.getMonitorPixelsPerInch
  • Renamed FTDocument.Resolution to FTDocument.MonitorPixelsPerInch
  • FormattedText.DISPLAY_ALIGN_CENTER/LEFT/RIGHT replaced with Display_Alignment enum
  • FormattedText.MODE_PAGE/NORMAL/EDIT/Single replaced with Display_Mode enum
  • FTLine.FIRST_LINE/MIDDLE/LAST/BOTH replaced with Line_Type enum
  • FTPicture.Handle constants converted to FTPicture.Handle_Type enum
  • FTParagraph.Alignment constants converted to FTParagraph.Alignment_Type enum
  • Removed Alignment constants from RTFConstants module
  • Changed how hyperlinks are drawn in FTObject.drawHyperLink
  • Changed how the gradient shadow is drawn in FTPage.drawPageViewMode
  • Changed how strikethroughs are drawn in FTObject.drawStrikethrough
  • Changed how underline is drawing in FTObject.drawUnderline
  • Can now read/write shadow properties from/to RTF Documents
  • Added AcceptFileDrop to test window for testing custom objects. Added FTFile into project.
  • Changed how Styles are saved and read in XML format.
  • Issue #3802/1456: Command + (Shift Key) + Arrow Keys doesn’t move insertion point correctly
  • Changed RB Script classes to Xojo Script.
  • Now have TabLeaders (WORK IN PROGRESS)
  • Embedded FTC demo now does text formatting with keyboard shortcuts.
  • Removed unused FTDocument.DocOffset method.
  • Fixed TargetCocoa and TargetWin32 constants with more appropriate ones for 2018 R4.
  • Removed duplicated code line in RTFReader.SetupKnownCommands
  • Updated ParagraphWindow to easy format First Line and Hanging Indents

PARTIAL IMPLEMENATION:
* Issue #3753: PageBreaks won’t load from RTF