NXWidgets::CNxTkWindow must subtract the height of the toolbar (if any) when reporting the size of the window
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4741 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
4c27a000d0
commit
a8c4c5e628
@ -87,3 +87,8 @@
|
||||
* NxWM::CNxConsole: Add a on_exit() exit handler that will close the
|
||||
NxConsole window when the NSH thread exits. A correct build now depends
|
||||
on having CONFIG_SCHED_ONEXIT defined.
|
||||
* NXWidgets::CNxWidget: Add a new onPreRelease() method.
|
||||
* NXWidgets::CButton, CButtonArry, CImage now post action event at pre-release time.
|
||||
* NxWM: ICON touches are now drive by action events instead of click events.
|
||||
* NXWidgets::CNxTkWindow: Reported size of a framed window must exlude the
|
||||
height of the tool bar (if present)
|
||||
|
38
TODO.txt
Executable file
38
TODO.txt
Executable file
@ -0,0 +1,38 @@
|
||||
NxWidgets
|
||||
---------
|
||||
|
||||
NxWM
|
||||
----
|
||||
|
||||
Title: DRAGGING ACROSS WINDOWS
|
||||
Description: Need some indication if the touch/mouse drags from one window to
|
||||
another then is release. Release event is lost in this case.
|
||||
Status: Open
|
||||
Priority: Low. ICON just stays selected and must be touched again.
|
||||
|
||||
Title: AUTO-RAISE DISABLED
|
||||
Description: Auto-raise is currently disabled in nuttx for NX multi-server
|
||||
mode. The
|
||||
reason is complex:
|
||||
- Most touchscreen controls send touch data a high rates
|
||||
- In multi-server mode, touch events get queued in a message
|
||||
queue.
|
||||
- The logic that receives the messages performs the auto-raise.
|
||||
But it can do stupid things after the first auto-raise as
|
||||
it opperates on the stale data in the message queue.
|
||||
I am thinking that auto-raise ought to be removed from NuttX
|
||||
and moved out into a graphics layer (like NxWM) that knows
|
||||
more about the appropriate context to do the autoraise.
|
||||
Status: Open
|
||||
Priority: Medium low
|
||||
|
||||
Title: MULTIPLE COPIES OF AN APPLICATION
|
||||
Description: There is a limitation now in that one instance of an application
|
||||
an be started at a time. This limitation is because the
|
||||
application container class is created at start-up time; in
|
||||
order to have multiple instances of tasks, you would have to
|
||||
be able to create multiple container classes from the start
|
||||
window.
|
||||
Status: Open
|
||||
Priority: High
|
||||
|
@ -88,6 +88,7 @@ namespace NXWidgets
|
||||
NXTKWINDOW m_hNxTkWindow; /**< Handle to the NX raw window */
|
||||
CWidgetControl *m_widgetControl; /**< Controlling widget for the window */
|
||||
CNxToolbar *m_toolbar; /**< Child toolbar */
|
||||
nxgl_coord_t m_toolbarHeight; /**< The height of the toolbar */
|
||||
|
||||
public:
|
||||
|
||||
@ -161,7 +162,8 @@ namespace NXWidgets
|
||||
|
||||
inline void detachToolbar(void)
|
||||
{
|
||||
m_toolbar = (CNxToolbar *)NULL;
|
||||
m_toolbar = (CNxToolbar *)NULL;
|
||||
m_toolbarHeight = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -181,7 +183,7 @@ namespace NXWidgets
|
||||
* @return True on success, false on any failure.
|
||||
*/
|
||||
|
||||
bool getPosition(FAR struct nxgl_point_s *pPos);
|
||||
bool getPosition(FAR struct nxgl_point_s *pos);
|
||||
|
||||
/**
|
||||
* Get the size of the window (as reported by the NX callback).
|
||||
@ -189,25 +191,25 @@ namespace NXWidgets
|
||||
* @return The size.
|
||||
*/
|
||||
|
||||
bool getSize(FAR struct nxgl_size_s *pSize);
|
||||
bool getSize(FAR struct nxgl_size_s *size);
|
||||
|
||||
/**
|
||||
* Set the position and size of the window.
|
||||
*
|
||||
* @param pPos The new position of the window.
|
||||
* @param pos The new position of the window.
|
||||
* @return True on success, false on any failure.
|
||||
*/
|
||||
|
||||
bool setPosition(FAR const struct nxgl_point_s *pPos);
|
||||
bool setPosition(FAR const struct nxgl_point_s *pos);
|
||||
|
||||
/**
|
||||
* Set the size of the selected window.
|
||||
*
|
||||
* @param pSize The new size of the window.
|
||||
* @param size The new size of the window.
|
||||
* @return True on success, false on any failure.
|
||||
*/
|
||||
|
||||
bool setSize(FAR const struct nxgl_size_s *pSize);
|
||||
bool setSize(FAR const struct nxgl_size_s *size);
|
||||
|
||||
/**
|
||||
* Bring the window to the top of the display.
|
||||
@ -228,13 +230,13 @@ namespace NXWidgets
|
||||
/**
|
||||
* Set an individual pixel in the window with the specified color.
|
||||
*
|
||||
* @param pPos The location of the pixel to be filled.
|
||||
* @param pos The location of the pixel to be filled.
|
||||
* @param color The color to use in the fill.
|
||||
*
|
||||
* @return True on success; false on failure.
|
||||
*/
|
||||
|
||||
bool setPixel(FAR const struct nxgl_point_s *pPos,
|
||||
bool setPixel(FAR const struct nxgl_point_s *pos,
|
||||
nxgl_mxpixel_t color);
|
||||
|
||||
/**
|
||||
|
@ -74,10 +74,11 @@ CNxTkWindow::CNxTkWindow(NXHANDLE hNxServer, CWidgetControl *widgetControl)
|
||||
m_hNxServer = hNxServer;
|
||||
m_widgetControl = widgetControl;
|
||||
|
||||
// Nullify uninitilized pointers
|
||||
// Nullify uninitilized pointers and values
|
||||
|
||||
m_hNxTkWindow = (NXTKWINDOW )0;
|
||||
m_toolbar = (CNxToolbar *)0;
|
||||
m_toolbarHeight = 0;
|
||||
|
||||
// Create the CGraphicsPort instance for this window
|
||||
|
||||
@ -209,6 +210,11 @@ CNxToolbar *CNxTkWindow::openToolbar(nxgl_coord_t height, CWidgetControl *widget
|
||||
return (CNxToolbar *)0;
|
||||
}
|
||||
|
||||
// Save the height of the toolbar. We will need this because it will change
|
||||
// how we report the size of drawable part of the window.
|
||||
|
||||
m_toolbarHeight = height;
|
||||
|
||||
// Provide parent widget control information to new widget control instance.
|
||||
// This information is reported by an NX callback for "normal" windows. But
|
||||
// the toolbar widget control does not get NX callbacks and has to get the
|
||||
@ -277,48 +283,57 @@ bool CNxTkWindow::requestPosition(void)
|
||||
* @return The position.
|
||||
*/
|
||||
|
||||
bool CNxTkWindow::getPosition(FAR struct nxgl_point_s *pPos)
|
||||
bool CNxTkWindow::getPosition(FAR struct nxgl_point_s *pos)
|
||||
{
|
||||
return m_widgetControl->getWindowPosition(pPos);
|
||||
return m_widgetControl->getWindowPosition(pos);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the size of the window (as reported by the NX callback).
|
||||
* Get the size of the window drawable region.
|
||||
*
|
||||
* @return The size.
|
||||
*/
|
||||
|
||||
bool CNxTkWindow::getSize(FAR struct nxgl_size_s *pSize)
|
||||
bool CNxTkWindow::getSize(FAR struct nxgl_size_s *size)
|
||||
{
|
||||
return m_widgetControl->getWindowSize(pSize);
|
||||
// Get the size of the NXTK window (this will exclude the thickness of
|
||||
// the frame).
|
||||
|
||||
bool ret = m_widgetControl->getWindowSize(size);
|
||||
|
||||
// Subtract the height of the toolbar (if any) to get the size of the
|
||||
// drawable region in the window.
|
||||
|
||||
size->h -= m_toolbarHeight;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the position and size of the window.
|
||||
*
|
||||
* @param pPos The new position of the window.
|
||||
* @param pos The new position of the window.
|
||||
* @return True on success, false on any failure.
|
||||
*/
|
||||
|
||||
bool CNxTkWindow::setPosition(FAR const struct nxgl_point_s *pPos)
|
||||
bool CNxTkWindow::setPosition(FAR const struct nxgl_point_s *pos)
|
||||
{
|
||||
// Set the window size and position
|
||||
|
||||
return nxtk_setposition(m_hNxTkWindow, pPos) == OK;
|
||||
return nxtk_setposition(m_hNxTkWindow, pos) == OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the size of the selected window.
|
||||
*
|
||||
* @param pSize The new size of the window.
|
||||
* @param size The new size of the window.
|
||||
* @return True on success, false on any failure.
|
||||
*/
|
||||
|
||||
bool CNxTkWindow::setSize(FAR const struct nxgl_size_s *pSize)
|
||||
bool CNxTkWindow::setSize(FAR const struct nxgl_size_s *size)
|
||||
{
|
||||
// Set the window size
|
||||
|
||||
return nxtk_setsize(m_hNxTkWindow, pSize) == OK;
|
||||
return nxtk_setsize(m_hNxTkWindow, size) == OK;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -350,21 +365,21 @@ bool CNxTkWindow::lower(void)
|
||||
/**
|
||||
* Set an individual pixel in the window with the specified color.
|
||||
*
|
||||
* @param pPos The location of the pixel to be filled.
|
||||
* @param pos The location of the pixel to be filled.
|
||||
* @param color The color to use in the fill.
|
||||
*
|
||||
* @return True on success; false on failure.
|
||||
*/
|
||||
|
||||
bool CNxTkWindow::setPixel(FAR const struct nxgl_point_s *pPos,
|
||||
bool CNxTkWindow::setPixel(FAR const struct nxgl_point_s *pos,
|
||||
nxgl_mxpixel_t color)
|
||||
{
|
||||
#if 0
|
||||
// Set an individual pixel to the specified color
|
||||
|
||||
return nxtk_setpixel(m_hNxTkWindow, pPos, &color) == OK;
|
||||
return nxtk_setpixel(m_hNxTkWindow, pos, &color) == OK;
|
||||
#else
|
||||
# warning "Revisit"
|
||||
// REVISIT
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
@ -323,7 +323,6 @@ void CNxConsole::stop(void)
|
||||
void CNxConsole::hide(void)
|
||||
{
|
||||
// Disable drawing and events
|
||||
#warning "Missing logic"
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user