100 if (_MousePtr !=
NULL) {
101 _MousePtr->Process_Mouse();
130 SurfacePtr(surfaceptr),
138 SidebarAlternate(
NULL),
139 ConditionalRect(0,0,0,0),
140 ConditionalState(-1),
146 MouseXHot = ConfiningRect.X + (ConfiningRect.Width/2);
147 MouseYHot = ConfiningRect.Y + (ConfiningRect.Height/2);
168 if (TimerHandle != 0) {
169 timeKillEvent(TimerHandle);
178 delete SidebarAlternate;
179 SidebarAlternate =
NULL;
186 GetClientRect(Window, &rect);
191 ClientToScreen(Window, &point);
196 ClientToScreen(Window, &lr);
198 ConfiningRect =
Rect(point.x, point.y, lr.x-point.x, lr.y-point.y);
223 int state = ShowCursor(
TRUE);
254 if (cursor !=
NULL) {
257 if (!Is_Hidden()) Low_Hide_Mouse();
260 MouseXHot = xhotspot;
261 MouseYHot = yhotspot;
262 if (!Is_Hidden()) Low_Show_Mouse();
267 MouseXHot = xhotspot;
268 MouseYHot = yhotspot;
291bool WWMouseClass::Is_Data_Valid(
void)
const
293 if (MouseShape !=
NULL) {
316bool WWMouseClass::Validate_Copy_Buffer(
void)
318 if (Is_Data_Valid()) {
325 if (Background !=
NULL) {
326 if (MouseShape->Get_Width() > Background->Get_Width() ||
327 MouseShape->Get_Height() > Background->Get_Height()) {
333 if (Alternate !=
NULL) {
334 if (MouseShape->Get_Width() > Alternate->Get_Width() ||
335 MouseShape->Get_Height() > Alternate->Get_Height()) {
341 if (SidebarAlternate !=
NULL) {
342 if (MouseShape->Get_Width() > SidebarAlternate->Get_Width() ||
343 MouseShape->Get_Height() > SidebarAlternate->Get_Height()) {
345 delete SidebarAlternate;
346 SidebarAlternate =
NULL;
354 if (Background ==
NULL) {
355 Background =
new BSurface(MouseShape->Get_Width(), MouseShape->Get_Height(), SurfacePtr->Bytes_Per_Pixel());
357 if (Alternate ==
NULL) {
358 Alternate =
new BSurface(MouseShape->Get_Width(), MouseShape->Get_Height(), SurfacePtr->Bytes_Per_Pixel());
360 if (SidebarAlternate ==
NULL) {
361 SidebarAlternate =
new BSurface(MouseShape->Get_Width(), MouseShape->Get_Height(), SurfacePtr->Bytes_Per_Pixel());
364 return(Background !=
NULL && Alternate !=
NULL && SidebarAlternate !=
NULL);
387Rect WWMouseClass::Matching_Rect(
void)
const
390 if (Is_Data_Valid()) {
396 rect = MouseShape->Get_Rect(ShapeNumber);
397 rect.
X += MouseX - MouseXHot;
398 rect.
Y += MouseY - MouseYHot;
421void WWMouseClass::Save_Background(
void)
423 if (Validate_Copy_Buffer()) {
428 SavedRegion = Matching_Rect();
430 Rect rect = SavedRegion;
431 rect.
X += ConfiningRect.X;
432 rect.
Y += ConfiningRect.Y;
439 Background->Blit_From(
Rect(0, 0, rect.
Width, rect.
Height), *SurfacePtr, rect);
460void WWMouseClass::Restore_Background(
void)
462 if (SavedRegion.Is_Valid()) {
464 Rect rect = SavedRegion;
465 rect.
X += ConfiningRect.X;
466 rect.
Y += ConfiningRect.Y;
473 SurfacePtr->Blit_From(rect, *Background,
Rect(0, 0, rect.
Width, rect.
Height));
506 if (issidebarsurface){
509 savesurface = SidebarAlternate;
510 savedregion = &SidebarAltRegion;
514 savesurface = Alternate;
515 savedregion = &AltRegion;
518 if (!Is_Hidden() && surface !=
NULL && surface != SurfacePtr && savesurface !=
NULL) {
526 *savedregion = SavedRegion;
527 savedregion->
X += xoffset;
528 savedregion->
Y += yoffset;
530 if (issidebarsurface){
531 if (savedregion->
X < 0 && -savedregion->
X < Background->Get_Width()){
532 Background->Blit_From(
Rect(-savedregion->
X, 0, savedregion->
Width, savedregion->
Height),
536 Background->Blit_From(
Rect(0, 0, savedregion->
Width, savedregion->
Height), *surface, *savedregion);
539 Raw_Draw_Mouse(surface, xoffset, yoffset);
542 savedregion->
Width = 0;
565 if (!Is_Hidden() && surface !=
NULL && surface != SurfacePtr && Alternate !=
NULL && SidebarAlternate !=
NULL) {
570 if (issidebarsurface){
571 savesurface = SidebarAlternate;
572 savedregion = SidebarAltRegion;
574 savesurface = Alternate;
575 savedregion = AltRegion;
606void WWMouseClass::Raw_Draw_Mouse(
Surface * surface,
int xoffset,
int yoffset)
608 if (Is_Data_Valid() && surface !=
NULL) {
615 Rect rect = SavedRegion;
627 if (surface == SurfacePtr) {
652void WWMouseClass::Low_Show_Mouse(
void)
656 Raw_Draw_Mouse(SurfacePtr, 0, 0);
676void WWMouseClass::Low_Hide_Mouse(
void)
679 Restore_Background();
704 InterlockedIncrement(&MouseState);
705 if (MouseState == 0) {
708 assert(MouseState != 1);
709 if (MouseState > 0) MouseState = 0;
736 InterlockedDecrement(&MouseState);
737 if (MouseState == -1) {
765 while (ShowCursor(
FALSE) > -1) {}
766 while (ShowCursor(
TRUE) < -1) {}
803 while (ShowCursor(
FALSE) > -1) {}
804 while (ShowCursor(
TRUE) < -1) {}
875 x -= ConfiningRect.X;
876 y -= ConfiningRect.Y;
879 if (x >= ConfiningRect.Width) x = ConfiningRect.Width-1;
880 if (y >= ConfiningRect.Height) y = ConfiningRect.Height-1;
898void WWMouseClass::Get_Bounded_Position(
int & x,
int & y)
const
926void WWMouseClass::Update_Mouse_Position(
int x,
int y)
934 if (x != MouseX || y != MouseY) {
935 if (
Is_Captured() && !Is_Hidden()) Low_Hide_Mouse();
938 if (
Is_Captured() && !Is_Hidden()) Low_Show_Mouse();
969 Get_Bounded_Position(x, y);
970 Update_Mouse_Position(x, y);
995 if (x >= ConfiningRect.Width) x = ConfiningRect.Width-1;
996 if (y >= ConfiningRect.Height) y = ConfiningRect.Height-1;
998 x += ConfiningRect.X;
999 y += ConfiningRect.Y;
1001 SetCursorPos( x, y );
ConvertClass * NormalDrawer
void * Get_Data(int shape) const
virtual Rect Get_Rect(void) const
virtual bool Blit_From(Rect const &dcliprect, Rect const &destrect, Surface const &source, Rect const &scliprect, Rect const &sourcerect, bool trans=false)=0
virtual void Set_Cursor(int xhotspot, int yhotspot, ShapeSet const *cursor, int shape)
virtual void Set_Mouse_XY(int xpos, int ypos)
virtual void Erase_Mouse(Surface *scr, bool issidebarsurface=false)
virtual void Convert_Coordinate(int &x, int &y) const
virtual void Release_Mouse(void)
virtual void Hide_Mouse(void)
virtual ~WWMouseClass(void)
virtual void Conditional_Hide_Mouse(Rect region)
virtual void Capture_Mouse(void)
virtual int Get_Mouse_State(void) const
virtual bool Is_Captured(void) const
virtual void Show_Mouse(void)
virtual void Conditional_Show_Mouse(void)
WWMouseClass(Surface *surfaceptr, HWND window)
void Calc_Confining_Rect(void)
virtual void Draw_Mouse(Surface *scr, bool issidebarsurface=false)
virtual bool Blit_From(Rect const &dcliprect, Rect const &destrect, Surface const &source, Rect const &scliprect, Rect const &sourcerect, bool trans=false)
void Blit_Block(Surface &surface, ConvertClass &convert, Surface const &source, Rect const &sourcerect, Point2D const &point, Rect const &window, unsigned char const *remap, Blitter const *blitter)
void CALLBACK Callback_Process_Mouse(UINT, UINT, DWORD, DWORD, DWORD)