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

OmniOutliner Pro 5.8.5 - Pro version of...
OmniOutliner Pro is a flexible program for creating, collecting, and organizing information. Give your creativity a kick start by using an application that's actually designed to help you think. It's... Read more
OmniOutliner Essentials 5.8.5 - Organize...
OmniOutliner Essentials (was OmniOutliner) is a flexible program for creating, collecting, and organizing information. Give your creativity a kick start by using an application that's actually... Read more
Quicken 6.3.0 - Complete personal financ...
Quicken makes managing your money easier than ever. Whether paying bills, upgrading from Windows, enjoying more reliable downloads, or getting expert product help, Quicken's new and improved features... Read more
Viber 15.8.0 - Send messages and make fr...
Viber lets you send free messages and make free calls to other Viber users, on any device and network, in any country! Viber syncs your contacts, messages and call history with your mobile device, so... Read more
Butler 4.4.2 - Hot key, menu, and keywor...
Butler makes it easier for you to perform a wide variety of potentially recurring tasks. Just arrange these tasks in Butler's fully customizable configuration and assign one or more triggers to a... Read more
GIMP 2.10.24 - Powerful, free image edit...
GIMP is a multi-platform photo manipulation tool. GIMP is an acronym for GNU Image Manipulation Program. The GIMP is suitable for a variety of image manipulation tasks, including photo retouching,... Read more
ScreenFlow 10.0.3 - Create screen record...
ScreenFlow is powerful, easy-to-use screencasting software for the Mac. With ScreenFlow you can record the contents of your entire monitor while also capturing your video camera, microphone and your... Read more
Notability 10.4.5 - Note-taking and anno...
Notability is a powerful note-taker to annotate documents, sketch ideas, record lectures, take notes and more. It combines, typing, handwriting, audio recording, and photos so you can create notes... Read more
Day One 6.7 - Maintain a daily journal.
Day One is an easy, great-looking way to use a journal / diary / text-logging application. Day One is well designed and extremely focused to encourage you to write more through quick Menu Bar entry,... Read more
Vallum 4.0.3 - $15.00
Vallum is a little tool that helps you monitor and block apps connections and throttle apps bandwidth. It is able to intercept connections at the application layer, and hold them while you decide... Read more

Latest Forum Discussions

See All

The 5 Best Mobile Stealth Action Games
Action games are a hard sell on mobile, and they get even harder if the more precision they require. Stealth games are one such subgenre that just doesn’t feel like it could work well on small touchscreens where you’re prone to being distracted or... | Read more »
Exos Heroes' latest update introduc...
LINE Games has announced that several pieces of content in their popular RPG, Exos Heroes, have received changes to celebrate the summer season. There is also a new story event to tackle called Memorial Saga that follows Ramge, the Prince of North... | Read more »
Infinity Island is a cutesy idle game fr...
Infinity Island is a brand new idle game from Luca Redwood that is available now for iOS and Android. You might be familiar with Redwood from their previous games, 10000000, You Must Build A Boat and Photographs. [Read more] | Read more »
Infinite Galaxy is a deep sci-fi strateg...
The collapse of the Empire is nigh. In its wake, remnants of the epic intergalactic struggle float through the debris in space, as lawless pirates sow seeds of discord and loyalist groups strike terror into the hearts of innocent civilians. In the... | Read more »
Injustice 2 Mobile's latest update...
Warner Bros Games and NetherRealm Studios have released a major update for their fighting game, Injustice Mobile 2. It sees the arrival of a brand new character, Vixen, to the game alongside changes to the existing progression system. [Read more] | Read more »
Pokemon Go's August events have bee...
Following Pokemon Go Fest 2021, it's time to look ahead to August and the events that will take place in Niantic's AR game throughout the month. There's a new Research Breakthrough encounter, 1 PokeCoin bundles and a bunch more. [Read more] | Read more »
Overboard!, Inkle's reverse whodunn...
Inkle's fresh approach on the whodunnit mystery genre, Overboard! is now available for Android devices followings its release on iOS. The game has received predominately positive reviews since it launched. It holds a healthy Metacritic score... | Read more »
There's never been a better time to...
We were obviously big fans of Genshin Impact when it launched last year, so much so that it grabbed our Game of the Year award. Since that time, though, the game (and our enthusiasm fo it) had gone somewhat quiet. [Read more] | Read more »
Homeworld Mobile's first regional b...
Since the initial announcement all the way back in 2019, we've not heard an awful lot about Homeworld Mobile. But now, there appears to be some movement as the game's first regional beta test is now live. [Read more] | Read more »
Masketeers: Idle Has Fallen's impen...
Appxplore has announced that their popular RPG Masketeers: Idle Has Fallen will soon receive a major update that introduces a Guild system alongside another feature called Sigils. The developers hope this will add more excitement to the game by... | Read more »

Price Scanner via MacPrices.net

Verizon offers $200 discount on new Apple M1...
Verizon will take up to $200 off the price of an M1-powered Cellular iPad Pro with select trade-in and monthly payment plan (24 months). The fine print: “Less $100 promo credit applied to account... Read more
Record low prices on Apple’s 13″ M1 MacBook A...
Amazon is offering a $150 discount on Apple’s 13″ M1 MacBook Airs with 7-Core GPUs and 8-Core CPU. With Amazon’s discount, their price drops to only $849 with free shipping. Their prices are the... Read more
Save up to $140 on an M1 Mac mini at Apple wi...
Apple has a full line of standard configuration M1 Mac minis available in their Certified Refurbished section starting at only $589 and up to $140 off MSRP. Each mini comes with Apple’s one-year... Read more
Here are the details of Apple’s sales tax hol...
Apple is participating in the 2021 sales tax holiday again this year. In certain states on certain days customers are eligible to save on the sales tax for items purchased on Apple’s online store.... Read more
Apple has 13″ M1 MacBook Pros available for $...
Apple has a full line of 2020 13″ M1 MacBook Pros available Certified Refurbished, starting at only $1099 and up to $230 off original MSRP. These are the cheapest M1 MacBook Pros for sale today at... Read more
Our exclusive Apple Price Trackers help you f...
Our Apple award-winning price trackers are the best place to look for the lowest prices and latest sales on all the latest Apple gear. Scan our price trackers for the latest information on sales,... Read more
The best deal on 13″ M1 MacBook Airs are thes...
Apple has a full line of 2020 13″ M1 MacBook Airs available, Certified Refurbished, starting at only $849 and up to $190 off original MSRP. These are the cheapest M1 MacBook Airs for sale today at... Read more
Reminder: Take advantage of Apple’s Back to S...
Take advantage of Apple’s Back to School promotion for 2021. As part of this promotion, Apple will include one free pair AirPods (with charging case) with the purchase of a MacBook Air, MacBook Pro,... Read more
Sunday Sale: Amazon is offering record-low pr...
Amazon has Apple’s entire MacBook lineup on sale today for record low prices, with models available starting at $899 and up to $500 off Apple’s MSRP. Shipping is free. These are the same MacBook Pros... Read more
Sunday Sale: Apple Pencil 2 for only $99, sav...
Amazon has the Apple Pencil 2 on sale today for only $99 shipped. Their price is $30 off Apple’s MSRP, and it’s the lowest price available for an Apple Pencil 2 anywhere. For the latest prices and... Read more

Jobs Board

*Apple* Support Specialist - Robert Half Tec...
…organization in Lawrenceville, New Jersey is in need of a highly experienced Apple Support Specialist! The Apple Support Specialist will be responsible for Read more
Geek Squad *Apple* Consultation Professiona...
**818649BR** **Job Title:** Geek Squad Apple Consultation Professional **Job Category:** Store Associates **Store Number or Department:** 001045-Mountain View-Store Read more
Head of *Apple* Product Development - DISH...
…the potential to power a connected world. What you'll be doing As the Apple Product Development lead, you will make strong contributions to the product and feature Read more
Medical Assistant (CMA, RMA, LPN) - *Apple*...
…Health Fairview has an immediate opening for a Medical Assistant/LPN at the M Health Fairview Apple Valley Clinic located in Apple Valley, MN. This is a 1.0 FTE Read more
Geek Squad *Apple* Consultation Professiona...
**818139BR** **Job Title:** Geek Squad Apple Consultation Professional **Job Category:** Store Associates **Store Number or Department:** 000535-Portsmouth-Store Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.