JUCE  v5.1.1-3-g1a0b28c73
JUCE API
ComponentPeer Class Referenceabstract

The Component class uses a ComponentPeer internally to create and manage a real operating-system window. More...

#include <juce_ComponentPeer.h>

Collaboration diagram for ComponentPeer:

Classes

struct  DragInfo
 

Public Types

enum  StyleFlags {
  windowAppearsOnTaskbar = (1 << 0),
  windowIsTemporary = (1 << 1),
  windowIgnoresMouseClicks = (1 << 2),
  windowHasTitleBar = (1 << 3),
  windowIsResizable = (1 << 4),
  windowHasMinimiseButton = (1 << 5),
  windowHasMaximiseButton = (1 << 6),
  windowHasCloseButton = (1 << 7),
  windowHasDropShadow = (1 << 8),
  windowRepaintedExplictly = (1 << 9),
  windowIgnoresKeyPresses = (1 << 10),
  windowIsSemiTransparent = (1 << 31)
}
 A combination of these flags is passed to the ComponentPeer constructor. More...
 

Public Member Functions

 ComponentPeer (Component &component, int styleFlags)
 Creates a peer. More...
 
virtual ~ComponentPeer ()
 Destructor. More...
 
virtual bool contains (Point< int > localPos, bool trueIfInAChildWindow) const =0
 Checks if a point is in the window. More...
 
virtual void dismissPendingTextInput ()
 If there's some kind of OS input-method in progress, this should dismiss it. More...
 
TextInputTargetfindCurrentTextInputTarget ()
 Returns the currently focused TextInputTarget, or null if none is found. More...
 
Rectangle< intgetAreaCoveredBy (Component &subComponent) const
 Returns the area in peer coordinates that is covered by the given sub-comp (which may be at any depth) More...
 
virtual StringArray getAvailableRenderingEngines ()=0
 
virtual Rectangle< intgetBounds () const =0
 Returns the current position and size of the window. More...
 
ComponentgetComponent () noexcept
 Returns the component being represented by this peer. More...
 
ComponentBoundsConstrainergetConstrainer () const noexcept
 Returns the current constrainer, if one has been set. More...
 
virtual int getCurrentRenderingEngine () const
 
virtual BorderSize< intgetFrameSize () const =0
 Returns the size of the window frame that's around this window. More...
 
ComponentgetLastFocusedSubcomponent () const noexcept
 
virtual void * getNativeHandle () const =0
 Returns the raw handle to whatever kind of window is being used. More...
 
const Rectangle< int > & getNonFullScreenBounds () const noexcept
 Returns the size to restore to if fullscreen mode is turned off. More...
 
int getStyleFlags () const noexcept
 Returns the set of style flags that were set when the window was created. More...
 
uint32 getUniqueID () const noexcept
 Returns a unique ID for this peer. More...
 
virtual Point< float > globalToLocal (Point< float > screenPosition)=0
 Converts a screen coordinate to a position relative to the top-left of this component. More...
 
Point< intglobalToLocal (Point< int > screenPosition)
 Converts a screen coordinate to a position relative to the top-left of this component. More...
 
virtual Rectangle< intglobalToLocal (const Rectangle< int > &screenPosition)
 Converts a screen area to a position relative to the top-left of this component. More...
 
virtual void grabFocus ()=0
 Tries to give the window keyboard focus. More...
 
void handleBroughtToFront ()
 Called when the window is brought to the front, either by the OS or by a call to toFront(). More...
 
bool handleDragDrop (const DragInfo &)
 
bool handleDragExit (const DragInfo &)
 
bool handleDragMove (const DragInfo &)
 
void handleFocusGain ()
 Called when the window gains keyboard focus. More...
 
void handleFocusLoss ()
 Called when the window loses keyboard focus. More...
 
bool handleKeyPress (int keyCode, juce_wchar textCharacter)
 Called when a key is pressed. More...
 
bool handleKeyPress (const KeyPress &key)
 Called when a key is pressed. More...
 
bool handleKeyUpOrDown (bool isKeyDown)
 Called whenever a key is pressed or released. More...
 
void handleMagnifyGesture (MouseInputSource::InputSourceType type, Point< float > positionWithinPeer, int64 time, float scaleFactor, int touchIndex=0)
 
void handleModifierKeysChange ()
 Called whenever a modifier key is pressed or released. More...
 
void handleMouseEvent (MouseInputSource::InputSourceType type, Point< float > positionWithinPeer, ModifierKeys newMods, float pressure, float orientation, int64 time, PenDetails pen={}, int touchIndex=0)
 
void handleMouseWheel (MouseInputSource::InputSourceType type, Point< float > positionWithinPeer, int64 time, const MouseWheelDetails &, int touchIndex=0)
 
void handleMovedOrResized ()
 This is called when the window's bounds change. More...
 
void handlePaint (LowLevelGraphicsContext &contextToPaintTo)
 This is called to repaint the component into the given context. More...
 
virtual void handleScreenSizeChange ()
 This is called if the screen resolution changes. More...
 
void handleUserClosingWindow ()
 
virtual bool isFocused () const =0
 True if the window has the keyboard focus. More...
 
virtual bool isFullScreen () const =0
 True if the window is currently full-screen. More...
 
virtual bool isKioskMode () const
 True if the window is in kiosk-mode. More...
 
virtual bool isMinimised () const =0
 True if the window is currently minimised. More...
 
virtual Point< float > localToGlobal (Point< float > relativePosition)=0
 Converts a position relative to the top-left of this component to screen coordinates. More...
 
Point< intlocalToGlobal (Point< int > relativePosition)
 Converts a position relative to the top-left of this component to screen coordinates. More...
 
virtual Rectangle< intlocalToGlobal (const Rectangle< int > &relativePosition)
 Converts a rectangle relative to the top-left of this component to screen coordinates. More...
 
virtual void performAnyPendingRepaintsNow ()=0
 This can be called (from the message thread) to cause the immediate redrawing of any areas of this window that need repainting. More...
 
virtual void repaint (const Rectangle< int > &area)=0
 Invalidates a region of the window to be repainted asynchronously. More...
 
virtual void setAlpha (float newAlpha)=0
 Changes the window's transparency. More...
 
virtual bool setAlwaysOnTop (bool alwaysOnTop)=0
 Sets this window to either be always-on-top or normal. More...
 
virtual void setBounds (const Rectangle< int > &newBounds, bool isNowFullScreen)=0
 Moves and resizes the window. More...
 
void setConstrainer (ComponentBoundsConstrainer *newConstrainer) noexcept
 Sets a constrainer to use if the peer can resize itself. More...
 
virtual void setCurrentRenderingEngine (int index)
 
virtual bool setDocumentEditedStatus (bool edited)
 If this type of window is capable of indicating that the document in it has been edited, then this changes its status. More...
 
virtual void setFullScreen (bool shouldBeFullScreen)=0
 Enable/disable fullscreen mode for the window. More...
 
virtual void setIcon (const Image &newIcon)=0
 Attempts to change the icon associated with this window. More...
 
virtual void setMinimised (bool shouldBeMinimised)=0
 Minimises the window. More...
 
void setNonFullScreenBounds (const Rectangle< int > &newBounds) noexcept
 Sets the size to restore to if fullscreen mode is turned off. More...
 
virtual void setRepresentedFile (const File &)
 If this type of window is capable of indicating that it represents a file, then this lets you set the file. More...
 
virtual void setTitle (const String &title)=0
 Changes the title of the window. More...
 
virtual void setVisible (bool shouldBeVisible)=0
 Shows or hides the window. More...
 
virtual void textInputRequired (Point< int > position, TextInputTarget &)=0
 Tells the window that text input may be required at the given position. More...
 
virtual void toBehind (ComponentPeer *other)=0
 Moves the window to be just behind another one. More...
 
virtual void toFront (bool makeActive)=0
 Brings the window to the top, optionally also giving it focus. More...
 
void updateBounds ()
 Updates the peer's bounds to match its component. More...
 

Static Public Member Functions

static int getNumPeers () noexcept
 Returns the number of currently-active peers. More...
 
static ComponentPeergetPeer (int index) noexcept
 Returns one of the currently-active peers. More...
 
static ComponentPeergetPeerFor (const Component *) noexcept
 Returns the peer that's attached to the given component, or nullptr if there isn't one. More...
 
static bool isValidPeer (const ComponentPeer *peer) noexcept
 Checks if this peer object is valid. More...
 

Protected Attributes

Componentcomponent
 
ComponentBoundsConstrainerconstrainer = nullptr
 
Rectangle< intlastNonFullscreenBounds
 
const int styleFlags
 

Private Member Functions

ComponentgetTargetForKeyPress ()
 

Private Attributes

WeakReference< ComponentdragAndDropTargetComponent
 
bool isWindowMinimised = false
 
ComponentlastDragAndDropCompUnderMouse = nullptr
 
WeakReference< ComponentlastFocusedComponent
 
const uint32 uniqueID
 

Detailed Description

The Component class uses a ComponentPeer internally to create and manage a real operating-system window.

This is an abstract base class - the platform specific code contains implementations of it for the various platforms.

User-code should very rarely need to have any involvement with this class.

See also
Component::createNewPeer

Member Enumeration Documentation

◆ StyleFlags

A combination of these flags is passed to the ComponentPeer constructor.

Enumerator
windowAppearsOnTaskbar 

Indicates that the window should have a corresponding entry on the taskbar (ignored on MacOSX)

windowIsTemporary 

Indicates that the window is a temporary popup, like a menu, tooltip, etc.

windowIgnoresMouseClicks 

Indicates that the window should let mouse clicks pass through it (may not be possible on some platforms).

windowHasTitleBar 

Indicates that the window should have a normal OS-specific title bar and frame.

if not specified, the window will be borderless.

windowIsResizable 

Indicates that the window should have a resizable border.

windowHasMinimiseButton 

Indicates that if the window has a title bar, it should have a minimise button on it.

windowHasMaximiseButton 

Indicates that if the window has a title bar, it should have a maximise button on it.

windowHasCloseButton 

Indicates that if the window has a title bar, it should have a close button on it.

windowHasDropShadow 

Indicates that the window should have a drop-shadow (this may not be possible on all platforms).

windowRepaintedExplictly 

Not intended for public use - this tells a window not to do its own repainting, but only to repaint when the performAnyPendingRepaintsNow() method is called.

windowIgnoresKeyPresses 

Tells the window not to catch any keypresses.

This can be used for things like plugin windows, to stop them interfering with the host's shortcut keys

windowIsSemiTransparent 

Not intended for public use - makes a window transparent.

Constructor & Destructor Documentation

◆ ComponentPeer()

ComponentPeer::ComponentPeer ( Component component,
int  styleFlags 
)

Creates a peer.

The component is the one that we intend to represent, and the style flags are a combination of the values in the StyleFlags enum

◆ ~ComponentPeer()

virtual ComponentPeer::~ComponentPeer ( )
virtual

Destructor.

Member Function Documentation

◆ contains()

virtual bool ComponentPeer::contains ( Point< int localPos,
bool  trueIfInAChildWindow 
) const
pure virtual

Checks if a point is in the window.

The position is relative to the top-left of this window, in unscaled peer coordinates. If trueIfInAChildWindow is false, then this returns false if the point is actually inside a child of this window.

◆ dismissPendingTextInput()

virtual void ComponentPeer::dismissPendingTextInput ( )
virtual

If there's some kind of OS input-method in progress, this should dismiss it.

◆ findCurrentTextInputTarget()

TextInputTarget* ComponentPeer::findCurrentTextInputTarget ( )

Returns the currently focused TextInputTarget, or null if none is found.

◆ getAreaCoveredBy()

Rectangle<int> ComponentPeer::getAreaCoveredBy ( Component subComponent) const

Returns the area in peer coordinates that is covered by the given sub-comp (which may be at any depth)

◆ getAvailableRenderingEngines()

virtual StringArray ComponentPeer::getAvailableRenderingEngines ( )
pure virtual

◆ getBounds()

virtual Rectangle<int> ComponentPeer::getBounds ( ) const
pure virtual

Returns the current position and size of the window.

If the native window is contained in another window, then the coordinates are relative to the parent window's origin, not the screen origin.

◆ getComponent()

Component& ComponentPeer::getComponent ( )
inlinenoexcept

Returns the component being represented by this peer.

◆ getConstrainer()

ComponentBoundsConstrainer* ComponentPeer::getConstrainer ( ) const
inlinenoexcept

Returns the current constrainer, if one has been set.

◆ getCurrentRenderingEngine()

virtual int ComponentPeer::getCurrentRenderingEngine ( ) const
virtual

◆ getFrameSize()

virtual BorderSize<int> ComponentPeer::getFrameSize ( ) const
pure virtual

Returns the size of the window frame that's around this window.

Whether or not the window has a normal window frame depends on the flags that were set when the window was created by Component::addToDesktop()

◆ getLastFocusedSubcomponent()

Component* ComponentPeer::getLastFocusedSubcomponent ( ) const
noexcept

◆ getNativeHandle()

virtual void* ComponentPeer::getNativeHandle ( ) const
pure virtual

Returns the raw handle to whatever kind of window is being used.

On windows, this is probably a HWND, on the mac, it's likely to be a WindowRef, but remember there's no guarantees what you'll get back.

Referenced by OpenGLContext::NativeContext::createNativeWindow(), OpenGLContext::NativeContext::NativeContext(), OpenGLContext::NativeContext::releaseDC(), and OpenGLContext::NativeContext::updateWindowPosition().

◆ getNonFullScreenBounds()

const Rectangle<int>& ComponentPeer::getNonFullScreenBounds ( ) const
noexcept

Returns the size to restore to if fullscreen mode is turned off.

◆ getNumPeers()

static int ComponentPeer::getNumPeers ( )
staticnoexcept

Returns the number of currently-active peers.

See also
getPeer

◆ getPeer()

static ComponentPeer* ComponentPeer::getPeer ( int  index)
staticnoexcept

Returns one of the currently-active peers.

See also
getNumPeers

Referenced by FakeMouseMoveGenerator::timerCallback().

◆ getPeerFor()

static ComponentPeer* ComponentPeer::getPeerFor ( const Component )
staticnoexcept

Returns the peer that's attached to the given component, or nullptr if there isn't one.

◆ getStyleFlags()

int ComponentPeer::getStyleFlags ( ) const
inlinenoexcept

Returns the set of style flags that were set when the window was created.

See also
Component::addToDesktop

◆ getTargetForKeyPress()

Component* ComponentPeer::getTargetForKeyPress ( )
private

◆ getUniqueID()

uint32 ComponentPeer::getUniqueID ( ) const
inlinenoexcept

Returns a unique ID for this peer.

Each peer that is created is given a different ID.

◆ globalToLocal() [1/3]

virtual Point<float> ComponentPeer::globalToLocal ( Point< float >  screenPosition)
pure virtual

Converts a screen coordinate to a position relative to the top-left of this component.

◆ globalToLocal() [2/3]

Point<int> ComponentPeer::globalToLocal ( Point< int screenPosition)

Converts a screen coordinate to a position relative to the top-left of this component.

◆ globalToLocal() [3/3]

virtual Rectangle<int> ComponentPeer::globalToLocal ( const Rectangle< int > &  screenPosition)
virtual

Converts a screen area to a position relative to the top-left of this component.

◆ grabFocus()

virtual void ComponentPeer::grabFocus ( )
pure virtual

Tries to give the window keyboard focus.

◆ handleBroughtToFront()

void ComponentPeer::handleBroughtToFront ( )

Called when the window is brought to the front, either by the OS or by a call to toFront().

◆ handleDragDrop()

bool ComponentPeer::handleDragDrop ( const DragInfo )

◆ handleDragExit()

bool ComponentPeer::handleDragExit ( const DragInfo )

◆ handleDragMove()

bool ComponentPeer::handleDragMove ( const DragInfo )

◆ handleFocusGain()

void ComponentPeer::handleFocusGain ( )

Called when the window gains keyboard focus.

◆ handleFocusLoss()

void ComponentPeer::handleFocusLoss ( )

Called when the window loses keyboard focus.

◆ handleKeyPress() [1/2]

bool ComponentPeer::handleKeyPress ( int  keyCode,
juce_wchar  textCharacter 
)

Called when a key is pressed.

For keycode info, see the KeyPress class. Returns true if the keystroke was used.

◆ handleKeyPress() [2/2]

bool ComponentPeer::handleKeyPress ( const KeyPress key)

Called when a key is pressed.

Returns true if the keystroke was used.

◆ handleKeyUpOrDown()

bool ComponentPeer::handleKeyUpOrDown ( bool  isKeyDown)

Called whenever a key is pressed or released.

Returns true if the keystroke was used.

◆ handleMagnifyGesture()

void ComponentPeer::handleMagnifyGesture ( MouseInputSource::InputSourceType  type,
Point< float >  positionWithinPeer,
int64  time,
float  scaleFactor,
int  touchIndex = 0 
)

◆ handleModifierKeysChange()

void ComponentPeer::handleModifierKeysChange ( )

Called whenever a modifier key is pressed or released.

◆ handleMouseEvent()

void ComponentPeer::handleMouseEvent ( MouseInputSource::InputSourceType  type,
Point< float >  positionWithinPeer,
ModifierKeys  newMods,
float  pressure,
float  orientation,
int64  time,
PenDetails  pen = {},
int  touchIndex = 0 
)

◆ handleMouseWheel()

void ComponentPeer::handleMouseWheel ( MouseInputSource::InputSourceType  type,
Point< float >  positionWithinPeer,
int64  time,
const MouseWheelDetails ,
int  touchIndex = 0 
)

◆ handleMovedOrResized()

void ComponentPeer::handleMovedOrResized ( )

This is called when the window's bounds change.

A peer implementation must call this when the window is moved and resized, so that this method can pass the message on to the component.

◆ handlePaint()

void ComponentPeer::handlePaint ( LowLevelGraphicsContext contextToPaintTo)

This is called to repaint the component into the given context.

◆ handleScreenSizeChange()

virtual void ComponentPeer::handleScreenSizeChange ( )
virtual

This is called if the screen resolution changes.

A peer implementation must call this if the monitor arrangement changes or the available screen size changes.

◆ handleUserClosingWindow()

void ComponentPeer::handleUserClosingWindow ( )

◆ isFocused()

virtual bool ComponentPeer::isFocused ( ) const
pure virtual

True if the window has the keyboard focus.

◆ isFullScreen()

virtual bool ComponentPeer::isFullScreen ( ) const
pure virtual

True if the window is currently full-screen.

◆ isKioskMode()

virtual bool ComponentPeer::isKioskMode ( ) const
virtual

True if the window is in kiosk-mode.

◆ isMinimised()

virtual bool ComponentPeer::isMinimised ( ) const
pure virtual

True if the window is currently minimised.

◆ isValidPeer()

static bool ComponentPeer::isValidPeer ( const ComponentPeer peer)
staticnoexcept

Checks if this peer object is valid.

See also
getNumPeers

◆ localToGlobal() [1/3]

virtual Point<float> ComponentPeer::localToGlobal ( Point< float >  relativePosition)
pure virtual

Converts a position relative to the top-left of this component to screen coordinates.

◆ localToGlobal() [2/3]

Point<int> ComponentPeer::localToGlobal ( Point< int relativePosition)

Converts a position relative to the top-left of this component to screen coordinates.

◆ localToGlobal() [3/3]

virtual Rectangle<int> ComponentPeer::localToGlobal ( const Rectangle< int > &  relativePosition)
virtual

Converts a rectangle relative to the top-left of this component to screen coordinates.

◆ performAnyPendingRepaintsNow()

virtual void ComponentPeer::performAnyPendingRepaintsNow ( )
pure virtual

This can be called (from the message thread) to cause the immediate redrawing of any areas of this window that need repainting.

You shouldn't ever really need to use this, it's mainly for special purposes like supporting audio plugins where the host's event loop is out of our control.

◆ repaint()

virtual void ComponentPeer::repaint ( const Rectangle< int > &  area)
pure virtual

Invalidates a region of the window to be repainted asynchronously.

◆ setAlpha()

virtual void ComponentPeer::setAlpha ( float  newAlpha)
pure virtual

Changes the window's transparency.

◆ setAlwaysOnTop()

virtual bool ComponentPeer::setAlwaysOnTop ( bool  alwaysOnTop)
pure virtual

Sets this window to either be always-on-top or normal.

Some kinds of window might not be able to do this, so should return false.

◆ setBounds()

virtual void ComponentPeer::setBounds ( const Rectangle< int > &  newBounds,
bool  isNowFullScreen 
)
pure virtual

Moves and resizes the window.

If the native window is contained in another window, then the coordinates are relative to the parent window's origin, not the screen origin.

This should result in a callback to handleMovedOrResized().

◆ setConstrainer()

void ComponentPeer::setConstrainer ( ComponentBoundsConstrainer newConstrainer)
noexcept

Sets a constrainer to use if the peer can resize itself.

The constrainer won't be deleted by this object, so the caller must manage its lifetime.

◆ setCurrentRenderingEngine()

virtual void ComponentPeer::setCurrentRenderingEngine ( int  index)
virtual

◆ setDocumentEditedStatus()

virtual bool ComponentPeer::setDocumentEditedStatus ( bool  edited)
virtual

If this type of window is capable of indicating that the document in it has been edited, then this changes its status.

For example in OSX, this changes the appearance of the close button.

Returns
true if the window has a mechanism for showing this, or false if not.

◆ setFullScreen()

virtual void ComponentPeer::setFullScreen ( bool  shouldBeFullScreen)
pure virtual

Enable/disable fullscreen mode for the window.

◆ setIcon()

virtual void ComponentPeer::setIcon ( const Image newIcon)
pure virtual

Attempts to change the icon associated with this window.

◆ setMinimised()

virtual void ComponentPeer::setMinimised ( bool  shouldBeMinimised)
pure virtual

Minimises the window.

◆ setNonFullScreenBounds()

void ComponentPeer::setNonFullScreenBounds ( const Rectangle< int > &  newBounds)
noexcept

Sets the size to restore to if fullscreen mode is turned off.

◆ setRepresentedFile()

virtual void ComponentPeer::setRepresentedFile ( const File )
virtual

If this type of window is capable of indicating that it represents a file, then this lets you set the file.

E.g. in OSX it'll show an icon for the file in the title bar.

◆ setTitle()

virtual void ComponentPeer::setTitle ( const String title)
pure virtual

Changes the title of the window.

◆ setVisible()

virtual void ComponentPeer::setVisible ( bool  shouldBeVisible)
pure virtual

Shows or hides the window.

Referenced by OpenGLContext::NativeContext::createNativeWindow().

◆ textInputRequired()

virtual void ComponentPeer::textInputRequired ( Point< int position,
TextInputTarget  
)
pure virtual

Tells the window that text input may be required at the given position.

This may cause things like a virtual on-screen keyboard to appear, depending on the OS.

◆ toBehind()

virtual void ComponentPeer::toBehind ( ComponentPeer other)
pure virtual

Moves the window to be just behind another one.

◆ toFront()

virtual void ComponentPeer::toFront ( bool  makeActive)
pure virtual

Brings the window to the top, optionally also giving it focus.

◆ updateBounds()

void ComponentPeer::updateBounds ( )

Updates the peer's bounds to match its component.

Member Data Documentation

◆ component

Component& ComponentPeer::component
protected

◆ constrainer

ComponentBoundsConstrainer* ComponentPeer::constrainer = nullptr
protected

◆ dragAndDropTargetComponent

WeakReference<Component> ComponentPeer::dragAndDropTargetComponent
private

◆ isWindowMinimised

bool ComponentPeer::isWindowMinimised = false
private

◆ lastDragAndDropCompUnderMouse

Component* ComponentPeer::lastDragAndDropCompUnderMouse = nullptr
private

◆ lastFocusedComponent

WeakReference<Component> ComponentPeer::lastFocusedComponent
private

◆ lastNonFullscreenBounds

Rectangle<int> ComponentPeer::lastNonFullscreenBounds
protected

◆ styleFlags

const int ComponentPeer::styleFlags
protected

◆ uniqueID

const uint32 ComponentPeer::uniqueID
private

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