void ZFUITextEditWidget::nativeImplViewMarginOnUpdate(ZF_IN_OUT ZFUIMargin &nativeImplViewMargin)
{
    zfsuper::nativeImplViewMarginOnUpdate(nativeImplViewMargin);

    ZFUIImageView *textEditBackgroundView = this->textEditBackgroundView()->to<ZFUIImageView *>();
    if(textEditBackgroundView->viewVisible())
    {
        ZFUIImage *image = textEditBackgroundView->imageContent();
        if(image != zfnull)
        {
            ZFUIMarginInc(nativeImplViewMargin, nativeImplViewMargin, image->imageNinePatch());
        }
    }

    ZFUIButtonBasic *textEditClearButton = this->textEditClearButton()->to<ZFUIButtonBasic *>();
    if(textEditClearButton->viewVisible())
    {
        textEditClearButton->layoutMeasure(ZFUISizeInvalid, ZFUISizeParamWrapWidthWrapHeight);
        zfint size = ZFUIMarginGetX(textEditClearButton->layoutParam()->layoutMargin()) + textEditClearButton->layoutMeasuredSize().width;
        if(ZFBitTest(textEditClearButton->layoutParam()->layoutAlign(), ZFUIAlign::e_LeftInner))
        {
            nativeImplViewMargin.left += size;
        }
        else
        {
            nativeImplViewMargin.right += size;
        }
    }
}
    virtual ZFFileToken fileOpen(ZF_IN const zfchar *filePath,
                                 ZF_IN_OPT ZFFileOpenOptionFlags flag = ZFFileOpenOption::e_Read)
    {
        const zfcharA *sFlag = zfnull;
        if(ZFBitTest(flag, ZFFileOpenOption::e_Append))
        {
            if(ZFBitTest(flag, ZFFileOpenOption::e_Read))
            {
                sFlag = zfTextA("a+b");
            }
            else
            {
                sFlag = zfTextA("ab");
            }
        }
        else if(ZFBitTest(flag, ZFFileOpenOption::e_Create))
        {
            if(ZFBitTest(flag, ZFFileOpenOption::e_Read))
            {
                sFlag = zfText("w+b");
            }
            else
            {
                sFlag = zfText("wb");
            }
        }
        else if(ZFBitTest(flag, ZFFileOpenOption::e_Write))
        {
            if(ZFBitTest(flag, ZFFileOpenOption::e_Read))
            {
                sFlag = zfTextA("r+b");
            }
            else
            {
                sFlag = zfTextA("wb");
            }
        }
        else if(ZFBitTest(flag, ZFFileOpenOption::e_Read))
        {
            sFlag = zfTextA("rb");
        }
        else
        {
            zfCoreCriticalShouldNotGoHere();
            return ZFFileTokenInvalid;
        }

        #if ZF_ENV_sys_Windows
            zfstringW _filePathSaved = ZFStringZ2W(filePath);
            DWORD _fileAttrSaved = ::GetFileAttributesW(_filePathSaved.cString());
            ::SetFileAttributesW(_filePathSaved.cString(), FILE_ATTRIBUTE_NORMAL);
        #endif

        ZFFileToken ret = (ZFFileToken)(::fopen(ZFStringZ2A(filePath), sFlag));

        #if ZF_ENV_sys_Windows
            ::SetFileAttributesW(_filePathSaved.cString(), _fileAttrSaved);
        #endif

        return ret;
    }