Patches from Petteri Aimonen + stdbool and rand() changes for Freddie Chopin
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5415 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
e9d2baa274
commit
0dbe3858ea
@ -213,4 +213,8 @@
|
|||||||
Submitted by Petteri Aimonen.
|
Submitted by Petteri Aimonen.
|
||||||
* NxWidgets:CText and NxWidgets:CNumericEdite: Fix some memory freeing bugs
|
* NxWidgets:CText and NxWidgets:CNumericEdite: Fix some memory freeing bugs
|
||||||
(from Petteri Aimonen).
|
(from Petteri Aimonen).
|
||||||
|
* NxWidgets::CScrollingPanel: Usability improvements. It is borderless for now,
|
||||||
|
because there was no easy way to redraw only the required part of the border.
|
||||||
|
Contributed by Petteri Aimonen.
|
||||||
|
* NxWidgets::CNxWidgets and NxWM::CStartWindow: Small changes to make sub-
|
||||||
|
classing easier (from Petteri Aimonen).
|
||||||
|
@ -1058,7 +1058,7 @@ namespace NXWidgets
|
|||||||
* @return True if the click was successful.
|
* @return True if the click was successful.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool click(nxgl_coord_t x, nxgl_coord_t y);
|
virtual bool click(nxgl_coord_t x, nxgl_coord_t y);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the click is a double-click.
|
* Check if the click is a double-click.
|
||||||
|
@ -70,11 +70,12 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Included Files
|
* Included Files
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include <nuttx/config.h>
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
#include "cwidgetcontrol.hxx"
|
#include "cwidgetcontrol.hxx"
|
||||||
#include "cscrollingpanel.hxx"
|
#include "cscrollingpanel.hxx"
|
||||||
@ -113,6 +114,13 @@ CScrollingPanel::CScrollingPanel(CWidgetControl *pWidgetControl,
|
|||||||
: CNxWidget(pWidgetControl, x, y, width, height, flags, style)
|
: CNxWidget(pWidgetControl, x, y, width, height, flags, style)
|
||||||
{
|
{
|
||||||
m_widgetControl = pWidgetControl;
|
m_widgetControl = pWidgetControl;
|
||||||
|
|
||||||
|
// NOTE: CScrollingPanel is temporarily borderless because there was no
|
||||||
|
// easy way to redraw only the required part of the border.
|
||||||
|
|
||||||
|
m_flags.permeable = true;
|
||||||
|
m_flags.borderless = true;
|
||||||
|
|
||||||
CRect rect;
|
CRect rect;
|
||||||
getClientRect(rect);
|
getClientRect(rect);
|
||||||
|
|
||||||
@ -120,12 +128,10 @@ CScrollingPanel::CScrollingPanel(CWidgetControl *pWidgetControl,
|
|||||||
m_canvasHeight = rect.getHeight();
|
m_canvasHeight = rect.getHeight();
|
||||||
m_canvasX = 0;
|
m_canvasX = 0;
|
||||||
m_canvasY = 0;
|
m_canvasY = 0;
|
||||||
|
|
||||||
setAllowsVerticalScroll(true);
|
setAllowsVerticalScroll(true);
|
||||||
setAllowsHorizontalScroll(true);
|
setAllowsHorizontalScroll(true);
|
||||||
setContentScrolled(true);
|
setContentScrolled(true);
|
||||||
|
|
||||||
m_flags.permeable = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -186,6 +192,24 @@ void CScrollingPanel::scroll(int32_t dx, int32_t dy)
|
|||||||
CGraphicsPort *port = m_widgetControl->getGraphicsPort();
|
CGraphicsPort *port = m_widgetControl->getGraphicsPort();
|
||||||
port->move(getX(), getY(), dx, dy, rect.getWidth(), rect.getHeight());
|
port->move(getX(), getY(), dx, dy, rect.getWidth(), rect.getHeight());
|
||||||
|
|
||||||
|
if (dx > 0)
|
||||||
|
{
|
||||||
|
revealedRects.push_back(CRect(getX(), getY(), dx, rect.getHeight()));
|
||||||
|
}
|
||||||
|
else if (dx < 0)
|
||||||
|
{
|
||||||
|
revealedRects.push_back(CRect(getX() + rect.getWidth() + dx, getY(), -dx, rect.getHeight()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dy > 0)
|
||||||
|
{
|
||||||
|
revealedRects.push_back(CRect(getX(), getY(), rect.getWidth(), dy));
|
||||||
|
}
|
||||||
|
else if (dy < 0)
|
||||||
|
{
|
||||||
|
revealedRects.push_back(CRect(getX(), getY() + rect.getHeight() + dy, rect.getWidth(), -dy));
|
||||||
|
}
|
||||||
|
|
||||||
// Adjust the scroll values
|
// Adjust the scroll values
|
||||||
|
|
||||||
m_canvasY += dy;
|
m_canvasY += dy;
|
||||||
@ -193,12 +217,20 @@ void CScrollingPanel::scroll(int32_t dx, int32_t dy)
|
|||||||
|
|
||||||
if (revealedRects.size() > 0)
|
if (revealedRects.size() > 0)
|
||||||
{
|
{
|
||||||
// Draw revealed sections
|
// Draw background to revealed sections
|
||||||
|
// Children will redraw themselves in moveTo.
|
||||||
|
|
||||||
for (int i = 0; i < revealedRects.size(); ++i)
|
for (int i = 0; i < revealedRects.size(); ++i)
|
||||||
{
|
{
|
||||||
drawBorder(port);
|
CRect &rrect = revealedRects[i];
|
||||||
drawContents(port);
|
|
||||||
|
gvdbg("Redrawing %d,%d,%d,%d after scroll\n",
|
||||||
|
rrect.getX(), rrect.getY(),
|
||||||
|
rrect.getWidth(), rrect.getHeight());
|
||||||
|
|
||||||
|
port->drawFilledRect(rrect.getX(), rrect.getY(),
|
||||||
|
rrect.getWidth(), rrect.getHeight(),
|
||||||
|
getBackgroundColor());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -97,8 +97,8 @@ namespace NxWM
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
class CStartWindow : public IApplication,
|
class CStartWindow : public IApplication,
|
||||||
private IApplicationCallback,
|
protected IApplicationCallback,
|
||||||
private NXWidgets::CWidgetEventHandler
|
protected NXWidgets::CWidgetEventHandler
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user