summaryrefslogtreecommitdiff
path: root/NxWidgets
diff options
context:
space:
mode:
Diffstat (limited to 'NxWidgets')
-rw-r--r--NxWidgets/ChangeLog.txt32
-rw-r--r--NxWidgets/Kconfig261
-rw-r--r--NxWidgets/ReleaseNotes.txt2
-rw-r--r--NxWidgets/UnitTests/CButton/Makefile2
-rw-r--r--NxWidgets/UnitTests/CButtonArray/Makefile2
-rw-r--r--NxWidgets/UnitTests/CCheckBox/Makefile2
-rw-r--r--NxWidgets/UnitTests/CGlyphButton/Makefile2
-rw-r--r--NxWidgets/UnitTests/CImage/Makefile2
-rw-r--r--NxWidgets/UnitTests/CKeypad/Makefile2
-rw-r--r--NxWidgets/UnitTests/CLabel/Makefile2
-rw-r--r--NxWidgets/UnitTests/CLatchButton/Makefile2
-rw-r--r--NxWidgets/UnitTests/CLatchButtonArray/Makefile2
-rw-r--r--NxWidgets/UnitTests/CListBox/Makefile2
-rw-r--r--NxWidgets/UnitTests/CProgressBar/Makefile2
-rw-r--r--NxWidgets/UnitTests/CRadioButton/Makefile2
-rw-r--r--NxWidgets/UnitTests/CScrollbarHorizontal/Makefile2
-rw-r--r--NxWidgets/UnitTests/CScrollbarVertical/Makefile2
-rw-r--r--NxWidgets/UnitTests/CSliderHorizonal/Makefile2
-rw-r--r--NxWidgets/UnitTests/CSliderVertical/Makefile2
-rw-r--r--NxWidgets/UnitTests/CTextBox/Makefile2
-rw-r--r--NxWidgets/UnitTests/nxwm/Makefile2
-rw-r--r--NxWidgets/libnxwidgets/include/cgraphicsport.hxx34
-rw-r--r--NxWidgets/libnxwidgets/include/cscrollingpanel.hxx3
-rw-r--r--NxWidgets/libnxwidgets/src/ccyclebutton.cxx19
-rw-r--r--NxWidgets/libnxwidgets/src/cgraphicsport.cxx108
-rw-r--r--NxWidgets/libnxwidgets/src/clabel.cxx23
-rw-r--r--NxWidgets/libnxwidgets/src/cscrollingpanel.cxx40
27 files changed, 463 insertions, 95 deletions
diff --git a/NxWidgets/ChangeLog.txt b/NxWidgets/ChangeLog.txt
index df9fb2d41..744584ed4 100644
--- a/NxWidgets/ChangeLog.txt
+++ b/NxWidgets/ChangeLog.txt
@@ -220,3 +220,35 @@
classing easier (from Petteri Aimonen).
1.5 2013-xx-xx Gregory Nutt <gnutt@nuttx.org>
+
+* NxWidgets::CGraphicsPort::move(): Fix typo bug in bounding rectangle
+ calculation (from Petteri Aimonen).
+* NxWM::CScrollingPanel::scrollChildren(): Avoid unnecessary redraws in
+ CScrollingPanel (contributed by Petteri Aimonen).
+* NxWM::CCycleButton: Remove the separator from CCycleButton. It draws in
+ wrong place, and doesnt look very good in the correct place either.
+ (from Petteri Aimonen).
+* NxWidgets::CGraphicsPort: Many times we only want a constant background.
+ In that case the old code fills the background, reads it back, renders
+ the text and then writes it back. When used with LCD's (instead of
+ framebuffers) this causes unnecessary delay and screen flicker.
+ This commit adds a variant of drawText that takes background color,
+ so that the background and text can both be rendered at one go.
+ The old functions still function as before (Petteri Aimonen).
+* NxWidgets::CLabel: The label was drawn as a single rectangular region,
+ then a text was added to the on top of this. The result is that the
+ text would flicker when the CLabel was updated. With this change, the
+ two step update is replaced with a five step update: The background
+ is updated as four rectangulear regions (leaving the previous text in
+ place), then the new text is updated. This eliminates the flicker
+ (Petteri Aimonen).
+* Kconfig: Many NxWidgets/NxWM settings do not have meaningful, generic
+ default values. Colors, for example, depend on pixel depth. Some
+ geometry settings depending on other geometry settings. Font IDs are
+ not know-able by the configuration system. etc. In these cases, it
+ is best if the settings are just not undefined so that the system can
+ calculate a reasonable default. however, if no default is provided
+ in the .config file, mconf will complain and generate errors. So work
+ around this, I added several "enabling" settings to override the
+ default setting. This is awkward and I preferred the configuration as
+ it was before, but this avoids the mconf errors and warnings.
diff --git a/NxWidgets/Kconfig b/NxWidgets/Kconfig
index 59d8856bc..656399199 100644
--- a/NxWidgets/Kconfig
+++ b/NxWidgets/Kconfig
@@ -13,6 +13,18 @@ config NXWIDGETS
if NXWIDGETS
comment "NX Server/Device Configuration"
+config NXWIDGETS_FLICKERFREE
+ bool "Enable Flicker Reduction Logic"
+ default y if NX_LCDDRIVER
+ default n if !NX_LCDDRIVER
+ ---help---
+ Because of their performance an in the manner in which they are
+ updated, LCDs may be prone to "flicker" in the displays when Widgets
+ are updated. Often more complex (and slower) options are availble
+ to reduce the flicker. Enabling this option will enabled those
+ lower-performance flicker-reductions measures where-ever thay may
+ be available.
+
config NXWIDGETS_DEVNO
int "LCD Device Number"
default 0
@@ -96,10 +108,20 @@ config NXWIDGETS_SIZEOFCHAR
comment "NXWidget Default Values"
+config NXWIDGETS_SYSTEM_CUSTOM_FONTID
+ bool "Use a Custom Default Font"
+ default n
+ ---help---
+ Set to override the system default font id (NXFONT_DEFAULT).
+
+if NXWIDGETS_SYSTEM_CUSTOM_FONTID
config NXWIDGETS_DEFAULT_FONTID
int "Default Font ID"
+ default 0
---help---
- Default font ID. Default: NXFONT_DEFAULT
+ Use this default NxWidgets font ID instead of the system font ID
+ (NXFONT_DEFAULT). Default: 0
+endif
config NXWIDGETS_TNXARRAY_INITIALSIZE
int "Initial Size of Dynamic Arrays"
@@ -113,53 +135,88 @@ config NXWIDGETS_TNXARRAY_SIZEINCREMENT
---help---
Default dynamic array realloctino increment (in entries). Default: 8
+config NXWIDGETS_CUSTOM_FILLCOLORS
+ bool "Custom Default Fill Colors"
+ default n
+ ---help---
+ Select custom default colors for the widget background. If defined,
+ the hexadecimal values for all filled colors must be provided
+ (there are no default colors because the hexadecimal representation
+ of the default colors depend on the pixel depth). Default: n
+
+if NXWIDGETS_CUSTOM_FILLCOLORS
config NXWIDGETS_DEFAULT_BACKGROUNDCOLOR
- hex "Normal Background Color"
+ hex "Default Normal Background Color"
---help---
Normal background color. Default: RGB(148,189,215)
config NXWIDGETS_DEFAULT_SELECTEDBACKGROUNDCOLOR
- hex "Selected Background Color"
+ hex "Default Selected Background Color"
---help---
Default selected background color. Default: RGB(206,227,241)
+config NXWIDGETS_DEFAULT_HIGHLIGHTCOLOR
+ hex "Default Highlight Color"
+ ---help---
+ Highlight color. Currently this color is only used in clist
+ boxes, progress bars, and slider grips. Default: RGB(192,192,192)
+endif
+
+config NXWIDGETS_CUSTOM_EDGECOLORS
+ bool "Custom Default Edge Colors"
+ default n
+ ---help---
+ Select custom default colors for the widget edges. If defined,
+ then hexadecimal values for all edge colors must be provided
+ (there are no default colors because the hexadecimal representation
+ of the default colors depend on the pixel depth). Default: n.
+
+if NXWIDGETS_CUSTOM_EDGECOLORS
config NXWIDGETS_DEFAULT_SHINEEDGECOLOR
- hex "Shiny Edge Color"
+ hex "Default Shiny Edge Color"
---help---
Shiny side boarder color. Default: RGB(248,248,248)
config NXWIDGETS_DEFAULT_SHADOWEDGECOLOR
- hex "Shadow Edge Color"
+ hex "Default Shadow Edge Color"
---help---
Shadowed side border color. Default: RGB(35,58,73)
+endif
-config NXWIDGETS_DEFAULT_HIGHLIGHTCOLOR
- hex "Highlight Color"
+config NXWIDGETS_CUSTOM_TEXTCOLORS
+ bool "Custom Default Text colors"
+ default n
---help---
- Highlight color. Default: RGB(192,192,192)
+ Select custom colors for the widget text. If defined, then
+ hexadecimal values for all text colors must be provided
+ (there are no default colors because the hexadecimal representation
+ of the default colors depend on the pixel depth). Default: n.
+if NXWIDGETS_CUSTOM_TEXTCOLORS
config NXWIDGETS_DEFAULT_DISABLEDTEXTCOLOR
- hex "Disabled Text Color"
+ hex "Default Disabled Text Color"
---help---
Text color on a disabled widget: Default: RGB(192,192,192)
config NXWIDGETS_DEFAULT_ENABLEDTEXTCOLOR
- hex "Enabled Text Color"
+ hex "Default Enabled Text Color"
---help---
Text color on a enabled widget. Default: RGB(248,248,248)
config NXWIDGETS_DEFAULT_SELECTEDTEXTCOLOR
- hex "Selected Text Color"
+ hex "Default Selected Text Color"
---help---
Text color on a selected widget. Default: RGB(0,0,0)
config NXWIDGETS_DEFAULT_FONTCOLOR
- hex "Default Font Color"
+ hex "Default Default Font Color"
---help---
Default font color. Default: RGB(255,255,255)
+endif
config NXWIDGETS_TRANSPARENT_COLOR
hex "Transparent Color"
+ default 0x0
---help---
Transparent color. Default: RGB(0,0,0)
@@ -220,10 +277,20 @@ config NXWM
if NXWM
comment "General settings"
+config NXWM_SYSTEM_CUSTOM_FONTID
+ bool "Use Custom Default Font"
+ default n
+ ---help---
+ Set to override the system default font id (NXFONT_DEFAULT).
+
+if NXWM_SYSTEM_CUSTOM_FONTID
config NXWM_DEFAULT_FONTID
int "Font ID"
+ default 0
---help---
- The NxWM default font ID. Default: NXFONT_DEFAULT
+ Use this NxWM default font ID instead of the system font ID
+ (NXFONT_DEFAULT). Default: 0
+endif
config NXWM_UNITTEST
bool "NxWM Unit Test"
@@ -233,6 +300,16 @@ config NXWM_UNITTEST
comment "Color configuration"
+config NXWM_CUSTOM_FILLCOLORS
+ bool "Custom Default Fill Colors"
+ default n
+ ---help---
+ Select custom default colors for the widget background. If defined,
+ the hexadecimal values for all filled colors must be provided
+ (there are no default colors because the hexadecimal representation
+ of the default colors depend on the pixel depth). Default: n
+
+if NXWM_CUSTOM_FILLCOLORS
config NXWM_DEFAULT_BACKGROUNDCOLOR
hex "Background Color"
---help---
@@ -242,7 +319,18 @@ config NXWM_DEFAULT_SELECTEDBACKGROUNDCOLOR
hex "Normal Background Color"
---help---
Select background color. Default: RGB(206,227,241)
+endif
+config NXWM_CUSTOM_EDGECOLORS
+ bool "Custom Default Edge Colors"
+ default n
+ ---help---
+ Select custom default colors for the widget edges. If defined,
+ then hexadecimal values for all edge colors must be provided
+ (there are no default colors because the hexadecimal representation
+ of the default colors depend on the pixel depth). Default: n.
+
+if NXWM_CUSTOM_EDGECOLORS
config NXWM_DEFAULT_SHINEEDGECOLOR
hex "Shiny Edge Color"
---help---
@@ -252,7 +340,18 @@ config NXWM_DEFAULT_SHADOWEDGECOLOR
hex "Shadow Edge Color"
---help---
Color of the shadowed edge of a border. Default: RGB(0,0,0)
+endif
+
+config NXWM_CUSTOM_TEXTCOLORS
+ bool "Custom Default Text colors"
+ default n
+ ---help---
+ Select custom colors for the widget text. If defined, then
+ hexadecimal values for all text colors must be provided
+ (there are no default colors because the hexadecimal representation
+ of the default colors depend on the pixel depth). Default: n.
+if NXWM_CUSTOM_TEXTCOLORS
config NXWM_DEFAULT_FONTCOLOR
hex "Default Font Color"
---help---
@@ -260,8 +359,10 @@ config NXWM_DEFAULT_FONTCOLOR
config NXWM_TRANSPARENT_COLOR
hex "Transparent Color"
+ default 0x0
---help---
The "transparent" color. Default: RGB(0,0,0)
+endif
comment "Horizontal and vertical spacing of icons in the task bar"
@@ -303,27 +404,48 @@ config NXWM_TASKBAR_RIGHT
endchoice
+config NXWM_CUSTOM_TASKBAR_WIDTH
+ bool "Use Custom Taskbar width"
+ default n
+ ---help---
+ Set to override the default taskbar thickness (either vertical or
+ horizontal). The default depends on the selected horizontal or
+ vertical spacing. Default: 25 + 2*spacing
+
+if NXWM_CUSTOM_TASKBAR_WIDTH
config NXWM_TASKBAR_WIDTH
int "Taskbar Width"
+ default 29
---help---
- Task bar thickness (either vertical or horizontal). Default: 25 + 2*spacing
+ Task bar thickness (either vertical or horizontal). Default: 25 + 2*2
+endif
config NXWM_DISABLE_MINIMIZE
bool "Disable Minimize Button"
default n
---help---
- If the "desktop" is empty, users have no need to minimize any windows. If the buttons
- are small, it's easy to hit minimize button accidentally when trying to close an
- application.
+ If the "desktop" is empty, users have no need to minimize any
+ windows. If the buttons are small, it's easy to hit minimize
+ button accidentally when trying to close an application.
comment "Tool Bar Configuration"
+config NXWM_CUSTOM_TOOLBAR_HEIGHT
+ bool "Use Custom Toolbar Height"
+ default n
+ ---help---
+ Set to override the default tooldar height The default depends on
+ the selected horizontal or vertical spacing. Default: 21 + 2*spacing
+
+if NXWM_CUSTOM_TOOLBAR_HEIGHT
config NXWM_TOOLBAR_HEIGHT
int "Toolbar Height"
+ default 25
---help---
The height of the tool bar in each application window. At present,
all icons are 21 pixels in height and, hence, require a task bar of
- at least that size.
+ at least that size. Default: 21 + 2*2
+endif
comment "Background Image"
@@ -357,10 +479,19 @@ config NXWM_STARTWINDOW_HSPACING
---help---
Horizontal spacing. Default: 4 rows
+config NXWM_CUSTOM_STARTWINDOW_ICON
+ bool "Custom Start Window Icon"
+ default n
+ ---help---
+ Select to override the default Start Window Icon: NxWM::g_playBitmap
+
+if NXWM_CUSTOM_STARTWINDOW_ICON
config NXWM_STARTWINDOW_ICON
string "StartWindow Icon"
+ default "NxWM::g_playBitmap"
---help---
The glyph to use as the start window icon. Default: NxWM::g_playBitmap
+endif
config NXWM_STARTWINDOW_MQNAME
string "Message Queue Name"
@@ -417,6 +548,16 @@ config NXWM_NXCONSOLE_STACKSIZE
The stack size to use when starting the NxConsole task. Default:
2048 bytes.
+config NXWM_NXCONSOLE_CUSTOM_COLORS
+ bool "Custom NxConsole Colors"
+ default n
+ ---help---
+ Select custom default colors for the NxConsole window. If defined,
+ the hexadecimal values for all NxConsole colors must be provided
+ (there are no default colors because the hexadecimal representation
+ of the default colors depend on the pixel depth). Default: n
+
+if NXWM_NXCONSOLE_CUSTOM_COLORS
config NXWM_NXCONSOLE_WCOLOR
hex "NxConsole Background Color"
---help---
@@ -428,17 +569,36 @@ config NXWM_NXCONSOLE_FONTCOLOR
---help---
The color of the fonts to use in the NxConsole window.
Default: RGB(0,0,0)
+endif
+config NXWM_NXCONSOLE_CUSTOM_FONTID
+ bool "Use Custom Default Font"
+ default n
+ ---help---
+ Set to override the system default font id (NXWM_DEFAULT_FONTID).
+
+if NXWM_NXCONSOLE_CUSTOM_FONTID
config NXWM_NXCONSOLE_FONTID
int "NxConsole Font ID"
+ default 0
---help---
- The ID of the font to use in the NxConsole window. Default:
- NXWM_DEFAULT_FONTID
+ Use this default font ID in the NxConsole window instead of the
+ NxWM font ID (NXWM_DEFAULT_FONTID). Default: 0
+endif
+config NXWM_CUSTOM_NXCONSOLE_ICON
+ bool "Custom NxConsole Icon"
+ default n
+ ---help---
+ Select to override the default NxConsole Window Icon: NxWM::g_cmdBitmap
+
+if NXWM_CUSTOM_NXCONSOLE_ICON
config NXWM_NXCONSOLE_ICON
string "NxConsole Icon"
+ default "NxWM::g_cmdBitmap"
---help---
The glyph to use as the NxConsole icon. Default: NxWM::g_cmdBitmap
+endif
config NXWM_TOUCHSCREEN
bool "Touchscreen Support"
@@ -478,6 +638,7 @@ config NXWM_TOUCHSCREEN_LISTENERPRIO
config NXWM_TOUCHSCREEN_LISTENERSTACK
int "Touchscreen Listener Task Stack Size"
+ default 1024
---help---
Touchscreen listener thread stack size. Default 1024
@@ -527,6 +688,17 @@ endif
comment "Calibration display settings"
+config NXWM_CALIBRATION_CUSTOM_COLORS
+ bool "Custom Calibration Colors"
+ default n
+ ---help---
+ Select custom default colors for the calibration window. If
+ defined, the hexadecimal values for all calibration window
+ colors must be provided (there are no default colors because
+ the hexadecimal representation of the default colors depend
+ on the pixel depth). Default: n
+
+if NXWM_CALIBRATION_CUSTOM_COLORS
config NXWM_CALIBRATION_BACKGROUNDCOLOR
hex "Background Color"
---help---
@@ -550,12 +722,23 @@ config NXWM_CALIBRATION_TOUCHEDCOLOR
---help---
The color of the circle in the touchscreen calibration display after
the touch is recorder. Default: RGB(255, 255, 96) (very light yellow)
+endif
+
+config NXWM_CUSTOM_CALIBRATION_ICON
+ bool "Custom Calibration Icon"
+ default n
+ ---help---
+ Select to override the default Calibration Window Icon:
+ NxWM::g_calibrationBitmap
+if NXWM_CUSTOM_CALIBRATION_ICON
config NXWM_CALIBRATION_ICON
string "Callibration Icon"
+ default "NxWM::g_calibrationBitmap"
---help---
The ICON to use for the touchscreen calibration application. Default:
NxWM::g_calibrationBitmap
+endif
config NXWM_CALIBRATION_SIGNO
int "Calibration Signal Number"
@@ -576,23 +759,55 @@ config NXWM_CALIBRATION_LISTENERSTACK
---help---
Calibration listener thread stack size. Default 2048
-comment "Calibration display settings"
+comment "Hex Calculator display settings"
+config NXWM_HEXCALCULATOR_CUSTOM_COLORS
+ bool "Custom Hex Calculator Colors"
+ default n
+ ---help---
+ Select custom default colors for the Hex Calcualtor window. If
+ defined, the hexadecimal values for all hex calculator colors
+ must be provided (there are no default colors because the
+ hexadecimal representation of the default colors depend on the
+ pixel depth). Default: n
+
+if NXWM_HEXCALCULATOR_CUSTOM_COLORS
config NXWM_HEXCALCULATOR_BACKGROUNDCOLOR
hex "Calculator Background Color"
---help---
The background color of the calculator display. Default: Same
as NXWM_DEFAULT_BACKGROUNDCOLOR
+endif
+config NXWM_CUSTOM_HEXCALCULATOR_ICON
+ bool "Custom Hex Calculator Icon"
+ default n
+ ---help---
+ Select to override the default Hex Calculator Window Icon:
+ NxWM::g_calculatorBitmap
+
+if NXWM_CUSTOM_HEXCALCULATOR_ICON
config NXWM_HEXCALCULATOR_ICON
string "Calculator Icon"
+ default "NxWM::g_calculatorBitmap"
---help---
The ICON to use for the hex calculator application. Default:
- NxWM::g_calculatorBitmap
+ "NxWM::g_calculatorBitmap"
+endif
+config NXWM_HEXCALCULATOR_CUSTOM_FONTID
+ bool "Use Custom Default Font"
+ default n
+ ---help---
+ Set to override the system default font id (NXWM_DEFAULT_FONTID).
+
+if NXWM_HEXCALCULATOR_CUSTOM_FONTID
config NXWM_HEXCALCULATOR_FONTID
int "Calculator Font ID"
+ default 0
---help---
- The font used with the calculator. Default: NXWM_DEFAULT_FONTID
+ Use this default font ID in the calculator window instead of the
+ NxWM font ID (NXWM_DEFAULT_FONTID). Default: 0
+endif
endif
diff --git a/NxWidgets/ReleaseNotes.txt b/NxWidgets/ReleaseNotes.txt
index 4b155c50e..aaaefe6eb 100644
--- a/NxWidgets/ReleaseNotes.txt
+++ b/NxWidgets/ReleaseNotes.txt
@@ -116,7 +116,7 @@ NxWidgets-1.4
=============
The 5th release of the NxWidgets package was made on December 20, 2012. This
-release depends on NuttX-6.22 or above and should not be used with older
+release depends on NuttX-6.24 or above and should not be used with older
NuttX releases. This release corresponds to SVN revision r5447.
Note: Nearly all changes between 1.3 and 1.4 were the result of the efforts
diff --git a/NxWidgets/UnitTests/CButton/Makefile b/NxWidgets/UnitTests/CButton/Makefile
index d80ef3c76..ea7b5cf25 100644
--- a/NxWidgets/UnitTests/CButton/Makefile
+++ b/NxWidgets/UnitTests/CButton/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CButtonArray/Makefile b/NxWidgets/UnitTests/CButtonArray/Makefile
index b4a3b0571..6bb490e34 100644
--- a/NxWidgets/UnitTests/CButtonArray/Makefile
+++ b/NxWidgets/UnitTests/CButtonArray/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CCheckBox/Makefile b/NxWidgets/UnitTests/CCheckBox/Makefile
index 21e007b3d..bd8293983 100644
--- a/NxWidgets/UnitTests/CCheckBox/Makefile
+++ b/NxWidgets/UnitTests/CCheckBox/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CGlyphButton/Makefile b/NxWidgets/UnitTests/CGlyphButton/Makefile
index 1e7faf026..b69382133 100644
--- a/NxWidgets/UnitTests/CGlyphButton/Makefile
+++ b/NxWidgets/UnitTests/CGlyphButton/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CImage/Makefile b/NxWidgets/UnitTests/CImage/Makefile
index 61978147e..08e22772f 100644
--- a/NxWidgets/UnitTests/CImage/Makefile
+++ b/NxWidgets/UnitTests/CImage/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CKeypad/Makefile b/NxWidgets/UnitTests/CKeypad/Makefile
index d27b90192..0bbf837d8 100644
--- a/NxWidgets/UnitTests/CKeypad/Makefile
+++ b/NxWidgets/UnitTests/CKeypad/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CLabel/Makefile b/NxWidgets/UnitTests/CLabel/Makefile
index 14e8897d2..4cd3d05d8 100644
--- a/NxWidgets/UnitTests/CLabel/Makefile
+++ b/NxWidgets/UnitTests/CLabel/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CLatchButton/Makefile b/NxWidgets/UnitTests/CLatchButton/Makefile
index 435a4c3cd..92909ab62 100644
--- a/NxWidgets/UnitTests/CLatchButton/Makefile
+++ b/NxWidgets/UnitTests/CLatchButton/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CLatchButtonArray/Makefile b/NxWidgets/UnitTests/CLatchButtonArray/Makefile
index 0f6fe639f..412174ea2 100644
--- a/NxWidgets/UnitTests/CLatchButtonArray/Makefile
+++ b/NxWidgets/UnitTests/CLatchButtonArray/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CListBox/Makefile b/NxWidgets/UnitTests/CListBox/Makefile
index 301424c47..58d313b4f 100644
--- a/NxWidgets/UnitTests/CListBox/Makefile
+++ b/NxWidgets/UnitTests/CListBox/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CProgressBar/Makefile b/NxWidgets/UnitTests/CProgressBar/Makefile
index d50d3ed05..c57b0cf6e 100644
--- a/NxWidgets/UnitTests/CProgressBar/Makefile
+++ b/NxWidgets/UnitTests/CProgressBar/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CRadioButton/Makefile b/NxWidgets/UnitTests/CRadioButton/Makefile
index ff6c2d247..1278c8f53 100644
--- a/NxWidgets/UnitTests/CRadioButton/Makefile
+++ b/NxWidgets/UnitTests/CRadioButton/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CScrollbarHorizontal/Makefile b/NxWidgets/UnitTests/CScrollbarHorizontal/Makefile
index a5fab0dda..c1edc8936 100644
--- a/NxWidgets/UnitTests/CScrollbarHorizontal/Makefile
+++ b/NxWidgets/UnitTests/CScrollbarHorizontal/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CScrollbarVertical/Makefile b/NxWidgets/UnitTests/CScrollbarVertical/Makefile
index 204b90a52..e3367e167 100644
--- a/NxWidgets/UnitTests/CScrollbarVertical/Makefile
+++ b/NxWidgets/UnitTests/CScrollbarVertical/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CSliderHorizonal/Makefile b/NxWidgets/UnitTests/CSliderHorizonal/Makefile
index 67f00f622..c739fef96 100644
--- a/NxWidgets/UnitTests/CSliderHorizonal/Makefile
+++ b/NxWidgets/UnitTests/CSliderHorizonal/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CSliderVertical/Makefile b/NxWidgets/UnitTests/CSliderVertical/Makefile
index 409f361fd..82f9c6fc6 100644
--- a/NxWidgets/UnitTests/CSliderVertical/Makefile
+++ b/NxWidgets/UnitTests/CSliderVertical/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/CTextBox/Makefile b/NxWidgets/UnitTests/CTextBox/Makefile
index a4c752e6c..ddd16e95a 100644
--- a/NxWidgets/UnitTests/CTextBox/Makefile
+++ b/NxWidgets/UnitTests/CTextBox/Makefile
@@ -134,7 +134,7 @@ chklib:
$(NXWIDGETS_LIB): # Just to keep make happy. chklib does the work.
.built: chkcxx chklib $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
else
diff --git a/NxWidgets/UnitTests/nxwm/Makefile b/NxWidgets/UnitTests/nxwm/Makefile
index 338b83e54..76007da1c 100644
--- a/NxWidgets/UnitTests/nxwm/Makefile
+++ b/NxWidgets/UnitTests/nxwm/Makefile
@@ -162,7 +162,7 @@ $(NXWIDGETS_LIB): # Just to keep make happy. chklibnxwidgets does the work.
$(NXWM_LIB): # Just to keep make happy. chklibnxwm does the work.
.built: $(OBJS) $(NXWIDGETS_LIB)
- $(call ARCHIVE, $@, $(OBJS))
+ $(call ARCHIVE, $(BIN), $(OBJS))
ifeq ($(WINTOOL),y)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWIDGETS_DIR)
$(Q) $(ARCHIVER) -w -p "$(CROSSDEV)" $(BIN) $(NXWM_DIR)
diff --git a/NxWidgets/libnxwidgets/include/cgraphicsport.hxx b/NxWidgets/libnxwidgets/include/cgraphicsport.hxx
index b9fbc4d41..d3d9e6114 100644
--- a/NxWidgets/libnxwidgets/include/cgraphicsport.hxx
+++ b/NxWidgets/libnxwidgets/include/cgraphicsport.hxx
@@ -111,6 +111,22 @@ namespace NXWidgets
nxgl_mxpixel_t m_backColor; /**< The background color to use */
#endif
+ /**
+ * The underlying implementation for drawText functions
+ * @param pos The window-relative x/y coordinate of the string.
+ * @param bound The window-relative bounds of the string.
+ * @param font The font to draw with.
+ * @param string The string to output.
+ * @param startIndex The start index within the string from which
+ * drawing will commence.
+ * @param length The number of characters to draw.
+ * @param background Color to use for background if transparent is false.
+ * @param transparent Whether to fill the background.
+ */
+ void drawText(struct nxgl_point_s *pos, CRect *bound, CNxFont *font,
+ const CNxString &string, int startIndex, int length,
+ nxgl_mxpixel_t background, bool transparent);
+
public:
/**
* Constructor.
@@ -330,6 +346,24 @@ namespace NXWidgets
const CNxString &string, int startIndex, int length);
/**
+ * Draw a portion of a string to the window and fill the background
+ * in one go.
+ * @param pos The window-relative x/y coordinate of the string.
+ * @param bound The window-relative bounds of the string.
+ * @param font The font to draw with.
+ * @param string The string to output.
+ * @param startIndex The start index within the string from which
+ * drawing will commence.
+ * @param length The number of characters to draw.
+ * @param color Foreground color
+ * @param background Background color
+ */
+
+ void drawText(struct nxgl_point_s *pos, CRect *bound, CNxFont *font,
+ const CNxString &string, int startIndex, int length,
+ nxgl_mxpixel_t color, nxgl_mxpixel_t background);
+
+ /**
* Draw an opaque bitmap to the window.
*
* @param x The window-relative x coordinate to draw the bitmap to.
diff --git a/NxWidgets/libnxwidgets/include/cscrollingpanel.hxx b/NxWidgets/libnxwidgets/include/cscrollingpanel.hxx
index 90dcc1ac9..b27176e2f 100644
--- a/NxWidgets/libnxwidgets/include/cscrollingpanel.hxx
+++ b/NxWidgets/libnxwidgets/include/cscrollingpanel.hxx
@@ -168,9 +168,10 @@ namespace NXWidgets
*
* @param dx The horizontal distance to scroll.
* @param dy The vertical distance to scroll.
+ * @param do_redraw Redraw widgets after moving.
*/
- void scrollChildren(int32_t dx, int32_t dy);
+ void scrollChildren(int32_t dx, int32_t dy, bool do_redraw);
/**
* Destructor.
diff --git a/NxWidgets/libnxwidgets/src/ccyclebutton.cxx b/NxWidgets/libnxwidgets/src/ccyclebutton.cxx
index b5f96683d..0fdbba73c 100644
--- a/NxWidgets/libnxwidgets/src/ccyclebutton.cxx
+++ b/NxWidgets/libnxwidgets/src/ccyclebutton.cxx
@@ -309,30 +309,21 @@ void CCycleButton::drawContents(CGraphicsPort *port)
CRect rect;
getRect(rect);
- nxgl_coord_t glyphSpace = m_borderSize.left - 1;
nxgl_coord_t glyphYOffset = (rect.getHeight() - g_cycle.height) >> 1;
nxwidget_pixel_t textColor;
- nxwidget_pixel_t separatorLeftColor;
- nxwidget_pixel_t separatorRightColor;
if (!isEnabled())
{
textColor = getDisabledTextColor();
- separatorLeftColor = getShadowEdgeColor();
- separatorRightColor = getShineEdgeColor();
}
else if (!isClicked())
{
textColor = getEnabledTextColor();
- separatorLeftColor = getShadowEdgeColor();
- separatorRightColor = getShineEdgeColor();
}
else
{
textColor = getSelectedTextColor();
- separatorLeftColor = getShineEdgeColor();
- separatorRightColor = getShadowEdgeColor();
}
// Draw cycle glyph
@@ -341,16 +332,6 @@ void CCycleButton::drawContents(CGraphicsPort *port)
g_cycle.width, g_cycle.height, &g_cycle,
0, 0, CONFIG_NXWIDGETS_TRANSPARENT_COLOR);
- // Draw separator
-
- nxgl_coord_t x = getX() + glyphSpace + g_cycle.width;
- nxgl_coord_t y = getY();
- nxgl_coord_t w = glyphSpace + g_cycle.width;
- nxgl_coord_t h = rect.getHeight() - 1;
-
- port->drawLine(x, y, w, h, separatorLeftColor);
- port->drawLine(x+1, y, w+1, h, separatorRightColor);
-
// Only draw text if option is selected
if (m_options.getSelectedItem() != NULL)
diff --git a/NxWidgets/libnxwidgets/src/cgraphicsport.cxx b/NxWidgets/libnxwidgets/src/cgraphicsport.cxx
index d43f3bdfa..73f2352eb 100644
--- a/NxWidgets/libnxwidgets/src/cgraphicsport.cxx
+++ b/NxWidgets/libnxwidgets/src/cgraphicsport.cxx
@@ -654,6 +654,55 @@ void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
CNxFont *font, const CNxString &string,
int startIndex, int length)
{
+ drawText(pos, bound, font, string, startIndex, length, 0, true);
+}
+
+/**
+ * Draw a portion of a string to the window and fill the background
+ * in one go.
+ * @param pos The window-relative x/y coordinate of the string.
+ * @param bound The window-relative bounds of the string.
+ * @param font The font to draw with.
+ * @param string The string to output.
+ * @param startIndex The start index within the string from which
+ * drawing will commence.
+ * @param length The number of characters to draw.
+ * @param color Foreground color
+ * @param background Background color
+ */
+
+void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
+ CNxFont *font, const CNxString &string,
+ int startIndex, int length,
+ nxgl_mxpixel_t color,
+ nxgl_mxpixel_t background)
+{
+ nxgl_mxpixel_t savedColor = font->getColor();
+ font->setColor(color);
+
+ drawText(pos, bound, font, string, startIndex, length, background, false);
+
+ font->setColor(savedColor);
+}
+
+/**
+ * The underlying implementation for drawText functions
+ * @param pos The window-relative x/y coordinate of the string.
+ * @param bound The window-relative bounds of the string.
+ * @param font The font to draw with.
+ * @param string The string to output.
+ * @param startIndex The start index within the string from which
+ * drawing will commence.
+ * @param length The number of characters to draw.
+ * @param background Color to use for background if transparent is false.
+ * @param transparent Whether to fill the background.
+ */
+void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
+ CNxFont *font, const CNxString &string,
+ int startIndex, int length,
+ nxgl_mxpixel_t background,
+ bool transparent)
+{
// Verify index and length
int stringLength = string.getLength();
@@ -668,6 +717,16 @@ void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
endIndex = stringLength;
}
+#ifdef CONFIG_NX_WRITEONLY
+ if (transparent)
+ {
+ // Can't render transparently without reading memory.
+
+ transparent = false;
+ background = m_backColor;
+ }
+#endif
+
// Allocate a bit of memory to hold the largest rendered font
unsigned int bmWidth = ((unsigned int)font->getMaxWidth() * CONFIG_NXWIDGETS_BPP + 7) >> 3;
@@ -680,7 +739,7 @@ void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
struct nxgl_rect_s boundingBox;
bound->getNxRect(&boundingBox);
-
+
// Loop setup
struct SBitmap bitmap;
@@ -707,16 +766,12 @@ void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
// Does the letter have height? Spaces have width, but no height
- if (metrics.height > 0)
+ if (metrics.height > 0 || !transparent)
{
- // Get the height of the font
-
- nxgl_coord_t fontHeight = (nxgl_coord_t)(metrics.height + metrics.yoffset);
-
// Set the current, effective size of the bitmap
bitmap.width = fontWidth;
- bitmap.height = fontHeight;
+ bitmap.height = bmHeight;
bitmap.stride = (fontWidth * bitmap.bpp + 7) >> 3;
// Describe the destination of the font as a bounding box
@@ -725,7 +780,7 @@ void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
dest.pt1.x = pos->x;
dest.pt1.y = pos->y;
dest.pt2.x = pos->x + fontWidth - 1;
- dest.pt2.y = pos->y + fontHeight - 1;
+ dest.pt2.y = pos->y + bmHeight - 1;
// Get the interection of the font box and the bounding box
@@ -737,25 +792,28 @@ void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
if (!nxgl_nullrect(&intersection))
{
- // Initialize the bitmap memory by reading from the display. The
- // font renderer always renders the fonts on a transparent background.
- // Sometimes a solid background works, sometimes not. But reading
- // from graphics memory always works.
-
-#ifdef CONFIG_NX_WRITEONLY
- // Set the glyph memory to the background color
-
- nxwidget_pixel_t *bmPtr = (nxwidget_pixel_t *)bitmap.data;
- unsigned int npixels = fontWidth * fontHeight;
- for (unsigned int j = 0; j < npixels; j++)
+ // If we have been given a background color, use it to fill the array.
+ // Otherwise initialize the bitmap memory by reading from the display.
+ // The font renderer always renders the fonts on a transparent background.
+
+ if (!transparent)
{
- *bmPtr++ = m_backColor;
+ // Set the glyph memory to the background color
+
+ nxwidget_pixel_t *bmPtr = (nxwidget_pixel_t *)bitmap.data;
+ unsigned int npixels = fontWidth * bmHeight;
+ for (unsigned int j = 0; j < npixels; j++)
+ {
+ *bmPtr++ = background;
+ }
+ }
+ else
+ {
+ // Read the current contents of the destination into the glyph memory
+
+ m_pNxWnd->getRectangle(&dest, &bitmap);
}
-#else
- // Read the current contents of the destination into the glyph memory
- m_pNxWnd->getRectangle(&dest, &bitmap);
-#endif
// Render the font into the initialized bitmap
font->drawChar(&bitmap, letter);
@@ -827,7 +885,7 @@ void CGraphicsPort::move(nxgl_coord_t x, nxgl_coord_t y,
rect.pt1.x = x;
rect.pt1.y = y;
rect.pt2.x = x + width - 1;
- rect.pt2.y = y = height -1;
+ rect.pt2.y = y + height - 1;
struct nxgl_point_s offset;
offset.x = deltaX;
diff --git a/NxWidgets/libnxwidgets/src/clabel.cxx b/NxWidgets/libnxwidgets/src/clabel.cxx
index 4c7ea3554..be4fe902d 100644
--- a/NxWidgets/libnxwidgets/src/clabel.cxx
+++ b/NxWidgets/libnxwidgets/src/clabel.cxx
@@ -303,8 +303,10 @@ void CLabel::drawContents(CGraphicsPort *port)
// Draw the background (excluding the border)
+#ifdef CONFIG_NXWIDGETS_FLICKERFREE
port->drawFilledRect(rect.getX(), rect.getY(),
rect.getWidth(), rect.getHeight(), backColor);
+#endif
// Get the X/Y position of the text within the Label
@@ -312,10 +314,27 @@ void CLabel::drawContents(CGraphicsPort *port)
pos.x = rect.getX() + m_align.x;
pos.y = rect.getY() + m_align.y;
- // Add the text using the selected color
+#ifdef CONFIG_NXWIDGETS_FLICKERFREE
+ CNxFont* font = getFont();
+ int height = font->getHeight();
+ int width = font->getStringWidth(m_text);
+
+ // Draw the background (excluding the border and the text area)
+
+ port->drawFilledRect(rect.getX(), rect.getY(),
+ pos.x - rect.getX(), rect.getHeight(), backColor); // Left
+ port->drawFilledRect(pos.x + width, rect.getY(),
+ rect.getX2() - (pos.x + width) + 1, rect.getHeight(), backColor); // Right
+ port->drawFilledRect(pos.x, rect.getY(),
+ width, pos.y - rect.getY(), backColor); // Top
+ port->drawFilledRect(pos.x, pos.y + height,
+ width, rect.getY2() - (pos.y + height) + 1, backColor); // Bottom
+#endif
+
+ // Add the text using the selected color and background color
port->drawText(&pos, &rect, getFont(), m_text, 0, m_text.getLength(),
- textColor);
+ textColor, backColor);
}
/**
diff --git a/NxWidgets/libnxwidgets/src/cscrollingpanel.cxx b/NxWidgets/libnxwidgets/src/cscrollingpanel.cxx
index b7c507bb2..2541bb572 100644
--- a/NxWidgets/libnxwidgets/src/cscrollingpanel.cxx
+++ b/NxWidgets/libnxwidgets/src/cscrollingpanel.cxx
@@ -215,10 +215,13 @@ void CScrollingPanel::scroll(int32_t dx, int32_t dy)
m_canvasY += dy;
m_canvasX += dx;
+ // Move children but do not redraw.
+
+ scrollChildren(dx, dy, false);
+
if (revealedRects.size() > 0)
{
// Draw background to revealed sections
- // Children will redraw themselves in moveTo.
for (int i = 0; i < revealedRects.size(); ++i)
{
@@ -231,6 +234,18 @@ void CScrollingPanel::scroll(int32_t dx, int32_t dy)
port->drawFilledRect(rrect.getX(), rrect.getY(),
rrect.getWidth(), rrect.getHeight(),
getBackgroundColor());
+
+ // Check if any children intersect this region.
+ // If it does, it should be redrawn.
+
+ for (int j = 0; j < m_children.size(); ++j)
+ {
+ CRect crect = m_children[j]->getBoundingBox();
+ if (crect.intersects(rrect))
+ {
+ m_children[j]->redraw();
+ }
+ }
}
}
}
@@ -240,11 +255,11 @@ void CScrollingPanel::scroll(int32_t dx, int32_t dy)
m_canvasY += dy;
m_canvasX += dx;
- }
-
- // Scroll all child widgets
+
+ // Scroll all child widgets and redraw them
- scrollChildren(dx, dy);
+ scrollChildren(dx, dy, true);
+ }
// Notify event handlers
@@ -332,9 +347,10 @@ void CScrollingPanel::onClick(nxgl_coord_t x, nxgl_coord_t y)
*
* @param dx The horizontal distance to scroll.
* @param dy The vertical distance to scroll.
+ * @param do_redraw Redraw widgets after moving.
*/
-void CScrollingPanel::scrollChildren(int32_t dx, int32_t dy)
+void CScrollingPanel::scrollChildren(int32_t dx, int32_t dy, bool do_redraw)
{
nxgl_coord_t widgetX = 0;
nxgl_coord_t widgetY = 0;
@@ -345,8 +361,20 @@ void CScrollingPanel::scrollChildren(int32_t dx, int32_t dy)
for (int32_t i = 0; i < m_children.size(); i++)
{
widget = m_children[i];
+ bool oldstate = widget->isDrawingEnabled();
+
+ if (!do_redraw)
+ {
+ widget->disableDrawing();
+ }
+
widgetX = (widget->getX() - thisX) + dx;
widgetY = (widget->getY() - thisY) + dy;
widget->moveTo(widgetX, widgetY);
+
+ if (!do_redraw && oldstate)
+ {
+ widget->enableDrawing();
+ }
}
}