pjs/lib/mac/patches/LDropFlag.patch

176 строки
4.7 KiB
Diff

*** Develop:Source331 Build Environment:CW Pro 2:Metrowerks CodeWarrior:MacOS Support:PowerPlant:_In Progress:_Table Classes:LDropFlag.cp Mon Mar 16 17:12:01 1998
--- Source:LDropFlag.cp Mon Mar 16 17:12:07 1998
***************
*** 1,6 ****
--- 1,7 ----
// ===========================================================================
// LDropFlag.cp ©1995-1996 Metrowerks Inc. All rights reserved.
// ===========================================================================
+ //¥¥¥NETSCAPE - draw over bg colors other than white (ie, preserve bg color)
//
// Draws and tracks clicks for a drop flag.
***************
*** 9,20 ****
--- 10,26 ----
#endif
#include <LDropFlag.h>
+ #include <UGWorld.h>
#ifndef __ICONS__
#include <Icons.h>
#endif
+ //¥¥¥NETSCAPE
+ static void PlotIconOffscreen ( const Rect & inRect, ResIDT inIconID ) ;
+
+
// Icon family resource ID's for the states of the drop flag
// The size of the rectangle you pass to Draw and TrackClick determine
// which icon size gets used.
***************
*** 47,53 ****
iconID = icon_Down;
}
! ::PlotIconID(&inRect, atNone, ttNone, iconID);
}
--- 53,60 ----
iconID = icon_Down;
}
! //¥¥¥NETSCAPE - call PlotIconOffscreen() instead of PlotIconID()
! PlotIconOffscreen ( inRect, iconID );
}
***************
*** 64,70 ****
// inIsUp specifies if the flag was up or down when the click started
//
// Returns whether the mouse was release inside the DropFlag.
!
Boolean
LDropFlag::TrackClick(
const Rect &inRect,
--- 71,78 ----
// inIsUp specifies if the flag was up or down when the click started
//
// Returns whether the mouse was release inside the DropFlag.
! //
! //¥¥¥NETSCAPE - call PlotIconOffscreen() instead of PlotIconID()
Boolean
LDropFlag::TrackClick(
const Rect &inRect,
***************
*** 87,93 ****
// when it was previously outside
Boolean currInside = true;
Boolean prevInside = false;
! ::PlotIconID(&inRect, atNone, ttNone, iconID + 1);
// Track the mouse while it is down
Point currPt = inMouse;
--- 95,101 ----
// when it was previously outside
Boolean currInside = true;
Boolean prevInside = false;
! PlotIconOffscreen(inRect, iconID + 1);
// Track the mouse while it is down
Point currPt = inMouse;
***************
*** 101,107 ****
if (currInside) {
trackIconID = iconID + 1;
}
! ::PlotIconID(&inRect, atNone, ttNone, trackIconID);
}
}
--- 109,115 ----
if (currInside) {
trackIconID = iconID + 1;
}
! PlotIconOffscreen(inRect, trackIconID);
}
}
***************
*** 116,122 ****
if (goodClick) {
UInt32 ticks; // Draw intermediate state
::Delay(delay_Animation, &ticks);
! ::PlotIconID(&inRect, atNone, ttNone, icon_Side);
::Delay(delay_Animation, &ticks);
// Draw dark end state
--- 124,130 ----
if (goodClick) {
UInt32 ticks; // Draw intermediate state
::Delay(delay_Animation, &ticks);
! PlotIconOffscreen(inRect, icon_Side);
::Delay(delay_Animation, &ticks);
// Draw dark end state
***************
*** 124,137 ****
if (inIsDown) {
endIconID = icon_Up + 1;
}
! ::PlotIconID(&inRect, atNone, ttNone, endIconID);
::Delay(delay_Animation, &ticks);
// Draw normal end state
! ::PlotIconID(&inRect, atNone, ttNone, endIconID - 1);
} else { // Draw original state
! ::PlotIconID(&inRect, atNone, ttNone, iconID);
}
return goodClick;
}
--- 132,170 ----
if (inIsDown) {
endIconID = icon_Up + 1;
}
! PlotIconOffscreen(inRect, endIconID);
::Delay(delay_Animation, &ticks);
// Draw normal end state
! PlotIconOffscreen(inRect, endIconID - 1);
} else { // Draw original state
! PlotIconOffscreen(inRect, iconID);
}
return goodClick;
+ }
+
+
+ //¥¥¥ NETSCAPE
+ // this code is mainly from LGADisclosureTriangle.cp
+ static void PlotIconOffscreen ( const Rect & inRect, ResIDT inIconID )
+ {
+ // ¥ In order to make the transitions between the various states
+ // smoother we are going to attempt to figure out what the background
+ // color is behind the triangle, by using the current clipping region
+ // we will subzequently use this color to wipe the background
+ Rect destRect;
+ RgnHandle currClip = ::NewRgn ();
+ ::GetClip ( currClip );
+ Rect clipRect = (**currClip).rgnBBox;
+ ::DisposeRgn ( currClip );
+ ::SectRect ( &inRect, &clipRect, &destRect );
+
+ RGBColor backColor;
+ ::GetCPixel ( destRect.right - 1, destRect.top, &backColor );
+ StOffscreenGWorld world(inRect);
+ ::RGBBackColor ( &backColor );
+ ::EraseRect ( &inRect );
+
+ ::PlotIconID(&inRect, atNone, ttNone, inIconID);
}