6-16
Using Using Graphics Tools
Programmer’s Manual
equals to FALSE to copy all properties of the common panning
screen to the task’s own context
Example 6-5 Use ChangePanning() to let all tasks share the same
panning screen
#include <ppsm.h>
#include <errors.h>
#include <proto.h>
PAN_SCREEN newScreen;
STATUS TestApp()
{
/* use the common panning screen in this task */
ChangePanning(&newScreen, FALSE, 0);
/* draw a circle with center at (100, 100) and radius 80 pixels */
DrawCircle(BLACK, 100, 100, 80, REPLACE_STYLE);
}
main()
{
U32 taskId;
P_U8 newPanning;
PPSMInit(FALSE);
/* create a common panning screen with size 640x400 */
newPanning = (P_U8)GetScreenMem(640, 400);
newScreen.panAddress = (U32)newPanning;
newScreen.displayScreenAddr = (U32)newPanning;
newScreen.horzSize = 640;
newScreen.vertSize = 400;
newScreen.displayXOrigin = 0;
newScreen.displayYOrigin = 0;
newScreen.regPOSR = 0;
newScreen.regPSW = 80;/* as the LCD panel used is 2 bits per pixel,
PSW = 640/8 = 80. */
/* destroy the system panning screen and use the new panning screen created above
*/
ChangePanning(&newScreen, FALSE, 0);
/* clear whole panning screen */
ClearScreen(WHITE);
/* draw a circle with center at (100, 100) and radius 20 pixels to the new panning
screen */
DrawCircle(BLACK, 100, 100, 20, REPLACE_STYLE);
/* create a new task with no panning screen */
AdvTaskCreate(&taskId, (P_VOID)TestApp, 0, 0, 0, 0, 3048, PPSM_NOSCREEN, 0, 0, 0);
TaskStart(taskId);
}
In the example above, both the system task in main() and task TestApp() share
the same panning screen. So whatever done on the panning screen by the
system task or task TestApp() will have effect on the panning screen.
If a panning screen is shared among tasks. Calls ChangePanning() to free the
screen in one of the task can also free/corrupt the others’ screen memory area.
Personal Portable System Manager
Programmer’s Manual
6-13
The pattern fill mode 0 will turn off the pattern fill feature.
6.12
Set Dot Width
STATUS
SetDotWidth
)
After this routine is called, the new dot width will take effect in all subsequent
DrawDot(), DrawHorz(), DrawVert(), DrawRec(), DrawLIne(), DrawCircle(),
DrawEllipse(), DrawArc(), and DrawVector().
If the dot width is larger than 1, a thick dot, thick line, thick circle, thick ellipse,
thick arc and thick vector lines can be drawn.
Example 6-3 Set dot width
160 * Drawing1 - Draw a LINE and then an ELLIPSE with pattern filled on Screen1.
161 * Both have a dot width = 6, but no border on the ellipse is
162 * drawn as the bordermode in SetPatternFill is set to 0.
.
.
.
170 SetDotWidth(6, 0);
171 SetPatternFill(2, WHITE, 0, 3);
6.13
DisplayMove
STATUS
DisplayMove
)
This function is to set the relative coordinate of top left corner of LCD in panning
screen. It sets the display region on LCD from panning screen. Whenever this
function is called, the new area in panning screen will be refreshed on LCD.
6.14
Direct All Graphics Output to off-screen memory
STATUS
ChangeWindow
P_U16 oldWidth
,
)
Run-time computation intensive image generation and display could be slow.
Users may see the graphics output appears slowly on the LCD display screen.
routines to an off-screen memory area temporarily, so that no changes will appear
on the LCD display screen while the image is being built. Once the image is
generated, it can be displayed onto the panning screen. This will give the effect
that the image is displayed instantaneously.
ChangeWindow() assumes that all input parameters are valid. No zero or invalid
values are supposed to be passed as input to this routine.
Example 6-4 Use ChangeWindow() to draw image
U32 oldScreen1, oldScreen2;
U16 oldWidth1, oldHeight1;
F
Freescale Semiconductor, Inc.
For More Information On This Product,
Go to: www.freescale.com
n
.