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:
patacongo 2012-05-15 20:10:32 +00:00
parent 4c27a000d0
commit a8c4c5e628
5 changed files with 85 additions and 26 deletions

View File

@ -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
View 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

View File

@ -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);
/**

View File

@ -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
}

View File

@ -323,7 +323,6 @@ void CNxConsole::stop(void)
void CNxConsole::hide(void)
{
// Disable drawing and events
#warning "Missing logic"
}
/**