SOLVED! Google web fonts not displaying on (some) macs

August 24th, 2011

Google web fonts are great. If you don’t know about them, you really need to check them out. They enable you to embed non-standard fonts into your website …and you don’t have to worry about any font licensing issues. But, we recently ran into a problem at work with Google web fonts – they weren’t displaying correctly on some Macs and Apple products. The really frustrating thing is that they worked fine on most Macs, but on some machines they didn’t work at all, no matter which browser we used. The fonts worked correctly on the Google web fonts site, but not when we used the Google code samples on our own sites.

One of my coworkers dug into the issue and found an undocumented solution. Simply add the !important hack to the font-face declarations in your CSS wherever you specify a Google font. Problem solved! Here’s a quick example:

<head>
    ...some meta tags and junk here...
    <link href="http://fonts.googleapis.com/css?family=Rokkitt" rel="stylesheet" type="text/css"></link>
    <style="text/css">
        ...some styles...
        h1 {
            font-family: 'Rokkitt', serif !important;
        }
        ...some more styles...
    </style>
    ...more junk here maybe...
</head>

We never did figure out what is causing the issue, or why it only occurs on some Macs. Ultimately, though, we don’t care why it happens, as long as we can fix it. Anyway, since this bug is undocumented as far as I can tell, I thought I’d share this simple hack that fixes it. Thanks to my coworkers at Toolbox No.9 for solving the problem!

If you like this, share it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Reddit
  • RSS
  • StumbleUpon
  • Twitter

Flash mystery error 1046: InstanceInfo

August 8th, 2011

I was working on a Flash component today and it started throwing this exact error at me after I cut-and-pasted some of the designer’s assets into the FLA:

1046:Type was not found or was not a compile-time constant: InstanceInfo

I couldn’t figure it out. I didn’t have any symbols, actionscript, or instance names of “InstanceInfo.” I wasted nearly an hour tracking down this issue only to find out that it was another damn TLF Textfield BUG! Does anyone actually use the TLF Textfield? It’s nothing but trouble for me.

Enough ranting. The problem was that the designer had accidentally created a few TLF Textfields in a separate FLA, which I pasted into my FLA. Unfortunately, my document was set to publish to Flash 9, which doesn’t support TLF Textfields. The really annoying thing was that I didn’t get a warning from Flash when I pasted in the assets and the IDE gave me a cryptic and useless compiler error.

Luckily, the fix is simple. Open up the publish settings and click on the Flash tab. The IDE will then finally flag the TLF Textfields as a problem and show you a warning popup. If you want to change your publish settings to Flash 10, click “cancel” when the popup appears. If you want to keep your settings where they are, click “ok” and flash will convert your TLF Textfields to Classic Text. Save your FLA and you’re done!

I’ve been to busy to post much here lately, but I thought that this might actually save someone else a small headache.

If you like this, share it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Reddit
  • RSS
  • StumbleUpon
  • Twitter

Flash CS5: How do I get my timeline frames to zoom out?

March 8th, 2011

This is a strange one… I was working in Flash CS5 the other day and I somehow zoomed in to my timeline frames and couldn’t get them to zoom out. I did some Googling and found lots of people with the same problem, but no solution.

scroll mouseWell, if you’re like me, you use a scroll mouse, where the scroll wheel is actually a clickable middle button. Most 3D modelling programs actually use this middle mouse button, but a lot of programs do not, so it’s easy to forget about it.  It turns out that I had accidentally clicked the mouse wheel while I was using it to scroll through the timeline. So, to get it to zoom back out, I had to click and hold the mouse wheel down while scrolling in the timeline.

This seems like one of those weird “features” that Adobe added to Flash even though nobody asked for it. You’re much more likely to do this accidentally while quickly clicking around than you are to ever use this feature.  This would be a useful feature on the stage, but it doesn’t work on the stage – just the timeline. Huh?

Overall, though, Flash CS5 is a MASSIVE improvement over CS4. If you haven’t upgraded yet, you should. It’s still a little less stable and a bit slower than CS3, but the workflow improvements are great.

If you like this, share it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Reddit
  • RSS
  • StumbleUpon
  • Twitter

Writing a JSFL component for Flash AS3

March 8th, 2011

In case you don’t know, JSFL is a javascript library used to create components for the Flash IDE. So, if you have repetitive tasks that you want to automate, you can create a component that does it for you. Once you have your component debugged, you can actually package it and distribute it as an MXP file for others to use. For example, one of my favorite components is the Preloader Shuffle component that I used to use back in my AS2 days (it seems to be unavailable now). I recently made a component to Rename a class package throughout all the files in a project. It’s essentially a glorified find-and-replace script for multiple FLA and Actionscript files. You can get it here.

I never needed to write a custom component until recently. At work, I have a generic Flash AS3 application that works as a good starting point for new projects. It usually needs pretty heavy modification, but having a simple setup with the preloader, flashvars, error tracking, analytics, and basic pages already set up saves hours of coding on each new Flash project. The one downside is that I have placed all of the classes in a package called “com.sampleclient.” So, I have to rename this class package in all of the Actionscript class files and update all of the linkages in the FLAs. This takes about 20 minutes each time. So, I decided to write a JSFL component to do all of this renaming for me.

Well, the reality of JSFL is that it’s one of the many poorly documented features of Flash. So, actually creating this component took a lot longer than I expected. I’m posting this in the hope that it might save someone else a little time. The finished MXP component is available here. All of the source files that I used to create it are here. Here are a few tips for you if you are thinking of going down this rabbit-hole:

You will need some links to help you get started. I probably referenced a few dozen different blogs and forums to get this component working, but here are a few of the most helpful links I found:

There are some more links at the bottom of this post that I found helpful.

It’s only worth the trouble to create a component if you really plan to use it a lot. I would estimate that it took me over 12 hours to get this component working the way I wanted. So, I will have to use it on at least 36 projects before it starts to actually pay my time back. Most of this development time was spent on the JSFL learning curve. It’s not as simple as it looks.

JSFL is poorly documented, so you will spent a lot of your development time trying to figure out what to type into Google to get the information you need. First, you’ll spend 20 minutes or so trying to get the name of a command that does what you want. Only then can you actually figure out how to make that command work. The links in this post can help you in your snipe hunt.

You have to get creative. For my component, it was crashing if I tried to run it without opening an FLA file. It needed an open FLA file to get the Document DOM. My solution was to have the component open a blank FLA file when it started so it would have a valid DOM. It seems obvious now, but it took me a while to figure that out.

There are some things that you just can’t do. My component opens every FLA file within a given folder and searches it for a class package name. Then it saves and closes the file. But what if that file is already open in the IDE? Is there any way to leave that file open? Nope. The JSFL component has no way of knowing that the file was already open, so I just have to close all FLAs when I’m finished with them.

Other people’s code is EXTREMELY helpful. That’s why I’m posting my source code here. Feel free to pick it apart and learn from it. Just don’t put your name on it and pass it off as your own work please. If you can make improvements to this, I will be happy to update the component and give you full credit. This component does have one bug that I know about: After moving all of the actionscript files to the new class package folder, it should delete the old folder, but it doesn’t. I don’t know why.

Anyway, good luck! If you have any useful components that you have built, feel free to send them my way.

In case you missed it, you can download the source files here.

Other useful links for JSFL:

If you like this, share it:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Reddit
  • RSS
  • StumbleUpon
  • Twitter

Top