diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-05-15 20:10:32 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-05-15 20:10:32 +0000 |
commit | 6d8337323f1d60e7845a83508d4bbd1e0318ec3b (patch) | |
tree | 51e09899dc63fadd94c36505db44c511e5483f4f /NxWidgets/libnxwidgets | |
parent | 91e38a73cd93af894ecaf44476ae8e6313670cb5 (diff) | |
download | px4-nuttx-6d8337323f1d60e7845a83508d4bbd1e0318ec3b.tar.gz px4-nuttx-6d8337323f1d60e7845a83508d4bbd1e0318ec3b.tar.bz2 px4-nuttx-6d8337323f1d60e7845a83508d4bbd1e0318ec3b.zip |
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
Diffstat (limited to 'NxWidgets/libnxwidgets')
-rw-r--r-- | NxWidgets/libnxwidgets/include/cnxtkwindow.hxx | 20 | ||||
-rw-r--r-- | NxWidgets/libnxwidgets/src/cnxtkwindow.cxx | 47 |
2 files changed, 42 insertions, 25 deletions
diff --git a/NxWidgets/libnxwidgets/include/cnxtkwindow.hxx b/NxWidgets/libnxwidgets/include/cnxtkwindow.hxx index 4c379754a..8fda121a9 100644 --- a/NxWidgets/libnxwidgets/include/cnxtkwindow.hxx +++ b/NxWidgets/libnxwidgets/include/cnxtkwindow.hxx @@ -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); /** diff --git a/NxWidgets/libnxwidgets/src/cnxtkwindow.cxx b/NxWidgets/libnxwidgets/src/cnxtkwindow.cxx index 16eaad2c7..f1ea58692 100644 --- a/NxWidgets/libnxwidgets/src/cnxtkwindow.cxx +++ b/NxWidgets/libnxwidgets/src/cnxtkwindow.cxx @@ -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 } |