TLIGHT_PRODUCTS / WS281X
Revision:
35:dffa06d09fdc
Parent:
34:5a141ed5d52a
Child:
36:0fe7917a832a
--- a/PixelBuffer.cpp	Fri Nov 04 13:19:38 2016 +0000
+++ b/PixelBuffer.cpp	Fri Nov 04 14:40:41 2016 +0000
@@ -91,35 +91,34 @@
 // 指定位置のピクセルへ色配列を指定サイズ分をコピーする
 void RGBPixels::setPixels(int index, RGBColor *color, int len)
 {
-    if (_pixels && len > 0 && (uint16_t)index < _numPixels)
+    int numPixels = static_cast<int>(_numPixels);
+    if (_pixels && len > 0 && index < numPixels && (index + len) >= 0)
     {
-        if (index + len > _numPixels)
-            len = _numPixels - index;
-
         if (index < 0)
 		{
-			len = len - (-index);
-			color += (-index);
-			index = 0;
+			len   += index;
+			color -= index;
+			index  = 0;
 		}
+        if (index + len > numPixels)
+            len = numPixels - index;
         memcpy(&_pixels[index], color, len * sizeof(_pixels[0]));
     }
 }
 
 void RGBPixels::setPixels(int index, HSVColor *color, int len)
 {
-    if (_pixels && len > 0 && (uint16_t)index < _numPixels)
+    int numPixels = static_cast<int>(_numPixels);
+    if (_pixels && len > 0 && index < numPixels && (index + len) >= 0)
     {
-        if (index + len > _numPixels)
-            len = _numPixels - index;
-
         if (index < 0)
 		{
-			len = len - (-index);
-			color += (-index);
-			index = 0;
+			len   += index;
+			color -= index;
+			index  = 0;
 		}
-
+        if (index + len > numPixels)
+            len = numPixels - index;
         RGBColor *dest = &_pixels[index];
         do
         {
@@ -310,36 +309,34 @@
 // 指定位置のピクセルへ色配列を指定サイズ分をコピーする
 void HSVPixels::setPixels(int index, HSVColor *color, int len)
 {
-    if (_pixels && len > 0 && (uint16_t)index < _numPixels)
+    int numPixels = static_cast<int>(_numPixels);
+    if (_pixels && len > 0 && index < numPixels && (index + len) >= 0)
     {
-        if (index + len > _numPixels)
-            len = _numPixels - index;
-
         if (index < 0)
-        {
-        	len = len - (-index);
-        	color += (-index);
-        	index = 0;
-        }
-
+		{
+			len   += index;
+			color -= index;
+			index  = 0;
+		}
+        if (index + len > numPixels)
+            len = numPixels - index;
         memcpy(&_pixels[index], color, len * sizeof(_pixels[0]));
     }
 }
 
 void HSVPixels::setPixels(int index, RGBColor *color, int len)
 {
-    if (_pixels && len > 0 && (uint16_t)index < _numPixels)
+    int numPixels = static_cast<int>(_numPixels);
+    if (_pixels && len > 0 && index < numPixels && (index + len) >= 0)
     {
-        if (index + len > _numPixels)
-            len = _numPixels - index;
-
         if (index < 0)
 		{
-			len = len - (-index);
-			color += (-index);
-			index = 0;
+			len   += index;
+			color -= index;
+			index  = 0;
 		}
-
+        if (index + len > numPixels)
+            len = numPixels - index;
         HSVColor *dest = &_pixels[index];
         do
         {