The Component class uses a ComponentPeer internally to create and manage a real operating-system window. More...
#include <juce_ComponentPeer.h>
Classes | |
struct | DragInfo |
Structure to describe drag and drop information. More... | |
class | OptionalBorderSize |
Represents the window borders around a window component. More... | |
struct | ScaleFactorListener |
Used to receive callbacks when the OS scale factor of this ComponentPeer changes. More... | |
Public Types | |
enum | Style { Style::automatic, Style::light, Style::dark } |
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 << 30) } |
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... | |
void | addScaleFactorListener (ScaleFactorListener *listenerToAdd) |
Adds a scale factor listener. 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... | |
TextInputTarget * | findCurrentTextInputTarget () |
Returns the currently focused TextInputTarget, or null if none is found. More... | |
Style | getAppStyle () const |
Returns the style requested for this app. More... | |
Rectangle< int > | getAreaCoveredBy (const 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< int > | getBounds () const =0 |
Returns the current position and size of the window. More... | |
Component & | getComponent () noexcept |
Returns the component being represented by this peer. More... | |
ComponentBoundsConstrainer * | getConstrainer () const noexcept |
Returns the current constrainer, if one has been set. More... | |
virtual int | getCurrentRenderingEngine () const |
virtual BorderSize< int > | getFrameSize () const =0 |
Returns the size of the window frame that's around this window. More... | |
virtual OptionalBorderSize | getFrameSizeIfPresent () const =0 |
Returns the size of the window frame that's around this window. More... | |
Component * | getLastFocusedSubcomponent () 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... | |
virtual double | getPlatformScaleFactor () const noexcept |
On Windows and Linux this will return the OS scaling factor currently being applied to the native window. 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... | |
Rectangle< float > | globalToLocal (const Rectangle< float > &screenPosition) |
Converts a screen area to a position relative to the top-left of this component. More... | |
virtual Rectangle< int > | globalToLocal (const Rectangle< int > &screenPosition) |
Converts a screen area to a position relative to the top-left of this component. 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< int > | globalToLocal (Point< int > screenPosition) |
Converts a screen coordinate 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 (const KeyPress &key) |
Called when a key is pressed. More... | |
bool | handleKeyPress (int keyCode, juce_wchar textCharacter) |
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... | |
Rectangle< float > | localToGlobal (const Rectangle< float > &relativePosition) |
Converts a rectangle relative to the top-left of this component to screen coordinates. More... | |
virtual Rectangle< int > | localToGlobal (const Rectangle< int > &relativePosition) |
Converts a rectangle relative to the top-left of this component to screen coordinates. 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< int > | localToGlobal (Point< int > relativePosition) |
Converts a position 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... | |
void | removeScaleFactorListener (ScaleFactorListener *listenerToRemove) |
Removes a scale factor listener. 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... | |
void | setAppStyle (Style s) |
On operating systems that support it, this will update the style of this peer as requested. 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 | setHasChangedSinceSaved (bool) |
On platforms that support it, this will update the window's titlebar in some way to indicate that the window's document needs saving. 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 takeKeyboardFocus)=0 |
Brings the window to the top, optionally also giving it keyboard focus. More... | |
void | updateBounds () |
Updates the peer's bounds to match its component. More... | |
Static Public Member Functions | |
static ModifierKeys | getCurrentModifiersRealtime () noexcept |
On desktop platforms this method will check all the mouse and key states and return a ModifierKeys object representing them. More... | |
static int | getNumPeers () noexcept |
Returns the number of currently-active peers. More... | |
static ComponentPeer * | getPeer (int index) noexcept |
Returns one of the currently-active peers. More... | |
static ComponentPeer * | getPeerFor (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... | |
Static Protected Member Functions | |
static void | forceDisplayUpdate () |
Protected Attributes | |
Component & | component |
ComponentBoundsConstrainer * | constrainer = nullptr |
Rectangle< int > | lastNonFullscreenBounds |
ListenerList< ScaleFactorListener > | scaleFactorListeners |
Style | style = Style::automatic |
const int | styleFlags |
Static Protected Attributes | |
static std::function< ModifierKeys()> | getNativeRealtimeModifiers |
Private Member Functions | |
virtual void | appStyleChanged () |
Component * | getTargetForKeyPress () |
Private Attributes | |
WeakReference< Component > | dragAndDropTargetComponent |
bool | isWindowMinimised = false |
Component * | lastDragAndDropCompUnderMouse = nullptr |
WeakReference< Component > | lastFocusedComponent |
const uint32 | uniqueID |
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.
@tags{GUI}
|
strong |
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. |
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
|
virtual |
Destructor.
|
inline |
Adds a scale factor listener.
|
inlineprivatevirtual |
|
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.
|
virtual |
If there's some kind of OS input-method in progress, this should dismiss it.
TextInputTarget* juce::ComponentPeer::findCurrentTextInputTarget | ( | ) |
Returns the currently focused TextInputTarget, or null if none is found.
|
staticprotected |
|
inline |
Returns the style requested for this app.
Returns the area in peer coordinates that is covered by the given sub-comp (which may be at any depth)
|
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.
|
inlinenoexcept |
Returns the component being represented by this peer.
|
inlinenoexcept |
Returns the current constrainer, if one has been set.
|
staticnoexcept |
On desktop platforms this method will check all the mouse and key states and return a ModifierKeys object representing them.
This isn't recommended and is only needed in special circumstances for up-to-date modifier information at times when the app's event loop isn't running normally.
Another reason to avoid this method is that it's not stateless and calling it may update the ModifierKeys::currentModifiers object, which could cause subtle changes in the behaviour of some components.
|
virtual |
|
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()
|
pure virtual |
Returns the size of the window frame that's around this window.
Depending on the platform the border size may be invalid for a short transient after creating a new window. Hence the returned value must be checked using operator bool() and the contained value can be accessed using operator*() only if it is present.
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()
|
noexcept |
|
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 juce::OpenGLContext::NativeContext::NativeContext().
Returns the size to restore to if fullscreen mode is turned off.
|
staticnoexcept |
Returns the number of currently-active peers.
|
staticnoexcept |
Returns one of the currently-active peers.
|
staticnoexcept |
Returns the peer that's attached to the given component, or nullptr if there isn't one.
|
inlinevirtualnoexcept |
On Windows and Linux this will return the OS scaling factor currently being applied to the native window.
This is used to convert between physical and logical pixels at the OS API level and you shouldn't need to use it in your own code unless you are dealing directly with the native window.
|
inlinenoexcept |
Returns the set of style flags that were set when the window was created.
|
private |
|
inlinenoexcept |
Returns a unique ID for this peer.
Each peer that is created is given a different ID.
Converts a screen area to a position relative to the top-left of this component.
|
virtual |
Converts a screen area to a position relative to the top-left of this component.
|
pure virtual |
Converts a screen coordinate to a position relative to the top-left of this component.
Converts a screen coordinate to a position relative to the top-left of this component.
|
pure virtual |
Tries to give the window keyboard focus.
void juce::ComponentPeer::handleBroughtToFront | ( | ) |
Called when the window is brought to the front, either by the OS or by a call to toFront().
void juce::ComponentPeer::handleFocusGain | ( | ) |
Called when the window gains keyboard focus.
void juce::ComponentPeer::handleFocusLoss | ( | ) |
Called when the window loses keyboard focus.
Called when a key is pressed.
Returns true if the keystroke was used.
bool juce::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.
Called whenever a key is pressed or released.
Returns true if the keystroke was used.
void juce::ComponentPeer::handleMagnifyGesture | ( | MouseInputSource::InputSourceType | type, |
Point< float > | positionWithinPeer, | ||
int64 | time, | ||
float | scaleFactor, | ||
int | touchIndex = 0 |
||
) |
void juce::ComponentPeer::handleModifierKeysChange | ( | ) |
Called whenever a modifier key is pressed or released.
void juce::ComponentPeer::handleMouseEvent | ( | MouseInputSource::InputSourceType | type, |
Point< float > | positionWithinPeer, | ||
ModifierKeys | newMods, | ||
float | pressure, | ||
float | orientation, | ||
int64 | time, | ||
PenDetails | pen = {} , |
||
int | touchIndex = 0 |
||
) |
void juce::ComponentPeer::handleMouseWheel | ( | MouseInputSource::InputSourceType | type, |
Point< float > | positionWithinPeer, | ||
int64 | time, | ||
const MouseWheelDetails & | , | ||
int | touchIndex = 0 |
||
) |
void juce::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.
void juce::ComponentPeer::handlePaint | ( | LowLevelGraphicsContext & | contextToPaintTo | ) |
This is called to repaint the component into the given context.
|
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.
void juce::ComponentPeer::handleUserClosingWindow | ( | ) |
|
pure virtual |
True if the window has the keyboard focus.
|
pure virtual |
True if the window is currently full-screen.
|
virtual |
True if the window is in kiosk-mode.
|
pure virtual |
True if the window is currently minimised.
|
staticnoexcept |
Checks if this peer object is valid.
Converts a rectangle relative to the top-left of this component to screen coordinates.
|
virtual |
Converts a rectangle relative to the top-left of this component to screen coordinates.
|
pure virtual |
Converts a position relative to the top-left of this component to screen coordinates.
Converts a position relative to the top-left of this component to screen coordinates.
|
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.
|
inline |
Removes a scale factor listener.
Invalidates a region of the window to be repainted asynchronously.
|
pure virtual |
Changes the window's transparency.
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.
|
inline |
On operating systems that support it, this will update the style of this peer as requested.
Note that this will not update the theme system-wide. This will only update UI elements so that they display appropriately for this peer!
References juce::gl::s.
|
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().
|
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.
|
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.
|
pure virtual |
Enable/disable fullscreen mode for the window.
|
inlinevirtual |
On platforms that support it, this will update the window's titlebar in some way to indicate that the window's document needs saving.
|
pure virtual |
Attempts to change the icon associated with this window.
|
pure virtual |
Minimises the window.
Sets the size to restore to if fullscreen mode is turned off.
|
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.
|
pure virtual |
Changes the title of the window.
|
pure virtual |
Shows or hides the window.
|
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.
|
pure virtual |
Moves the window to be just behind another one.
|
pure virtual |
Brings the window to the top, optionally also giving it keyboard focus.
void juce::ComponentPeer::updateBounds | ( | ) |
Updates the peer's bounds to match its component.
|
protected |
|
protected |
|
private |
|
staticprotected |
|
private |
|
private |
|
private |
|
protected |
|
protected |
|
protected |
|
private |