Forums > Dev

syswindow_move() doesn't move?

Apr 22 2006 | 12:19 pm

This seems to be my week for obscure problems.

Following code snippet, simplified (and making some braindead
assumptions about Mac OS desktop geometry, but that’s not the problem):

BitMap screenBits;
Rect screenRect,

screenRect = screenBits.bounds;

// myWind has already been initialized to a valid t_wind struct
windRect.left = myWind->w_x1;
windRect.right = myWind->w_x2; = myWind->w_y1;
windRect.bottom = myWind->w_y2;

SectRect(&screenRect, &windRect, &visWindRect);
// Really should iterate through the device list, but the
// above is good enough for testing…
if (EmptyRect(&visWindRect)) {
syswindow_move(wind_syswind(myWind), 20, 20, true);

The window is not moved after the call to syswindow_move().

For instance, inserting strategic post()s, as follows

post("screenRect (%ld, %ld) (%ld, %ld)",
(long) screenRect.left, (long),
(long) screenRect.right, (long) screenRect.bottom);
post("windRect (%ld, %ld) (%ld, %ld)",
(long) windRect.left, (long),
(long) windRect.right, (long) windRect.bottom);

SectRect(&screenRect, &windRect, &visWindRect);

post("visible area (%ld, %ld) (%ld, %ld)",
(long) visWindRect.left, (long),
(long) visWindRect.right, (long) visWindRect.bottom);

if (EmptyRect(&visWindRect)) {
post("about to move window");

syswindow_move(wind_syswind(myWind), 20, 20, true);

post("…new top left: %ld %ld", myWind->w_x1, myWind->w_y1);

Can yield the following in the Max window:

screenRect (0, 0) (1440, 900)
windRect (-2032, 850) (-1593, 1170)
visible area (0, 0) (0, 0)
about to move window
…new top left: -2032 850

Expected result: last line should read "…new top left: 20 20". And
the window should be visible on the main screen.

This is on Mac OS 10.4.6, Max/MSP 4.5.6. IDE: CW 8.3.

If I’m not doing something blindingly obviously stupid, I can strip
the code down to a minimal object and make it available.

How does thispatcher do this?

Greetings, Peter

Viewing 1 post (of 1 total)

Forums > Dev