Native Form Widgets Getting Closer

I’ve been working hard on new native form widgets for Mac OS X. I am pretty far along and thing are looking great, but I’ve run up against some difficult layout problems that are going to take some more time to solve the right way. It is now clear to me why nobody wrote a kick-ass native form widgets implementation for Mac OS X before. It is really hard! The biggest problem so far is that theme support via Mozilla’s nsITheme API is not very good. Our layout code only implements support for nsITheme in the specific places where Windows and maybe GTK need it.

There are a bunch of other issues with form control vertical alignment and popup button rendering that are specific to Mac OS X and fixing those without hacks is going to be tricky, but I think taking the time to do this the right way is definitely the way to go. If we go with the hacks it is just going to cause more pain in the future, and we might never get around to undoing them. That is pretty much the story of Mozilla on Mac OS X up until now, and it is time to change that.

I’m a little burned out on native theme stuff for now, I think I’m going to take a short break and work on some other cocoa widget bugs.

Mozilla Mac OS X Update

Its been a while since I wrote about what I’ve been working on and the status of Mozilla Mac OS X development. I am going to make an effort to do this more often, hopefully at least once a week.

There are basically three major tasks to complete in the Gecko 1.9 timeframe.

The first task is to stabilize Cocoa widgets. We need to make them as good or better than Carbon widgets were. We’re about 80% of the way there, the biggest remaining issues being speed, painting, event handling (focus), and printing. That stuff is just going to require us to sit down and fix bug after bug. Colin Barrett is working on Cocoa printing right now, which is awesome because that is the most broken part of Cocoa widgets by far at this point. It sounds like he is making good progress, I’m excited to get that in shape.

The second item on the list is native form widgets. Right now, Camino uses its own code for native form widgets. That code has served Camino well for a while but really it isn’t written correctly and has a lot of bugs. We want to fix all of that so we can have native form widgets in Firefox 3, and that is what I have been working on for the past two weeks. It is going somewhat slowly because it requires unwinding a lot of CSS hacks that Camino used, uncovering and dealing with layout and nsITheme bugs (David Baron has helped quite a bit here), figuring out how to tame the Mac OS X HITheme API, and dealing with Cairo graphics problems. I’m hoping to have a good patch up within the next couple of weeks. Firefox 3 is going to be purdy on Mac OS X.

The last major work item on our list is to allow NPAPI plugins to render using Quartz instead of Quicktime. Right now we only allow plugins to draw with Quicktime, which is bad for plugin vendors and Mozilla performance (once a window starts using Quickdraw, it is kicked off the Quartz Extreme pipeline). I talked with Apple about a spec for this a while ago, and the result is here. I have a patch for part of that, but I’m not going to be able to sit down and finish it until I’m done with the native form widgets.

That’s pretty much where we’re at. In the future I’ll probably write about more specific issues that I’m working on, feel free to ask questions in the comments.

Exploding Turkey and other New Year Fun

My friend Thor had a dinner party in Madison on Saturday night. Its sort of like a late Thanksgiving for a bunch of my friends, we call it Thorsgiving. Thor got a 23-lb turkey, which was a little more than he could handle I guess – when taking it out of the oven he bent the tray and spilled a ton of grease. The grease hit the heating element on the oven and the resulting fireball was most impressive. It was seriously taller than me (I am 6’2), and as wide as the oven door. Thor got his face roasted, eyebrows melted and all that, but he seems to be alright. He’s tough.

Thorsgiving was on Saturday, I drove down to Madison on Friday night. I don’t get to seem my friends down there often enough. Jon and Sean and I went out on Friday and saw a DJ called Nick Nice who was amazing (old-school downtempo, soul). He played at a really good restaurant so we got to have a nice meal and some good beer instead of hanging out at a club.

Before Thorsgiving the next day about ten of us went out and played a game of football at a park. I’m not really in shape for that much sprinting so my legs are still in pain. However, aside from my sore legs the game was really fun! I think a big part of why I liked it so much was that none of us normally play football, so we could all be bad at it together.

For new year’s eve I drove back to Minneapolis with my friend Léo. A bunch of other good friends had flown into town and we all got together for the usual partying. It was so great to see everyone!

By the next morning we were all pretty sick and sluggish, but it was such a beautiful day that me, Léo, Seth, Amelia, Margaret, and Ben all drove out to Afton state park for the day. It was pretty much perfect – beautiful weather, a beautiful park, a bunch of my favorite people! We played on the ice covering the lake after Margaret demostrated that it could hold our weight. The ice looked pretty questionable to me but she just casually walked out onto it while the rest of us stood tensely, waiting for a big crack and a splash. We even set up a game of ice bowling, using rocks for pins and bowling balls.

Now it is back to work though :) Thank God I have an awesome job, because if I had to go back to a job I hated after all that fun I think I’d be pretty miserable.