GeUserArea Class Reference

#include <c4d_gui.h>

Detailed Description

A class that can be used to create custom GUI components.
There are already dozens of predefined buttons in the GUI easy available. But if one wants to make his own button, one needs to use the GeUserArea class.
Every user area has a specified drawing area and several commands for drawing lines or text. So it is possible to developer whatever needed, either a 3D trackball or a tree like object manager.

The message sequence when the user area is created:

  1. Init() (only once)
  2. GetMinSize()
  3. Sized()
  4. InitValues()
  5. DrawMsg()
    The message sequence if the user area is scaled:
  1. Sized()
  2. DrawMsg()
    Does not require special allocation, but must be attached to a dialog with GeDialog::AttachUserArea().

Protected Attributes

GeDialogdlg
 

Private Member Functions

 MAXON_DISALLOW_COPY_AND_ASSIGN (GeUserArea)
 

Private Attributes

Bool owncu
 
CUserArea * cu
 

Friends

class GeDialog
 

Constructor/Destructor

 GeUserArea (void)
 
virtual ~GeUserArea (void)
 

Internal Representation

CUserArea * Get ()
 
void Set (CUserArea *t_cu)
 

Parent Dialog

GeDialogGetDialog (void)
 

Override

virtual Bool Init (void)
 
virtual Bool InitValues (void)
 
virtual Bool GetMinSize (Int32 &w, Int32 &h)
 
virtual void Sized (Int32 w, Int32 h)
 
virtual OBSOLETE Draw (Int32 x1, Int32 y1, Int32 x2, Int32 y2)
 
virtual void DrawMsg (Int32 x1, Int32 y1, Int32 x2, Int32 y2, const BaseContainer &msg)
 
virtual Bool InputEvent (const BaseContainer &msg)
 
virtual Bool CoreMessage (Int32 id, const BaseContainer &msg)
 
virtual void Timer (const BaseContainer &msg)
 
virtual Int32 Message (const BaseContainer &msg, BaseContainer &result)
 

Basic Functions

void Redraw (Bool threaded=false)
 
Bool SendParentMessage (const BaseContainer &msg)
 
Int32 GetId (void)
 
Int32 GetWidth (void)
 
Int32 GetHeight (void)
 
Bool IsEnabled (void)
 
Bool IsR2L (void)
 
Bool HasFocus (void)
 
void LayoutChanged (void)
 
void SetTimer (Int32 timer)
 

Input

Bool GetInputState (Int32 askdevice, Int32 askchannel, BaseContainer &res)
 
Bool GetInputEvent (Int32 askdevice, BaseContainer &res)
 
void KillEvents (void)
 
HOTKEYFLAGS IsHotkeyDown (Int32 id)
 

Draw

void DrawSetPen (const Vector &color)
 
void DrawSetPen (Int32 id)
 
void DrawSetPen (const GeData &d)
 
void DrawSetTextCol (Int32 fg, Int32 bg)
 
void DrawSetTextCol (const Vector &fg, Int32 bg)
 
void DrawSetTextCol (Int32 fg, const Vector &bg)
 
void DrawSetTextCol (const Vector &fg, const Vector &bg)
 
void DrawSetTextCol (const GeData &fg, const GeData &bg)
 
Bool GetColorRGB (Int32 colorid, Int32 &r, Int32 &g, Int32 &b)
 
void ActivateFading (Int32 milliseconds)
 
void AdjustColor (Int32 colorid, Int32 highlightid, Float percent)
 
void DrawLine (Int32 x1, Int32 y1, Int32 x2, Int32 y2)
 
void DrawRectangle (Int32 x1, Int32 y1, Int32 x2, Int32 y2)
 
void DrawBitmap (BaseBitmap *bmp, Int32 wx, Int32 wy, Int32 ww, Int32 wh, Int32 x, Int32 y, Int32 w, Int32 h, Int32 mode)
 
void DrawText (const maxon::String &txt, Int32 x, Int32 y, Int32 flags=(0|(0<< 4)))
 
void DrawBezier (Float sx, Float sy, Float *p, Int32 len, Bool closed, Bool filled)
 
void FillBitmapBackground (BaseBitmap *bmp, Int32 offsetx, Int32 offsety)
 
void DrawSetFont (Int32 fontid)
 
Int32 DrawGetTextWidth (const maxon::String &text)
 
Int32 DrawGetTextWidth_ListNodeName (BaseList2D *node, Int32 fontid=FONT_STANDARD)
 
Int32 DrawGetFontHeight (void)
 
Int32 DrawGetFontBaseLine (void)
 
void DrawSetTextRotation (Float textrotation)
 

Clipping

void SetClippingRegion (Int32 x, Int32 y, Int32 w, Int32 h)
 
void ClearClippingRegion (void)
 
Bool OffScreenOn (void)
 
Bool OffScreenOn (Int32 x, Int32 y, Int32 w, Int32 h)
 

Miscellaneous

void ScrollArea (Int32 xdiff, Int32 ydiff, Int32 x, Int32 y, Int32 w, Int32 h)
 
Float GetPixelRatio () const
 

Coordinates Transformation

Bool Local2Global (Int32 *x, Int32 *y)
 
Bool Global2Local (Int32 *x, Int32 *y)
 
Bool Local2Screen (Int32 *x, Int32 *y)
 
Bool Screen2Local (Int32 *x, Int32 *y)
 

Drag and Drop

Bool GetDragPosition (const BaseContainer &msg, Int32 *x, Int32 *y)
 
Bool GetDragObject (const BaseContainer &msg, Int32 *type, void **object)
 
Bool HandleMouseDrag (const BaseContainer &msg, Int32 type, void *data, Int32 dragflags)
 
Bool SetDragDestination (Int32 cursor)
 

Border

void GetBorderSize (Int32 type, Int32 *l, Int32 *t, Int32 *r, Int32 *b)
 
void DrawBorder (Int32 type, Int32 x1, Int32 y1, Int32 x2, Int32 y2)
 
Bool CheckDropArea (const BaseContainer &msg, Bool horiz, Bool vert)
 

Mouse Drag

void MouseDragStart (Int32 button, Float mx, Float my, MOUSEDRAGFLAGS flag)
 
MOUSEDRAGRESULT MouseDrag (Float *mx, Float *my, BaseContainer *channels)
 
MOUSEDRAGRESULT MouseDragEnd (void)
 

Constructor & Destructor Documentation

◆ GeUserArea()

GeUserArea ( void  )

Constructs a user area that is not attached to any dialog.

Note
The user area must be attached to a dialog with GeDialog::AttachUserArea() before it can be used.

◆ ~GeUserArea()

virtual ~GeUserArea ( void  )
virtual

Destroys the user area.

Member Function Documentation

◆ MAXON_DISALLOW_COPY_AND_ASSIGN()

MAXON_DISALLOW_COPY_AND_ASSIGN ( GeUserArea  )
private

◆ Get()

CUserArea* Get ( void  )

Gets the internal representation of the user area.
Needed by some areas in the API for historical reasons.

Returns
The internal user area representation. nullptr if the user area is not attached to a dialog.

◆ Set()

void Set ( CUserArea *  t_cu)

Sets the internal representation of the user area.
Needed by some areas in the API for historical reasons.

Parameters
[in]t_cuAn internal user area representation.

◆ GetDialog()

GeDialog* GetDialog ( void  )

Gets the user area's parent dialog.

Returns
The pointer to the user area's parent dialog.

◆ Init()

virtual Bool Init ( void  )
virtual

Called once when the user area is initialized by the GUI, before the layout is calculated.
Override this function to initialize anything.

Returns
true if successful, or false to signalize an error.

◆ InitValues()

virtual Bool InitValues ( void  )
virtual

Called after the layout is calculated, before the user area is drawn.
Override this function to initialize anything.

Returns
true if successful, or false to signalize an error.

◆ GetMinSize()

virtual Bool GetMinSize ( Int32 w,
Int32 h 
)
virtual

Called to specify a minimum size for the user area.
Override this function to set the minimum size of the user area to w and h.

Parameters
[in]wAssign the minimum width in pixels.
[in]hAssign the minimum height in pixels.
Returns
true if successful, or false to signalize an error.

◆ Sized()

virtual void Sized ( Int32  w,
Int32  h 
)
virtual

Called when the user area is resized.
Override this function to update anything.

Parameters
[in]wThe new width in pixels.
[in]hThe new height in pixels.

◆ Draw()

virtual OBSOLETE Draw ( Int32  x1,
Int32  y1,
Int32  x2,
Int32  y2 
)
virtual

Deprecated.

◆ DrawMsg()

virtual void DrawMsg ( Int32  x1,
Int32  y1,
Int32  x2,
Int32  y2,
const BaseContainer msg 
)
virtual

Called to draw the user area.
Use the drawing functions to update the user area in the region specified by the rectangle from (x1, y1) to (x2, y2).
Remember to use OffScreenOn() to avoid flickering.

Parameters
[in]x1The upper left X coordinate.
[in]y1The upper left Y coordinate.
[in]x2The lower right X coordinate.
[in]y2The lower right Y coordinate.
[in]msgThe draw container.

◆ InputEvent()

virtual Bool InputEvent ( const BaseContainer msg)
virtual

Called when an input event is received.
The information about the input event is stored in the msg container. See Input Events for more information.

See also
MOUSEMOVE_DELTA.
Parameters
[in]msgThe event container.
Returns
true if the event was handled, otherwise false.

◆ CoreMessage()

virtual Bool CoreMessage ( Int32  id,
const BaseContainer msg 
)
virtual

Called when a core message is received.
The message type is given by id and the message information is stored in msg.

See also
The article Core Messages for more information.
Parameters
[in]idThe message type: EVMSG
[in]msgThe core message container.
Returns
Currently not used.

◆ Timer()

virtual void Timer ( const BaseContainer msg)
virtual

Called when a timer event is received.
To subscribe to timer events use SetTimer().

Parameters
[in]msgThe timer message container.

◆ Message()

virtual Int32 Message ( const BaseContainer msg,
BaseContainer result 
)
virtual

Called when a message is received.
Override this function to react to more messages than covered by the other virtual functions. Normally this is not necessary.

Note
If overriden, include a call to the base version of this function, GeUserArea::Message().
See also
The article GUI Messages for more information.
Parameters
[in]msgThe message container.
[in]resultA container to place results in.
Returns
Depends on the message.

◆ Redraw()

void Redraw ( Bool  threaded = false)

Forces the user area to redraw itself.

Parameters
[in]threadedMust be set to true if the function is called from another thread than the main Cinema 4D thread.

◆ SendParentMessage()

Bool SendParentMessage ( const BaseContainer msg)

Sends a custom message to the parent dialog.

See also
The article GUI Messages for more information.
Parameters
[in]msgThe message container.
Returns
true if successful, otherwise false.

◆ GetId()

Int32 GetId ( void  )

Gets the ID of the user area.

Returns
The user area ID.

◆ GetWidth()

Int32 GetWidth ( void  )

Gets the width in pixels of the user area.

Returns
The user area's width.

◆ GetHeight()

Int32 GetHeight ( void  )

Gets the height in pixels of the user area.

Returns
The user area's height.

◆ IsEnabled()

Bool IsEnabled ( void  )

Checks the enabled state of the user area.

Returns
true if the user area is enabled in the dialog, otherwise false.

◆ IsR2L()

Bool IsR2L ( void  )

Checks if the user area has to be drawn in right-to-left layout mode.

Returns
true if the user area is in right-to-left layout mode, otherwise false.

◆ HasFocus()

Bool HasFocus ( void  )

Checks if the user area has the focus.

Returns
true if the user area has the focus in the dialog, otherwise false.

◆ LayoutChanged()

void LayoutChanged ( void  )

Tells Cinema 4D that the user area has new dimensions. That causes Cinema 4D to call:

  1. GetMinSize()
  2. Sized()
  3. InitValues()
  4. Draw()
    The dialog's layout is recalculated in this process.

◆ SetTimer()

void SetTimer ( Int32  timer)

Initializes the timer clock, so that Timer() is called every timer milliseconds. Use SetTimer(0) to stop the timer.

Note
Depending on the speed of the computer, the operating system, the complexity of the dialog and the threads running in the background, there is no guarantee that event messages will occur on a regular basis.
Using a value of 500 ms should be no problem but using a value of 1 ms one might get events with the following time spaces: 3 ms, 76 ms, 15 ms, 19 ms, 67 ms etc.
Warning
Keep in mind that using small timer values results in heavy message traffic in the application which may slow down Cinema 4D (and all other applications running on the computer) to a point where nothing is working any longer besides the dialog.
Parameters
[in]timerThe timer interval in milliseconds. Pass 0 to stop the timer.

◆ GetInputState()

Bool GetInputState ( Int32  askdevice,
Int32  askchannel,
BaseContainer res 
)

Polls a certain channel of a device for the current input state.
If the return value is true, the container stored in res is like an input event message, otherwise no state was available.
For a list of valid devices and channels, see Input Events.

Parameters
[in]askdeviceThe device to ask.
[in]askchannelThe channel of the device.
[in]resThe result container.
Returns
true if an input state could be retrieved, otherwise false.

◆ GetInputEvent()

Bool GetInputEvent ( Int32  askdevice,
BaseContainer res 
)

Gets the next input event for a certain device from the event queue.
If the return value is true, the container stored in res is like an input event message, otherwise no state was available.
For a list of valid devices and channels, see Input Events.

Parameters
[in]askdeviceThe device to poll.
[in]resThe result container.
Returns
true if an input event could be retrieved, otherwise false.

◆ KillEvents()

void KillEvents ( void  )

Flushes all events from the window message queue.
For example if looping while the mouse is down (polling), call this function to flush all key downs/mouse clicks that are made during the loop.

◆ IsHotkeyDown()

HOTKEYFLAGS IsHotkeyDown ( Int32  id)

Checks the standard navigation hotkeys.

Parameters
[in]idThe hotkey to check: HOTKEY
Returns
A value != 0 if the hotkey is pressed.

◆ DrawSetPen() [1/3]

void DrawSetPen ( const Vector color)

Sets the draw color.

Parameters
[in]colorA color vector.

◆ DrawSetPen() [2/3]

void DrawSetPen ( Int32  id)

Sets the draw color.

Parameters
[in]idA color constant: COLOR

◆ DrawSetPen() [3/3]

void DrawSetPen ( const GeData d)

Set the draw color.

Parameters
[in]dA color data. Can be either a color vector or a color constant in the GeData.

◆ DrawSetTextCol() [1/5]

void DrawSetTextCol ( Int32  fg,
Int32  bg 
)

Sets the text foreground and background color.

Parameters
[in]fgA color constant for the foreground: COLOR
[in]bgA color constant for the background: COLOR

◆ DrawSetTextCol() [2/5]

void DrawSetTextCol ( const Vector fg,
Int32  bg 
)

Sets the text foreground and background color.

Parameters
[in]fgA color vector for the foreground.
[in]bgA color constant for the background: COLOR

◆ DrawSetTextCol() [3/5]

void DrawSetTextCol ( Int32  fg,
const Vector bg 
)

Sets the text foreground and background color.

Parameters
[in]fgA color constant for the foreground: COLOR
[in]bgA color vector for the background.

◆ DrawSetTextCol() [4/5]

void DrawSetTextCol ( const Vector fg,
const Vector bg 
)

Sets the text foreground and background color.

Parameters
[in]fgA color vector for the foreground.
[in]bgA color vector for the background.

◆ DrawSetTextCol() [5/5]

void DrawSetTextCol ( const GeData fg,
const GeData bg 
)

Sets the text foreground and background color.

Parameters
[in]fgA color data for the foreground. Can be either a color vector or a color ID.
[in]bgA color data for the background. Can be either a color vector or a color ID.

◆ GetColorRGB()

Bool GetColorRGB ( Int32  colorid,
Int32 r,
Int32 g,
Int32 b 
)

Gets the RGB values associated with a color constant.

Parameters
[in]coloridA color constant: COLOR
[out]rAssigned the red component of the color.
[out]gAssigned the green component of the color.
[out]bAssigned the blue component of the color.
Returns
true if successful, otherwise false.

◆ ActivateFading()

void ActivateFading ( Int32  milliseconds)

Activates the fading.

Parameters
[in]millisecondsThe time for the fading in milliseconds.

◆ AdjustColor()

void AdjustColor ( Int32  colorid,
Int32  highlightid,
Float  percent 
)

Sets the blend colors for user area fading.

Parameters
[in]coloridA color constant to fade from: COLOR
[in]highlightidA color constant to fade to: COLOR
[in]percentA fading percentage.

◆ DrawLine()

void DrawLine ( Int32  x1,
Int32  y1,
Int32  x2,
Int32  y2 
)

Draws a line with the current pen color between (x1,y1) and (x2,y2).

Parameters
[in]x1The X start coordinate.
[in]y1The Y start coordinate.
[in]x2The X end coordinate.
[in]y2The Y end coordinate.

◆ DrawRectangle()

void DrawRectangle ( Int32  x1,
Int32  y1,
Int32  x2,
Int32  y2 
)

Fills a rectangular area with the current pen color between (x1,y1) and (x2,y2).

Parameters
[in]x1The X coordinate of the first corner.
[in]y1The Y coordinate of the first corner.
[in]x2The X coordinate of the opposite corner.
[in]y2The Y coordinate of the opposite corner.

◆ DrawBitmap()

void DrawBitmap ( BaseBitmap bmp,
Int32  wx,
Int32  wy,
Int32  ww,
Int32  wh,
Int32  x,
Int32  y,
Int32  w,
Int32  h,
Int32  mode 
)

Draws a bitmap into the user area.
The region (x,y) to (x+w,y+h) from the bitmap will be scaled and transformed into the region (wx,wy) to (wx+ww,wy+wh) of the destination area.

Note
BMP_ALLOWALPHA can be combined with the other BMP modes for parameter mode.
Parameters
[in]bmpThe bitmap to draw. The caller owns the pointed bitmap.
[in]wxThe X coordinate of the upper left corner of the destination area.
[in]wyThe Y coordinate of the upper left corner of the destination area.
[in]wwThe width of the destination area.
[in]whThe height of the destination area.
[in]xThe X coordinate of the upper left corner of the bitmap area.
[in]yThe Y coordinate of the upper left corner of the bitmap area.
[in]wThe width of the bitmap area.
[in]hThe height of the bitmap area.
[in]modeCan be a combination of the following flags: BMP

◆ DrawText()

void DrawText ( const maxon::String txt,
Int32  x,
Int32  y,
Int32  flags = (0|(0<< 4)) 
)

Draws the string txt with the upper left corner at the position (x,y).

Note
Use DrawGetTextWidth and DrawGetFontHeight to find out where to place the text.
Parameters
[in]txtThe text to draw.
[in]xThe X coordinate of the upper left corner for the text to draw.
[in]yThe Y coordinate of the upper left corner for the text to draw.
[in]flagsThe draw text flags: DRAWTEXT

◆ DrawBezier()

void DrawBezier ( Float  sx,
Float  sy,
Float p,
Int32  len,
Bool  closed,
Bool  filled 
)

Draws concatenated Bezier curves.

Parameters
[in]sxThe X coordinate of the upper left corner of the drawn curve. This is the X coordinate of the starting point.
[in]syThe Y coordinate of the upper left corner of the drawn curve. This is the Y coordinate of the starting point.
[in]pAn array with the Bezier curves points. The length of the array must be defined as: len * 3 * 2.
The following defines ease the initialization of the points array: DRAWBEZIER
Here is an example of initializing the curve points array:
#define LEN 1 // One Bezier curve
Float p[LEN*3*2]; // Allocates an array of 3 [x,y] points.
p[DRAWBEZIER_BX+0] = 35;
p[DRAWBEZIER_BY+0] = 200;
p[DRAWBEZIER_CX+0] = 220;
p[DRAWBEZIER_CY+0] = 260;
p[DRAWBEZIER_DX+0] = 220;
p[DRAWBEZIER_DY+0] = 40;
DrawBezier(120, 160, p, LEN, false, false);
[in]lenThe number of Bezier curves. Must be >=1.
[in]closedIf true, the last point of the last segment connects back to the starting point (sx,sy).
[in]filledIf true, fills the drawn bezier curves, only if it is also closed.

◆ FillBitmapBackground()

void FillBitmapBackground ( BaseBitmap bmp,
Int32  offsetx,
Int32  offsety 
)

Fills a bitmap with the current pen color.

Note
The offsetx and offsety parameters are used when the background is a pattern and are given in local coordinates of the user area. These can be used to make semi-transparent bitmap blits.
Parameters
[in]bmpThe bitmap to fill. The caller owns the pointed bitmap.
[in]offsetxThe X offset in pixels.
[in]offsetyThe Y offset in pixels.

◆ DrawSetFont()

void DrawSetFont ( Int32  fontid)

Sets the text font.

Parameters
[in]fontidThe font to use: FONT

◆ DrawGetTextWidth()

Int32 DrawGetTextWidth ( const maxon::String text)

Retrieves the width in pixels of text, if it were drawn in the current font.

Parameters
[in]textThe string to measure.
Returns
The text width in pixels.

◆ DrawGetTextWidth_ListNodeName()

Int32 DrawGetTextWidth_ListNodeName ( BaseList2D node,
Int32  fontid = FONT_STANDARD 
)

Retrieves the width in pixels of the name of node.

Parameters
[in]nodeThe node to check.
[in]fontidThe font: FONT
Returns
The text width in pixels.

◆ DrawGetFontHeight()

Int32 DrawGetFontHeight ( void  )

Retrieves the height in pixels of a line of text in the current font.

Returns
The height in pixels.

◆ DrawGetFontBaseLine()

Int32 DrawGetFontBaseLine ( void  )

Retrieves the base line of the current font.

Returns
The base line of the current font.

◆ DrawSetTextRotation()

void DrawSetTextRotation ( Float  textrotation)

Rotates the font for drawing.

Note
Rotation is clockwise and must be reset to 0 after drawing.
Parameters
[in]textrotationThe text rotation in degree.

◆ SetClippingRegion()

void SetClippingRegion ( Int32  x,
Int32  y,
Int32  w,
Int32  h 
)

Specifies the clipping region for the Draw() functions.

Note
The clipping region can be set to the whole user area with OffScreenOn automatically, so normally this function is not necessary.
Warning
Without specifying a dedicated clipping region everything will be painted, even outside the user area.
Parameters
[in]xThe X coordinate of the upper left corner of the clipping region.
[in]yThe Y coordinate of the upper left corner of the clipping region.
[in]wThe width of the clipping region.
[in]hThe height of the clipping region.

◆ ClearClippingRegion()

void ClearClippingRegion ( void  )

Clears any clipping region set with SetClippingRegion.

◆ OffScreenOn() [1/2]

Bool OffScreenOn ( void  )

Enables double buffering to avoid blinking and flickering effects. Automatically sets the clipping area to the whole user area.
The GUI will automatically switch planes. Just call this function before drawing things.

Returns
true if double buffering could be enabled, otherwise false.

◆ OffScreenOn() [2/2]

Bool OffScreenOn ( Int32  x,
Int32  y,
Int32  w,
Int32  h 
)

Enables double buffering to avoid blinking and flickering effects. Sets the clipping area to the rectangular area determined by x, y, w and h.

Parameters
[in]xThe X coordinate of the upper left corner of the clipping area.
[in]yThe Y coordinate of the upper left corner of the clipping area.
[in]wThe width of the clipping area.
[in]hThe height of the clipping area.
Returns
true if double buffering could be enabled, otherwise false.

◆ ScrollArea()

void ScrollArea ( Int32  xdiff,
Int32  ydiff,
Int32  x,
Int32  y,
Int32  w,
Int32  h 
)

Scrolls the area from (x,y) to (x+w,y+h) in the direction specified by xdiff and ydiff.

Parameters
[in]xdiffThe X distance to scroll.
[in]ydiffThe Y distance to scroll.
[in]xThe X coordinate of the upper left corner of the area to scroll.
[in]yThe Y coordinate of the upper left corner of the area to scroll.
[in]wThe width of the area to scroll.
[in]hThe height of the area to scroll.

◆ GetPixelRatio()

Float GetPixelRatio ( ) const

Private. Always returns 1.0 except for user areas shown on OS X Retina displays, where it returns 2.0.

Returns
Always 1.0 except for user areas shown on OS X Retina displays.

◆ Local2Global()

Bool Local2Global ( Int32 x,
Int32 y 
)

Transforms local coordinates (relative to the top left corner of the user area) to global window coordinates (relative to the top left corner of the application window). Stores the result in *x and *y.

Parameters
[in,out]xThe local X coordinate. Assigned the global window coordinate.
[in,out]yThe local Y coordinate. Assigned the global window coordinate.
Returns
true if the coordinates were converted, otherwise false.

◆ Global2Local()

Bool Global2Local ( Int32 x,
Int32 y 
)

Transforms global window coordinates (relative to the top left corner of the application window) to local coordinates (relative to the top left corner of the user area). Stores the result in *x and *y.

Parameters
[in,out]xThe global window X coordinate. Assigned the local coordinate.
[in,out]yThe global window Y coordinate. Assigned the local coordinate.
Returns
true if the coordinates were converted, otherwise false.

◆ Local2Screen()

Bool Local2Screen ( Int32 x,
Int32 y 
)

Transforms local coordinates (relative to the top left corner of the user area) to screen coordinates (relative to the top left corner of the system screen). Stores the result in *x and *y.

Parameters
[in,out]xThe local X coordinate. Assigned the screen coordinate.
[in,out]yThe local Y coordinate. Assigned the screen coordinate.
Returns
true if the coordinates were converted, otherwise false.

◆ Screen2Local()

Bool Screen2Local ( Int32 x,
Int32 y 
)

Transforms screen coordinates (relative to the top left corner of the system screen) to local coordinates (relative to the top left corner of the user area). Stores the result in *x and *y.

Parameters
[in,out]xThe screen X coordinate. Assigned the converted local coordinate.
[in,out]yThe screen Y coordinate. Assigned the converted local coordinate.
Returns
true if the coordinates were converted, otherwise false.

◆ GetDragPosition()

Bool GetDragPosition ( const BaseContainer msg,
Int32 x,
Int32 y 
)

Extracts local drag coordinates from a drag and drop event. Stores the result in *x and *y.

See also
The article Drag and Drop for more information.
Parameters
[in]msgThe original message.
[out]xAssigned the local X position.
[out]yAssigned the local Y position.
Returns
true if the drag position was extracted, otherwise false.

◆ GetDragObject()

Bool GetDragObject ( const BaseContainer msg,
Int32 type,
void **  object 
)

Extracts the object from a drag and drop message. Stores the result in *type and *object.

See also
The article Drag and Drop for more information.
Parameters
[in]msgThe original message.
[out]typeAssigned the type of the object.
[out]objectAssigned a pointer to the object. Cinema 4D owns the pointed object.
Returns
true if the drag object was extracted, otherwise false.

◆ HandleMouseDrag()

Bool HandleMouseDrag ( const BaseContainer msg,
Int32  type,
void *  data,
Int32  dragflags 
)

Starts a drag and drop operation.

See also
The article Drag and Drop for more information.
Parameters
[in]msgThe mouse event message that triggered the drag and drop.
[in]typeThe type of data passed: DRAGTYPE
[in]dataA pointer to the data passed.
[in]dragflagsThe drag flags. Private.
Returns
true if the user moved the mouse and a drag and drop operation was initiated.
false if the user did not move the mouse, so that the original event is a normal mouse click event.

◆ SetDragDestination()

Bool SetDragDestination ( Int32  cursor)

Sets the correct cursor during drag and drop handling.

See also
The article Drag and Drop for more information.
Parameters
[in]cursorA mouse cursor: MOUSE
Returns
true if the cursor could be set, otherwise false.

◆ GetBorderSize()

void GetBorderSize ( Int32  type,
Int32 l,
Int32 t,
Int32 r,
Int32 b 
)

Retrieves the space required to draw a border.

Parameters
[in]typeThe border type: BORDER
[out]lAssigned the space to the left.
[out]tAssigned the space on the top.
[out]rAssigned the space to the right.
[out]bAssigned the space on the bottom.

◆ DrawBorder()

void DrawBorder ( Int32  type,
Int32  x1,
Int32  y1,
Int32  x2,
Int32  y2 
)

Draws a border within the rectangle from (x1,y1) to (x2,y2).

Parameters
[in]typeThe border type: BORDER
[in]x1The X coordinate of the first corner.
[in]y1The Y coordinate of the first corner.
[in]x2The X coordinate of the opposite corner.
[in]y2The Y coordinate of the opposite corner.

◆ CheckDropArea()

Bool CheckDropArea ( const BaseContainer msg,
Bool  horiz,
Bool  vert 
)

Checks the drag position in a drag event message against the user area's position in the layout. The check can be limited to only X or Y coordinates.

Parameters
[in]msgThe drag message.
[in]horizIf true the drag position is checked against the horizontal bounds of the region.
[in]vertIf true the drag position is checked against the vertical bounds of the region.
Returns
true if the drag message is within the bounds specified, otherwise false.

◆ MouseDragStart()

void MouseDragStart ( Int32  button,
Float  mx,
Float  my,
MOUSEDRAGFLAGS  flag 
)

Starts a mouse drag. Only call this when a mouse down message is received. Then repeatedly poll with MouseDrag during the drag.

Parameters
[in]buttonThe mouse button that is pressed: BFM_INPUT_CHANNEL
[in]mxThe X position of the mouse.
[in]myThe Y position of the mouse.
[in]flagThe mouse drag flags: MOUSEDRAGFLAGS

◆ MouseDrag()

MOUSEDRAGRESULT MouseDrag ( Float mx,
Float my,
BaseContainer channels 
)

Polls the mouse during a drag started with MouseDragStart.
To check for qualifiers see the channels container:

while (MouseDrag(&dx, &dy, &channels)==MOUSEDRAGRESULT::CONTINUE)
{
if (channels.GetInt32(BFM_INPUT_QUALIFIER) & QSHIFT) shift = true;
if (channels.GetInt32(BFM_INPUT_QUALIFIER) & QCTRL) ctrl = true;
...
}
Parameters
[out]mxAssigned the X delta-coordinate of the mouse (the amount the mouse has moved).
[out]myAssigned the Y delta-coordinate of the mouse (the amount the mouse has moved).
[out]channelsAssigned the channels values. See Input Events.
Also contains these PEN values: PEN
Returns
The mouse drag result: MOUSEDRAGRESULT

◆ MouseDragEnd()

MOUSEDRAGRESULT MouseDragEnd ( void  )

Ends a mouse drag started with MouseDragStart.

Returns
The mouse drag result: MOUSEDRAGRESULT

Friends And Related Function Documentation

◆ GeDialog

friend class GeDialog
friend

Member Data Documentation

◆ owncu

Bool owncu
private

◆ cu

CUserArea* cu
private

◆ dlg

GeDialog* dlg
protected

If the user area is attached to a dialog this points to the dialog, otherwise nullptr. Can be used by derived classes.