OpenClonk
C4MouseControl Class Reference

#include <C4MouseControl.h>

Collaboration diagram for C4MouseControl:
[legend]

Public Member Functions

 C4MouseControl ()
 
 ~C4MouseControl ()
 
void Default ()
 
void Clear ()
 
bool Init (int32_t iPlayer)
 
void Execute ()
 
void HideCursor ()
 
void ShowCursor ()
 
void Draw (C4TargetFacet &cgo, const ZoomData &GameZoom)
 
void Move (int32_t iButton, int32_t iX, int32_t iY, DWORD dwKeyFlags, bool fCenter=false)
 
void DoMoveInput ()
 
bool IsViewport (C4Viewport *pViewport)
 
void ClearPointers (C4Object *pObj)
 
void UpdateClip ()
 
void SetOwnedMouse (bool fToVal)
 
bool IsMouseOwned ()
 
bool IsActive ()
 
bool GetLastCursorPos (int32_t *x_out_gui, int32_t *y_out_gui, int32_t *x_out_game, int32_t *y_out_game) const
 
const char * GetCaption ()
 
void SetTooltipText (const StdStrBuf &text)
 
void SetTooltipRectangle (const C4Rect &rectangle)
 
bool IsDragging ()
 
bool IsLeftDown ()
 
int32_t GetPlayer ()
 

Protected Member Functions

void UpdateFogOfWar ()
 
void RightUpDragNone ()
 
void ButtonUpDragScript ()
 
void LeftUpDragNone ()
 
void DragScript ()
 
void Wheel (DWORD dwFlags)
 
void RightUp ()
 
void RightDown ()
 
void LeftDouble ()
 
void DragNone ()
 
void LeftUp ()
 
void LeftDown ()
 
void UpdateScrolling ()
 
void UpdateCursorTarget ()
 
int32_t UpdateSingleSelection ()
 
C4ObjectGetTargetObject ()
 
bool IsPassive ()
 
void ScrollView (float iX, float iY, float ViewWdt, float ViewHgt)
 

Protected Attributes

bool Active
 
bool fMouseOwned
 
int32_t Player
 
C4PlayerpPlayer
 
C4ViewportViewport
 
int32_t Cursor
 
int32_t VpX
 
int32_t VpY
 
float ViewX
 
float ViewY
 
float GameX
 
float GameY
 
float GuiX
 
float GuiY
 
C4Facet fctViewport
 
C4Facet fctViewportGame
 
C4Facet fctViewportGUI
 
float DownX
 
float DownY
 
int32_t ScrollSpeed
 
int32_t Drag
 
bool LeftButtonDown
 
bool RightButtonDown
 
bool LeftDoubleIgnoreUp
 
bool ButtonDownOnSelection
 
bool ControlDown
 
bool ShiftDown
 
bool AltDown
 
bool Scrolling
 
bool InitCentered
 
bool FogOfWar
 
bool Visible
 
C4ObjectList Selection
 
C4ObjectDragObject
 
C4ID DragID
 
C4DefDragImageDef
 
C4ObjectDragImageObject
 
StdCopyStrBuf Caption
 
StdCopyStrBuf TooltipText
 
int32_t CaptionBottomY
 
int32_t KeepCaption
 
int32_t TimeInTooltipRectangle
 
C4Rect ToolTipRectangle
 
C4ObjectTargetObject
 
C4ObjectDownTarget
 

Friends

class C4Viewport
 

Detailed Description

Definition at line 66 of file C4MouseControl.h.

Constructor & Destructor Documentation

◆ C4MouseControl()

C4MouseControl::C4MouseControl ( )

Definition at line 45 of file C4MouseControl.cpp.

References Default().

46 {
47  Default();
48 }
Here is the call graph for this function:

◆ ~C4MouseControl()

C4MouseControl::~C4MouseControl ( )

Definition at line 50 of file C4MouseControl.cpp.

References Clear().

51 {
52  Clear();
53 }
Here is the call graph for this function:

Member Function Documentation

◆ ButtonUpDragScript()

void C4MouseControl::ButtonUpDragScript ( )
protected

Definition at line 753 of file C4MouseControl.cpp.

References C4Control::Add(), C4MC_Drag_None, C4MC_MD_DropTarget, CID_PlrMouseMove, Drag, C4ControlPlayerMouse::DragDrop(), DragID, DragImageDef, DragImageObject, DragObject, C4Player::Eliminated, Game, C4PlayerList::Get(), C4PropList::GetPropertyInt(), C4Game::Input, C4ID::None, P_MouseDrag, Player, Players, TargetObject, and UpdateCursorTarget().

Referenced by IsActive(), LeftUp(), and RightUp().

754 {
755  // Determine drag+drop targets
757  // Finish drag
760  DragImageObject = nullptr;
761  DragImageDef = nullptr;
762  C4Object *DragObject = this->DragObject;
763  this->DragObject = nullptr;
764  C4Object *DropObject = TargetObject;
765  // drag object must exist; drop object is optional
766  if (!DragObject) return;
767  if (DropObject && (~DropObject->GetPropertyInt(P_MouseDrag) & C4MC_MD_DropTarget))
768  DropObject = nullptr;
769  // no commands if player is eliminated or doesn't exist any more
770  C4Player *pPlr = ::Players.Get(Player);
771  if (!pPlr || pPlr->Eliminated) return;
772  // todo: Perform drag/drop validity check
773  // now drag/drop is handled by script
775 }
C4Game Game
Definition: C4Globals.cpp:52
C4Object * DragImageObject
int32_t GetPropertyInt(C4PropertyName k, int32_t default_val=0) const
Definition: C4PropList.cpp:886
void Add(C4PacketType eType, C4ControlPacket *pCtrl)
Definition: C4Control.h:82
C4Object * TargetObject
const int32_t C4MC_MD_DropTarget
const int32_t C4MC_Drag_None
C4Player * Get(int iPlayer) const
static const C4ID None
Definition: C4Id.h:39
C4Object * DragObject
C4PlayerList Players
C4Def * DragImageDef
int32_t Eliminated
Definition: C4Player.h:83
C4Control & Input
Definition: C4Game.h:82
static C4ControlPlayerMouse * DragDrop(const C4Player *player, const C4Object *target, const C4Object *drag)
Definition: C4Control.cpp:459
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Clear()

void C4MouseControl::Clear ( )

Definition at line 91 of file C4MouseControl.cpp.

References Active, C4ObjectList::Clear(), Selection, and UpdateClip().

Referenced by C4Game::Clear(), Init(), and ~C4MouseControl().

92 {
93  Active = false;
94  Selection.Clear();
95  UpdateClip(); // reset mouse clipping!
96 }
C4ObjectList Selection
virtual void Clear()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ClearPointers()

void C4MouseControl::ClearPointers ( C4Object pObj)

Definition at line 125 of file C4MouseControl.cpp.

References C4MC_Drag_None, C4ObjectList::ClearPointers(), DownTarget, Drag, DragImageDef, DragImageObject, DragObject, Selection, and TargetObject.

Referenced by C4Game::ClearPointers().

126 {
127  if (TargetObject==pObj) TargetObject=nullptr;
128  if (DownTarget==pObj) DownTarget=nullptr;
129  if (DragObject==pObj)
130  {
131  DragObject=nullptr;
133  DragImageDef=nullptr;
134  DragImageObject=nullptr;
135  }
136  Selection.ClearPointers(pObj);
137 }
C4ObjectList Selection
C4Object * DragImageObject
C4Object * DownTarget
C4Object * TargetObject
const int32_t C4MC_Drag_None
C4Object * DragObject
C4Def * DragImageDef
int ClearPointers(C4Object *pObj)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Default()

void C4MouseControl::Default ( )

Definition at line 55 of file C4MouseControl.cpp.

References Active, AltDown, ButtonDownOnSelection, C4MC_Drag_None, Caption, CaptionBottomY, StdStrBuf::Clear(), ControlDown, Cursor, C4ObjectList::Default(), C4Facet::Default(), DownTarget, DownX, DownY, Drag, DragID, DragImageDef, DragImageObject, DragObject, fctViewport, fMouseOwned, FogOfWar, GameX, GameY, GuiX, GuiY, InitCentered, KeepCaption, LeftButtonDown, LeftDoubleIgnoreUp, NO_OWNER, C4ID::None, Player, pPlayer, RightButtonDown, Scrolling, ScrollSpeed, Selection, ShiftDown, TargetObject, Viewport, ViewX, ViewY, Visible, VpX, and VpY.

Referenced by C4MouseControl(), C4Game::Default(), and Init().

56 {
57  Active=false;
59  pPlayer=nullptr;
60  Viewport=nullptr;
61  Cursor=0;
62  Caption.Clear();
64  VpX=VpY=0;
65  DownX=DownY=0;
66  ViewX=ViewY=0;
67  GuiX=GuiY=GameX=GameY=0;
69  LeftDoubleIgnoreUp=false;
71  Visible=true;
72  InitCentered=false;
73  FogOfWar=false;
75  DragObject=nullptr;
76  KeepCaption=0;
79  TargetObject=DownTarget=nullptr;
80  ControlDown=false;
81  ShiftDown=false;
82  AltDown=false;
83  Scrolling=false;
84  ScrollSpeed=10;
85  DragImageDef=nullptr;
86  DragImageObject=nullptr;
87  fMouseOwned = true; // default mouse owned
89 }
C4ObjectList Selection
C4Player * pPlayer
void Clear()
Definition: StdBuf.h:466
C4Object * DragImageObject
C4Object * DownTarget
bool ButtonDownOnSelection
C4Object * TargetObject
const int32_t C4MC_Drag_None
void Default()
Definition: C4Facet.cpp:31
StdCopyStrBuf Caption
int32_t ScrollSpeed
static const C4ID None
Definition: C4Id.h:39
C4Object * DragObject
const int NO_OWNER
Definition: C4Constants.h:137
int32_t CaptionBottomY
C4Viewport * Viewport
C4Def * DragImageDef
C4Facet fctViewport
virtual void Default()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ DoMoveInput()

void C4MouseControl::DoMoveInput ( )

Definition at line 320 of file C4MouseControl.cpp.

References Active, AltDown, C4MC_Button_None, C4Player::Control, ControlDown, C4Player::ControlSet, C4PlayerControl::DoMouseInput(), fMouseOwned, GameX, GameY, C4PlayerList::Get(), GuiX, GuiY, C4PlayerControlAssignmentSet::IsMouseControlAssigned(), Player, Players, pPlayer, and ShiftDown.

Referenced by C4GameControl::PrepareInput().

321 {
322  // current mouse move to input queue
323  // do sanity checks
324  if (!Active || !fMouseOwned) return;
325  if (!(pPlayer=::Players.Get(Player))) return;
326  if (!pPlayer->ControlSet) return;
328  pPlayer->Control.DoMouseInput(0 /* only 1 mouse supported so far */, C4MC_Button_None, GameX, GameY, GuiX, GuiY, (ControlDown && MK_CONTROL) | (ShiftDown && MK_SHIFT) | (AltDown && MK_ALT));
329 }
C4Player * pPlayer
bool IsMouseControlAssigned(int32_t mouseevent) const
C4PlayerControl Control
Definition: C4Player.h:129
class C4PlayerControlAssignmentSet * ControlSet
Definition: C4Player.h:90
C4Player * Get(int iPlayer) const
C4PlayerList Players
const int32_t C4MC_Button_None
bool DoMouseInput(uint8_t mouse_id, int32_t mouseevent, float game_x, float game_y, float gui_x, float gui_y, DWORD flags)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ DragNone()

void C4MouseControl::DragNone ( )
protected

Definition at line 638 of file C4MouseControl.cpp.

References Abs(), C4D_IgnoreFoW, C4MC_Drag_None, C4MC_Drag_Script, C4MC_Drag_Unhandled, C4MC_DragSensitivity, C4MC_MD_DragSource, C4Object::Category, DownTarget, DownX, DownY, Drag, DragImageDef, DragImageObject, DragObject, FogOfWar, GameX, GameY, C4Object::GetDragImage(), C4PropList::GetPropertyInt(), LeftButtonDown, P_MouseDrag, RightButtonDown, UpdateCursorTarget(), and UpdateSingleSelection().

Referenced by IsActive(), and Move().

639 {
640  // Cursor movement
642  // Update selection
644 
645  // Button down: begin drag
648  {
649  bool fAllowDrag = true;
650  // check if target object allows scripted dragging
651  if (fAllowDrag && DownTarget && (!FogOfWar || (DownTarget->Category & C4D_IgnoreFoW)))
652  {
653  C4Object *drag_image_obj; C4Def * drag_image_def;
654 
655  // Drag only if MD_SOURCE is set and drag image is present
657  DownTarget->GetDragImage(&drag_image_obj, &drag_image_def))
658  {
660 
661  if(drag_image_obj) DragImageObject = drag_image_obj;
662  else DragImageDef = drag_image_def;
663 
665  }
666  }
667 
668  // dragging somewhere unhandled - mark drag process so moving over a draggable object won't start a drag
669  if (Drag == C4MC_Drag_None)
670  {
672  }
673  }
674 }
const int32_t C4MC_Drag_Script
C4Object * DragImageObject
int32_t UpdateSingleSelection()
int32_t GetPropertyInt(C4PropertyName k, int32_t default_val=0) const
Definition: C4PropList.cpp:886
const int32_t C4MC_DragSensitivity
C4Object * DownTarget
bool GetDragImage(C4Object **drag_object, C4Def **drag_id) const
Definition: C4Object.cpp:4290
const int32_t C4D_IgnoreFoW
Definition: C4Def.h:55
const int32_t C4MC_Drag_None
C4Object * DragObject
Definition: C4Def.h:98
C4Def * DragImageDef
int32_t Category
Definition: C4Object.h:113
const int32_t C4MC_Drag_Unhandled
const int32_t C4MC_MD_DragSource
T Abs(T val)
Definition: Standard.h:42
Here is the call graph for this function:
Here is the caller graph for this function:

◆ DragScript()

void C4MouseControl::DragScript ( )
protected

Definition at line 723 of file C4MouseControl.cpp.

References C4MC_Cursor_DragDrop, Cursor, UpdateCursorTarget(), and UpdateSingleSelection().

Referenced by IsActive(), and Move().

724 {
725  // script drag should update target and selection so selection highlight on drop target is visible
726  // Cursor movement
728  // Update selection
731 }
const int32_t C4MC_Cursor_DragDrop
int32_t UpdateSingleSelection()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Draw()

void C4MouseControl::Draw ( C4TargetFacet cgo,
const ZoomData GameZoom 
)

Definition at line 331 of file C4MouseControl.cpp.

References C4Draw::ActivateBlitModulation(), C4Object::BlitMode, C4D_Foreground, C4GFXBLIT_MOD2, C4MC_Cursor_Down, C4MC_Cursor_DownLeft, C4MC_Cursor_DownRight, C4MC_Cursor_Left, C4MC_Cursor_Right, C4MC_Cursor_Up, C4MC_Cursor_UpLeft, C4MC_Cursor_UpRight, C4MC_Drag_None, C4MC_Drag_Script, C4MC_Drag_Unhandled, Caption, C4Object::Category, C4Player::ColorDw, C4Object::ColorMod, Config, Cursor, C4Draw::DeactivateBlitModulation(), C4Object::Def, Drag, DragImageDef, DragImageObject, DragObject, C4Def::Draw(), C4Object::DrawPicture(), C4ObjectList::DrawSelectMark(), C4GUI::Screen::DrawToolTip(), fMouseOwned, GameX, GameY, StdStrBuf::getData(), C4Object::GetGraphics(), C4Draw::GetZoom(), GfxR, C4Def::Graphics, C4Config::Graphics, GuiX, GuiY, C4Rect::Hgt, IsPassive(), C4ConfigGraphics::MouseCursorSize, pDraw, pGUI, C4Def::PictureRect, pPlayer, Selection, C4TargetFacet::Set(), C4Draw::SetBlitMode(), C4Draw::SetZoom(), C4Facet::Surface, C4DefGraphics::Type, C4DefGraphics::TYPE_Bitmap, C4DefGraphics::TYPE_Mesh, Visible, C4Rect::Wdt, C4Facet::X, and C4Facet::Y.

Referenced by C4Viewport::DrawOverlay().

332 {
333  int32_t iOffsetX,iOffsetY;
334  float wdt = GfxR->fctMouseCursor.Wdt, hgt = GfxR->fctMouseCursor.Hgt;
335  // Cursor size relative to height - does not matter with current square graphics.
336  float zoom = Config.Graphics.MouseCursorSize / hgt;
337  hgt *= zoom;
338  wdt *= zoom;
339 
340  ZoomData GuiZoom;
341  pDraw->GetZoom(&GuiZoom);
342 
343  // Hidden
344  if (!Visible || !fMouseOwned) return;
345 
346  // Draw selection
347  if (!IsPassive())
348  {
350  }
351 
352  // Draw control
353  switch (Drag)
354  {
355  //------------------------------------------------------------------------------------------
357  // Hotspot offset: Usually, hotspot is in center
358  iOffsetX = wdt/2;
359  iOffsetY = hgt/2;
360  // calculate the hotspot for the scrolling cursors
361  switch (Cursor)
362  {
363  case C4MC_Cursor_Up: iOffsetY += -hgt/2; break;
364  case C4MC_Cursor_Down:iOffsetY += +hgt/2; break;
365  case C4MC_Cursor_Left: iOffsetX += -wdt/2; break;
366  case C4MC_Cursor_Right: iOffsetX += +wdt/2; break;
367  case C4MC_Cursor_UpLeft: iOffsetX += -wdt/2; iOffsetY += -hgt/2; break;
368  case C4MC_Cursor_UpRight: iOffsetX += +wdt/2; iOffsetY += -hgt/2; break;
369  case C4MC_Cursor_DownLeft: iOffsetX += -wdt/2; iOffsetY += +hgt/2; break;
370  case C4MC_Cursor_DownRight: iOffsetX += +wdt/2; iOffsetY += +hgt/2; break;
371  }
372  // Drag image
374  {
375  C4DefGraphics* pGfx;
376  if(DragImageObject)
377  pGfx = DragImageObject->GetGraphics();
378  else
379  pGfx = &DragImageDef->Graphics;
380 
381  // Determine image boundaries
382  float ImageWdt;
383  float ImageHgt;
384  if (pGfx->Type == C4DefGraphics::TYPE_Bitmap)
385  {
387  ImageWdt = Def->PictureRect.Wdt;
388  ImageHgt = Def->PictureRect.Hgt;
389  }
390  else if (pGfx->Type == C4DefGraphics::TYPE_Mesh)
391  {
392  // Note bounding box is in OGRE coordinate system
393  ImageWdt = pGfx->Mesh->GetBoundingBox().y2 - pGfx->Mesh->GetBoundingBox().y1;
394  ImageHgt = pGfx->Mesh->GetBoundingBox().z2 - pGfx->Mesh->GetBoundingBox().z1;
395  }
396  else
397  {
398  ImageWdt = ImageHgt = 1.0f;
399  }
400 
401  // zoom mode: Drag in GUI or Game depending on source object
402  bool fIsGameZoom = true;
404  fIsGameZoom = false;
405  // drag image in game zoom
406  float XDraw, YDraw, ZoomDraw;
407  if (fIsGameZoom)
408  {
409  pDraw->SetZoom(GameZoom);
410  XDraw = GameX; YDraw = GameY;
411  ZoomDraw = 1.0f;
412  }
413  else
414  {
415  ZoomDraw = std::min(64.0f / ImageWdt, 64.0f / ImageHgt);
416  XDraw = GuiX; YDraw = GuiY;
417  }
418 
419  iOffsetX=int(ZoomDraw*ImageWdt/2);
420  iOffsetY=int(ZoomDraw*ImageHgt/2);
421 
422  C4TargetFacet ccgo;
423  ccgo.Set(cgo.Surface, XDraw + cgo.X - iOffsetX, YDraw + cgo.Y - iOffsetY, float(ImageWdt)*ZoomDraw, float(ImageHgt)*ZoomDraw);
424 
425  if (DragImageObject)
426  {
427  uint32_t ColorMod = DragImageObject->ColorMod;
428  uint32_t BlitMode = DragImageObject->BlitMode;
429  DragImageObject->ColorMod = (Drag == C4MC_Drag_Script) ? 0x7fffffff : (/*DragImagePhase*/false ? 0x8f7f0000 : 0x1f007f00);
431 
432  DragImageObject->DrawPicture(ccgo, false, nullptr);
433 
434  DragImageObject->ColorMod = ColorMod;
435  DragImageObject->BlitMode = BlitMode;
436  }
437  else
438  {
439  // draw in special modulation mode
441  // draw DragImage in red or green, according to the phase to be used
442  pDraw->ActivateBlitModulation((Drag == C4MC_Drag_Script) ? 0x7fffffff : (/*DragImagePhase*/false ? 0x8f7f0000 : 0x1f007f00));
443 
444  DragImageDef->Draw(ccgo, false, pPlayer ? pPlayer->ColorDw : 0xff0000ff, nullptr, 0, 0, nullptr);
445 
446  // reset color
448  pDraw->SetBlitMode(0);
449  }
450 
451  if (fIsGameZoom) pDraw->SetZoom(GuiZoom);
452  // reset cursor hotspot offset for script drawing
453  iOffsetX = wdt/2;
454  iOffsetY = hgt/2;
455  }
456  // Cursor
458  {
459  GfxR->fctMouseCursor.DrawX(cgo.Surface, cgo.X+GuiX-iOffsetX, cgo.Y+GuiY-iOffsetY, wdt, hgt, Cursor);
460  }
461  break;
462  //------------------------------------------------------------------------------------------
463  }
464 
465  // Draw caption
466  if (Caption && ::pGUI)
467  {
468  C4TargetFacet cgoTip;
469  cgoTip = static_cast<const C4Facet &>(cgo);
470  C4GUI::Screen::DrawToolTip(Caption.getData(), cgoTip, cgo.X+GuiX, cgo.Y+GuiY);
471  }
472 
473 }
C4ObjectList Selection
C4Config Config
Definition: C4Config.cpp:833
float Y
Definition: C4Facet.h:118
#define C4GFXBLIT_MOD2
Definition: C4Surface.h:27
#define GfxR
C4Player * pPlayer
const int32_t C4MC_Drag_Script
C4Rect PictureRect
Definition: C4Def.h:107
const int32_t C4MC_Cursor_Right
void DrawPicture(C4Facet &cgo, bool fSelected=false, C4DrawTransform *transform=nullptr)
Definition: C4Object.cpp:2340
C4Object * DragImageObject
int32_t MouseCursorSize
Definition: C4Config.h:118
const int32_t C4MC_Cursor_Down
static void DrawToolTip(const char *szTip, C4TargetFacet &cgo, float guix, float guiy)
Definition: C4Gui.cpp:1009
void SetBlitMode(DWORD dwBlitMode)
Definition: C4Draw.h:191
C4DefGraphics * GetGraphics() const
Definition: C4Object.h:341
uint32_t ColorDw
Definition: C4Player.h:89
C4ConfigGraphics Graphics
Definition: C4Config.h:253
int32_t Wdt
Definition: C4Rect.h:30
const int32_t C4MC_Drag_None
C4GUIScreen * pGUI
Definition: C4Gui.cpp:1191
C4Def * Def
Definition: C4Object.h:143
StdCopyStrBuf Caption
const int32_t C4MC_Cursor_Left
const int32_t C4MC_Cursor_DownLeft
void DrawSelectMark(C4TargetFacet &cgo) const
void Set(const C4Facet &cpy)
Definition: C4Facet.h:182
C4Object * DragObject
void Draw(C4Facet &cgo, bool fSelected=false, DWORD iColor=0, C4Object *pObj=nullptr, int32_t iPhaseX=0, int32_t iPhaseY=0, C4DrawTransform *trans=nullptr, const char *graphicsName=nullptr)
Definition: C4Def.cpp:597
Definition: C4Def.h:98
C4Draw * pDraw
Definition: C4Draw.cpp:42
C4Def * DragImageDef
const char * getData() const
Definition: StdBuf.h:442
int32_t Category
Definition: C4Object.h:113
const int32_t C4MC_Cursor_Up
const int32_t C4MC_Drag_Unhandled
uint32_t ColorMod
Definition: C4Object.h:162
void GetZoom(ZoomData *r)
Definition: C4Draw.h:197
const int32_t C4MC_Cursor_UpLeft
GraphicsType Type
Definition: C4DefGraphics.h:48
void DeactivateBlitModulation()
Definition: C4Draw.h:189
uint32_t BlitMode
Definition: C4Object.h:163
const int32_t C4MC_Cursor_DownRight
void ActivateBlitModulation(DWORD dwWithClr)
Definition: C4Draw.h:188
int32_t Hgt
Definition: C4Rect.h:30
const int32_t C4MC_Cursor_UpRight
C4Surface * Surface
Definition: C4Facet.h:117
void SetZoom(float X, float Y, float Zoom)
Definition: C4Draw.cpp:779
C4DefGraphics Graphics
Definition: C4Def.h:191
float X
Definition: C4Facet.h:118
const int32_t C4D_Foreground
Definition: C4Def.h:53
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Execute()

void C4MouseControl::Execute ( )

Definition at line 98 of file C4MouseControl.cpp.

References Active, AltDown, C4MC_Button_None, ControlDown, fMouseOwned, Game, C4Game::iTick5, Move(), Scrolling, ShiftDown, VpX, and VpY.

Referenced by C4Game::Execute().

99 {
100 
101  if (!Active || !fMouseOwned) return;
102 
103  // Scrolling/continuous update
104  if (Scrolling || !::Game.iTick5)
105  {
106  WORD wKeyState=0;
107  if (ControlDown) wKeyState|=MK_CONTROL;
108  if (ShiftDown) wKeyState|=MK_SHIFT;
109  if (AltDown) wKeyState|=MK_ALT;
110  Move(C4MC_Button_None, VpX, VpY, wKeyState);
111  }
112 }
int32_t iTick5
Definition: C4Game.h:130
C4Game Game
Definition: C4Globals.cpp:52
void Move(int32_t iButton, int32_t iX, int32_t iY, DWORD dwKeyFlags, bool fCenter=false)
const int32_t C4MC_Button_None
uint16_t WORD
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetCaption()

const char * C4MouseControl::GetCaption ( )

Definition at line 819 of file C4MouseControl.cpp.

References Caption, and StdStrBuf::getData().

Referenced by IsActive(), and C4EditCursor::UpdateStatusBar().

820 {
821  return Caption.getData();
822 }
StdCopyStrBuf Caption
const char * getData() const
Definition: StdBuf.h:442
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLastCursorPos()

bool C4MouseControl::GetLastCursorPos ( int32_t *  x_out_gui,
int32_t *  y_out_gui,
int32_t *  x_out_game,
int32_t *  y_out_game 
) const

Definition at line 870 of file C4MouseControl.cpp.

References Active, fMouseOwned, GameX, GameY, GuiX, and GuiY.

Referenced by C4PlayerControl::DoMouseInput(), and IsActive().

871 {
872  // safety
873  if (!Active || !fMouseOwned) return false;
874  // OK; assign last known pos
875  *x_out_gui = GuiX; *y_out_gui = GuiY;
876  *x_out_game = GameX; *y_out_game = GameY;
877  return true;
878 }
Here is the caller graph for this function:

◆ GetPlayer()

int32_t C4MouseControl::GetPlayer ( )
inline

Definition at line 167 of file C4MouseControl.h.

References MouseControl, and Player.

Referenced by C4ObjectMenu::IsReadOnly(), C4MenuItem::MouseEnter(), C4ScriptGuiWindow::MouseEnter(), C4MenuItem::MouseInput(), C4ScriptGuiWindow::MouseInput(), C4ScriptGuiWindow::MouseLeave(), C4ObjectMenu::OnUserClose(), and C4ScriptGuiWindow::ProcessMouseInput().

167 { return Player; }
Here is the caller graph for this function:

◆ GetTargetObject()

C4Object * C4MouseControl::GetTargetObject ( )
protected

Definition at line 838 of file C4MouseControl.cpp.

References C4D_MouseSelect, fctViewportGame, fctViewportGUI, C4Game::FindVisObject(), Game, GameX, GameY, GuiX, GuiY, Player, ViewX, ViewY, C4Facet::X, and C4Facet::Y.

Referenced by IsActive(), and UpdateCursorTarget().

839 {
840  // find object
841  // gui object position currently wrong...will fall apart once GUIZoom is activated
843  if (!pObj) return nullptr;
844  return pObj;
845 }
float Y
Definition: C4Facet.h:118
C4Game Game
Definition: C4Globals.cpp:52
C4Facet fctViewportGame
const int32_t C4D_MouseSelect
Definition: C4Def.h:52
C4Facet fctViewportGUI
C4Object * FindVisObject(float tx, float ty, int32_t iPlr, const C4Facet &fctViewportGame, const C4Facet &fctViewportGUI, float iX, float iY, DWORD category, float gui_x, float gui_y)
Definition: C4Game.cpp:1225
float X
Definition: C4Facet.h:118
Here is the call graph for this function:
Here is the caller graph for this function:

◆ HideCursor()

void C4MouseControl::HideCursor ( )

Definition at line 814 of file C4MouseControl.cpp.

References Visible.

Referenced by C4EditCursor::SetMode().

815 {
816  Visible=false;
817 }
Here is the caller graph for this function:

◆ Init()

bool C4MouseControl::Init ( int32_t  iPlayer)

Definition at line 114 of file C4MouseControl.cpp.

References Active, Clear(), Default(), InitCentered, Player, and UpdateClip().

Referenced by C4FullScreen::ViewportCheck().

115 {
116  Clear();
117  Default();
118  Active = true;
119  Player = iPlayer;
120  InitCentered = false;
121  UpdateClip();
122  return true;
123 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsActive()

bool C4MouseControl::IsActive ( )
inline

Definition at line 138 of file C4MouseControl.h.

References Active, ButtonUpDragScript(), DragNone(), DragScript(), GetCaption(), GetLastCursorPos(), GetTargetObject(), IsDragging(), IsPassive(), LeftDouble(), LeftDown(), LeftUp(), LeftUpDragNone(), RightDown(), RightUp(), RightUpDragNone(), ScrollView(), SetTooltipRectangle(), SetTooltipText(), C4ScriptGuiWindowPropertyName::text, UpdateCursorTarget(), UpdateFogOfWar(), UpdateScrolling(), UpdateSingleSelection(), C4Viewport::ViewHgt, C4Viewport::ViewWdt, and Wheel().

Referenced by C4GUI::Screen::MouseMove().

138 { return !!Active; }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsDragging()

bool C4MouseControl::IsDragging ( )

Definition at line 865 of file C4MouseControl.cpp.

References Active, C4MC_Drag_Script, and Drag.

Referenced by C4Viewport::DrawMenu(), IsActive(), and C4GUI::Screen::MouseMove().

866 {
867  return Active && Drag == C4MC_Drag_Script;
868 }
const int32_t C4MC_Drag_Script
Here is the caller graph for this function:

◆ IsLeftDown()

bool C4MouseControl::IsLeftDown ( )
inline

Definition at line 166 of file C4MouseControl.h.

References LeftButtonDown.

Referenced by C4ScriptGuiWindow::ProcessMouseInput().

166 { return LeftButtonDown; }
Here is the caller graph for this function:

◆ IsMouseOwned()

bool C4MouseControl::IsMouseOwned ( )
inline

Definition at line 137 of file C4MouseControl.h.

References fMouseOwned.

Referenced by C4GUI::Screen::SetMouseInGUI().

137 { return fMouseOwned; }
Here is the caller graph for this function:

◆ IsPassive()

bool C4MouseControl::IsPassive ( )
protected

Definition at line 847 of file C4MouseControl.cpp.

References Control, C4GameControl::isReplay(), NO_OWNER, and Player.

Referenced by Draw(), IsActive(), LeftUpDragNone(), Move(), RightUpDragNone(), and UpdateCursorTarget().

848 {
850 }
bool isReplay() const
Definition: C4GameControl.h:98
C4GameControl Control
const int NO_OWNER
Definition: C4Constants.h:137
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsViewport()

bool C4MouseControl::IsViewport ( C4Viewport pViewport)

Definition at line 139 of file C4MouseControl.cpp.

References Viewport.

Referenced by C4Viewport::DrawMenu(), C4Viewport::DrawOverlay(), and C4ViewportList::MouseMoveToViewport().

140 {
141  return (Viewport==pViewport);
142 }
C4Viewport * Viewport
Here is the caller graph for this function:

◆ LeftDouble()

void C4MouseControl::LeftDouble ( )
protected

Definition at line 676 of file C4MouseControl.cpp.

References C4MC_Drag_None, Drag, LeftButtonDown, and LeftDoubleIgnoreUp.

Referenced by IsActive(), and Move().

677 {
678  // Update status flag
679  LeftButtonDown=false;
680  // Set ignore flag for next left up
681  LeftDoubleIgnoreUp=true;
682  // Evaluate left double by drag status (can only be C4MC_Drag_None really)
683  switch (Drag)
684  {
685  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
686  case C4MC_Drag_None:
687  // Double left click (might be on a target)
688  break;
689  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
690  }
691 }
const int32_t C4MC_Drag_None
Here is the caller graph for this function:

◆ LeftDown()

void C4MouseControl::LeftDown ( )
protected

Definition at line 604 of file C4MouseControl.cpp.

References DownTarget, DownX, DownY, GameX, GameY, LeftButtonDown, and TargetObject.

Referenced by IsActive(), and Move().

605 {
606  // Set flag
607  LeftButtonDown=true;
608  // Store down values (same MoveRightDown -> use StoreDown)
611 }
C4Object * DownTarget
C4Object * TargetObject
Here is the caller graph for this function:

◆ LeftUp()

void C4MouseControl::LeftUp ( )
protected

Definition at line 613 of file C4MouseControl.cpp.

References ButtonUpDragScript(), C4MC_Drag_None, C4MC_Drag_Script, C4MC_Drag_Unhandled, DownTarget, Drag, LeftButtonDown, LeftDoubleIgnoreUp, LeftUpDragNone(), and RightButtonDown.

Referenced by IsActive(), and Move().

614 {
615  // Ignore left up after double click
616  if (LeftDoubleIgnoreUp)
617  {
618  LeftDoubleIgnoreUp=false;
619  }
620  else
621  {
622  // Evaluate by drag status
623  switch (Drag)
624  {
625  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
626  case C4MC_Drag_Unhandled: // nobreak
627  case C4MC_Drag_None: LeftUpDragNone(); break;
628  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
629  case C4MC_Drag_Script: ButtonUpDragScript(); break;
630  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
631  }
632  }
633  // Update status flag
634  LeftButtonDown=false;
635  if(!RightButtonDown) DownTarget = nullptr;
636 }
const int32_t C4MC_Drag_Script
C4Object * DownTarget
const int32_t C4MC_Drag_None
const int32_t C4MC_Drag_Unhandled
Here is the call graph for this function:
Here is the caller graph for this function:

◆ LeftUpDragNone()

void C4MouseControl::LeftUpDragNone ( )
protected

Definition at line 733 of file C4MouseControl.cpp.

References C4Control::Add(), C4MC_Cursor_Select, C4MC_Drag_None, CID_PlrSelect, C4ObjectList::Clear(), Cursor, DownTarget, Drag, Game, C4ObjectList::GetObject(), C4Game::Input, IsPassive(), Player, and Selection.

Referenced by IsActive(), and LeftUp().

734 {
735  // might be in Drag_Unknown
737  // Single left click (might be on a target)
738  switch (Cursor)
739  {
740  case C4MC_Cursor_Select:
741  // Object selection to control queue
742  if (!IsPassive() && Selection.GetObject() == DownTarget)
744  break;
745  default:
746  // done in script
747  break;
748  }
749  // Clear selection
750  Selection.Clear();
751 }
C4ObjectList Selection
C4Game Game
Definition: C4Globals.cpp:52
void Add(C4PacketType eType, C4ControlPacket *pCtrl)
Definition: C4Control.h:82
C4Object * GetObject(int Index=0) const
C4Object * DownTarget
const int32_t C4MC_Drag_None
const int32_t C4MC_Cursor_Select
C4Control & Input
Definition: C4Game.h:82
virtual void Clear()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Move()

void C4MouseControl::Move ( int32_t  iButton,
int32_t  iX,
int32_t  iY,
DWORD  dwKeyFlags,
bool  fCenter = false 
)

Definition at line 175 of file C4MouseControl.cpp.

References Active, AltDown, Application, C4MC_Button_LeftDouble, C4MC_Button_LeftDown, C4MC_Button_LeftUp, C4MC_Button_None, C4MC_Button_RightDown, C4MC_Button_RightUp, C4MC_Button_Wheel, C4MC_Cursor_Select, C4MC_Drag_None, C4MC_Drag_Script, C4MC_Drag_Unhandled, Caption, CaptionBottomY, StdStrBuf::Clear(), C4Player::Control, ControlDown, C4Player::ControlSet, Cursor, C4PlayerControl::DoMouseInput(), Drag, DragNone(), DragScript(), fctViewport, fctViewportGame, fctViewportGUI, fMouseOwned, FogOfWar, Game, GameX, GameY, C4PlayerList::Get(), C4Viewport::GetGUIZoom(), C4Viewport::GetOutputRect(), C4ViewportList::GetViewport(), C4Viewport::GetViewX(), C4Viewport::GetViewY(), GuiX, GuiY, C4Rect::Hgt, InitCentered, C4Application::isEditor, C4PlayerControlAssignmentSet::IsMouseControlAssigned(), IsPassive(), KeepCaption, C4Viewport::last_game_draw_cgo, C4Viewport::last_gui_draw_cgo, LeftButtonDown, LeftDouble(), LeftDown(), LeftUp(), NO_OWNER, C4Viewport::OutX, C4Viewport::OutY, Player, Players, pPlayer, C4AbstractApp::pWindow, RightButtonDown, RightDown(), RightUp(), C4Game::ScriptGuiRoot, C4Facet::Set(), ShiftDown, TargetObject, UpdateCursorTarget(), UpdateFogOfWar(), UpdateScrolling(), C4Viewport::ViewHgt, Viewport, Viewports, C4Viewport::ViewWdt, ViewX, ViewY, VpX, VpY, C4Rect::Wdt, Wheel(), C4Rect::x, C4Rect::y, and C4Viewport::Zoom.

Referenced by Execute(), and C4ViewportList::MouseMoveToViewport().

176 {
177  // Control state
178  ControlDown=false; if (dwKeyFlags & MK_CONTROL) ControlDown=true;
179  ShiftDown=false; if (dwKeyFlags & MK_SHIFT) ShiftDown=true;
180  AltDown=false; if(dwKeyFlags & MK_ALT) AltDown=true;
181  // Active
182  if (!Active || !fMouseOwned) return;
183  // Execute caption
184  if (KeepCaption) KeepCaption--; else { Caption.Clear(); CaptionBottomY=0; }
185  // Check player
186  if (Player>NO_OWNER)
187  {
189  if (!pPlayer) { Active=false; return; }
190  }
191  else
192  pPlayer = nullptr;
193  // Check viewport
194  if (!(Viewport=::Viewports.GetViewport(Player))) return;
195  // get view position
196  C4Rect rcViewport = Viewport->GetOutputRect();
197  fctViewport.Set(nullptr, rcViewport.x, rcViewport.y, rcViewport.Wdt, rcViewport.Hgt);
201  // First time viewport attachment: center mouse
202 #ifdef USE_WIN32_WINDOWS
203  if (!InitCentered || fCenter)
204  {
205  iX = Viewport->ViewWdt/2;
206  iY = Viewport->ViewHgt/2;
207  if (!Application.isEditor)
208  {
209  int32_t iMidX = Viewport->OutX + iX;
210  int32_t iMidY = Viewport->OutY + iY;
211  RECT rtWindow;
212  if (GetWindowRect(Application.pWindow->hWindow, &rtWindow))
213  {
214  iMidX += rtWindow.left; iMidY += rtWindow.top;
215  }
216  SetCursorPos(iMidX, iMidY);
217  }
218  InitCentered = true;
219  }
220 #else
221  if (!InitCentered || fCenter)
222  {
223  iX = Viewport->ViewWdt/2;
224  iY = Viewport->ViewHgt/2;
225  InitCentered = true;
226  }
227 #endif
228  // passive mode: scrolling and player buttons only
229  if (IsPassive())
230  {
231  if (iButton != C4MC_Button_Wheel)
232  {
233  VpX=iX; VpY=iY;
235  GuiX=float(VpX)/Viewport->GetGUIZoom(); GuiY=float(VpY)/Viewport->GetGUIZoom();
236  }
237  UpdateScrolling();
238  if (iButton == C4MC_Button_LeftDown) LeftDown();
239  else if (iButton == C4MC_Button_LeftUp) LeftUp();
240  else UpdateCursorTarget();
241  return;
242  }
243 
244  if (iButton != C4MC_Button_Wheel)
245  {
246  // Position
247  VpX=iX; VpY=iY;
249  GuiX=float(VpX)/Viewport->GetGUIZoom(); GuiY=float(VpY)/Viewport->GetGUIZoom();
250  // Scrolling
251  UpdateScrolling();
252  // Fog of war
253  UpdateFogOfWar();
254 
255  // Blocked by fog of war: evaluate button up, dragging and region controls only
256  if (FogOfWar && Drag == C4MC_Drag_None)
257  {
258  // Left button up
259  if (iButton==C4MC_Button_LeftUp)
260  {
261  LeftButtonDown=false;
262  // End any drag
264  }
265  // Right button up
266  if (iButton==C4MC_Button_RightUp)
267  {
268  RightButtonDown=false;
269  }
270  }
271  }
272 
273  // Move execution by button/drag status
274  switch (iButton)
275  {
276  //------------------------------------------------------------------------------------------
277  case C4MC_Button_None:
278  switch (Drag)
279  {
280  case C4MC_Drag_Unhandled: break; // nothing to do
281  case C4MC_Drag_None: DragNone(); break;
282  case C4MC_Drag_Script: DragScript(); break;
283  }
284  break;
285  //------------------------------------------------------------------------------------------
286  case C4MC_Button_LeftDown: LeftDown(); break;
287  //------------------------------------------------------------------------------------------
288  case C4MC_Button_LeftUp: LeftUp(); break;
289  //------------------------------------------------------------------------------------------
290  case C4MC_Button_LeftDouble: LeftDouble(); break;
291  //------------------------------------------------------------------------------------------
292  case C4MC_Button_RightDown: RightDown(); break;
293  //------------------------------------------------------------------------------------------
294  case C4MC_Button_RightUp: RightUp(); break;
295  //------------------------------------------------------------------------------------------
296  case C4MC_Button_Wheel: Wheel(dwKeyFlags); break;
297  }
298 
299  // are custom menus active?
300  bool menuProcessed = false;
301  if (pPlayer)
302  // adjust by viewport X/Y because the GUI windows calculate their positions (and thus check input) based on that
303  menuProcessed = ::Game.ScriptGuiRoot->MouseInput(iButton, iX, iY, dwKeyFlags);
304 
305  if (menuProcessed)
307 
308  // if not caught by a menu
309  if (!menuProcessed)
310  // script handling of mouse control for everything but regular movement (which is sent at control frame intervals only)
311  if (iButton != C4MC_Button_None)
312  // not if blocked by selection object
313  if (!TargetObject)
314  // safety (can't really happen in !IsPassive, but w/e
315  if (pPlayer && pPlayer->ControlSet)
316  if (!menuProcessed && pPlayer->ControlSet->IsMouseControlAssigned(iButton))
317  pPlayer->Control.DoMouseInput(0 /* only 1 mouse supported so far */, iButton, GameX, GameY, GuiX, GuiY, dwKeyFlags);
318 }
int32_t OutX
Definition: C4Viewport.h:107
const int32_t C4MC_Button_LeftDown
int32_t OutY
Definition: C4Viewport.h:107
C4Player * pPlayer
const int32_t C4MC_Drag_Script
C4Game Game
Definition: C4Globals.cpp:52
void Clear()
Definition: StdBuf.h:466
const int32_t C4MC_Button_RightUp
Definition: C4Rect.h:27
bool IsMouseControlAssigned(int32_t mouseevent) const
C4Viewport * GetViewport(int32_t iPlayer, C4Viewport *pPrev=nullptr)
C4PlayerControl Control
Definition: C4Player.h:129
C4Object * TargetObject
void Set(C4Surface &rSfc)
Definition: C4Facet.cpp:459
C4TargetFacet last_gui_draw_cgo
Definition: C4Viewport.h:41
C4Facet fctViewportGame
const int32_t C4MC_Button_LeftDouble
int32_t ViewHgt
Definition: C4Viewport.h:36
int32_t Wdt
Definition: C4Rect.h:30
const int32_t C4MC_Drag_None
class C4PlayerControlAssignmentSet * ControlSet
Definition: C4Player.h:90
C4Player * Get(int iPlayer) const
const int32_t C4MC_Button_LeftUp
int32_t ViewWdt
Definition: C4Viewport.h:36
int32_t y
Definition: C4Rect.h:30
StdCopyStrBuf Caption
C4PlayerList Players
const int NO_OWNER
Definition: C4Constants.h:137
int32_t CaptionBottomY
C4Rect GetOutputRect()
Definition: C4Viewport.h:64
const int32_t C4MC_Cursor_Select
C4Viewport * Viewport
float Zoom
Definition: C4Viewport.h:101
C4Facet fctViewportGUI
const int32_t C4MC_Button_RightDown
C4TargetFacet last_game_draw_cgo
Definition: C4Viewport.h:41
int32_t x
Definition: C4Rect.h:30
float GetGUIZoom() const
Definition: C4Viewport.h:47
void Wheel(DWORD dwFlags)
const int32_t C4MC_Button_Wheel
const int32_t C4MC_Drag_Unhandled
C4ViewportList Viewports
Definition: C4Viewport.cpp:841
float GetViewY()
Definition: C4Viewport.h:75
const int32_t C4MC_Button_None
bool DoMouseInput(uint8_t mouse_id, int32_t mouseevent, float game_x, float game_y, float gui_x, float gui_y, DWORD flags)
C4Facet fctViewport
int32_t Hgt
Definition: C4Rect.h:30
std::unique_ptr< C4ScriptGuiWindow > ScriptGuiRoot
Definition: C4Game.h:234
float GetViewX()
Definition: C4Viewport.h:73
C4Window * pWindow
Definition: C4App.h:80
C4Application Application
Definition: C4Globals.cpp:44
Here is the call graph for this function:
Here is the caller graph for this function:

◆ RightDown()

void C4MouseControl::RightDown ( )
protected

Definition at line 693 of file C4MouseControl.cpp.

References DownTarget, DownX, DownY, GameX, GameY, RightButtonDown, and TargetObject.

Referenced by IsActive(), and Move().

694 {
695  // Update status flag
696  RightButtonDown=true;
697  // Store down values (same MoveLeftDown -> use StoreDown)
700 }
C4Object * DownTarget
C4Object * TargetObject
Here is the caller graph for this function:

◆ RightUp()

void C4MouseControl::RightUp ( )
protected

Definition at line 702 of file C4MouseControl.cpp.

References ButtonUpDragScript(), C4MC_Drag_None, C4MC_Drag_Script, C4MC_Drag_Unhandled, DownTarget, Drag, LeftButtonDown, RightButtonDown, and RightUpDragNone().

Referenced by IsActive(), and Move().

703 {
704  // Evaluate by drag status
705  switch (Drag)
706  {
707  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
708  case C4MC_Drag_Unhandled: // nobreak
709  case C4MC_Drag_None: RightUpDragNone(); break;
710  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
711  case C4MC_Drag_Script: ButtonUpDragScript(); break;
712  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
713  }
714  // Update status flag
715  RightButtonDown=false;
716  if(!LeftButtonDown) DownTarget = nullptr;
717 }
const int32_t C4MC_Drag_Script
C4Object * DownTarget
const int32_t C4MC_Drag_None
const int32_t C4MC_Drag_Unhandled
Here is the call graph for this function:
Here is the caller graph for this function:

◆ RightUpDragNone()

void C4MouseControl::RightUpDragNone ( )
protected

Definition at line 777 of file C4MouseControl.cpp.

References C4Control::Add(), C4MC_Cursor_Select, C4MC_Drag_None, CID_PlrSelect, Cursor, DownTarget, Drag, Game, C4ObjectList::GetObject(), C4Game::Input, IsPassive(), Player, and Selection.

Referenced by IsActive(), and RightUp().

778 {
779 
780  // might be in Drag_Unknown
782 
783  // Alternative object selection
786 
787  // TODO: Evaluate right click
788 
789 }
C4ObjectList Selection
C4Game Game
Definition: C4Globals.cpp:52
void Add(C4PacketType eType, C4ControlPacket *pCtrl)
Definition: C4Control.h:82
C4Object * GetObject(int Index=0) const
C4Object * DownTarget
const int32_t C4MC_Drag_None
const int32_t C4MC_Cursor_Select
C4Control & Input
Definition: C4Game.h:82
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ScrollView()

void C4MouseControl::ScrollView ( float  iX,
float  iY,
float  ViewWdt,
float  ViewHgt 
)
protected

Definition at line 852 of file C4MouseControl.cpp.

References pPlayer, C4Viewport::ScrollView(), C4Player::ScrollView(), and Viewport.

Referenced by IsActive(), and UpdateScrolling().

853 {
854  // player assigned: scroll player view
855  if (pPlayer)
856  pPlayer->ScrollView(iX, iY, ViewWdt, ViewHgt);
857  else if (Viewport)
858  {
859  // no player: Scroll fullscreen viewport
860  Viewport->ScrollView(iX, iY);
861  }
862 
863 }
C4Player * pPlayer
void ScrollView(float iX, float iY, float ViewWdt, float ViewHgt)
Definition: C4Player.cpp:1364
void ScrollView(float byX, float byY)
Definition: C4Viewport.cpp:734
C4Viewport * Viewport
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetOwnedMouse()

void C4MouseControl::SetOwnedMouse ( bool  fToVal)
inline

Definition at line 136 of file C4MouseControl.h.

Referenced by C4GUI::Screen::SetMouseInGUI().

136 { fMouseOwned = fToVal; }
Here is the caller graph for this function:

◆ SetTooltipRectangle()

void C4MouseControl::SetTooltipRectangle ( const C4Rect rectangle)

Definition at line 824 of file C4MouseControl.cpp.

References C4Rect::Hgt, TimeInTooltipRectangle, ToolTipRectangle, C4Rect::Wdt, C4Rect::x, and C4Rect::y.

Referenced by IsActive(), C4ScriptGuiWindow::OnMouseIn(), and UpdateCursorTarget().

825 {
826  // Set the tooltip rectangle slightly larger than originally requested.
827  // The tooltip will be removed when the cursor leaves the rectangle, so make sure that the tooltip is not already disabled when the cursor moves to the border-pixel of the GUI item
828  // in case the GUI item uses a different check for bounds (< vs <=) than the tooltip rectangle.
829  ToolTipRectangle = C4Rect(rectangle.x - 2, rectangle.y - 2, rectangle.Wdt + 4, rectangle.Hgt + 4);
831 }
C4Rect ToolTipRectangle
int32_t TimeInTooltipRectangle
Definition: C4Rect.h:27
int32_t Wdt
Definition: C4Rect.h:30
int32_t y
Definition: C4Rect.h:30
int32_t x
Definition: C4Rect.h:30
int32_t Hgt
Definition: C4Rect.h:30
Here is the caller graph for this function:

◆ SetTooltipText()

void C4MouseControl::SetTooltipText ( const StdStrBuf text)

Definition at line 833 of file C4MouseControl.cpp.

References C4ScriptGuiWindowPropertyName::text, and TooltipText.

Referenced by IsActive(), C4ScriptGuiWindow::OnMouseIn(), and UpdateCursorTarget().

Here is the caller graph for this function:

◆ ShowCursor()

void C4MouseControl::ShowCursor ( )

Definition at line 809 of file C4MouseControl.cpp.

References Visible.

Referenced by C4EditCursor::SetMode().

810 {
811  Visible=true;
812 }
Here is the caller graph for this function:

◆ UpdateClip()

void C4MouseControl::UpdateClip ( )

Definition at line 144 of file C4MouseControl.cpp.

References C4AbstractApp::Active, Active, Application, FullScreen, C4ViewportList::GetViewport(), C4GUI::Screen::HasMouseFocus(), C4Application::isEditor, C4Viewport::OutX, C4Viewport::OutY, pGUI, Player, C4GUI::Screen::SetPreferredDlgRect(), C4Viewport::ViewHgt, Viewports, and C4Viewport::ViewWdt.

Referenced by Clear(), Init(), C4Viewport::SetOutputSize(), and C4GUI::Screen::UpdateMouseFocus().

145 {
146 #ifdef _DEBUG
147  // never in debug
148  return;
149 #endif
150 #ifdef USE_WIN32_WINDOWS
151  // fullscreen only
152  if (Application.isEditor) return;
153  // application or mouse control not active? remove any clips
154  if (!Active || !Application.Active || ::pGUI->HasMouseFocus()) { ClipCursor(nullptr); return; }
155  // get controlled viewport
157  if (!pVP) { ClipCursor(nullptr); return; }
158  // adjust size by viewport size
159  RECT vpRct;
160  vpRct.left=pVP->OutX; vpRct.top=pVP->OutY; vpRct.right=pVP->OutX+pVP->ViewWdt; vpRct.bottom=pVP->OutY+pVP->ViewHgt;
161  // adjust by window pos
162  RECT rtWindow;
163  if (GetWindowRect(FullScreen.hWindow, &rtWindow))
164  {
165  vpRct.left += rtWindow.left; vpRct.top += rtWindow.top;
166  vpRct.right += rtWindow.left; vpRct.bottom+= rtWindow.top;
167  }
168  ClipCursor(&vpRct);
169  // and inform GUI
170  ::pGUI->SetPreferredDlgRect(C4Rect(pVP->OutX, pVP->OutY, pVP->ViewWdt, pVP->ViewHgt));
171 #endif
172  //StdWindow manages this.
173 }
int32_t OutX
Definition: C4Viewport.h:107
int32_t OutY
Definition: C4Viewport.h:107
C4FullScreen FullScreen
Definition: C4Globals.cpp:46
Definition: C4Rect.h:27
C4Viewport * GetViewport(int32_t iPlayer, C4Viewport *pPrev=nullptr)
void SetPreferredDlgRect(const C4Rect &rtNewPref)
Definition: C4Gui.h:2648
int32_t ViewHgt
Definition: C4Viewport.h:36
C4GUIScreen * pGUI
Definition: C4Gui.cpp:1191
bool Active
Definition: C4App.h:63
int32_t ViewWdt
Definition: C4Viewport.h:36
C4ViewportList Viewports
Definition: C4Viewport.cpp:841
bool HasMouseFocus()
Definition: C4Gui.h:2675
C4Application Application
Definition: C4Globals.cpp:44
Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateCursorTarget()

void C4MouseControl::UpdateCursorTarget ( )
protected

Definition at line 475 of file C4MouseControl.cpp.

References C4Control::Add(), C4Object::addtop(), C4D_IgnoreFoW, C4D_MouseSelect, C4MC_Cursor_Crosshair, C4MC_Cursor_Passive, C4MC_Cursor_Select, C4MC_Drag_Script, C4MC_MD_DropTarget, C4MC_MD_NoClick, C4MC_Tooltip_Delay, Caption, C4Object::Category, CID_PlrMouseMove, Cursor, Drag, DragObject, fctViewportGUI, FogOfWar, Game, C4PlayerList::Get(), C4String::GetCStr(), C4PropList::GetPropertyInt(), C4PropList::GetPropertyStr(), GetTargetObject(), C4Object::GetViewPos(), GuiX, GuiY, C4Rect::Hgt, C4ControlPlayerMouse::Hover(), C4Game::Input, Inside(), IsPassive(), KeepCaption, P_MouseDrag, P_Tooltip, Player, Players, Scrolling, SetTooltipRectangle(), SetTooltipText(), C4Object::Shape, TargetObject, TimeInTooltipRectangle, ToolTipRectangle, TooltipText, C4Rect::Wdt, C4Rect::x, C4Facet::X, C4Rect::y, and C4Facet::Y.

Referenced by ButtonUpDragScript(), DragNone(), DragScript(), IsActive(), and Move().

476 {
477  C4Object* OldTargetObject = TargetObject;
478 
479  if (Scrolling)
480  {
481  // Scrolling: no other target
482  TargetObject=nullptr;
483  }
484  else
485  {
486  // Target object
489 
490  // Movement
492 
493  // Target action
494  if (TargetObject && !IsPassive())
495  {
496  // default cursor for object; also set if not in FoW
498 
499  // select custom region. Can select an object if it does not have the MD_NoClick
500  // flag set. If we are currently dragging then selection depends on it being a drop target.
501  bool CanSelect;
502  if(Drag == C4MC_Drag_Script)
504  else
506 
507  if ( (TargetObject->Category & C4D_MouseSelect) && CanSelect)
509  else
510  TargetObject = nullptr;
511  }
512 
513  // passive cursor
514  if (IsPassive())
516 
517  // update tooltip information
518  if (OldTargetObject != TargetObject)
519  {
520  C4String *newTooltip = nullptr;
522  {
523  float objX, objY;
525  objX += TargetObject->Shape.x;
526  objY += TargetObject->Shape.y - TargetObject->addtop();
528  SetTooltipText(StdStrBuf(newTooltip->GetCStr()));
529  }
530  else
531  {
532  SetTooltipRectangle(C4Rect(0, 0, 0, 0));
533  }
534  }
535 
536  if (!KeepCaption
537  && ToolTipRectangle.Wdt != 0
540  {
542 
544  {
546  }
547  }
548  else
549  {
550  // disable tooltip pop-up; whatever set it in the first place will set it again on the next mouse-enter
552  ToolTipRectangle.Wdt = 0;
553  }
554  }
555 
556  // Make a script callback if the object being hovered changes
557  if(!IsPassive() && OldTargetObject != TargetObject)
558  {
559  // TODO: This might put a heavy load on the network, depending on the number of
560  // selectable objects around. If it turns out to be a problem we might want to
561  // deduce these hover callbacks client-side instead.
562  // Or, make sure to send this at most once per control frame.
564  }
565 }
void SetTooltipRectangle(const C4Rect &rectangle)
float Y
Definition: C4Facet.h:118
C4Rect ToolTipRectangle
const int32_t C4MC_Drag_Script
C4Game Game
Definition: C4Globals.cpp:52
int32_t TimeInTooltipRectangle
C4String * GetPropertyStr(C4PropertyName k) const
Definition: C4PropList.cpp:775
const int32_t C4MC_Cursor_Passive
StdCopyStrBuf TooltipText
int32_t GetPropertyInt(C4PropertyName k, int32_t default_val=0) const
Definition: C4PropList.cpp:886
void Add(C4PacketType eType, C4ControlPacket *pCtrl)
Definition: C4Control.h:82
Definition: C4Rect.h:27
C4Object * TargetObject
const int32_t C4MC_MD_NoClick
const int32_t C4MC_MD_DropTarget
int32_t Wdt
Definition: C4Rect.h:30
const int32_t C4D_IgnoreFoW
Definition: C4Def.h:55
void SetTooltipText(const StdStrBuf &text)
const int32_t C4D_MouseSelect
Definition: C4Def.h:52
const char * GetCStr() const
Definition: C4StringTable.h:49
C4Player * Get(int iPlayer) const
int32_t y
Definition: C4Rect.h:30
StdCopyStrBuf Caption
C4Object * DragObject
C4PlayerList Players
void GetViewPos(float &riX, float &riY, float tx, float ty, const C4Facet &fctViewport) const
Definition: C4Object.cpp:4332
const int32_t C4MC_Tooltip_Delay
const int32_t C4MC_Cursor_Select
static C4ControlPlayerMouse * Hover(const C4Player *player, const C4Object *target, const C4Object *old_target, const C4Object *drag=nullptr)
Definition: C4Control.cpp:446
C4Facet fctViewportGUI
int32_t Category
Definition: C4Object.h:113
C4Control & Input
Definition: C4Game.h:82
int32_t x
Definition: C4Rect.h:30
int32_t Hgt
Definition: C4Rect.h:30
C4Shape Shape
Definition: C4Object.h:148
C4Object * GetTargetObject()
bool Inside(T ival, U lbound, V rbound)
Definition: Standard.h:43
int32_t addtop() const
Definition: C4Object.h:282
float X
Definition: C4Facet.h:118
const int32_t C4MC_Cursor_Crosshair
Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateFogOfWar()

void C4MouseControl::UpdateFogOfWar ( )
protected

Definition at line 791 of file C4MouseControl.cpp.

References C4D_IgnoreFoW, C4MC_Cursor_Passive, C4Object::Category, Cursor, FogOfWar, GameX, GameY, C4Landscape::GetHeight(), C4Landscape::GetWidth(), Landscape, Scrolling, and TargetObject.

Referenced by IsActive(), and Move().

792 {
793  // Assume no fog of war
794  FogOfWar=false;
795  // Check for fog of war
796  // TODO: Check C4FoWRegion... should maybe be passed as a parameter?
797  // pDraw->GetFoW() might not be current at this time.
798  if (/*(pPlayer->fFogOfWar && !pPlayer->FoWIsVisible(int32_t(GameX),int32_t(GameY))) || */GameX<0 || GameY<0 || int32_t(GameX)>=::Landscape.GetWidth() || int32_t(GameY)>=::Landscape.GetHeight())
799  {
800  FogOfWar=true;
801  // allow dragging, scrolling, region selection and manipulations of objects not affected by FoW
803  {
805  }
806  }
807 }
const int32_t C4MC_Cursor_Passive
C4Object * TargetObject
const int32_t C4D_IgnoreFoW
Definition: C4Def.h:55
C4Landscape Landscape
int32_t Category
Definition: C4Object.h:113
int32_t GetHeight() const
int32_t GetWidth() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateScrolling()

void C4MouseControl::UpdateScrolling ( )
protected

Definition at line 582 of file C4MouseControl.cpp.

References C4MC_Cursor_Down, C4MC_Cursor_DownLeft, C4MC_Cursor_DownRight, C4MC_Cursor_Left, C4MC_Cursor_Right, C4MC_Cursor_Up, C4MC_Cursor_UpLeft, C4MC_Cursor_UpRight, Cursor, C4Player::IsViewLocked(), pPlayer, Scrolling, ScrollSpeed, ScrollView(), C4Viewport::ViewHgt, Viewport, C4Viewport::ViewWdt, VpX, VpY, and C4Viewport::Zoom.

Referenced by IsActive(), and Move().

583 {
584  // Assume no scrolling
585  Scrolling=false;
586  // No scrolling if disabled by player
587  if (pPlayer) if (pPlayer->IsViewLocked()) return;
588  // Scrolling on border
589  if (VpX==0)
591  if (VpY==0)
593  if (VpX==Viewport->ViewWdt-1)
595  if (VpY==Viewport->ViewHgt-1)
597  // Set correct cursor
598  if ((VpX==0) && (VpY==0)) Cursor=C4MC_Cursor_UpLeft;
599  if ((VpX==Viewport->ViewWdt-1) && (VpY==0)) Cursor=C4MC_Cursor_UpRight;
600  if ((VpX==0) && (VpY==Viewport->ViewHgt-1)) Cursor=C4MC_Cursor_DownLeft;
602 }
bool IsViewLocked() const
Definition: C4Player.h:204
C4Player * pPlayer
const int32_t C4MC_Cursor_Right
const int32_t C4MC_Cursor_Down
void ScrollView(float iX, float iY, float ViewWdt, float ViewHgt)
int32_t ViewHgt
Definition: C4Viewport.h:36
int32_t ViewWdt
Definition: C4Viewport.h:36
const int32_t C4MC_Cursor_Left
int32_t ScrollSpeed
const int32_t C4MC_Cursor_DownLeft
C4Viewport * Viewport
float Zoom
Definition: C4Viewport.h:101
const int32_t C4MC_Cursor_Up
const int32_t C4MC_Cursor_UpLeft
const int32_t C4MC_Cursor_DownRight
const int32_t C4MC_Cursor_UpRight
Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateSingleSelection()

int32_t C4MouseControl::UpdateSingleSelection ( )
protected

Definition at line 567 of file C4MouseControl.cpp.

References C4ObjectList::Add(), C4D_MouseSelect, C4MC_Cursor_Select, C4Object::Category, C4ObjectList::Clear(), Cursor, C4PlayerList::Get(), C4ObjectList::GetObject(), C4ObjectList::ObjectCount(), C4Player::ObjectInCrew(), Player, Players, Selection, C4ObjectList::stNone, and TargetObject.

Referenced by DragNone(), DragScript(), and IsActive().

568 {
569  // Set single selection if cursor on selection object (clear prior object selection)
572 
573  // Cursor has moved off single object (or target object) selection: clear selection
574  else if (Selection.GetObject())
577  Selection.Clear();
578 
579  return Selection.ObjectCount();
580 }
C4ObjectList Selection
virtual bool Add(C4Object *nObj, SortType eSort, C4ObjectList *pLstSorted=nullptr)
C4Object * GetObject(int Index=0) const
C4Object * TargetObject
const int32_t C4D_MouseSelect
Definition: C4Def.h:52
C4Player * Get(int iPlayer) const
C4PlayerList Players
int ObjectCount(C4ID id=C4ID::None) const
const int32_t C4MC_Cursor_Select
int32_t Category
Definition: C4Object.h:113
virtual void Clear()
bool ObjectInCrew(C4Object *tobj)
Definition: C4Player.cpp:90
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Wheel()

void C4MouseControl::Wheel ( DWORD  dwFlags)
protected

Definition at line 719 of file C4MouseControl.cpp.

Referenced by IsActive(), and Move().

720 {
721 }
Here is the caller graph for this function:

Friends And Related Function Documentation

◆ C4Viewport

friend class C4Viewport
friend

Definition at line 68 of file C4MouseControl.h.

Member Data Documentation

◆ Active

bool C4MouseControl::Active
protected

◆ AltDown

bool C4MouseControl::AltDown
protected

Definition at line 96 of file C4MouseControl.h.

Referenced by Default(), DoMoveInput(), Execute(), and Move().

◆ ButtonDownOnSelection

bool C4MouseControl::ButtonDownOnSelection
protected

Definition at line 93 of file C4MouseControl.h.

Referenced by Default().

◆ Caption

StdCopyStrBuf C4MouseControl::Caption
protected

Definition at line 112 of file C4MouseControl.h.

Referenced by Default(), Draw(), GetCaption(), Move(), and UpdateCursorTarget().

◆ CaptionBottomY

int32_t C4MouseControl::CaptionBottomY
protected

Definition at line 115 of file C4MouseControl.h.

Referenced by Default(), and Move().

◆ ControlDown

bool C4MouseControl::ControlDown
protected

Definition at line 94 of file C4MouseControl.h.

Referenced by Default(), DoMoveInput(), Execute(), and Move().

◆ Cursor

int32_t C4MouseControl::Cursor
protected

◆ DownTarget

C4Object* C4MouseControl::DownTarget
protected

◆ DownX

float C4MouseControl::DownX
protected

Definition at line 87 of file C4MouseControl.h.

Referenced by Default(), DragNone(), LeftDown(), and RightDown().

◆ DownY

float C4MouseControl::DownY
protected

Definition at line 87 of file C4MouseControl.h.

Referenced by Default(), DragNone(), LeftDown(), and RightDown().

◆ Drag

◆ DragID

C4ID C4MouseControl::DragID
protected

Definition at line 105 of file C4MouseControl.h.

Referenced by ButtonUpDragScript(), and Default().

◆ DragImageDef

C4Def* C4MouseControl::DragImageDef
protected

Definition at line 106 of file C4MouseControl.h.

Referenced by ButtonUpDragScript(), ClearPointers(), Default(), DragNone(), and Draw().

◆ DragImageObject

C4Object* C4MouseControl::DragImageObject
protected

Definition at line 107 of file C4MouseControl.h.

Referenced by ButtonUpDragScript(), ClearPointers(), Default(), DragNone(), and Draw().

◆ DragObject

C4Object* C4MouseControl::DragObject
protected

◆ fctViewport

C4Facet C4MouseControl::fctViewport
protected

Definition at line 85 of file C4MouseControl.h.

Referenced by Default(), and Move().

◆ fctViewportGame

C4Facet C4MouseControl::fctViewportGame
protected

Definition at line 85 of file C4MouseControl.h.

Referenced by GetTargetObject(), and Move().

◆ fctViewportGUI

C4Facet C4MouseControl::fctViewportGUI
protected

Definition at line 85 of file C4MouseControl.h.

Referenced by GetTargetObject(), Move(), and UpdateCursorTarget().

◆ fMouseOwned

bool C4MouseControl::fMouseOwned
protected

Definition at line 74 of file C4MouseControl.h.

Referenced by Default(), DoMoveInput(), Draw(), Execute(), GetLastCursorPos(), IsMouseOwned(), and Move().

◆ FogOfWar

bool C4MouseControl::FogOfWar
protected

Definition at line 99 of file C4MouseControl.h.

Referenced by Default(), DragNone(), Move(), UpdateCursorTarget(), and UpdateFogOfWar().

◆ GameX

float C4MouseControl::GameX
protected

◆ GameY

float C4MouseControl::GameY
protected

◆ GuiX

float C4MouseControl::GuiX
protected

◆ GuiY

float C4MouseControl::GuiY
protected

◆ InitCentered

bool C4MouseControl::InitCentered
protected

Definition at line 98 of file C4MouseControl.h.

Referenced by C4Viewport::AdjustPosition(), Default(), Init(), and Move().

◆ KeepCaption

int32_t C4MouseControl::KeepCaption
protected

Definition at line 116 of file C4MouseControl.h.

Referenced by Default(), Move(), and UpdateCursorTarget().

◆ LeftButtonDown

bool C4MouseControl::LeftButtonDown
protected

Definition at line 92 of file C4MouseControl.h.

Referenced by Default(), DragNone(), IsLeftDown(), LeftDouble(), LeftDown(), LeftUp(), Move(), and RightUp().

◆ LeftDoubleIgnoreUp

bool C4MouseControl::LeftDoubleIgnoreUp
protected

Definition at line 92 of file C4MouseControl.h.

Referenced by Default(), LeftDouble(), and LeftUp().

◆ Player

◆ pPlayer

C4Player* C4MouseControl::pPlayer
protected

Definition at line 76 of file C4MouseControl.h.

Referenced by Default(), DoMoveInput(), Draw(), Move(), ScrollView(), and UpdateScrolling().

◆ RightButtonDown

bool C4MouseControl::RightButtonDown
protected

Definition at line 92 of file C4MouseControl.h.

Referenced by Default(), DragNone(), LeftUp(), Move(), RightDown(), and RightUp().

◆ Scrolling

bool C4MouseControl::Scrolling
protected

◆ ScrollSpeed

int32_t C4MouseControl::ScrollSpeed
protected

Definition at line 89 of file C4MouseControl.h.

Referenced by Default(), and UpdateScrolling().

◆ Selection

C4ObjectList C4MouseControl::Selection
protected

◆ ShiftDown

bool C4MouseControl::ShiftDown
protected

Definition at line 95 of file C4MouseControl.h.

Referenced by Default(), DoMoveInput(), Execute(), and Move().

◆ TargetObject

C4Object* C4MouseControl::TargetObject
protected

◆ TimeInTooltipRectangle

int32_t C4MouseControl::TimeInTooltipRectangle
protected

Definition at line 117 of file C4MouseControl.h.

Referenced by SetTooltipRectangle(), and UpdateCursorTarget().

◆ ToolTipRectangle

C4Rect C4MouseControl::ToolTipRectangle
protected

Definition at line 118 of file C4MouseControl.h.

Referenced by SetTooltipRectangle(), and UpdateCursorTarget().

◆ TooltipText

StdCopyStrBuf C4MouseControl::TooltipText
protected

Definition at line 114 of file C4MouseControl.h.

Referenced by SetTooltipText(), and UpdateCursorTarget().

◆ Viewport

C4Viewport* C4MouseControl::Viewport
protected

Definition at line 77 of file C4MouseControl.h.

Referenced by Default(), IsViewport(), Move(), ScrollView(), and UpdateScrolling().

◆ ViewX

float C4MouseControl::ViewX
protected

Definition at line 82 of file C4MouseControl.h.

Referenced by Default(), GetTargetObject(), and Move().

◆ ViewY

float C4MouseControl::ViewY
protected

Definition at line 82 of file C4MouseControl.h.

Referenced by Default(), GetTargetObject(), and Move().

◆ Visible

bool C4MouseControl::Visible
protected

Definition at line 100 of file C4MouseControl.h.

Referenced by Default(), Draw(), HideCursor(), and ShowCursor().

◆ VpX

int32_t C4MouseControl::VpX
protected

Definition at line 81 of file C4MouseControl.h.

Referenced by C4Viewport::AdjustPosition(), Default(), Execute(), Move(), and UpdateScrolling().

◆ VpY

int32_t C4MouseControl::VpY
protected

Definition at line 81 of file C4MouseControl.h.

Referenced by C4Viewport::AdjustPosition(), Default(), Execute(), Move(), and UpdateScrolling().


The documentation for this class was generated from the following files: