TweetFollow Us on Twitter

December 93 - GRAPHICAL TRUFFLES

GRAPHICAL TRUFFLES

REMEDIES FOR COMMON QUICKDRAW PROBLEMS

JOHN WANG

[IMAGE 095-096_Graphical_Truffl1.GIF]



During the past two years alone, the Developer Support Center has answered more than 1000 QuickDraw-related questions. The answers to most of these questions are now available in Apple's plentiful "one-to-many" sources of support for developers, includingInside Macintosh , Technical Notes, Q&As, sample code, and of coursedevelop. But you might find it helpful to look here first if you're having a QuickDraw problem. The symptoms of some common problems are listed in this column along with Dr. John's suggested remedies.

These are the symptoms that we'll suggest remedies for:

  • CopyBits is too slow.
  • You have a palette created with a tolerance of 0, but the colors in your graphics port don't match the palette.
  • You're using palettes stored in 'pltt' resources and they don't seem to have any effect.
  • Strange colors get drawn when you do a CopyBits between different graphics ports.
  • The pen pattern isn't being used when PaintRect is called with hilite penmode.
  • NewGWorld doesn't return an error and the GWorldPtr it returns is unchanged.
  • QuickDraw routines aren't working on your GWorld.
  • Your complement procedure isn't being called for InvertRect.

THE REMEDIES

CopyBits is too slow.
Remedy:
There's little doubt that CopyBits is a complex piece of code, so there aremany factors that can affect its execution speed. In fact, there's a long Technical Note dedicated to this topic, called "Of Time and Space and _CopyBits" (QuickDraw 21). But here are a couple of quick hints for possible ways to speed up CopyBits:

  • If your source and destination graphics ports have matching color tables, set the ctSeed field in the color tables of the source and destination to be the same. This removes the overhead of comparing the entries in the color tables to determine whether color mapping is necessary.
  • Use GWorlds when copying the entire off-screen buffer to the screen. GWorlds will properly align your pixel data so that CopyBits calls don't require byte and bit shifting. (You must create the GWorld with a depth of 0 and pass the rectangle in global coordinates.)

You have a palette created with a tolerance of 0, but the colors in your graphics port don't match the palette.
Remedy:
The colors in the graphics port may appear to be different, but remember that only the high eight bits of an RGB color component are important. The lower eight bits aren't significant because they're ignored by the hardware. Consequently, for optimization and implementation reasons, NewPalette creates a palette of colors by copying the high byte of each color in the input color table to both the high byte and the low byte of the palette. For example, if the color table has the color ($ff00, $75fe, $0080), the equivalent palette entry would be ($ffff, $7575, $0000).

You're using palettes stored in 'pltt' resources and they don't seem to have any effect.
Remedy:
You're having this problem because GetNewPalette doesn't work as documented inInside MacintoshVolume VI. The description of this routine in Volume VI states that a palette will be loaded and attached to the current window, and if the palette requested isn't available, the default application palette is used instead. The actual implementation of GetNewPalette is much simpler: it only loads the specified 'pltt' resource with GetResource and detaches it with DetachResource to make it a handle; if the specified 'pltt' resource isn't found, GetNewPalette doesn't load the default application palette.

Strange colors get drawn when you do a CopyBits between different graphics ports. Remedy:More than likely, your graphics port and device are incorrectly set. The current port and device must always be set to the destination port and device. So if you're copying from a window to an off-screen GWorld, you must call SetGWorld to set the GWorld as the current port and device. When you do a CopyBits from a GWorld to a window, you must set the port to the window and the graphics device to the MainGDevice. This rule actually applies to all QuickDraw drawing.

The pen pattern isn't being used when PaintRect is called with hilite penmode.
Remedy:
A bug in QuickDraw causes the pen pattern to be ignored when used with hilite penmode in the following calls:

  • FrameRect, PaintRect, and FillRect
  • LineTo (vertical and horizontal lines only)
  • FrameRgn, PaintRgn, and FillRgn (rectangular regions only)
  • FramePoly, PaintPoly, and FillPoly (rectangular polygons only)
A simple workaround for PaintRect is to call PaintRoundRect instead; that is, call

PaintRoundRect(&myRect, 0, 0);

rather than

PaintRect(&myRect);

NewGWorld doesn't return an error and the GWorldPtr it returns is unchanged.
Remedy:
The cause of this problem is typically memory movement. Many object-oriented languages, such as MacApp, store data in handles. If the GWorldPtr pointer variable you pass to NewGWorld is stored in a relocatable block of memory, and if that block moves during execution of NewGWorld, NewGWorld will store the GWorldPtr in the old dereferenced storage location. Instead, pass a local GWorldPtr to NewGWorld and copy the local GWorldPtr to the relocatable memory block afterward.

QuickDraw routines aren't working on your GWorld.
Remedy:
Although some routines in QuickDraw will work when LockPixels isn't called, most routines will have unexpected results. Always call LockPixels if you want to access or draw into your GWorld. To prevent memory fragmentation, the GWorld image should be unlocked when you're not accessing the pixel data so that it can move in memory.

Your complement procedure isn't being called for InvertRect.
Remedy:
Complement procedures are called from InvertColor only. All other Invert calls simply invert bits, as in QuickDraw's original design.

NEED A REAL DOCTOR?
The next time a QuickDraw problem is giving you a headache, look here first for help. Dr. John's list of remedies may provide just what you need to solve your problem. If you don't find a solution here, check as usual in Inside Macintosh and the many other available sources of help.

JOHN WANG (AppleLink WANG.JY) of Apple's Developer Support Center has a new addition to his family, named Pepper. The four-month-old baby girl weighs in at a healthy nine pounds. She has big brown eyes, baby teeth, and a generous amount of hair. She sleeps all day and makes almost no noise at night. And she's nearly toilet trained already! Pepper even gets along well with her older brother Skate; they like to nibble playfully on each other's ears. But when it comes to food, they're fearless; they fight, kick, and howl -- all for just a bone. *

Thanks to Don Moccia and Brigham Stevens for reviewing this column.*

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Apple Configurator 2.6 - Configure and d...
Apple Configurator makes it easy to deploy iPad, iPhone, iPod touch, and Apple TV devices in your school or business. Use Apple Configurator to quickly configure large numbers of devices connected to... Read more
Amadeus Pro 2.4.4 - Multitrack sound rec...
Amadeus Pro lets you use your Mac for any audio-related task, such as live audio recording, digitizing tapes and records, converting between a variety of sound formats, etc. Thanks to its outstanding... Read more
Mellel 4.0.3 - The word processor for sc...
Mellel is the leading word processor for OS X and has been widely considered the industry standard for long form documents since its inception. Mellel focuses on writers and scholars for technical... Read more
Suitcase Fusion 8 19.0.3 - Font manageme...
Suitcase Fusion 8 is the creative professional's font manager. Every professional font manager should deliver the basics: spectacular previews, powerful search tools, and efficient font organization... Read more
Final Cut Pro X 10.4 - Professional vide...
Final Cut Pro X is a professional video editing solution. Completely redesigned from the ground up, Final Cut Pro adds extraordinary speed, quality, and flexibility to every part of the post-... Read more
Compressor 4.4 - Adds power and flexibil...
Compressor adds power and flexibility to Final Cut Pro X export. Customize output settings, work faster with distributed encoding, and tap into a comprehensive set of delivery features. Features... Read more
Cocktail 11.2 - General maintenance and...
Cocktail is a general purpose utility for macOS that lets you clean, repair and optimize your Mac. It is a powerful digital toolset that helps hundreds of thousands of Mac users around the world get... Read more
Microsoft Office 2016 15.41 - Popular pr...
Microsoft Office 2016 - Unmistakably Office, designed for Mac. The new versions of Word, Excel, PowerPoint, Outlook and OneNote provide the best of both worlds for Mac users - the familiar Office... Read more
Motion 5.4 - Create and customize Final...
Motion is designed for video editors, Motion 5 lets you customize Final Cut Pro titles, transitions, and effects. Or create your own dazzling animations in 2D or 3D space, with real-time feedback as... Read more
Apple Pro Video Formats 2.0.6 - Updates...
Apple Pro Video Formats brings updates to Apple's professional-level codes for Final Cut Pro X, Motion 5, and Compressor 4. Pro Video Formats includes support for the following professional video... Read more

Latest Forum Discussions

See All

Lineage 2: Revolution’s end of year upda...
Now available in 54 countries worldwide, Lineage 2: Revolution is continuing its global quest to be the most popular mobile MMORPG by launching a jam-packed end of year update. Complete with many subtle tweaks to help improve users’ online... | Read more »
The 5 best Star Wars games on iOS
The time has almost come.Star Wars: The Last Jedifinally hits theaters in the cinematic event that might be bigger than Christmas. To celebrate, we're taking a look at the best--and only the best--Star Warsmobile games to date. [Read more] | Read more »
Life Is Strange (Games)
Life Is Strange 1.1 Device: iOS Universal Category: Games Price: $2.99, Version: 1.1 (iTunes) Description: Life Is Strange is a five part episodic game that sets out to revolutionize story-based choice and consequence games by... | Read more »
Oddworld: New 'n' Tasty (Game...
Oddworld: New 'n' Tasty 1.0 Device: iOS Universal Category: Games Price: $7.99, Version: 1.0 (iTunes) Description: ** PLEASE NOTE: Requires 3.6GB free space to install. Runs at variable resolutions based on device capabilities.... | Read more »
Gorogoa (Games)
Gorogoa 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Gorogoa is an elegant evolution of the puzzle genre, told through a beautifully hand-drawn story designed and illustrated by Jason... | Read more »
Why Guns of Boom will be big for mobile...
Earlier this week, Game Insight, the minds that brought you Guns of Boom, revealed plans for an esports mode in the popular FPS title, with big implications for the game's future. Guns of Boom has been quite popular for some time now, so it's... | Read more »
The best mobile games to play on lazy ho...
With the holidays in full swing, there's hopefully going to be a lot of time off work lazing around the house. With all of that free time, it's a perfect opportunity to catch up on some mobile games that you might have missed out on earlier this... | Read more »
Rules of Survival guide - how to boost y...
It's not easy surviving in the "every-man-for-himself" world of Rules of Survival. You'll be facing off against many other players who might be more skilled than you, or are luckier than you. There are a lot of factors weighing against you. With... | Read more »
FEZ Pocket Edition (Games)
FEZ Pocket Edition 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: | Read more »
Amazing Katamari Damacy guide - beginner...
Amazing Katamari Damacy brings the bizarro world of the original games to mobile and shifts them into an endless format that's just as addictive as the PlayStation entries. Your goal is still to roll as much random stuff as you possibly can, though... | Read more »

Price Scanner via MacPrices.net

Updated Price Trackers: Macs, iPads, iPhones,...
Scan our Apple Price Trackers for the latest information on sales, bundles, and availability on systems from Apple’s authorized internet/catalog resellers. We update the trackers continuously: – 15″... Read more
How to preorder a new iMac Pro and pay zero s...
B&H Photo and Adorama are accepting preorders on multiple configurations of the new Apple iMac Pro. Both resellers charge sales tax for residents of NY & NJ only, and shipping is free.... Read more
Apple Macs back in stock at Amazon with model...
Amazon has MacBook Pros, MacBook Airs, MacBooks, and iMacs on sale for up to $200 off MSRP as part of their Holiday/Christmas sale. Shipping is free. Note that stock of some Macs may come and go (and... Read more
Apple offering free overnight delivery on all...
Apple is now offering free overnight delivery on all in stock products until 3pm local time on December 22nd. This includes new as well as refurbished computers. Click here for more information. Read more
Beats Holiday sale at B&H, headphones and...
B&H Photo has Beats by Dr. Dre headphones, earphones, and speakers on sale for up to $80 off MSRP as part of their Holiday sale. Expedited shipping is free, and B&H charges sales tax to NY... Read more
Holiday sale: Apple resellers offer 2017 15″...
MacMall has 15″ MacBook Pros on sale for $220-$300 off MSRP, each including free shipping: – 15″ 2.8GHz MacBook Pro Space Gray (MPTR2LL/A): $2179, $220 off MSRP – 15″ 2.8GHz MacBook Pro Silver (... Read more
Holiday sale: Apple resellers offer 13″ MacBo...
B&H Photo has 13″ MacBook Pros on sale for up to $150 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only: – 13-inch 2.3GHz/128GB Space Gray MacBook Pro (... Read more
Apple Watch Series 2, Certified Refurbished,...
Apple has Certified Refurbished Apple Watch Nike+ Series 2s, 42mm Space Gray Aluminum Case with Anthracite/Black Nike Sport Bands, available for $249 (38mm) or $279 (42mm). The 38mm model was out of... Read more
Apple offers Certified Refurbished 2016 12″ R...
Apple has Certified Refurbished 2016 12″ Retina MacBooks available starting at $949. Apple will include a standard one-year warranty with each MacBook, and shipping is free. The following... Read more
B&H drops price on 13″ 256GB MacBook Air...
B&H has the 13″ 1.8GHz/256GB Apple MacBook Air (MQD42LL/A) now on sale for $1079 including free shipping plus NY & NJ sales tax only. Their price is $120 off MSRP, and it’s the lowest price... Read more

Jobs Board

*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Payments Counsel, *Apple* Pay (payments, cr...
# Payments Counsel, Apple Pay (payments, credit/debit) Job Number: 112941729 Santa Clara Valley, California, United States Posted: 13-Dec-2017 Weekly Hours: 40.00 Read more
*Apple* Solutions Consultant - Apple (United...
# Apple Solutions Consultant Job Number: 113124408 Waterford, CT, Connecticut, United States Posted: 17-Oct-2017 Weekly Hours: 40.00 **Job Summary** Are you Read more
QA Automation Engineer, *Apple* Pay - Apple...
# QA Automation Engineer, Apple Pay Job Number: 113202642 Santa Clara Valley, California, United States Posted: 11-Dec-2017 Weekly Hours: 40.00 **Job Summary** At Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.