return mVisualEventSignal;
}
+void Control::Impl::SetShadow( const Property::Map& map )
+{
+ Toolkit::Visual::Base visual = Toolkit::VisualFactory::Get().CreateVisual( map );
+ visual.SetName("shadow");
+
+ if( visual )
+ {
+ mControlImpl.mImpl->RegisterVisual( Toolkit::DevelControl::Property::SHADOW, visual, DepthIndex::BACKGROUND_EFFECT );
+
+ mControlImpl.RelayoutRequest();
+ }
+}
+
+void Control::Impl::ClearShadow()
+{
+ mControlImpl.mImpl->UnregisterVisual( Toolkit::DevelControl::Property::SHADOW );
+
+ // Trigger a size negotiation request that may be needed when unregistering a visual.
+ mControlImpl.RelayoutRequest();
+}
+
void Control::Impl::SetAutofillEnabled( bool autofillEnabled )
{
mIsAutofillEnabled = autofillEnabled;
return mAutofillContainer;
}
-void Control::Impl::SetShadow( const Property::Map& map )
-{
- Toolkit::Visual::Base visual = Toolkit::VisualFactory::Get().CreateVisual( map );
- visual.SetName("shadow");
-
- if( visual )
- {
- mControlImpl.mImpl->RegisterVisual( Toolkit::DevelControl::Property::SHADOW, visual, DepthIndex::BACKGROUND_EFFECT );
-
- mControlImpl.RelayoutRequest();
- }
-}
-
-void Control::Impl::ClearShadow()
-{
- mControlImpl.mImpl->UnregisterVisual( Toolkit::DevelControl::Property::SHADOW );
-
- // Trigger a size negotiation request that may be needed when unregistering a visual.
- mControlImpl.RelayoutRequest();
-}
-
} // namespace Internal
} // namespace Toolkit
DevelControl::VisualEventSignalType& VisualEventSignal();
/**
+ * @brief Sets the shadow with a property map.
+ * @param[in] map The shadow property map
+ */
+ void SetShadow(const Property::Map& map);
+
+ /**
+ * @brief Clear the shadow.
+ */
+ void ClearShadow();
+
+ /**
* @brief Sets whether the Autofill functionality is enabled.
* @param[in] autofillEnabled Set true when Autofill should be enabled.
*/
*/
Toolkit::AutofillContainer GetAutofillContainer();
- /**
- * @brief Sets the shadow with a property map.
- * @param[in] map The shadow property map
- */
- void SetShadow(const Property::Map& map);
-
- /**
- * @brief Clear the shadow.
- */
- void ClearShadow();
-
private:
/**
static float nsvg__parseOpacity(const char* str)
{
- float val = 0;
- sscanf(str, "%f", &val);
+ float val = nsvg__atof(str);\r
if (val < 0.0f) val = 0.0f;
if (val > 1.0f) val = 1.0f;
return val;
static float nsvg__parseMiterLimit(const char* str)
{
- float val = 0;
- sscanf(str, "%f", &val);
+ float val = nsvg__atof(str);
if (val < 0.0f) val = 0.0f;
return val;
}
static NSVGcoordinate nsvg__parseCoordinateRaw(const char* str)
{
NSVGcoordinate coord = {0, NSVG_UNITS_USER};
- char units[33]="";
- /**
- * In the original file, the formatted data reading did not specify the string with width limitation.
- * To prevent the possible overflow, we replace '%s' with '%32s' here.
- */
- sscanf(str, "%f%32s", &coord.value, units);
- coord.units = nsvg__parseUnits(units);
+ char buf[64];
+ coord.units = nsvg__parseUnits(nsvg__parseNumber(str, buf, 64));
+ coord.value = nsvg__atof(buf);
return coord;
}
} else if (strcmp(attr[i], "height") == 0) {
p->image->height = nsvg__parseCoordinate(p, attr[i + 1], 0.0f, 1.0f);
} else if (strcmp(attr[i], "viewBox") == 0) {
- sscanf(attr[i + 1], "%f%*[%%, \t]%f%*[%%, \t]%f%*[%%, \t]%f", &p->viewMinx, &p->viewMiny, &p->viewWidth, &p->viewHeight);
+ const char *s = attr[i + 1];
+ char buf[64];
+ s = nsvg__parseNumber(s, buf, 64);
+ p->viewMinx = nsvg__atof(buf);
+ while (*s && (nsvg__isspace(*s) || *s == '%' || *s == ',')) s++;
+ if (!*s) return;
+ s = nsvg__parseNumber(s, buf, 64);
+ p->viewMiny = nsvg__atof(buf);
+ while (*s && (nsvg__isspace(*s) || *s == '%' || *s == ',')) s++;
+ if (!*s) return;
+ s = nsvg__parseNumber(s, buf, 64);
+ p->viewWidth = nsvg__atof(buf);
+ while (*s && (nsvg__isspace(*s) || *s == '%' || *s == ',')) s++;
+ if (!*s) return;
+ s = nsvg__parseNumber(s, buf, 64);
+ p->viewHeight = nsvg__atof(buf);
} else if (strcmp(attr[i], "preserveAspectRatio") == 0) {
if (strstr(attr[i + 1], "none") != 0) {
// No uniform scaling