summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--README.md1
-rw-r--r--SConstruct25
-rw-r--r--core/hq2x.cpp2636
-rw-r--r--core/hq2x.h19
-rw-r--r--core/image.cpp40
-rw-r--r--core/image.h1
-rw-r--r--core/io/file_access_memory.cpp2
-rw-r--r--core/io/resource_loader.cpp1
-rw-r--r--core/io/translation_loader_po.cpp25
-rw-r--r--core/io/translation_loader_po.h4
-rw-r--r--core/object.cpp7
-rw-r--r--core/object.h3
-rw-r--r--core/os/main_loop.cpp10
-rw-r--r--core/os/main_loop.h2
-rw-r--r--core/os/memory.h9
-rw-r--r--core/resource.cpp27
-rw-r--r--core/resource.h4
-rw-r--r--core/translation.cpp6
-rw-r--r--doc/base/classes.xml57
-rw-r--r--drivers/SCsub2
-rw-r--r--drivers/freetype/FTL.TXT169
-rw-r--r--drivers/freetype/LICENSE.TXT39
-rw-r--r--drivers/freetype/SCsub (renamed from tools/freetype/SCsub)2
-rw-r--r--drivers/freetype/freetype/include/freetype/config/ftconfig.h (renamed from tools/freetype/freetype/include/freetype/config/ftconfig.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/config/ftheader.h (renamed from tools/freetype/freetype/include/freetype/config/ftheader.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/config/ftmodule.h (renamed from tools/freetype/freetype/include/freetype/config/ftmodule.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/config/ftoption.h (renamed from tools/freetype/freetype/include/freetype/config/ftoption.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/config/ftstdlib.h (renamed from tools/freetype/freetype/include/freetype/config/ftstdlib.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/freetype.h (renamed from tools/freetype/freetype/include/freetype/freetype.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftadvanc.h (renamed from tools/freetype/freetype/include/freetype/ftadvanc.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftautoh.h (renamed from tools/freetype/freetype/include/freetype/ftautoh.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftbbox.h (renamed from tools/freetype/freetype/include/freetype/ftbbox.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftbdf.h (renamed from tools/freetype/freetype/include/freetype/ftbdf.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftbitmap.h (renamed from tools/freetype/freetype/include/freetype/ftbitmap.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftbzip2.h (renamed from tools/freetype/freetype/include/freetype/ftbzip2.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftcache.h (renamed from tools/freetype/freetype/include/freetype/ftcache.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftcffdrv.h (renamed from tools/freetype/freetype/include/freetype/ftcffdrv.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftchapters.h (renamed from tools/freetype/freetype/include/freetype/ftchapters.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftcid.h (renamed from tools/freetype/freetype/include/freetype/ftcid.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/fterrdef.h (renamed from tools/freetype/freetype/include/freetype/fterrdef.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/fterrors.h (renamed from tools/freetype/freetype/include/freetype/fterrors.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftgasp.h (renamed from tools/freetype/freetype/include/freetype/ftgasp.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftglyph.h (renamed from tools/freetype/freetype/include/freetype/ftglyph.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftgxval.h (renamed from tools/freetype/freetype/include/freetype/ftgxval.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftgzip.h (renamed from tools/freetype/freetype/include/freetype/ftgzip.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftimage.h (renamed from tools/freetype/freetype/include/freetype/ftimage.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftincrem.h (renamed from tools/freetype/freetype/include/freetype/ftincrem.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftlcdfil.h (renamed from tools/freetype/freetype/include/freetype/ftlcdfil.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftlist.h (renamed from tools/freetype/freetype/include/freetype/ftlist.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftlzw.h (renamed from tools/freetype/freetype/include/freetype/ftlzw.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftmac.h (renamed from tools/freetype/freetype/include/freetype/ftmac.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftmm.h (renamed from tools/freetype/freetype/include/freetype/ftmm.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftmodapi.h (renamed from tools/freetype/freetype/include/freetype/ftmodapi.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftmoderr.h (renamed from tools/freetype/freetype/include/freetype/ftmoderr.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftotval.h (renamed from tools/freetype/freetype/include/freetype/ftotval.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftoutln.h (renamed from tools/freetype/freetype/include/freetype/ftoutln.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftpfr.h (renamed from tools/freetype/freetype/include/freetype/ftpfr.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftrender.h (renamed from tools/freetype/freetype/include/freetype/ftrender.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftsizes.h (renamed from tools/freetype/freetype/include/freetype/ftsizes.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftsnames.h (renamed from tools/freetype/freetype/include/freetype/ftsnames.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftstroke.h (renamed from tools/freetype/freetype/include/freetype/ftstroke.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftsynth.h (renamed from tools/freetype/freetype/include/freetype/ftsynth.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftsystem.h (renamed from tools/freetype/freetype/include/freetype/ftsystem.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/fttrigon.h (renamed from tools/freetype/freetype/include/freetype/fttrigon.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftttdrv.h (renamed from tools/freetype/freetype/include/freetype/ftttdrv.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/fttypes.h (renamed from tools/freetype/freetype/include/freetype/fttypes.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftwinfnt.h (renamed from tools/freetype/freetype/include/freetype/ftwinfnt.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftxf86.h (renamed from tools/freetype/freetype/include/freetype/ftxf86.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/autohint.h (renamed from tools/freetype/freetype/include/freetype/internal/autohint.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftcalc.h (renamed from tools/freetype/freetype/include/freetype/internal/ftcalc.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftdebug.h (renamed from tools/freetype/freetype/include/freetype/internal/ftdebug.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftdriver.h (renamed from tools/freetype/freetype/include/freetype/internal/ftdriver.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftgloadr.h (renamed from tools/freetype/freetype/include/freetype/internal/ftgloadr.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftmemory.h (renamed from tools/freetype/freetype/include/freetype/internal/ftmemory.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftobjs.h (renamed from tools/freetype/freetype/include/freetype/internal/ftobjs.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftpic.h (renamed from tools/freetype/freetype/include/freetype/internal/ftpic.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftrfork.h (renamed from tools/freetype/freetype/include/freetype/internal/ftrfork.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftserv.h (renamed from tools/freetype/freetype/include/freetype/internal/ftserv.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftstream.h (renamed from tools/freetype/freetype/include/freetype/internal/ftstream.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/fttrace.h (renamed from tools/freetype/freetype/include/freetype/internal/fttrace.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftvalid.h (renamed from tools/freetype/freetype/include/freetype/internal/ftvalid.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/internal.h (renamed from tools/freetype/freetype/include/freetype/internal/internal.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/psaux.h (renamed from tools/freetype/freetype/include/freetype/internal/psaux.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/pshints.h (renamed from tools/freetype/freetype/include/freetype/internal/pshints.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svbdf.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svbdf.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svcid.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svcid.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svgldict.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svgldict.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svgxval.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svgxval.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svkern.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svkern.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svmm.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svmm.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svotval.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svotval.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svpfr.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svpfr.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svpostnm.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svpostnm.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svprop.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svprop.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svpscmap.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svpscmap.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svpsinfo.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svpsinfo.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svsfnt.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svsfnt.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svttcmap.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svttcmap.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svtteng.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svtteng.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svttglyf.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svttglyf.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svwinfnt.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svwinfnt.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svxf86nm.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svxf86nm.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/sfnt.h (renamed from tools/freetype/freetype/include/freetype/internal/sfnt.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/t1types.h (renamed from tools/freetype/freetype/include/freetype/internal/t1types.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/tttypes.h (renamed from tools/freetype/freetype/include/freetype/internal/tttypes.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/t1tables.h (renamed from tools/freetype/freetype/include/freetype/t1tables.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ttnameid.h (renamed from tools/freetype/freetype/include/freetype/ttnameid.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/tttables.h (renamed from tools/freetype/freetype/include/freetype/tttables.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/tttags.h (renamed from tools/freetype/freetype/include/freetype/tttags.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ttunpat.h (renamed from tools/freetype/freetype/include/freetype/ttunpat.h)0
-rw-r--r--drivers/freetype/freetype/include/ftoption.h (renamed from tools/freetype/freetype/include/ftoption.h)0
-rw-r--r--drivers/freetype/freetype/src/Jamfile (renamed from tools/freetype/freetype/src/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/autofit/Jamfile (renamed from tools/freetype/freetype/src/autofit/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afangles.c (renamed from tools/freetype/freetype/src/autofit/afangles.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afangles.h (renamed from tools/freetype/freetype/src/autofit/afangles.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afcjk.c (renamed from tools/freetype/freetype/src/autofit/afcjk.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afcjk.h (renamed from tools/freetype/freetype/src/autofit/afcjk.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afdummy.c (renamed from tools/freetype/freetype/src/autofit/afdummy.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afdummy.h (renamed from tools/freetype/freetype/src/autofit/afdummy.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/aferrors.h (renamed from tools/freetype/freetype/src/autofit/aferrors.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afglobal.c (renamed from tools/freetype/freetype/src/autofit/afglobal.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afglobal.h (renamed from tools/freetype/freetype/src/autofit/afglobal.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afhints.c (renamed from tools/freetype/freetype/src/autofit/afhints.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afhints.h (renamed from tools/freetype/freetype/src/autofit/afhints.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afindic.c (renamed from tools/freetype/freetype/src/autofit/afindic.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afindic.h (renamed from tools/freetype/freetype/src/autofit/afindic.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/aflatin.c (renamed from tools/freetype/freetype/src/autofit/aflatin.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/aflatin.h (renamed from tools/freetype/freetype/src/autofit/aflatin.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/aflatin2.c (renamed from tools/freetype/freetype/src/autofit/aflatin2.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/aflatin2.h (renamed from tools/freetype/freetype/src/autofit/aflatin2.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afloader.c (renamed from tools/freetype/freetype/src/autofit/afloader.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afloader.h (renamed from tools/freetype/freetype/src/autofit/afloader.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afmodule.c (renamed from tools/freetype/freetype/src/autofit/afmodule.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afmodule.h (renamed from tools/freetype/freetype/src/autofit/afmodule.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afpic.c (renamed from tools/freetype/freetype/src/autofit/afpic.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afpic.h (renamed from tools/freetype/freetype/src/autofit/afpic.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/aftypes.h (renamed from tools/freetype/freetype/src/autofit/aftypes.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afwarp.c (renamed from tools/freetype/freetype/src/autofit/afwarp.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afwarp.h (renamed from tools/freetype/freetype/src/autofit/afwarp.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/autofit.c (renamed from tools/freetype/freetype/src/autofit/autofit.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/module.mk (renamed from tools/freetype/freetype/src/autofit/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/autofit/rules.mk (renamed from tools/freetype/freetype/src/autofit/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/base/Jamfile (renamed from tools/freetype/freetype/src/base/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/base/basepic.c (renamed from tools/freetype/freetype/src/base/basepic.c)0
-rw-r--r--drivers/freetype/freetype/src/base/basepic.h (renamed from tools/freetype/freetype/src/base/basepic.h)0
-rw-r--r--drivers/freetype/freetype/src/base/ftadvanc.c (renamed from tools/freetype/freetype/src/base/ftadvanc.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftapi.c (renamed from tools/freetype/freetype/src/base/ftapi.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftbase.c (renamed from tools/freetype/freetype/src/base/ftbase.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftbase.h (renamed from tools/freetype/freetype/src/base/ftbase.h)0
-rw-r--r--drivers/freetype/freetype/src/base/ftbbox.c (renamed from tools/freetype/freetype/src/base/ftbbox.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftbdf.c (renamed from tools/freetype/freetype/src/base/ftbdf.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftbitmap.c (renamed from tools/freetype/freetype/src/base/ftbitmap.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftcalc.c (renamed from tools/freetype/freetype/src/base/ftcalc.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftcid.c (renamed from tools/freetype/freetype/src/base/ftcid.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftdbgmem.c (renamed from tools/freetype/freetype/src/base/ftdbgmem.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftdebug.c (renamed from tools/freetype/freetype/src/base/ftdebug.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftfstype.c (renamed from tools/freetype/freetype/src/base/ftfstype.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftgasp.c (renamed from tools/freetype/freetype/src/base/ftgasp.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftgloadr.c (renamed from tools/freetype/freetype/src/base/ftgloadr.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftglyph.c (renamed from tools/freetype/freetype/src/base/ftglyph.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftgxval.c (renamed from tools/freetype/freetype/src/base/ftgxval.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftinit.c (renamed from tools/freetype/freetype/src/base/ftinit.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftlcdfil.c (renamed from tools/freetype/freetype/src/base/ftlcdfil.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftmac.c (renamed from tools/freetype/freetype/src/base/ftmac.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftmm.c (renamed from tools/freetype/freetype/src/base/ftmm.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftobjs.c (renamed from tools/freetype/freetype/src/base/ftobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftotval.c (renamed from tools/freetype/freetype/src/base/ftotval.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftoutln.c (renamed from tools/freetype/freetype/src/base/ftoutln.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftpatent.c (renamed from tools/freetype/freetype/src/base/ftpatent.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftpfr.c (renamed from tools/freetype/freetype/src/base/ftpfr.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftpic.c (renamed from tools/freetype/freetype/src/base/ftpic.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftrfork.c (renamed from tools/freetype/freetype/src/base/ftrfork.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftsnames.c (renamed from tools/freetype/freetype/src/base/ftsnames.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftstream.c (renamed from tools/freetype/freetype/src/base/ftstream.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftstroke.c (renamed from tools/freetype/freetype/src/base/ftstroke.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftsynth.c (renamed from tools/freetype/freetype/src/base/ftsynth.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftsystem.c (renamed from tools/freetype/freetype/src/base/ftsystem.c)0
-rw-r--r--drivers/freetype/freetype/src/base/fttrigon.c (renamed from tools/freetype/freetype/src/base/fttrigon.c)0
-rw-r--r--drivers/freetype/freetype/src/base/fttype1.c (renamed from tools/freetype/freetype/src/base/fttype1.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftutil.c (renamed from tools/freetype/freetype/src/base/ftutil.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftwinfnt.c (renamed from tools/freetype/freetype/src/base/ftwinfnt.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftxf86.c (renamed from tools/freetype/freetype/src/base/ftxf86.c)0
-rw-r--r--drivers/freetype/freetype/src/base/md5.c (renamed from tools/freetype/freetype/src/base/md5.c)0
-rw-r--r--drivers/freetype/freetype/src/base/md5.h (renamed from tools/freetype/freetype/src/base/md5.h)0
-rw-r--r--drivers/freetype/freetype/src/base/rules.mk (renamed from tools/freetype/freetype/src/base/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/bdf/Jamfile (renamed from tools/freetype/freetype/src/bdf/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/bdf/README (renamed from tools/freetype/freetype/src/bdf/README)0
-rw-r--r--drivers/freetype/freetype/src/bdf/bdf.c (renamed from tools/freetype/freetype/src/bdf/bdf.c)0
-rw-r--r--drivers/freetype/freetype/src/bdf/bdf.h (renamed from tools/freetype/freetype/src/bdf/bdf.h)0
-rw-r--r--drivers/freetype/freetype/src/bdf/bdfdrivr.c (renamed from tools/freetype/freetype/src/bdf/bdfdrivr.c)0
-rw-r--r--drivers/freetype/freetype/src/bdf/bdfdrivr.h (renamed from tools/freetype/freetype/src/bdf/bdfdrivr.h)0
-rw-r--r--drivers/freetype/freetype/src/bdf/bdferror.h (renamed from tools/freetype/freetype/src/bdf/bdferror.h)0
-rw-r--r--drivers/freetype/freetype/src/bdf/bdflib.c (renamed from tools/freetype/freetype/src/bdf/bdflib.c)0
-rw-r--r--drivers/freetype/freetype/src/bdf/module.mk (renamed from tools/freetype/freetype/src/bdf/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/bdf/rules.mk (renamed from tools/freetype/freetype/src/bdf/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/cache/Jamfile (renamed from tools/freetype/freetype/src/cache/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcache.c (renamed from tools/freetype/freetype/src/cache/ftcache.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcbasic.c (renamed from tools/freetype/freetype/src/cache/ftcbasic.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftccache.c (renamed from tools/freetype/freetype/src/cache/ftccache.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftccache.h (renamed from tools/freetype/freetype/src/cache/ftccache.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftccback.h (renamed from tools/freetype/freetype/src/cache/ftccback.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftccmap.c (renamed from tools/freetype/freetype/src/cache/ftccmap.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcerror.h (renamed from tools/freetype/freetype/src/cache/ftcerror.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcglyph.c (renamed from tools/freetype/freetype/src/cache/ftcglyph.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcglyph.h (renamed from tools/freetype/freetype/src/cache/ftcglyph.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcimage.c (renamed from tools/freetype/freetype/src/cache/ftcimage.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcimage.h (renamed from tools/freetype/freetype/src/cache/ftcimage.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcmanag.c (renamed from tools/freetype/freetype/src/cache/ftcmanag.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcmanag.h (renamed from tools/freetype/freetype/src/cache/ftcmanag.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcmru.c (renamed from tools/freetype/freetype/src/cache/ftcmru.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcmru.h (renamed from tools/freetype/freetype/src/cache/ftcmru.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcsbits.c (renamed from tools/freetype/freetype/src/cache/ftcsbits.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcsbits.h (renamed from tools/freetype/freetype/src/cache/ftcsbits.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/rules.mk (renamed from tools/freetype/freetype/src/cache/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/cff/Jamfile (renamed from tools/freetype/freetype/src/cff/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2arrst.c (renamed from tools/freetype/freetype/src/cff/cf2arrst.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2arrst.h (renamed from tools/freetype/freetype/src/cff/cf2arrst.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2blues.c (renamed from tools/freetype/freetype/src/cff/cf2blues.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2blues.h (renamed from tools/freetype/freetype/src/cff/cf2blues.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2error.c (renamed from tools/freetype/freetype/src/cff/cf2error.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2error.h (renamed from tools/freetype/freetype/src/cff/cf2error.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2fixed.h (renamed from tools/freetype/freetype/src/cff/cf2fixed.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2font.c (renamed from tools/freetype/freetype/src/cff/cf2font.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2font.h (renamed from tools/freetype/freetype/src/cff/cf2font.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2ft.c (renamed from tools/freetype/freetype/src/cff/cf2ft.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2ft.h (renamed from tools/freetype/freetype/src/cff/cf2ft.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2glue.h (renamed from tools/freetype/freetype/src/cff/cf2glue.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2hints.c (renamed from tools/freetype/freetype/src/cff/cf2hints.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2hints.h (renamed from tools/freetype/freetype/src/cff/cf2hints.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2intrp.c (renamed from tools/freetype/freetype/src/cff/cf2intrp.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2intrp.h (renamed from tools/freetype/freetype/src/cff/cf2intrp.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2read.c (renamed from tools/freetype/freetype/src/cff/cf2read.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2read.h (renamed from tools/freetype/freetype/src/cff/cf2read.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2stack.c (renamed from tools/freetype/freetype/src/cff/cf2stack.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2stack.h (renamed from tools/freetype/freetype/src/cff/cf2stack.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2types.h (renamed from tools/freetype/freetype/src/cff/cf2types.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cff.c (renamed from tools/freetype/freetype/src/cff/cff.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffcmap.c (renamed from tools/freetype/freetype/src/cff/cffcmap.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffcmap.h (renamed from tools/freetype/freetype/src/cff/cffcmap.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffdrivr.c (renamed from tools/freetype/freetype/src/cff/cffdrivr.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffdrivr.h (renamed from tools/freetype/freetype/src/cff/cffdrivr.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cfferrs.h (renamed from tools/freetype/freetype/src/cff/cfferrs.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffgload.c (renamed from tools/freetype/freetype/src/cff/cffgload.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffgload.h (renamed from tools/freetype/freetype/src/cff/cffgload.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffload.c (renamed from tools/freetype/freetype/src/cff/cffload.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffload.h (renamed from tools/freetype/freetype/src/cff/cffload.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffobjs.c (renamed from tools/freetype/freetype/src/cff/cffobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffobjs.h (renamed from tools/freetype/freetype/src/cff/cffobjs.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffparse.c (renamed from tools/freetype/freetype/src/cff/cffparse.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffparse.h (renamed from tools/freetype/freetype/src/cff/cffparse.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffpic.c (renamed from tools/freetype/freetype/src/cff/cffpic.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffpic.h (renamed from tools/freetype/freetype/src/cff/cffpic.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cfftoken.h (renamed from tools/freetype/freetype/src/cff/cfftoken.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cfftypes.h (renamed from tools/freetype/freetype/src/cff/cfftypes.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/module.mk (renamed from tools/freetype/freetype/src/cff/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/cff/rules.mk (renamed from tools/freetype/freetype/src/cff/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/cid/Jamfile (renamed from tools/freetype/freetype/src/cid/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/cid/ciderrs.h (renamed from tools/freetype/freetype/src/cid/ciderrs.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidgload.c (renamed from tools/freetype/freetype/src/cid/cidgload.c)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidgload.h (renamed from tools/freetype/freetype/src/cid/cidgload.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidload.c (renamed from tools/freetype/freetype/src/cid/cidload.c)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidload.h (renamed from tools/freetype/freetype/src/cid/cidload.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidobjs.c (renamed from tools/freetype/freetype/src/cid/cidobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidobjs.h (renamed from tools/freetype/freetype/src/cid/cidobjs.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidparse.c (renamed from tools/freetype/freetype/src/cid/cidparse.c)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidparse.h (renamed from tools/freetype/freetype/src/cid/cidparse.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidriver.c (renamed from tools/freetype/freetype/src/cid/cidriver.c)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidriver.h (renamed from tools/freetype/freetype/src/cid/cidriver.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidtoken.h (renamed from tools/freetype/freetype/src/cid/cidtoken.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/module.mk (renamed from tools/freetype/freetype/src/cid/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/cid/rules.mk (renamed from tools/freetype/freetype/src/cid/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/cid/type1cid.c (renamed from tools/freetype/freetype/src/cid/type1cid.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/Jamfile (renamed from tools/freetype/freetype/src/gxvalid/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/README (renamed from tools/freetype/freetype/src/gxvalid/README)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvalid.c (renamed from tools/freetype/freetype/src/gxvalid/gxvalid.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvalid.h (renamed from tools/freetype/freetype/src/gxvalid/gxvalid.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvbsln.c (renamed from tools/freetype/freetype/src/gxvalid/gxvbsln.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvcommn.c (renamed from tools/freetype/freetype/src/gxvalid/gxvcommn.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvcommn.h (renamed from tools/freetype/freetype/src/gxvalid/gxvcommn.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxverror.h (renamed from tools/freetype/freetype/src/gxvalid/gxverror.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvfeat.c (renamed from tools/freetype/freetype/src/gxvalid/gxvfeat.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvfeat.h (renamed from tools/freetype/freetype/src/gxvalid/gxvfeat.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvfgen.c (renamed from tools/freetype/freetype/src/gxvalid/gxvfgen.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvjust.c (renamed from tools/freetype/freetype/src/gxvalid/gxvjust.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvkern.c (renamed from tools/freetype/freetype/src/gxvalid/gxvkern.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvlcar.c (renamed from tools/freetype/freetype/src/gxvalid/gxvlcar.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmod.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmod.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmod.h (renamed from tools/freetype/freetype/src/gxvalid/gxvmod.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmort.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort.h (renamed from tools/freetype/freetype/src/gxvalid/gxvmort.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort0.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmort0.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort1.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmort1.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort2.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmort2.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort4.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmort4.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort5.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmort5.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx.h (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx0.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx0.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx1.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx1.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx2.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx2.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx4.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx4.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx5.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx5.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvopbd.c (renamed from tools/freetype/freetype/src/gxvalid/gxvopbd.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvprop.c (renamed from tools/freetype/freetype/src/gxvalid/gxvprop.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvtrak.c (renamed from tools/freetype/freetype/src/gxvalid/gxvtrak.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/module.mk (renamed from tools/freetype/freetype/src/gxvalid/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/rules.mk (renamed from tools/freetype/freetype/src/gxvalid/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/Jamfile (renamed from tools/freetype/freetype/src/otvalid/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/module.mk (renamed from tools/freetype/freetype/src/otvalid/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvalid.c (renamed from tools/freetype/freetype/src/otvalid/otvalid.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvalid.h (renamed from tools/freetype/freetype/src/otvalid/otvalid.h)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvbase.c (renamed from tools/freetype/freetype/src/otvalid/otvbase.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvcommn.c (renamed from tools/freetype/freetype/src/otvalid/otvcommn.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvcommn.h (renamed from tools/freetype/freetype/src/otvalid/otvcommn.h)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otverror.h (renamed from tools/freetype/freetype/src/otvalid/otverror.h)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvgdef.c (renamed from tools/freetype/freetype/src/otvalid/otvgdef.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvgpos.c (renamed from tools/freetype/freetype/src/otvalid/otvgpos.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvgpos.h (renamed from tools/freetype/freetype/src/otvalid/otvgpos.h)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvgsub.c (renamed from tools/freetype/freetype/src/otvalid/otvgsub.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvjstf.c (renamed from tools/freetype/freetype/src/otvalid/otvjstf.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvmath.c (renamed from tools/freetype/freetype/src/otvalid/otvmath.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvmod.c (renamed from tools/freetype/freetype/src/otvalid/otvmod.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvmod.h (renamed from tools/freetype/freetype/src/otvalid/otvmod.h)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/rules.mk (renamed from tools/freetype/freetype/src/otvalid/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/pcf/Jamfile (renamed from tools/freetype/freetype/src/pcf/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/pcf/README (renamed from tools/freetype/freetype/src/pcf/README)0
-rw-r--r--drivers/freetype/freetype/src/pcf/module.mk (renamed from tools/freetype/freetype/src/pcf/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcf.c (renamed from tools/freetype/freetype/src/pcf/pcf.c)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcf.h (renamed from tools/freetype/freetype/src/pcf/pcf.h)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcfdrivr.c (renamed from tools/freetype/freetype/src/pcf/pcfdrivr.c)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcfdrivr.h (renamed from tools/freetype/freetype/src/pcf/pcfdrivr.h)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcferror.h (renamed from tools/freetype/freetype/src/pcf/pcferror.h)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcfread.c (renamed from tools/freetype/freetype/src/pcf/pcfread.c)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcfread.h (renamed from tools/freetype/freetype/src/pcf/pcfread.h)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcfutil.c (renamed from tools/freetype/freetype/src/pcf/pcfutil.c)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcfutil.h (renamed from tools/freetype/freetype/src/pcf/pcfutil.h)0
-rw-r--r--drivers/freetype/freetype/src/pcf/rules.mk (renamed from tools/freetype/freetype/src/pcf/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/pfr/Jamfile (renamed from tools/freetype/freetype/src/pfr/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/pfr/module.mk (renamed from tools/freetype/freetype/src/pfr/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfr.c (renamed from tools/freetype/freetype/src/pfr/pfr.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrcmap.c (renamed from tools/freetype/freetype/src/pfr/pfrcmap.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrcmap.h (renamed from tools/freetype/freetype/src/pfr/pfrcmap.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrdrivr.c (renamed from tools/freetype/freetype/src/pfr/pfrdrivr.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrdrivr.h (renamed from tools/freetype/freetype/src/pfr/pfrdrivr.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrerror.h (renamed from tools/freetype/freetype/src/pfr/pfrerror.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrgload.c (renamed from tools/freetype/freetype/src/pfr/pfrgload.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrgload.h (renamed from tools/freetype/freetype/src/pfr/pfrgload.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrload.c (renamed from tools/freetype/freetype/src/pfr/pfrload.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrload.h (renamed from tools/freetype/freetype/src/pfr/pfrload.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrobjs.c (renamed from tools/freetype/freetype/src/pfr/pfrobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrobjs.h (renamed from tools/freetype/freetype/src/pfr/pfrobjs.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrsbit.c (renamed from tools/freetype/freetype/src/pfr/pfrsbit.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrsbit.h (renamed from tools/freetype/freetype/src/pfr/pfrsbit.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrtypes.h (renamed from tools/freetype/freetype/src/pfr/pfrtypes.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/rules.mk (renamed from tools/freetype/freetype/src/pfr/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/psaux/Jamfile (renamed from tools/freetype/freetype/src/psaux/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/psaux/afmparse.c (renamed from tools/freetype/freetype/src/psaux/afmparse.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/afmparse.h (renamed from tools/freetype/freetype/src/psaux/afmparse.h)0
-rw-r--r--drivers/freetype/freetype/src/psaux/module.mk (renamed from tools/freetype/freetype/src/psaux/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psaux.c (renamed from tools/freetype/freetype/src/psaux/psaux.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psauxerr.h (renamed from tools/freetype/freetype/src/psaux/psauxerr.h)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psauxmod.c (renamed from tools/freetype/freetype/src/psaux/psauxmod.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psauxmod.h (renamed from tools/freetype/freetype/src/psaux/psauxmod.h)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psconv.c (renamed from tools/freetype/freetype/src/psaux/psconv.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psconv.h (renamed from tools/freetype/freetype/src/psaux/psconv.h)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psobjs.c (renamed from tools/freetype/freetype/src/psaux/psobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psobjs.h (renamed from tools/freetype/freetype/src/psaux/psobjs.h)0
-rw-r--r--drivers/freetype/freetype/src/psaux/rules.mk (renamed from tools/freetype/freetype/src/psaux/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/psaux/t1cmap.c (renamed from tools/freetype/freetype/src/psaux/t1cmap.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/t1cmap.h (renamed from tools/freetype/freetype/src/psaux/t1cmap.h)0
-rw-r--r--drivers/freetype/freetype/src/psaux/t1decode.c (renamed from tools/freetype/freetype/src/psaux/t1decode.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/t1decode.h (renamed from tools/freetype/freetype/src/psaux/t1decode.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/Jamfile (renamed from tools/freetype/freetype/src/pshinter/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/module.mk (renamed from tools/freetype/freetype/src/pshinter/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshalgo.c (renamed from tools/freetype/freetype/src/pshinter/pshalgo.c)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshalgo.h (renamed from tools/freetype/freetype/src/pshinter/pshalgo.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshglob.c (renamed from tools/freetype/freetype/src/pshinter/pshglob.c)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshglob.h (renamed from tools/freetype/freetype/src/pshinter/pshglob.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshinter.c (renamed from tools/freetype/freetype/src/pshinter/pshinter.c)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshmod.c (renamed from tools/freetype/freetype/src/pshinter/pshmod.c)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshmod.h (renamed from tools/freetype/freetype/src/pshinter/pshmod.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshnterr.h (renamed from tools/freetype/freetype/src/pshinter/pshnterr.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshpic.c (renamed from tools/freetype/freetype/src/pshinter/pshpic.c)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshpic.h (renamed from tools/freetype/freetype/src/pshinter/pshpic.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshrec.c (renamed from tools/freetype/freetype/src/pshinter/pshrec.c)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshrec.h (renamed from tools/freetype/freetype/src/pshinter/pshrec.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/rules.mk (renamed from tools/freetype/freetype/src/pshinter/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/psnames/Jamfile (renamed from tools/freetype/freetype/src/psnames/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/psnames/module.mk (renamed from tools/freetype/freetype/src/psnames/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/psnames/psmodule.c (renamed from tools/freetype/freetype/src/psnames/psmodule.c)0
-rw-r--r--drivers/freetype/freetype/src/psnames/psmodule.h (renamed from tools/freetype/freetype/src/psnames/psmodule.h)0
-rw-r--r--drivers/freetype/freetype/src/psnames/psnamerr.h (renamed from tools/freetype/freetype/src/psnames/psnamerr.h)0
-rw-r--r--drivers/freetype/freetype/src/psnames/psnames.c (renamed from tools/freetype/freetype/src/psnames/psnames.c)0
-rw-r--r--drivers/freetype/freetype/src/psnames/pspic.c (renamed from tools/freetype/freetype/src/psnames/pspic.c)0
-rw-r--r--drivers/freetype/freetype/src/psnames/pspic.h (renamed from tools/freetype/freetype/src/psnames/pspic.h)0
-rw-r--r--drivers/freetype/freetype/src/psnames/pstables.h (renamed from tools/freetype/freetype/src/psnames/pstables.h)0
-rw-r--r--drivers/freetype/freetype/src/psnames/rules.mk (renamed from tools/freetype/freetype/src/psnames/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/raster/Jamfile (renamed from tools/freetype/freetype/src/raster/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/raster/ftmisc.h (renamed from tools/freetype/freetype/src/raster/ftmisc.h)0
-rw-r--r--drivers/freetype/freetype/src/raster/ftraster.c (renamed from tools/freetype/freetype/src/raster/ftraster.c)0
-rw-r--r--drivers/freetype/freetype/src/raster/ftraster.h (renamed from tools/freetype/freetype/src/raster/ftraster.h)0
-rw-r--r--drivers/freetype/freetype/src/raster/ftrend1.c (renamed from tools/freetype/freetype/src/raster/ftrend1.c)0
-rw-r--r--drivers/freetype/freetype/src/raster/ftrend1.h (renamed from tools/freetype/freetype/src/raster/ftrend1.h)0
-rw-r--r--drivers/freetype/freetype/src/raster/module.mk (renamed from tools/freetype/freetype/src/raster/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/raster/raster.c (renamed from tools/freetype/freetype/src/raster/raster.c)0
-rw-r--r--drivers/freetype/freetype/src/raster/rasterrs.h (renamed from tools/freetype/freetype/src/raster/rasterrs.h)0
-rw-r--r--drivers/freetype/freetype/src/raster/rastpic.c (renamed from tools/freetype/freetype/src/raster/rastpic.c)0
-rw-r--r--drivers/freetype/freetype/src/raster/rastpic.h (renamed from tools/freetype/freetype/src/raster/rastpic.h)0
-rw-r--r--drivers/freetype/freetype/src/raster/rules.mk (renamed from tools/freetype/freetype/src/raster/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/Jamfile (renamed from tools/freetype/freetype/src/sfnt/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/module.mk (renamed from tools/freetype/freetype/src/sfnt/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/pngshim.c (renamed from tools/freetype/freetype/src/sfnt/pngshim.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/pngshim.h (renamed from tools/freetype/freetype/src/sfnt/pngshim.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/rules.mk (renamed from tools/freetype/freetype/src/sfnt/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfdriver.c (renamed from tools/freetype/freetype/src/sfnt/sfdriver.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfdriver.h (renamed from tools/freetype/freetype/src/sfnt/sfdriver.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sferrors.h (renamed from tools/freetype/freetype/src/sfnt/sferrors.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfnt.c (renamed from tools/freetype/freetype/src/sfnt/sfnt.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfntpic.c (renamed from tools/freetype/freetype/src/sfnt/sfntpic.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfntpic.h (renamed from tools/freetype/freetype/src/sfnt/sfntpic.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfobjs.c (renamed from tools/freetype/freetype/src/sfnt/sfobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfobjs.h (renamed from tools/freetype/freetype/src/sfnt/sfobjs.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttbdf.c (renamed from tools/freetype/freetype/src/sfnt/ttbdf.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttbdf.h (renamed from tools/freetype/freetype/src/sfnt/ttbdf.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttcmap.c (renamed from tools/freetype/freetype/src/sfnt/ttcmap.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttcmap.h (renamed from tools/freetype/freetype/src/sfnt/ttcmap.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttcmapc.h (renamed from tools/freetype/freetype/src/sfnt/ttcmapc.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttkern.c (renamed from tools/freetype/freetype/src/sfnt/ttkern.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttkern.h (renamed from tools/freetype/freetype/src/sfnt/ttkern.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttload.c (renamed from tools/freetype/freetype/src/sfnt/ttload.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttload.h (renamed from tools/freetype/freetype/src/sfnt/ttload.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttmtx.c (renamed from tools/freetype/freetype/src/sfnt/ttmtx.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttmtx.h (renamed from tools/freetype/freetype/src/sfnt/ttmtx.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttpost.c (renamed from tools/freetype/freetype/src/sfnt/ttpost.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttpost.h (renamed from tools/freetype/freetype/src/sfnt/ttpost.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttsbit.c (renamed from tools/freetype/freetype/src/sfnt/ttsbit.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttsbit.h (renamed from tools/freetype/freetype/src/sfnt/ttsbit.h)0
-rw-r--r--drivers/freetype/freetype/src/smooth/Jamfile (renamed from tools/freetype/freetype/src/smooth/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftgrays.c (renamed from tools/freetype/freetype/src/smooth/ftgrays.c)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftgrays.h (renamed from tools/freetype/freetype/src/smooth/ftgrays.h)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftsmerrs.h (renamed from tools/freetype/freetype/src/smooth/ftsmerrs.h)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftsmooth.c (renamed from tools/freetype/freetype/src/smooth/ftsmooth.c)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftsmooth.h (renamed from tools/freetype/freetype/src/smooth/ftsmooth.h)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftspic.c (renamed from tools/freetype/freetype/src/smooth/ftspic.c)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftspic.h (renamed from tools/freetype/freetype/src/smooth/ftspic.h)0
-rw-r--r--drivers/freetype/freetype/src/smooth/module.mk (renamed from tools/freetype/freetype/src/smooth/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/smooth/rules.mk (renamed from tools/freetype/freetype/src/smooth/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/smooth/smooth.c (renamed from tools/freetype/freetype/src/smooth/smooth.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/Jamfile (renamed from tools/freetype/freetype/src/truetype/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/truetype/module.mk (renamed from tools/freetype/freetype/src/truetype/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/truetype/rules.mk (renamed from tools/freetype/freetype/src/truetype/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/truetype/truetype.c (renamed from tools/freetype/freetype/src/truetype/truetype.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttdriver.c (renamed from tools/freetype/freetype/src/truetype/ttdriver.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttdriver.h (renamed from tools/freetype/freetype/src/truetype/ttdriver.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/tterrors.h (renamed from tools/freetype/freetype/src/truetype/tterrors.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttgload.c (renamed from tools/freetype/freetype/src/truetype/ttgload.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttgload.h (renamed from tools/freetype/freetype/src/truetype/ttgload.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttgxvar.c (renamed from tools/freetype/freetype/src/truetype/ttgxvar.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttgxvar.h (renamed from tools/freetype/freetype/src/truetype/ttgxvar.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttinterp.c (renamed from tools/freetype/freetype/src/truetype/ttinterp.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttinterp.h (renamed from tools/freetype/freetype/src/truetype/ttinterp.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttobjs.c (renamed from tools/freetype/freetype/src/truetype/ttobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttobjs.h (renamed from tools/freetype/freetype/src/truetype/ttobjs.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttpic.c (renamed from tools/freetype/freetype/src/truetype/ttpic.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttpic.h (renamed from tools/freetype/freetype/src/truetype/ttpic.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttpload.c (renamed from tools/freetype/freetype/src/truetype/ttpload.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttpload.h (renamed from tools/freetype/freetype/src/truetype/ttpload.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttsubpix.c (renamed from tools/freetype/freetype/src/truetype/ttsubpix.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttsubpix.h (renamed from tools/freetype/freetype/src/truetype/ttsubpix.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/Jamfile (renamed from tools/freetype/freetype/src/type1/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/type1/module.mk (renamed from tools/freetype/freetype/src/type1/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/type1/rules.mk (renamed from tools/freetype/freetype/src/type1/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1afm.c (renamed from tools/freetype/freetype/src/type1/t1afm.c)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1afm.h (renamed from tools/freetype/freetype/src/type1/t1afm.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1driver.c (renamed from tools/freetype/freetype/src/type1/t1driver.c)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1driver.h (renamed from tools/freetype/freetype/src/type1/t1driver.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1errors.h (renamed from tools/freetype/freetype/src/type1/t1errors.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1gload.c (renamed from tools/freetype/freetype/src/type1/t1gload.c)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1gload.h (renamed from tools/freetype/freetype/src/type1/t1gload.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1load.c (renamed from tools/freetype/freetype/src/type1/t1load.c)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1load.h (renamed from tools/freetype/freetype/src/type1/t1load.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1objs.c (renamed from tools/freetype/freetype/src/type1/t1objs.c)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1objs.h (renamed from tools/freetype/freetype/src/type1/t1objs.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1parse.c (renamed from tools/freetype/freetype/src/type1/t1parse.c)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1parse.h (renamed from tools/freetype/freetype/src/type1/t1parse.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1tokens.h (renamed from tools/freetype/freetype/src/type1/t1tokens.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/type1.c (renamed from tools/freetype/freetype/src/type1/type1.c)0
-rw-r--r--drivers/freetype/freetype/src/type42/Jamfile (renamed from tools/freetype/freetype/src/type42/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/type42/module.mk (renamed from tools/freetype/freetype/src/type42/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/type42/rules.mk (renamed from tools/freetype/freetype/src/type42/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42drivr.c (renamed from tools/freetype/freetype/src/type42/t42drivr.c)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42drivr.h (renamed from tools/freetype/freetype/src/type42/t42drivr.h)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42error.h (renamed from tools/freetype/freetype/src/type42/t42error.h)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42objs.c (renamed from tools/freetype/freetype/src/type42/t42objs.c)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42objs.h (renamed from tools/freetype/freetype/src/type42/t42objs.h)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42parse.c (renamed from tools/freetype/freetype/src/type42/t42parse.c)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42parse.h (renamed from tools/freetype/freetype/src/type42/t42parse.h)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42types.h (renamed from tools/freetype/freetype/src/type42/t42types.h)0
-rw-r--r--drivers/freetype/freetype/src/type42/type42.c (renamed from tools/freetype/freetype/src/type42/type42.c)0
-rw-r--r--drivers/freetype/freetype/src/winfonts/Jamfile (renamed from tools/freetype/freetype/src/winfonts/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/winfonts/fnterrs.h (renamed from tools/freetype/freetype/src/winfonts/fnterrs.h)0
-rw-r--r--drivers/freetype/freetype/src/winfonts/module.mk (renamed from tools/freetype/freetype/src/winfonts/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/winfonts/rules.mk (renamed from tools/freetype/freetype/src/winfonts/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/winfonts/winfnt.c (renamed from tools/freetype/freetype/src/winfonts/winfnt.c)0
-rw-r--r--drivers/freetype/freetype/src/winfonts/winfnt.h (renamed from tools/freetype/freetype/src/winfonts/winfnt.h)0
-rw-r--r--drivers/freetype/ft2build.h (renamed from tools/freetype/ft2build.h)0
-rw-r--r--drivers/gles2/rasterizer_gles2.cpp7
-rw-r--r--drivers/gles2/rasterizer_gles2.h2
-rw-r--r--drivers/register_driver_types.cpp3
-rw-r--r--modules/gdscript/gd_parser.cpp2
-rw-r--r--platform/osx/detect.py4
-rw-r--r--platform/osx/export/export.cpp9
-rw-r--r--platform/windows/detect.py9
-rw-r--r--platform/windows/os_windows.cpp28
-rw-r--r--platform/x11/detect.py4
-rw-r--r--scene/3d/mesh_instance.cpp87
-rw-r--r--scene/3d/mesh_instance.h5
-rw-r--r--scene/gui/text_edit.cpp96
-rw-r--r--scene/gui/text_edit.h13
-rw-r--r--scene/main/scene_main_loop.cpp10
-rw-r--r--scene/main/scene_main_loop.h1
-rw-r--r--scene/register_scene_types.cpp5
-rw-r--r--scene/resources/dynamic_font.cpp301
-rw-r--r--scene/resources/dynamic_font.h76
-rw-r--r--scene/resources/dynamic_font_stb.cpp527
-rw-r--r--scene/resources/dynamic_font_stb.h178
-rw-r--r--scene/resources/mesh.cpp5
-rw-r--r--scene/scene_string_names.cpp7
-rw-r--r--scene/scene_string_names.h6
-rw-r--r--servers/visual/rasterizer.h1
-rw-r--r--servers/visual/visual_server_raster.cpp33
-rw-r--r--servers/visual/visual_server_raster.h10
-rw-r--r--servers/visual/visual_server_wrap_mt.h2
-rw-r--r--servers/visual_server.h2
-rw-r--r--tools/SCsub107
-rw-r--r--tools/doc/doc_data.h3
-rw-r--r--tools/editor/code_editor.cpp494
-rw-r--r--tools/editor/code_editor.h72
-rw-r--r--tools/editor/create_dialog.cpp9
-rw-r--r--tools/editor/create_dialog.h1
-rw-r--r--tools/editor/dependency_editor.cpp8
-rw-r--r--tools/editor/editor_file_system.cpp69
-rw-r--r--tools/editor/editor_file_system.h8
-rw-r--r--tools/editor/editor_fonts.cpp57
-rw-r--r--tools/editor/editor_help.cpp56
-rw-r--r--tools/editor/editor_import_export.cpp31
-rw-r--r--tools/editor/editor_import_export.h3
-rw-r--r--tools/editor/editor_node.cpp74
-rw-r--r--tools/editor/editor_node.h5
-rw-r--r--tools/editor/editor_plugin_settings.cpp9
-rw-r--r--tools/editor/editor_profiler.cpp6
-rw-r--r--tools/editor/editor_resource_preview.cpp93
-rw-r--r--tools/editor/editor_resource_preview.h5
-rw-r--r--tools/editor/editor_settings.cpp96
-rw-r--r--tools/editor/editor_settings.h5
-rw-r--r--tools/editor/icons/SCsub4
-rw-r--r--tools/editor/icons/icon_dependency_changed.pngbin651 -> 649 bytes
-rw-r--r--tools/editor/icons/icon_dependency_ok.pngbin685 -> 707 bytes
-rw-r--r--tools/editor/io_plugins/editor_font_import_plugin.cpp23
-rw-r--r--tools/editor/io_plugins/editor_font_import_plugin.h1
-rw-r--r--tools/editor/io_plugins/editor_mesh_import_plugin.cpp23
-rw-r--r--tools/editor/io_plugins/editor_mesh_import_plugin.h1
-rw-r--r--tools/editor/io_plugins/editor_sample_import_plugin.cpp57
-rw-r--r--tools/editor/io_plugins/editor_sample_import_plugin.h3
-rw-r--r--tools/editor/io_plugins/editor_scene_import_plugin.cpp587
-rw-r--r--tools/editor/io_plugins/editor_scene_import_plugin.h18
-rw-r--r--tools/editor/io_plugins/editor_texture_import_plugin.cpp372
-rw-r--r--tools/editor/io_plugins/editor_texture_import_plugin.h14
-rw-r--r--tools/editor/io_plugins/editor_translation_import_plugin.cpp22
-rw-r--r--tools/editor/io_plugins/editor_translation_import_plugin.h1
-rw-r--r--tools/editor/plugins/animation_player_editor_plugin.cpp4
-rw-r--r--tools/editor/plugins/mesh_editor_plugin.cpp16
-rw-r--r--tools/editor/plugins/script_editor_plugin.cpp19
-rw-r--r--tools/editor/plugins/script_editor_plugin.h2
-rw-r--r--tools/editor/plugins/shader_editor_plugin.cpp19
-rw-r--r--tools/editor/plugins/shader_editor_plugin.h2
-rw-r--r--tools/editor/plugins/sprite_region_editor_plugin.cpp1
-rw-r--r--tools/editor/project_export.cpp2
-rw-r--r--tools/editor/project_manager.cpp2
-rw-r--r--tools/editor/project_settings.cpp4
-rw-r--r--tools/editor/property_editor.cpp35
-rw-r--r--tools/editor/property_editor.h2
-rw-r--r--tools/editor/scene_tree_dock.cpp5
-rw-r--r--tools/editor/scene_tree_dock.h1
-rw-r--r--tools/editor/scenes_dock.cpp166
-rw-r--r--tools/editor/scenes_dock.h4
-rw-r--r--tools/editor_fonts/droid_sans.ttfbin0 -> 6314324 bytes
-rw-r--r--tools/editor_fonts/source_code_pro.otfbin0 -> 140088 bytes
-rw-r--r--tools/translations/Makefile20
-rwxr-xr-xtools/translations/extract.py4
-rw-r--r--tools/translations/fr.po5794
-rw-r--r--tools/translations/tools.pot349
-rw-r--r--tools/translations/zh_CN.po5781
594 files changed, 18007 insertions, 1090 deletions
diff --git a/.gitignore b/.gitignore
index 65af0c69ee..ef17e13534 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,8 @@ tools/editor/register_exporters.cpp
tools/editor/doc_data_compressed.h
tools/editor/certs_compressed.h
tools/editor/editor_icons.cpp
+tools/editor/translations.h
+tools/editor/builtin_fonts.h
-fpic
.fscache
make.bat
@@ -147,6 +149,8 @@ ipch/
*.opensdf
*.sdf
*.cachefile
+*.VC.db
+*.VC.VC.opendb
# Visual Studio profiler
*.psess
diff --git a/README.md b/README.md
index fcf0c3ac6a..504a6a32a9 100644
--- a/README.md
+++ b/README.md
@@ -27,3 +27,4 @@ See docs for compilation instructions for every platform:
http://docs.godotengine.org/en/latest/reference/_compiling.html
[![Build Status](https://travis-ci.org/godotengine/godot.svg?branch=master)](https://travis-ci.org/godotengine/godot)
+[![Code Triagers Badge](http://www.codetriage.com/godotengine/godot/badges/users.svg)](http://www.codetriage.com/godotengine/godot)
diff --git a/SConstruct b/SConstruct
index 8a3a7c4565..5e821751f3 100644
--- a/SConstruct
+++ b/SConstruct
@@ -396,14 +396,25 @@ if selected_platform in platform_list:
AddToVSProject(env.servers_sources)
AddToVSProject(env.tool_sources)
+ # this env flag won't work, it needs to be set in env_base=Environment(MSVC_VERSION='9.0')
+ # Even then, SCons still seems to ignore it and builds with the latest MSVC...
+ # That said, it's not needed to be set so far but I'm leaving it here so that this comment
+ # has a purpose.
#env['MSVS_VERSION']='9.0'
- env['MSVSBUILDCOM'] = "scons platform=" + selected_platform + " target=" + env["target"] + " bits=" + env["bits"] + " tools=yes"
- env['MSVSREBUILDCOM'] = "scons platform=" + selected_platform + " target=" + env["target"] + " bits=" + env["bits"] + " tools=yes vsproj=true"
- env['MSVSCLEANCOM'] = "scons --clean platform=" + selected_platform + " target=" + env["target"] + " bits=" + env["bits"] + " tools=yes"
-
- debug_variants = ['Debug|Win32']+['Debug|x64']
- release_variants = ['Release|Win32']+['Release|x64']
- release_debug_variants = ['Release_Debug|Win32']+['Release_Debug|x64']
+
+
+ # Calls a CMD with /C(lose) and /V(delayed environment variable expansion) options.
+ # And runs vcvarsall bat for the propper arhitecture and scons for propper configuration
+ env['MSVSBUILDCOM'] = 'cmd /V /C set "plat=$(PlatformTarget)" ^& (if "$(PlatformTarget)"=="x64" (set "plat=x86_amd64")) ^& set "tools=yes" ^& (if "$(Configuration)"=="release" (set "tools=no")) ^& call "$(VCInstallDir)vcvarsall.bat" !plat! ^& scons platform=windows target=$(Configuration) tools=!tools! -j2'
+ env['MSVSREBUILDCOM'] = 'cmd /V /C set "plat=$(PlatformTarget)" ^& (if "$(PlatformTarget)"=="x64" (set "plat=x86_amd64")) ^& set "tools=yes" ^& (if "$(Configuration)"=="release" (set "tools=no")) & call "$(VCInstallDir)vcvarsall.bat" !plat! ^& scons platform=windows target=$(Configuration) tools=!tools! vsproj=yes -j2'
+ env['MSVSCLEANCOM'] = 'cmd /V /C set "plat=$(PlatformTarget)" ^& (if "$(PlatformTarget)"=="x64" (set "plat=x86_amd64")) ^& set "tools=yes" ^& (if "$(Configuration)"=="release" (set "tools=no")) ^& call "$(VCInstallDir)vcvarsall.bat" !plat! ^& scons --clean platform=windows target=$(Configuration) tools=!tools! -j2'
+
+ # This version information (Win32, x64, Debug, Release, Release_Debug seems to be
+ # required for Visual Studio to understand that it needs to generate an NMAKE
+ # project. Do not modify without knowing what you are doing.
+ debug_variants = ['debug|Win32']+['debug|x64']
+ release_variants = ['release|Win32']+['release|x64']
+ release_debug_variants = ['release_debug|Win32']+['release_debug|x64']
variants = debug_variants + release_variants + release_debug_variants
debug_targets = ['Debug']+['Debug']
release_targets = ['Release']+['Release']
diff --git a/core/hq2x.cpp b/core/hq2x.cpp
new file mode 100644
index 0000000000..6495c77b2a
--- /dev/null
+++ b/core/hq2x.cpp
@@ -0,0 +1,2636 @@
+/*
+ * Copyright 2016 Bruno Ribeiro
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "hq2x.h"
+#include "math_funcs.h"
+
+
+static const uint32_t AMASK = 0xFF000000;
+static const uint32_t YMASK = 0x00FF0000;
+static const uint32_t UMASK = 0x0000FF00;
+static const uint32_t VMASK = 0x000000FF;
+
+_FORCE_INLINE_ static uint32_t ARGBtoAYUV(
+ uint32_t value )
+{
+ uint32_t A, R, G, B, Y, U, V;
+//todo big endian check
+ A = value >> 24;
+ R = (value >> 16) & 0xFF;
+ G = (value >> 8) & 0xFF;
+ B = value & 0xFF;
+
+ Y = Math::fast_ftoi( 0.299 * R + 0.587 * G + 0.114 * B);
+ U = Math::fast_ftoi(-0.169 * R - 0.331 * G + 0.5 * B) + 128;
+ V = Math::fast_ftoi( 0.5 * R - 0.419 * G - 0.081 * B) + 128;
+ return (A << 24) + (Y << 16) + (U << 8) + V;
+}
+
+
+/*
+ * Use this function for sharper images (good for cartoon style, used by DOSBOX)
+ */
+
+_FORCE_INLINE_ static bool isDifferent(
+ uint32_t color1,
+ uint32_t color2,
+ uint32_t trY,
+ uint32_t trU,
+ uint32_t trV,
+ uint32_t trA )
+{
+ color1 = ARGBtoAYUV(color1);
+ color2 = ARGBtoAYUV(color2);
+
+ uint32_t value;
+
+ value = ((color1 & YMASK) - (color2 & YMASK));
+ value = (value ^ (value >> 31)) - (value >> 31);
+ if (value > trY) return true;
+
+ value = ((color1 & UMASK) - (color2 & UMASK));
+ value = (value ^ (value >> 31)) - (value >> 31);
+ if (value > trU) return true;
+
+ value = ((color1 & VMASK) - (color2 & VMASK));
+ value = (value ^ (value >> 31)) - (value >> 31);
+ if (value > trV) return true;
+
+ value = ((color1 & AMASK) - (color2 & AMASK));
+ value = (value ^ (value >> 31)) - (value >> 31);
+ if (value > trA) return true;
+
+ return false;
+
+}
+
+
+
+#define MASK_RB 0x00FF00FF
+#define MASK_G 0x0000FF00
+#define MASK_A 0xFF000000
+
+
+/**
+ * @brief Mixes two colors using the given weights.
+ */
+#define HQX_MIX_2(C0,C1,W0,W1) \
+ ((((C0 & MASK_RB) * W0 + (C1 & MASK_RB) * W1) / (W0 + W1)) & MASK_RB) | \
+ ((((C0 & MASK_G) * W0 + (C1 & MASK_G) * W1) / (W0 + W1)) & MASK_G) | \
+ (((((C0 & MASK_A) >> 8) * W0 + ((C1 & MASK_A) >> 8) * W1) / (W0 + W1)) << 8) & MASK_A
+
+/**
+ * @brief Mixes three colors using the given weights.
+ */
+#define HQX_MIX_3(C0,C1,C2,W0,W1,W2) \
+ ((((C0 & MASK_RB) * W0 + (C1 & MASK_RB) * W1 + (C2 & MASK_RB) * W2) / (W0 + W1 + W2)) & MASK_RB) | \
+ ((((C0 & MASK_G) * W0 + (C1 & MASK_G) * W1 + (C2 & MASK_G) * W2) / (W0 + W1 + W2)) & MASK_G) | \
+ (((((C0 & MASK_A) >> 8) * W0 + ((C1 & MASK_A) >> 8) * W1 + ((C2 & MASK_A) >> 8) * W2) / (W0 + W1 + W2)) << 8) & MASK_A
+
+
+#define MIX_00_4 *output = w[4];
+#define MIX_00_MIX_00_4_0_3_1 *output = HQX_MIX_2(w[4],w[0],3U,1U);
+#define MIX_00_4_3_3_1 *output = HQX_MIX_2(w[4],w[3],3U,1U);
+#define MIX_00_4_1_3_1 *output = HQX_MIX_2(w[4],w[1],3U,1U);
+#define MIX_00_3_1_1_1 *output = HQX_MIX_2(w[3],w[1],1U,1U);
+#define MIX_00_4_3_1_2_1_1 *output = HQX_MIX_3(w[4],w[3],w[1],2U,1U,1U);
+#define MIX_00_4_3_1_2_7_7 *output = HQX_MIX_3(w[4],w[3],w[1],2U,7U,7U);
+#define MIX_00_4_0_1_2_1_1 *output = HQX_MIX_3(w[4],w[0],w[1],2U,1U,1U);
+#define MIX_00_4_0_3_2_1_1 *output = HQX_MIX_3(w[4],w[0],w[3],2U,1U,1U);
+#define MIX_00_4_1_3_5_2_1 *output = HQX_MIX_3(w[4],w[1],w[3],5U,2U,1U);
+#define MIX_00_4_3_1_5_2_1 *output = HQX_MIX_3(w[4],w[3],w[1],5U,2U,1U);
+#define MIX_00_4_3_1_6_1_1 *output = HQX_MIX_3(w[4],w[3],w[1],6U,1U,1U);
+#define MIX_00_4_3_1_2_3_3 *output = HQX_MIX_3(w[4],w[3],w[1],2U,3U,3U);
+#define MIX_00_MIX_00_4_0_3_10 *output = HQX_MIX_3(w[4],w[3],w[1],14U,1U,1U);
+
+#define MIX_01_4 *(output + 1) = w[4];
+#define MIX_01_4_2_3_1 *(output + 1) = HQX_MIX_2(w[4],w[2],3U,1U);
+#define MIX_01_4_1_3_1 *(output + 1) = HQX_MIX_2(w[4],w[1],3U,1U);
+#define MIX_01_1_4_3_1 *(output + 1) = HQX_MIX_2(w[1],w[4],3U,1U);
+#define MIX_01_4_5_3_1 *(output + 1) = HQX_MIX_2(w[4],w[5],3U,1U);
+#define MIX_01_4_1_7_1 *(output + 1) = HQX_MIX_2(w[4],w[1],7U,1U);
+#define MIX_01_4_1_5_2_1_1 *(output + 1) = HQX_MIX_3(w[4],w[1],w[5],2U,1U,1U);
+#define MIX_01_4_2_5_2_1_1 *(output + 1) = HQX_MIX_3(w[4],w[2],w[5],2U,1U,1U);
+#define MIX_01_4_2_1_2_1_1 *(output + 1) = HQX_MIX_3(w[4],w[2],w[1],2U,1U,1U);
+#define MIX_01_4_5_1_5_2_1 *(output + 1) = HQX_MIX_3(w[4],w[5],w[1],5U,2U,1U);
+#define MIX_01_4_1_5_5_2_1 *(output + 1) = HQX_MIX_3(w[4],w[1],w[5],5U,2U,1U);
+#define MIX_01_4_1_5_6_1_1 *(output + 1) = HQX_MIX_3(w[4],w[1],w[5],6U,1U,1U);
+#define MIX_01_4_1_5_2_3_3 *(output + 1) = HQX_MIX_3(w[4],w[1],w[5],2U,3U,3U);
+#define MIX_01_4_2_3_10 *(output + 1) = HQX_MIX_3(w[4],w[1],w[5],14U,1U,1U);
+
+#define MIX_02_4 *(output + 2) = w[4];
+#define MIX_02_4_2_3_1 *(output + 2) = HQX_MIX_2(w[4],w[2],3U,1U);
+#define MIX_02_4_1_3_1 *(output + 2) = HQX_MIX_2(w[4],w[1],3U,1U);
+#define MIX_02_4_5_3_1 *(output + 2) = HQX_MIX_2(w[4],w[5],3U,1U);
+#define MIX_02_4_1_5_2_1_1 *(output + 2) = HQX_MIX_3(w[4],w[1],w[5],2U,1U,1U);
+#define MIX_02_4_1_5_2_7_7 *(output + 2) = HQX_MIX_3(w[4],w[1],w[5],2U,7U,7U);
+#define MIX_02_1_5_1_1 *(output + 2) = HQX_MIX_2(w[1],w[5],1U,1U);
+
+#define MIX_10_4 *(output + lineSize) = w[4];
+#define MIX_10_4_6_3_1 *(output + lineSize) = HQX_MIX_2(w[4],w[6],3U,1U);
+#define MIX_10_4_7_3_1 *(output + lineSize) = HQX_MIX_2(w[4],w[7],3U,1U);
+#define MIX_10_4_3_3_1 *(output + lineSize) = HQX_MIX_2(w[4],w[3],3U,1U);
+#define MIX_10_4_7_3_2_1_1 *(output + lineSize) = HQX_MIX_3(w[4],w[7],w[3],2U,1U,1U);
+#define MIX_10_4_6_3_2_1_1 *(output + lineSize) = HQX_MIX_3(w[4],w[6],w[3],2U,1U,1U);
+#define MIX_10_4_6_7_2_1_1 *(output + lineSize) = HQX_MIX_3(w[4],w[6],w[7],2U,1U,1U);
+#define MIX_10_4_3_7_5_2_1 *(output + lineSize) = HQX_MIX_3(w[4],w[3],w[7],5U,2U,1U);
+#define MIX_10_4_7_3_5_2_1 *(output + lineSize) = HQX_MIX_3(w[4],w[7],w[3],5U,2U,1U);
+#define MIX_10_4_7_3_6_1_1 *(output + lineSize) = HQX_MIX_3(w[4],w[7],w[3],6U,1U,1U);
+#define MIX_10_4_7_3_2_3_3 *(output + lineSize) = HQX_MIX_3(w[4],w[7],w[3],2U,3U,3U);
+#define MIX_10_4_6_3_10 *(output + lineSize) = HQX_MIX_3(w[4],w[7],w[3],14U,1U,1U);
+#define MIX_10_4_3_7_1 *(output + lineSize) = HQX_MIX_2(w[4],w[3],7U,1U);
+#define MIX_10_3_4_3_1 *(output + lineSize) = HQX_MIX_2(w[3],w[4],3U,1U);
+
+#define MIX_11_4 *(output + lineSize + 1) = w[4];
+#define MIX_11_4_8_3_1 *(output + lineSize + 1) = HQX_MIX_2(w[4],w[8],3U,1U);
+#define MIX_11_4_5_3_1 *(output + lineSize + 1) = HQX_MIX_2(w[4],w[5],3U,1U);
+#define MIX_11_4_7_3_1 *(output + lineSize + 1) = HQX_MIX_2(w[4],w[7],3U,1U);
+#define MIX_11_4_5_7_2_1_1 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[5],w[7],2U,1U,1U);
+#define MIX_11_4_8_7_2_1_1 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[8],w[7],2U,1U,1U);
+#define MIX_11_4_8_5_2_1_1 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[8],w[5],2U,1U,1U);
+#define MIX_11_4_7_5_5_2_1 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[7],w[5],5U,2U,1U);
+#define MIX_11_4_5_7_5_2_1 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[5],w[7],5U,2U,1U);
+#define MIX_11_4_5_7_6_1_1 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[5],w[7],6U,1U,1U);
+#define MIX_11_4_5_7_2_3_3 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[5],w[7],2U,3U,3U);
+#define MIX_11_4_8_3_10 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[5],w[7],14U,1U,1U);
+
+#define MIX_12_4 *(output + lineSize + 2) = w[4];
+#define MIX_12_4_5_3_1 *(output + lineSize + 2) = HQX_MIX_2(w[4],w[5],3U,1U);
+#define MIX_12_4_5_7_1 *(output + lineSize + 2) = HQX_MIX_2(w[4],w[5],7U,1U);
+#define MIX_12_5_4_3_1 *(output + lineSize + 2) = HQX_MIX_2(w[5],w[4],3U,1U);
+
+#define MIX_20_4 *(output + lineSize + lineSize) = w[4];
+#define MIX_20_4_6_3_1 *(output + lineSize + lineSize) = HQX_MIX_2(w[4],w[6],3U,1U);
+#define MIX_20_4_7_3_1 *(output + lineSize + lineSize) = HQX_MIX_2(w[4],w[7],3U,1U);
+#define MIX_20_4_3_3_1 *(output + lineSize + lineSize) = HQX_MIX_2(w[4],w[3],3U,1U);
+#define MIX_20_4_7_3_2_1_1 *(output + lineSize + lineSize) = HQX_MIX_3(w[4],w[7],w[3],2U,1U,1U);
+#define MIX_20_4_7_3_2_7_7 *(output + lineSize + lineSize) = HQX_MIX_3(w[4],w[7],w[3],2U,7U,7U);
+#define MIX_20_7_3_1_1 *(output + lineSize + lineSize) = HQX_MIX_2(w[7],w[3],1U,1U);
+
+#define MIX_21_4 *(output + lineSize + lineSize + 1) = w[4];
+#define MIX_21_4_7_3_1 *(output + lineSize + lineSize + 1) = HQX_MIX_2(w[4],w[7],3U,1U);
+#define MIX_21_4_7_7_1 *(output + lineSize + lineSize + 1) = HQX_MIX_2(w[4],w[7],7U,1U);
+#define MIX_21_7_4_3_1 *(output + lineSize + lineSize + 1) = HQX_MIX_2(w[7],w[4],3U,1U);
+
+#define MIX_22_4 *(output + lineSize + lineSize + 2) = w[4];
+#define MIX_22_4_8_3_1 *(output + lineSize + lineSize + 2) = HQX_MIX_2(w[4],w[8],3U,1U);
+#define MIX_22_4_7_3_1 *(output + lineSize + lineSize + 2) = HQX_MIX_2(w[4],w[7],3U,1U);
+#define MIX_22_4_5_3_1 *(output + lineSize + lineSize + 2) = HQX_MIX_2(w[4],w[5],3U,1U);
+#define MIX_22_4_5_7_2_1_1 *(output + lineSize + lineSize + 2) = HQX_MIX_3(w[4],w[5],w[7],2U,1U,1U);
+#define MIX_22_4_5_7_2_7_7 *(output + lineSize + lineSize + 2) = HQX_MIX_3(w[4],w[5],w[7],2U,7U,7U);
+#define MIX_22_5_7_1_1 *(output + lineSize + lineSize + 2) = HQX_MIX_2(w[5],w[7],1U,1U);
+
+
+
+uint32_t *hq2x_resize(
+ const uint32_t *image,
+ uint32_t width,
+ uint32_t height,
+ uint32_t *output,
+ uint32_t trY,
+ uint32_t trU,
+ uint32_t trV,
+ uint32_t trA,
+ bool wrapX,
+ bool wrapY )
+{
+ int lineSize = width * 2;
+
+ int previous, next;
+ uint32_t w[9];
+
+ trY <<= 16;
+ trU <<= 8;
+ trA <<= 24;
+
+ // iterates between the lines
+ for (uint32_t row = 0; row < height; row++)
+ {
+ /*
+ * Note: this function uses a 3x3 sliding window over the original image.
+ *
+ * +----+----+----+
+ * | | | |
+ * | w0 | w1 | w2 |
+ * +----+----+----+
+ * | | | |
+ * | w3 | w4 | w5 |
+ * +----+----+----+
+ * | | | |
+ * | w6 | w7 | w8 |
+ * +----+----+----+
+ */
+
+ // adjusts the previous and next line pointers
+ if (row > 0)
+ previous = -width;
+ else
+ {
+ if (wrapY)
+ previous = width * (height - 1);
+ else
+ previous = 0;
+ }
+ if (row < height - 1)
+ next = width;
+ else
+ {
+ if (wrapY)
+ next = -(width * (height - 1));
+ else
+ next = 0;
+ }
+
+ // iterates between the columns
+ for (uint32_t col = 0; col < width; col++)
+ {
+ w[1] = *(image + previous);
+ w[4] = *image;
+ w[7] = *(image + next);
+
+ if (col > 0)
+ {
+ w[0] = *(image + previous - 1);
+ w[3] = *(image - 1);
+ w[6] = *(image + next - 1);
+ }
+ else
+ {
+ if (wrapX)
+ {
+ w[0] = *(image + previous + width - 1);
+ w[3] = *(image + width - 1);
+ w[6] = *(image + next + width - 1);
+ }
+ else
+ {
+ w[0] = w[1];
+ w[3] = w[4];
+ w[6] = w[7];
+ }
+ }
+
+ if (col < width - 1)
+ {
+ w[2] = *(image + previous + 1);
+ w[5] = *(image + 1);
+ w[8] = *(image + next + 1);
+ }
+ else
+ {
+ if (wrapX)
+ {
+ w[2] = *(image + previous - width + 1);
+ w[5] = *(image - width + 1);
+ w[8] = *(image + next - width + 1);
+ }
+ else
+ {
+ w[2] = w[1];
+ w[5] = w[4];
+ w[8] = w[7];
+ }
+ }
+
+ int pattern = 0;
+
+ // computes the pattern to be used considering the neighbor pixels
+ for (int k = 0, flag = 1; k < 9; k++)
+ {
+ // ignores the central pixel
+ if (k == 4) continue;
+
+ if (w[k] != w[4])
+ if (isDifferent(w[4], w[k], trY, trU, trV, trA)) pattern |= flag;
+ flag <<= 1;
+ }
+
+ switch (pattern)
+ {
+ case 0:
+ case 1:
+ case 4:
+ case 32:
+ case 128:
+ case 5:
+ case 132:
+ case 160:
+ case 33:
+ case 129:
+ case 36:
+ case 133:
+ case 164:
+ case 161:
+ case 37:
+ case 165:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 2:
+ case 34:
+ case 130:
+ case 162:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 16:
+ case 17:
+ case 48:
+ case 49:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 64:
+ case 65:
+ case 68:
+ case 69:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 8:
+ case 12:
+ case 136:
+ case 140:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 3:
+ case 35:
+ case 131:
+ case 163:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 6:
+ case 38:
+ case 134:
+ case 166:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_5_3_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 20:
+ case 21:
+ case 52:
+ case 53:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 144:
+ case 145:
+ case 176:
+ case 177:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 192:
+ case 193:
+ case 196:
+ case 197:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_5_3_1
+ break;
+ case 96:
+ case 97:
+ case 100:
+ case 101:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 40:
+ case 44:
+ case 168:
+ case 172:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 9:
+ case 13:
+ case 137:
+ case 141:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 18:
+ case 50:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 80:
+ case 81:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 72:
+ case 76:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 10:
+ case 138:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 66:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 24:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 7:
+ case 39:
+ case 135:
+ MIX_00_4_3_3_1
+ MIX_01_4_5_3_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 148:
+ case 149:
+ case 180:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 224:
+ case 228:
+ case 225:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 41:
+ case 169:
+ case 45:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 22:
+ case 54:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 208:
+ case 209:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 104:
+ case 108:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 11:
+ case 139:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 19:
+ case 51:
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_00_4_3_3_1
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_00_4_1_3_5_2_1
+ MIX_01_4_1_5_2_3_3
+ }
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 146:
+ case 178:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ MIX_11_4_7_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_2_3_3
+ MIX_11_4_5_7_5_2_1
+ }
+ MIX_10_4_7_3_2_1_1
+ break;
+ case 84:
+ case 85:
+ MIX_00_4_3_1_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_01_4_1_3_1
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_01_4_5_1_5_2_1
+ MIX_11_4_5_7_2_3_3
+ }
+ MIX_10_4_6_3_2_1_1
+ break;
+ case 112:
+ case 113:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_10_4_3_3_1
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_5_2_1
+ MIX_11_4_5_7_2_3_3
+ }
+ break;
+ case 200:
+ case 204:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ MIX_11_4_5_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_2_3_3
+ MIX_11_4_7_5_5_2_1
+ }
+ break;
+ case 73:
+ case 77:
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_00_4_1_3_1
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_5_2_1
+ MIX_10_4_7_3_2_3_3
+ }
+ MIX_01_4_1_5_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 42:
+ case 170:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ MIX_10_4_7_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_3_3
+ MIX_10_4_3_7_5_2_1
+ }
+ MIX_01_4_2_5_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 14:
+ case 142:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ MIX_01_4_5_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_3_3
+ MIX_01_4_1_5_5_2_1
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 67:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 70:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_5_3_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 28:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 152:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 194:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_5_3_1
+ break;
+ case 98:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 56:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 25:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 26:
+ case 31:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 82:
+ case 214:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 88:
+ case 248:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 74:
+ case 107:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 27:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_3_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 86:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_8_3_1
+ break;
+ case 216:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 106:
+ MIX_00_MIX_00_4_0_3_1
+ MIX_01_4_2_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 30:
+ MIX_00_MIX_00_4_0_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 210:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_2_3_1
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 120:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_3_1
+ break;
+ case 75:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_3_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 29:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_3_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 198:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_5_3_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_5_3_1
+ break;
+ case 184:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 99:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 57:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 71:
+ MIX_00_4_3_3_1
+ MIX_01_4_5_3_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 156:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 226:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 60:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 195:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_5_3_1
+ break;
+ case 102:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_5_3_1
+ MIX_10_4_3_3_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 153:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 58:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 83:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 92:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 202:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 78:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 154:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 114:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 89:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 90:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 55:
+ case 23:
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_00_4_3_3_1
+ MIX_01_4
+ }
+ else
+ {
+ MIX_00_4_1_3_5_2_1
+ MIX_01_4_1_5_2_3_3
+ }
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 182:
+ case 150:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ MIX_11_4_7_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_2_3_3
+ MIX_11_4_5_7_5_2_1
+ }
+ MIX_10_4_7_3_2_1_1
+ break;
+ case 213:
+ case 212:
+ MIX_00_4_3_1_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_01_4_1_3_1
+ MIX_11_4
+ }
+ else
+ {
+ MIX_01_4_5_1_5_2_1
+ MIX_11_4_5_7_2_3_3
+ }
+ MIX_10_4_6_3_2_1_1
+ break;
+ case 241:
+ case 240:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_10_4_3_3_1
+ MIX_11_4
+ }
+ else
+ {
+ MIX_10_4_7_3_5_2_1
+ MIX_11_4_5_7_2_3_3
+ }
+ break;
+ case 236:
+ case 232:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ MIX_11_4_5_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_2_3_3
+ MIX_11_4_7_5_5_2_1
+ }
+ break;
+ case 109:
+ case 105:
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_00_4_1_3_1
+ MIX_10_4
+ }
+ else
+ {
+ MIX_00_4_3_1_5_2_1
+ MIX_10_4_7_3_2_3_3
+ }
+ MIX_01_4_1_5_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 171:
+ case 43:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ MIX_10_4_7_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_3_3
+ MIX_10_4_3_7_5_2_1
+ }
+ MIX_01_4_2_5_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 143:
+ case 15:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ MIX_01_4_5_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_3_3
+ MIX_01_4_1_5_5_2_1
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 124:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_3_1
+ break;
+ case 203:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 62:
+ MIX_00_MIX_00_4_0_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 211:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_3_1
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 118:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_3_3_1
+ MIX_11_4_8_3_1
+ break;
+ case 217:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 110:
+ MIX_00_MIX_00_4_0_3_1
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 155:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_3_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 188:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 185:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 61:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 157:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_3_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 103:
+ MIX_00_4_3_3_1
+ MIX_01_4_5_3_1
+ MIX_10_4_3_3_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 227:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 230:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_5_3_1
+ MIX_10_4_3_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 199:
+ MIX_00_4_3_3_1
+ MIX_01_4_5_3_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_5_3_1
+ break;
+ case 220:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 158:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 234:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 242:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 59:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 121:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 87:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 79:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 122:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 94:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 218:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 91:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 229:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 167:
+ MIX_00_4_3_3_1
+ MIX_01_4_5_3_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 173:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 181:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 186:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_7_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 115:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 93:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 206:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 205:
+ case 201:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 174:
+ case 46:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ MIX_01_4_5_3_1
+ MIX_10_4_7_3_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 179:
+ case 147:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 117:
+ case 116:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 189:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 231:
+ MIX_00_4_3_3_1
+ MIX_01_4_5_3_1
+ MIX_10_4_3_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 126:
+ MIX_00_MIX_00_4_0_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_3_1
+ break;
+ case 219:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_3_1
+ MIX_10_4_6_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 125:
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_00_4_1_3_1
+ MIX_10_4
+ }
+ else
+ {
+ MIX_00_4_3_1_5_2_1
+ MIX_10_4_7_3_2_3_3
+ }
+ MIX_01_4_1_3_1
+ MIX_11_4_8_3_1
+ break;
+ case 221:
+ MIX_00_4_1_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_01_4_1_3_1
+ MIX_11_4
+ }
+ else
+ {
+ MIX_01_4_5_1_5_2_1
+ MIX_11_4_5_7_2_3_3
+ }
+ MIX_10_4_6_3_1
+ break;
+ case 207:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ MIX_01_4_5_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_3_3
+ MIX_01_4_1_5_5_2_1
+ }
+ MIX_10_4_6_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 238:
+ MIX_00_MIX_00_4_0_3_1
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ MIX_11_4_5_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_2_3_3
+ MIX_11_4_7_5_5_2_1
+ }
+ break;
+ case 190:
+ MIX_00_MIX_00_4_0_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ MIX_11_4_7_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_2_3_3
+ MIX_11_4_5_7_5_2_1
+ }
+ MIX_10_4_7_3_1
+ break;
+ case 187:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ MIX_10_4_7_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_3_3
+ MIX_10_4_3_7_5_2_1
+ }
+ MIX_01_4_2_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 243:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_10_4_3_3_1
+ MIX_11_4
+ }
+ else
+ {
+ MIX_10_4_7_3_5_2_1
+ MIX_11_4_5_7_2_3_3
+ }
+ break;
+ case 119:
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_00_4_3_3_1
+ MIX_01_4
+ }
+ else
+ {
+ MIX_00_4_1_3_5_2_1
+ MIX_01_4_1_5_2_3_3
+ }
+ MIX_10_4_3_3_1
+ MIX_11_4_8_3_1
+ break;
+ case 237:
+ case 233:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_6_3_10
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 175:
+ case 47:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_MIX_00_4_0_3_10
+ }
+ MIX_01_4_5_3_1
+ MIX_10_4_7_3_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 183:
+ case 151:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_2_3_10
+ }
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 245:
+ case 244:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_8_3_10
+ }
+ break;
+ case 250:
+ MIX_00_MIX_00_4_0_3_1
+ MIX_01_4_2_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 123:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_3_1
+ break;
+ case 95:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_3_1
+ MIX_11_4_8_3_1
+ break;
+ case 222:
+ MIX_00_MIX_00_4_0_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 252:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_8_3_10
+ }
+ break;
+ case 249:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_6_3_10
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 235:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_6_3_10
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 111:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_MIX_00_4_0_3_10
+ }
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 63:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_MIX_00_4_0_3_10
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 159:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_2_3_10
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 215:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_2_3_10
+ }
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 246:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_8_3_10
+ }
+ break;
+ case 254:
+ MIX_00_MIX_00_4_0_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_8_3_10
+ }
+ break;
+ case 253:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_6_3_10
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_8_3_10
+ }
+ break;
+ case 251:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_6_3_10
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 239:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_MIX_00_4_0_3_10
+ }
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_6_3_10
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 127:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_MIX_00_4_0_3_10
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_3_1
+ break;
+ case 191:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_MIX_00_4_0_3_10
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_2_3_10
+ }
+ MIX_10_4_7_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 223:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_2_3_10
+ }
+ MIX_10_4_6_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 247:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_2_3_10
+ }
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_8_3_10
+ }
+ break;
+ case 255:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ MIX_00_4
+ else
+ MIX_00_MIX_00_4_0_3_10
+
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ MIX_01_4
+ else
+ MIX_01_4_2_3_10
+
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ MIX_10_4
+ else
+ MIX_10_4_6_3_10
+
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ MIX_11_4
+ else
+ MIX_11_4_8_3_10
+ break;
+ }
+ image++;
+ output += 2;
+ }
+ output += lineSize;
+ }
+
+ return output;
+}
diff --git a/core/hq2x.h b/core/hq2x.h
new file mode 100644
index 0000000000..8f119d2a01
--- /dev/null
+++ b/core/hq2x.h
@@ -0,0 +1,19 @@
+#ifndef HQ2X_H
+#define HQ2X_H
+
+#include "typedefs.h"
+
+
+uint32_t *hq2x_resize(
+ const uint32_t *image,
+ uint32_t width,
+ uint32_t height,
+ uint32_t *output,
+ uint32_t trY = 0x30,
+ uint32_t trU = 0x07,
+ uint32_t trV = 0x06,
+ uint32_t trA = 0x50,
+ bool wrapX = false,
+ bool wrapY = false );
+
+#endif // HQ2X_H
diff --git a/core/image.cpp b/core/image.cpp
index 8635aa1b29..57496683ef 100644
--- a/core/image.cpp
+++ b/core/image.cpp
@@ -30,7 +30,7 @@
#include "hash_map.h"
#include "core/io/image_loader.h"
#include "core/os/copymem.h"
-
+#include "hq2x.h"
#include "print_string.h"
#include <stdio.h>
@@ -901,6 +901,44 @@ static void _generate_po2_mipmap(const uint8_t* p_src, uint8_t* p_dst, uint32_t
}
+void Image::expand_x2_hq2x() {
+
+ ERR_FAIL_COND(format>=FORMAT_INDEXED);
+
+ Format current = format;
+ bool mipmaps=get_mipmaps();
+ if (mipmaps) {
+ clear_mipmaps();
+ }
+
+ if (current!=FORMAT_RGBA)
+ convert(FORMAT_RGBA);
+
+ DVector<uint8_t> dest;
+ dest.resize(width*2*height*2*4);
+
+ {
+ DVector<uint8_t>::Read r = data.read();
+ DVector<uint8_t>::Write w = dest.write();
+
+ hq2x_resize((const uint32_t*)r.ptr(),width,height,(uint32_t*)w.ptr());
+
+ }
+
+ width*=2;
+ height*=2;
+ data=dest;
+
+
+ if (current!=FORMAT_RGBA)
+ convert(current);
+
+ if (mipmaps) {
+ generate_mipmaps();
+ }
+
+}
+
void Image::shrink_x2() {
ERR_FAIL_COND(format==FORMAT_INDEXED || format==FORMAT_INDEXED_ALPHA);
diff --git a/core/image.h b/core/image.h
index 35bbd1a684..0f0b345eb9 100644
--- a/core/image.h
+++ b/core/image.h
@@ -250,6 +250,7 @@ public:
void resize( int p_width, int p_height, Interpolation p_interpolation=INTERPOLATE_BILINEAR );
Image resized( int p_width, int p_height, int p_interpolation=INTERPOLATE_BILINEAR );
void shrink_x2();
+ void expand_x2_hq2x();
/**
* Crop the image to a specific size, if larger, then the image is filled by black
*/
diff --git a/core/io/file_access_memory.cpp b/core/io/file_access_memory.cpp
index 2cc52a9e2d..7db3499505 100644
--- a/core/io/file_access_memory.cpp
+++ b/core/io/file_access_memory.cpp
@@ -135,7 +135,7 @@ size_t FileAccessMemory::get_len() const {
bool FileAccessMemory::eof_reached() const {
- return pos >= length;
+ return pos > length;
}
uint8_t FileAccessMemory::get_8() const {
diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp
index abb1082256..b547dc0e85 100644
--- a/core/io/resource_loader.cpp
+++ b/core/io/resource_loader.cpp
@@ -243,6 +243,7 @@ Ref<ResourceImportMetadata> ResourceLoader::load_import_metadata(const String &p
break;
}
+
return ret;
}
diff --git a/core/io/translation_loader_po.cpp b/core/io/translation_loader_po.cpp
index fe101a8676..4ddb276a27 100644
--- a/core/io/translation_loader_po.cpp
+++ b/core/io/translation_loader_po.cpp
@@ -30,13 +30,8 @@
#include "os/file_access.h"
#include "translation.h"
-RES TranslationLoaderPO::load(const String &p_path, const String& p_original_path, Error *r_error) {
- if (r_error)
- *r_error=ERR_CANT_OPEN;
-
- FileAccess *f=FileAccess::open(p_path,FileAccess::READ);
- ERR_FAIL_COND_V(!f,RES());
+RES TranslationLoaderPO::load_translation(FileAccess *f, Error *r_error, const String &p_path) {
String l = f->get_line();
@@ -52,6 +47,8 @@ RES TranslationLoaderPO::load(const String &p_path, const String& p_original_pat
String msg_id;
String msg_str;
String config;
+ int msg_line=0;
+
if (r_error)
*r_error=ERR_FILE_CORRUPT;
@@ -87,7 +84,7 @@ RES TranslationLoaderPO::load(const String &p_path, const String& p_original_pat
if (status==STATUS_READING_ID) {
memdelete(f);
- ERR_EXPLAIN(p_path+":"+itos(line)+" nexpected 'msgid', was expecting 'msgstr' while parsing: ");
+ ERR_EXPLAIN(p_path+":"+itos(line)+" Unexpected 'msgid', was expecting 'msgstr' while parsing: ");
ERR_FAIL_V(RES());
}
@@ -100,6 +97,7 @@ RES TranslationLoaderPO::load(const String &p_path, const String& p_original_pat
status=STATUS_READING_ID;
msg_id="";
msg_str="";
+ msg_line=line;
}
if (l.begins_with("msgstr")) {
@@ -113,6 +111,7 @@ RES TranslationLoaderPO::load(const String &p_path, const String& p_original_pat
l=l.substr(6,l.length()).strip_edges();
status=STATUS_READING_STRING;
+ msg_line=line;
}
if (l=="" || l.begins_with("#")) {
@@ -183,6 +182,18 @@ RES TranslationLoaderPO::load(const String &p_path, const String& p_original_pat
*r_error=OK;
return translation;
+}
+
+RES TranslationLoaderPO::load(const String &p_path, const String& p_original_path, Error *r_error) {
+
+ if (r_error)
+ *r_error=ERR_CANT_OPEN;
+
+ FileAccess *f=FileAccess::open(p_path,FileAccess::READ);
+ ERR_FAIL_COND_V(!f,RES());
+
+
+ return load_translation(f,r_error);
}
diff --git a/core/io/translation_loader_po.h b/core/io/translation_loader_po.h
index a569674d80..b0c4e42682 100644
--- a/core/io/translation_loader_po.h
+++ b/core/io/translation_loader_po.h
@@ -30,10 +30,12 @@
#define TRANSLATION_LOADER_PO_H
#include "io/resource_loader.h"
-
+#include "translation.h"
+#include "os/file_access.h"
class TranslationLoaderPO : public ResourceFormatLoader {
public:
+ static RES load_translation(FileAccess *f, Error *r_error,const String& p_path=String());
virtual RES load(const String &p_path,const String& p_original_path="",Error *r_error=NULL);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
virtual bool handles_type(const String& p_type) const;
diff --git a/core/object.cpp b/core/object.cpp
index 3cfc0329bc..d7878fd623 100644
--- a/core/object.cpp
+++ b/core/object.cpp
@@ -1756,6 +1756,7 @@ bool Object::is_queued_for_deletion() const {
void Object::set_edited(bool p_edited) {
_edited=p_edited;
+ _edited_version++;
}
bool Object::is_edited() const {
@@ -1763,6 +1764,11 @@ bool Object::is_edited() const {
return _edited;
}
+
+uint32_t Object::get_edited_version() const {
+
+ return _edited_version;
+}
#endif
Object::Object() {
@@ -1778,6 +1784,7 @@ Object::Object() {
#ifdef TOOLS_ENABLED
_edited=false;
+ _edited_version=0;
#endif
#ifdef DEBUG_ENABLED
diff --git a/core/object.h b/core/object.h
index 3945d1d0ba..f4a2472e88 100644
--- a/core/object.h
+++ b/core/object.h
@@ -85,6 +85,7 @@ enum PropertyUsageFlags {
PROPERTY_USAGE_STORE_IF_NONZERO=512, //only store if nonzero
PROPERTY_USAGE_STORE_IF_NONONE=1024, //only store if false
PROPERTY_USAGE_NO_INSTANCE_STATE=2048,
+ PROPERTY_USAGE_RESTART_IF_CHANGED=4096,
PROPERTY_USAGE_DEFAULT=PROPERTY_USAGE_STORAGE|PROPERTY_USAGE_EDITOR|PROPERTY_USAGE_NETWORK,
PROPERTY_USAGE_DEFAULT_INTL=PROPERTY_USAGE_STORAGE|PROPERTY_USAGE_EDITOR|PROPERTY_USAGE_NETWORK|PROPERTY_USAGE_INTERNATIONALIZED,
@@ -388,6 +389,7 @@ friend void postinitialize_handler(Object*);
bool _can_translate;
#ifdef TOOLS_ENABLED
bool _edited;
+ uint32_t _edited_version;
#endif
ScriptInstance *script_instance;
RefPtr script;
@@ -589,6 +591,7 @@ public:
#ifdef TOOLS_ENABLED
void set_edited(bool p_edited);
bool is_edited() const;
+ uint32_t get_edited_version() const; //this function is used to check when something changed beyond a point, it's used mainly for generating previews
#endif
void set_script_instance(ScriptInstance *p_instance);
diff --git a/core/os/main_loop.cpp b/core/os/main_loop.cpp
index 310bbaa3b8..e5feebfbfc 100644
--- a/core/os/main_loop.cpp
+++ b/core/os/main_loop.cpp
@@ -43,6 +43,7 @@ void MainLoop::_bind_methods() {
BIND_VMETHOD( MethodInfo("_initialize") );
BIND_VMETHOD( MethodInfo("_iteration",PropertyInfo(Variant::REAL,"delta")) );
BIND_VMETHOD( MethodInfo("_idle",PropertyInfo(Variant::REAL,"delta")) );
+ BIND_VMETHOD( MethodInfo("_drop_files",PropertyInfo(Variant::STRING_ARRAY,"files"),PropertyInfo(Variant::INT,"screen")) );
BIND_VMETHOD( MethodInfo("_finalize") );
BIND_CONSTANT(NOTIFICATION_WM_MOUSE_ENTER);
@@ -108,6 +109,15 @@ bool MainLoop::idle(float p_time) {
return false;
}
+
+void MainLoop::drop_files(const Vector<String>& p_files,int p_from_screen) {
+
+
+ if (get_script_instance())
+ get_script_instance()->call("_drop_files",p_files,p_from_screen);
+
+}
+
void MainLoop::finish() {
if (get_script_instance()) {
diff --git a/core/os/main_loop.h b/core/os/main_loop.h
index a34014983e..57185d9d3d 100644
--- a/core/os/main_loop.h
+++ b/core/os/main_loop.h
@@ -64,6 +64,8 @@ public:
virtual bool idle(float p_time);
virtual void finish();
+ virtual void drop_files(const Vector<String>& p_files,int p_from_screen=0);
+
void set_init_script(const Ref<Script>& p_init_script);
MainLoop();
diff --git a/core/os/memory.h b/core/os/memory.h
index 8257e66851..5f4c6f929c 100644
--- a/core/os/memory.h
+++ b/core/os/memory.h
@@ -211,7 +211,7 @@ void * operator new(size_t p_size,void *p_pointer,size_t check, const char *p_de
#ifdef DEBUG_MEMORY_ENABLED
-#define memalloc(m_size) Memory::alloc_static(m_size, __FILE__":"__STR(__LINE__)", memalloc.")
+#define memalloc(m_size) Memory::alloc_static(m_size, __FILE__ ":" __STR(__LINE__) ", memalloc.")
#define memrealloc(m_mem,m_size) Memory::realloc_static(m_mem,m_size)
#define memfree(m_size) Memory::free_static(m_size)
@@ -224,8 +224,7 @@ void * operator new(size_t p_size,void *p_pointer,size_t check, const char *p_de
#endif
#ifdef DEBUG_MEMORY_ENABLED
-
-#define dynalloc(m_size) Memory::alloc_dynamic(m_size, __FILE__":"__STR(__LINE__)", type: DYNAMIC")
+#define dynalloc(m_size) Memory::alloc_dynamic(m_size, __FILE__ ":" __STR(__LINE__) ", type: DYNAMIC")
#define dynrealloc(m_mem,m_size) m_mem.resize(m_size)
#else
@@ -248,7 +247,7 @@ _ALWAYS_INLINE_ T *_post_initialize(T *p_obj) {
#ifdef DEBUG_MEMORY_ENABLED
-#define memnew(m_class) _post_initialize(new(__FILE__":"__STR(__LINE__)", memnew type: "__STR(m_class)) m_class)
+#define memnew(m_class) _post_initialize(new(__FILE__ ":" __STR(__LINE__) ", memnew type: " __STR(m_class)) m_class)
#else
@@ -291,7 +290,7 @@ void memdelete_allocator(T *p_class) {
#define memdelete_notnull(m_v) { if (m_v) memdelete(m_v); }
#ifdef DEBUG_MEMORY_ENABLED
-#define memnew_arr( m_class, m_count ) memnew_arr_template<m_class>(m_count,__FILE__":"__STR(__LINE__)", memnew_arr type: "_STR(m_class))
+#define memnew_arr( m_class, m_count ) memnew_arr_template<m_class>(m_count,__FILE__ ":" __STR(__LINE__) ", memnew_arr type: " _STR(m_class))
#else
diff --git a/core/resource.cpp b/core/resource.cpp
index 672e64b1bb..b7a5bad4b8 100644
--- a/core/resource.cpp
+++ b/core/resource.cpp
@@ -330,6 +330,31 @@ Ref<ResourceImportMetadata> Resource::get_import_metadata() const {
}
+#ifdef TOOLS_ENABLED
+
+uint32_t Resource::hash_edited_version() const {
+
+ uint32_t hash = hash_djb2_one_32(get_edited_version());
+
+ List<PropertyInfo> plist;
+ get_property_list(&plist);
+
+ for (List<PropertyInfo>::Element *E=plist.front();E;E=E->next()) {
+
+ if (E->get().type==Variant::OBJECT && E->get().hint==PROPERTY_HINT_RESOURCE_TYPE) {
+ RES res = get(E->get().name);
+ if (res.is_valid()) {
+ hash = hash_djb2_one_32(res->hash_edited_version(),hash);
+ }
+ }
+ }
+
+ return hash;
+
+}
+
+#endif
+
Resource::Resource() {
@@ -341,6 +366,8 @@ Resource::Resource() {
}
+
+
Resource::~Resource() {
if (path_cache!="")
diff --git a/core/resource.h b/core/resource.h
index 8bcdd6b4b7..958414f62b 100644
--- a/core/resource.h
+++ b/core/resource.h
@@ -142,8 +142,12 @@ public:
Ref<ResourceImportMetadata> get_import_metadata() const;
+
+
#ifdef TOOLS_ENABLED
+ uint32_t hash_edited_version() const;
+
virtual void set_last_modified_time(uint64_t p_time) { last_modified_time=p_time; }
uint64_t get_last_modified_time() const { return last_modified_time; }
diff --git a/core/translation.cpp b/core/translation.cpp
index 85e207e08d..ee0ef2ea09 100644
--- a/core/translation.cpp
+++ b/core/translation.cpp
@@ -672,9 +672,11 @@ void TranslationServer::set_tool_translation(const Ref<Translation>& p_translati
StringName TranslationServer::tool_translate(const StringName& p_message) const {
if (tool_translation.is_valid()) {
- StringName r = tool_translation->tr(p_message);
- if (r)
+ StringName r = tool_translation->get_message(p_message);
+
+ if (r) {
return r;
+ }
}
return p_message;
diff --git a/doc/base/classes.xml b/doc/base/classes.xml
index 81adb78e53..561d62649d 100644
--- a/doc/base/classes.xml
+++ b/doc/base/classes.xml
@@ -5123,41 +5123,50 @@
</class>
<class name="BackBufferCopy" inherits="Node2D" category="Core">
<brief_description>
+ Copies a region of the screen (or the whole screen) to a buffer so it can be accessed with the texscreen() shader instruction.
</brief_description>
<description>
+ Node for back-buffering the currently displayed screen. The region defined in the BackBufferCopy node is bufferized with the content of the screen it covers, or the entire screen according to the copy mode set. Accessing this buffer is done with the texscreen() shader instruction.
</description>
<methods>
<method name="set_rect">
<argument index="0" name="rect" type="Rect2">
</argument>
<description>
+ Defines the area covered by the BackBufferCopy.
</description>
</method>
<method name="get_rect" qualifiers="const">
<return type="Rect2">
</return>
<description>
+ Return the area covered by the BackBufferCopy.
</description>
</method>
<method name="set_copy_mode">
<argument index="0" name="copy_mode" type="int">
</argument>
<description>
+ Set the copy mode of the BackBufferCopy (refer to constants section).
</description>
</method>
<method name="get_copy_mode" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the copy mode currently applied to the BackBufferCopy (refer to constants section).
</description>
</method>
</methods>
<constants>
<constant name="COPY_MODE_DISABLED" value="0">
+ Disables the buffering mode. This means the BackBufferCopy node will directly use the portion of screen it covers.
</constant>
<constant name="COPY_MODE_RECT" value="1">
+ Sets the copy mode to a region.
</constant>
<constant name="COPY_MODE_VIEWPORT" value="2">
+ Sets the copy mode to the entire screen.
</constant>
</constants>
</class>
@@ -17742,266 +17751,314 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
</class>
<class name="Light2D" inherits="Node2D" category="Core">
<brief_description>
+ Node that casts light in a 2D environment.
</brief_description>
<description>
+ Node that casts light in a 2D environment. Light is defined by a (usually grayscale) texture, a color, an energy value, a mode (see constants), and various other parameters (range and shadows-related). Note that Light2D can be used as a mask.
</description>
<methods>
<method name="set_enabled">
<argument index="0" name="enabled" type="bool">
</argument>
<description>
+ Switches the Light2D on or off, depending on the 'enabled' parameter.
</description>
</method>
<method name="is_enabled" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return true if the Light2D is enabled, false if it is not.
</description>
</method>
<method name="set_texture">
<argument index="0" name="texture" type="Object">
</argument>
<description>
+ Set the texture of the Light2D.
</description>
</method>
<method name="get_texture" qualifiers="const">
<return type="Object">
</return>
<description>
+ Return the texture of the Light2D.
</description>
</method>
<method name="set_texture_offset">
<argument index="0" name="texture_offset" type="Vector2">
</argument>
<description>
+ Set the offset of the light texture.
</description>
</method>
<method name="get_texture_offset" qualifiers="const">
<return type="Vector2">
</return>
<description>
+ Return the offset of the light texture.
</description>
</method>
<method name="set_color">
<argument index="0" name="color" type="Color">
</argument>
<description>
+ Set the color of the Light2D.
</description>
</method>
<method name="get_color" qualifiers="const">
<return type="Color">
</return>
<description>
+ Return the color of the Light2D.
</description>
</method>
<method name="set_height">
<argument index="0" name="height" type="float">
</argument>
<description>
+ Set the height of the Light2D. Used with 2D normalmapping.
</description>
</method>
<method name="get_height" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the height of the Light2D. Used with 2D normalmapping.
</description>
</method>
<method name="set_energy">
<argument index="0" name="energy" type="float">
</argument>
<description>
+ Set the energy value of the Light2D. The bigger the value, the stronger the light.
</description>
</method>
<method name="get_energy" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the energy value of the Light2D.
</description>
</method>
<method name="set_texture_scale">
<argument index="0" name="texture_scale" type="float">
</argument>
<description>
+ Set the scale value of the light texture.
</description>
</method>
<method name="get_texture_scale" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the scale value of the light texture.
</description>
</method>
<method name="set_z_range_min">
<argument index="0" name="z" type="int">
</argument>
<description>
+ Set the minimum Z value that objects of the scene have to be in order to be affected by the Light2D.
</description>
</method>
<method name="get_z_range_min" qualifiers="const">
<return type="int">
</return>
<description>
+ Get the minimum Z value that objects of the scene have to be in order to be affected by the Light2D.
</description>
</method>
<method name="set_z_range_max">
<argument index="0" name="z" type="int">
</argument>
<description>
+ Set the maximum Z value that objects of the scene can be in order to be affected by the Light2D.
</description>
</method>
<method name="get_z_range_max" qualifiers="const">
<return type="int">
</return>
<description>
+ Get the maximum Z value that objects of the scene can be in order to be affected by the Light2D.
</description>
</method>
<method name="set_layer_range_min">
<argument index="0" name="layer" type="int">
</argument>
<description>
+ Set the minimum layer value of objects of the scene that are affected by the Light2D.
</description>
</method>
<method name="get_layer_range_min" qualifiers="const">
<return type="int">
</return>
<description>
+ Get the minimum layer value of objects of the scene that are affected by the Light2D.
</description>
</method>
<method name="set_layer_range_max">
<argument index="0" name="layer" type="int">
</argument>
<description>
+ Set the maximum layer value of objects of the scene that are affected by the Light2D.
</description>
</method>
<method name="get_layer_range_max" qualifiers="const">
<return type="int">
</return>
<description>
+ Set the maximum layer value of objects of the scene that are affected by the Light2D.
</description>
</method>
<method name="set_item_mask">
<argument index="0" name="item_mask" type="int">
</argument>
<description>
+ Set the item mask of the Light2D to 'item_mask' value.
</description>
</method>
<method name="get_item_mask" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the item mask of the Light2D.
</description>
</method>
<method name="set_item_shadow_mask">
<argument index="0" name="item_shadow_mask" type="int">
</argument>
<description>
+ Set the item shadow mask to 'item_shadow_mask' value.
</description>
</method>
<method name="get_item_shadow_mask" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the item shadow mask of the Light2D.
</description>
</method>
<method name="set_mode">
<argument index="0" name="mode" type="int">
</argument>
<description>
+ Set the behaviour mode of the Light2D. Use constants defined in the constants section.
</description>
</method>
<method name="get_mode" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the current mode set to the Light2D.
</description>
</method>
<method name="set_shadow_enabled">
<argument index="0" name="enabled" type="bool">
</argument>
<description>
+ Enable or disable shadows casting from this Light2D according to the 'enabled' parameter.
</description>
</method>
<method name="is_shadow_enabled" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return true if shadow casting is enabled for this Light2D, else return false.
</description>
</method>
<method name="set_shadow_buffer_size">
<argument index="0" name="size" type="int">
</argument>
<description>
+ Set the shadow buffer size.
</description>
</method>
<method name="get_shadow_buffer_size" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the shadow buffer size.
</description>
</method>
<method name="set_shadow_esm_multiplier">
<argument index="0" name="multiplier" type="float">
</argument>
<description>
+ Set the Exponential Shadow Multiplier (ESM) value of the Light2D.
</description>
</method>
<method name="get_shadow_esm_multiplier" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the Exponential Shadow Multiplier (ESM) value of the Light2D.
</description>
</method>
<method name="set_shadow_color">
<argument index="0" name="shadow_color" type="Color">
</argument>
<description>
+ Set the color of casted shadows for this Light2D.
</description>
</method>
<method name="get_shadow_color" qualifiers="const">
<return type="Color">
</return>
<description>
+ Return the color of casted shadows for this Light2D.
</description>
</method>
</methods>
<constants>
<constant name="MODE_ADD" value="0">
+ Adds the value of pixels corresponding to the Light2D to the values of pixels under it. This is the common behaviour of a light.
</constant>
<constant name="MODE_SUB" value="1">
+ Substract the value of pixels corresponding to the Light2D to the values of pixels under it, resulting in inversed light effect.
</constant>
<constant name="MODE_MIX" value="2">
+ Mix the value of pixels corresponding to the Light2D to the values of pixels under it by linear interpolation.
</constant>
<constant name="MODE_MASK" value="3">
+ The light texture of the Light2D is used as a mask, hiding or revealing parts of the screen underneath depending on the value of each pixel of the light (mask) texture.
</constant>
</constants>
</class>
<class name="LightOccluder2D" inherits="Node2D" category="Core">
<brief_description>
+ Occludes light cast by a Light2D, thus casting shadows.
</brief_description>
<description>
+ Occludes light cast by a Light2D, thus casting shadows. The LightOccluder2D must be provided with a shape (see OccluderPolygon2D) that allows the shadow to be computed. This shape affects the resulting shadow, while the shape of the representating asset shadowed does not actually affect shadows.
</description>
<methods>
<method name="set_occluder_polygon">
<argument index="0" name="polygon" type="OccluderPolygon2D">
</argument>
<description>
+ Set the OccluderPolygon2D that defines the LightOccluder2D.
</description>
</method>
<method name="get_occluder_polygon" qualifiers="const">
<return type="OccluderPolygon2D">
</return>
<description>
+ Return the OccluderPolygon2D that defines the LightOccluder2D.
</description>
</method>
<method name="set_occluder_light_mask">
<argument index="0" name="mask" type="int">
</argument>
<description>
+ Set the LightOccluder2D light mask. The LightOccluder2D will cast shadows only from Light2Ds that belong to the same light mask(s).
</description>
</method>
<method name="get_occluder_light_mask" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the light mask of the LightOccluder2D.
</description>
</method>
</methods>
diff --git a/drivers/SCsub b/drivers/SCsub
index 7337482628..79cbe50685 100644
--- a/drivers/SCsub
+++ b/drivers/SCsub
@@ -59,6 +59,8 @@ if (env['musepack']=='yes'):
SConscript("mpc/SCsub");
if (env["squish"]=="yes" and env["tools"]=="yes"):
SConscript("squish/SCsub");
+if (env["freetype"]!="no"):
+ SConscript("freetype/SCsub");
num = 0
cur_base = ""
diff --git a/drivers/freetype/FTL.TXT b/drivers/freetype/FTL.TXT
new file mode 100644
index 0000000000..433ab060e3
--- /dev/null
+++ b/drivers/freetype/FTL.TXT
@@ -0,0 +1,169 @@
+ The FreeType Project LICENSE
+ ----------------------------
+
+ 2006-Jan-27
+
+ Copyright 1996-2002, 2006 by
+ David Turner, Robert Wilhelm, and Werner Lemberg
+
+
+
+Introduction
+============
+
+ The FreeType Project is distributed in several archive packages;
+ some of them may contain, in addition to the FreeType font engine,
+ various tools and contributions which rely on, or relate to, the
+ FreeType Project.
+
+ This license applies to all files found in such packages, and
+ which do not fall under their own explicit license. The license
+ affects thus the FreeType font engine, the test programs,
+ documentation and makefiles, at the very least.
+
+ This license was inspired by the BSD, Artistic, and IJG
+ (Independent JPEG Group) licenses, which all encourage inclusion
+ and use of free software in commercial and freeware products
+ alike. As a consequence, its main points are that:
+
+ o We don't promise that this software works. However, we will be
+ interested in any kind of bug reports. (`as is' distribution)
+
+ o You can use this software for whatever you want, in parts or
+ full form, without having to pay us. (`royalty-free' usage)
+
+ o You may not pretend that you wrote this software. If you use
+ it, or only parts of it, in a program, you must acknowledge
+ somewhere in your documentation that you have used the
+ FreeType code. (`credits')
+
+ We specifically permit and encourage the inclusion of this
+ software, with or without modifications, in commercial products.
+ We disclaim all warranties covering The FreeType Project and
+ assume no liability related to The FreeType Project.
+
+
+ Finally, many people asked us for a preferred form for a
+ credit/disclaimer to use in compliance with this license. We thus
+ encourage you to use the following text:
+
+ """
+ Portions of this software are copyright © <year> The FreeType
+ Project (www.freetype.org). All rights reserved.
+ """
+
+ Please replace <year> with the value from the FreeType version you
+ actually use.
+
+
+Legal Terms
+===========
+
+0. Definitions
+--------------
+
+ Throughout this license, the terms `package', `FreeType Project',
+ and `FreeType archive' refer to the set of files originally
+ distributed by the authors (David Turner, Robert Wilhelm, and
+ Werner Lemberg) as the `FreeType Project', be they named as alpha,
+ beta or final release.
+
+ `You' refers to the licensee, or person using the project, where
+ `using' is a generic term including compiling the project's source
+ code as well as linking it to form a `program' or `executable'.
+ This program is referred to as `a program using the FreeType
+ engine'.
+
+ This license applies to all files distributed in the original
+ FreeType Project, including all source code, binaries and
+ documentation, unless otherwise stated in the file in its
+ original, unmodified form as distributed in the original archive.
+ If you are unsure whether or not a particular file is covered by
+ this license, you must contact us to verify this.
+
+ The FreeType Project is copyright (C) 1996-2000 by David Turner,
+ Robert Wilhelm, and Werner Lemberg. All rights reserved except as
+ specified below.
+
+1. No Warranty
+--------------
+
+ THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
+ USE, OF THE FREETYPE PROJECT.
+
+2. Redistribution
+-----------------
+
+ This license grants a worldwide, royalty-free, perpetual and
+ irrevocable right and license to use, execute, perform, compile,
+ display, copy, create derivative works of, distribute and
+ sublicense the FreeType Project (in both source and object code
+ forms) and derivative works thereof for any purpose; and to
+ authorize others to exercise some or all of the rights granted
+ herein, subject to the following conditions:
+
+ o Redistribution of source code must retain this license file
+ (`FTL.TXT') unaltered; any additions, deletions or changes to
+ the original files must be clearly indicated in accompanying
+ documentation. The copyright notices of the unaltered,
+ original files must be preserved in all copies of source
+ files.
+
+ o Redistribution in binary form must provide a disclaimer that
+ states that the software is based in part of the work of the
+ FreeType Team, in the distribution documentation. We also
+ encourage you to put an URL to the FreeType web page in your
+ documentation, though this isn't mandatory.
+
+ These conditions apply to any software derived from or based on
+ the FreeType Project, not just the unmodified files. If you use
+ our work, you must acknowledge us. However, no fee need be paid
+ to us.
+
+3. Advertising
+--------------
+
+ Neither the FreeType authors and contributors nor you shall use
+ the name of the other for commercial, advertising, or promotional
+ purposes without specific prior written permission.
+
+ We suggest, but do not require, that you use one or more of the
+ following phrases to refer to this software in your documentation
+ or advertising materials: `FreeType Project', `FreeType Engine',
+ `FreeType library', or `FreeType Distribution'.
+
+ As you have not signed this license, you are not required to
+ accept it. However, as the FreeType Project is copyrighted
+ material, only this license, or another one contracted with the
+ authors, grants you the right to use, distribute, and modify it.
+ Therefore, by using, distributing, or modifying the FreeType
+ Project, you indicate that you understand and accept all the terms
+ of this license.
+
+4. Contacts
+-----------
+
+ There are two mailing lists related to FreeType:
+
+ o freetype@nongnu.org
+
+ Discusses general use and applications of FreeType, as well as
+ future and wanted additions to the library and distribution.
+ If you are looking for support, start in this list if you
+ haven't found anything to help you in the documentation.
+
+ o freetype-devel@nongnu.org
+
+ Discusses bugs, as well as engine internals, design issues,
+ specific licenses, porting, etc.
+
+ Our home page can be found at
+
+ http://www.freetype.org
+
+
+--- end of FTL.TXT ---
diff --git a/drivers/freetype/LICENSE.TXT b/drivers/freetype/LICENSE.TXT
new file mode 100644
index 0000000000..af5a1c50f6
--- /dev/null
+++ b/drivers/freetype/LICENSE.TXT
@@ -0,0 +1,39 @@
+
+The FreeType 2 font engine is copyrighted work and cannot be used
+legally without a software license. In order to make this project
+usable to a vast majority of developers, we distribute it under two
+mutually exclusive open-source licenses.
+
+This means that *you* must choose *one* of the two licenses described
+below, then obey all its terms and conditions when using FreeType 2 in
+any of your projects or products.
+
+ - The FreeType License, found in the file `FTL.TXT', which is similar
+ to the original BSD license *with* an advertising clause that forces
+ you to explicitly cite the FreeType project in your product's
+ documentation. All details are in the license file. This license
+ is suited to products which don't use the GNU General Public
+ License.
+
+ Note that this license is compatible to the GNU General Public
+ License version 3, but not version 2.
+
+ - The GNU General Public License version 2, found in `GPLv2.TXT' (any
+ later version can be used also), for programs which already use the
+ GPL. Note that the FTL is incompatible with GPLv2 due to its
+ advertisement clause.
+
+The contributed BDF and PCF drivers come with a license similar to that
+of the X Window System. It is compatible to the above two licenses (see
+file src/bdf/README and src/pcf/README). The same holds for the files
+`fthash.c' and `fthash.h'; their code was part of the BDF driver in
+earlier FreeType versions.
+
+The gzip module uses the zlib license (see src/gzip/zlib.h) which too is
+compatible to the above two licenses.
+
+The MD5 checksum support (only used for debugging in development builds)
+is in the public domain.
+
+
+--- end of LICENSE.TXT ---
diff --git a/tools/freetype/SCsub b/drivers/freetype/SCsub
index 65b4827f9c..75e872a06f 100644
--- a/tools/freetype/SCsub
+++ b/drivers/freetype/SCsub
@@ -66,4 +66,6 @@ if (env["freetype"]=="builtin"):
# lib = env.Library("freetype_builtin",ft_sources)
# env.Prepend(LIBS=[lib])
+
+
Export('env')
diff --git a/tools/freetype/freetype/include/freetype/config/ftconfig.h b/drivers/freetype/freetype/include/freetype/config/ftconfig.h
index 5dce30ef3e..5dce30ef3e 100644
--- a/tools/freetype/freetype/include/freetype/config/ftconfig.h
+++ b/drivers/freetype/freetype/include/freetype/config/ftconfig.h
diff --git a/tools/freetype/freetype/include/freetype/config/ftheader.h b/drivers/freetype/freetype/include/freetype/config/ftheader.h
index 8371a31611..8371a31611 100644
--- a/tools/freetype/freetype/include/freetype/config/ftheader.h
+++ b/drivers/freetype/freetype/include/freetype/config/ftheader.h
diff --git a/tools/freetype/freetype/include/freetype/config/ftmodule.h b/drivers/freetype/freetype/include/freetype/config/ftmodule.h
index 76d271a74b..76d271a74b 100644
--- a/tools/freetype/freetype/include/freetype/config/ftmodule.h
+++ b/drivers/freetype/freetype/include/freetype/config/ftmodule.h
diff --git a/tools/freetype/freetype/include/freetype/config/ftoption.h b/drivers/freetype/freetype/include/freetype/config/ftoption.h
index d162780665..d162780665 100644
--- a/tools/freetype/freetype/include/freetype/config/ftoption.h
+++ b/drivers/freetype/freetype/include/freetype/config/ftoption.h
diff --git a/tools/freetype/freetype/include/freetype/config/ftstdlib.h b/drivers/freetype/freetype/include/freetype/config/ftstdlib.h
index b940efc427..b940efc427 100644
--- a/tools/freetype/freetype/include/freetype/config/ftstdlib.h
+++ b/drivers/freetype/freetype/include/freetype/config/ftstdlib.h
diff --git a/tools/freetype/freetype/include/freetype/freetype.h b/drivers/freetype/freetype/include/freetype/freetype.h
index fe46d22978..fe46d22978 100644
--- a/tools/freetype/freetype/include/freetype/freetype.h
+++ b/drivers/freetype/freetype/include/freetype/freetype.h
diff --git a/tools/freetype/freetype/include/freetype/ftadvanc.h b/drivers/freetype/freetype/include/freetype/ftadvanc.h
index 012b74b812..012b74b812 100644
--- a/tools/freetype/freetype/include/freetype/ftadvanc.h
+++ b/drivers/freetype/freetype/include/freetype/ftadvanc.h
diff --git a/tools/freetype/freetype/include/freetype/ftautoh.h b/drivers/freetype/freetype/include/freetype/ftautoh.h
index 5e1153a1c1..5e1153a1c1 100644
--- a/tools/freetype/freetype/include/freetype/ftautoh.h
+++ b/drivers/freetype/freetype/include/freetype/ftautoh.h
diff --git a/tools/freetype/freetype/include/freetype/ftbbox.h b/drivers/freetype/freetype/include/freetype/ftbbox.h
index 976691956f..976691956f 100644
--- a/tools/freetype/freetype/include/freetype/ftbbox.h
+++ b/drivers/freetype/freetype/include/freetype/ftbbox.h
diff --git a/tools/freetype/freetype/include/freetype/ftbdf.h b/drivers/freetype/freetype/include/freetype/ftbdf.h
index 4f8baf8401..4f8baf8401 100644
--- a/tools/freetype/freetype/include/freetype/ftbdf.h
+++ b/drivers/freetype/freetype/include/freetype/ftbdf.h
diff --git a/tools/freetype/freetype/include/freetype/ftbitmap.h b/drivers/freetype/freetype/include/freetype/ftbitmap.h
index 7dbf5ba3fe..7dbf5ba3fe 100644
--- a/tools/freetype/freetype/include/freetype/ftbitmap.h
+++ b/drivers/freetype/freetype/include/freetype/ftbitmap.h
diff --git a/tools/freetype/freetype/include/freetype/ftbzip2.h b/drivers/freetype/freetype/include/freetype/ftbzip2.h
index 1bf81b15e8..1bf81b15e8 100644
--- a/tools/freetype/freetype/include/freetype/ftbzip2.h
+++ b/drivers/freetype/freetype/include/freetype/ftbzip2.h
diff --git a/tools/freetype/freetype/include/freetype/ftcache.h b/drivers/freetype/freetype/include/freetype/ftcache.h
index 4ec9587cf6..4ec9587cf6 100644
--- a/tools/freetype/freetype/include/freetype/ftcache.h
+++ b/drivers/freetype/freetype/include/freetype/ftcache.h
diff --git a/tools/freetype/freetype/include/freetype/ftcffdrv.h b/drivers/freetype/freetype/include/freetype/ftcffdrv.h
index ccbcbccaa8..ccbcbccaa8 100644
--- a/tools/freetype/freetype/include/freetype/ftcffdrv.h
+++ b/drivers/freetype/freetype/include/freetype/ftcffdrv.h
diff --git a/tools/freetype/freetype/include/freetype/ftchapters.h b/drivers/freetype/freetype/include/freetype/ftchapters.h
index c55670d1d2..c55670d1d2 100644
--- a/tools/freetype/freetype/include/freetype/ftchapters.h
+++ b/drivers/freetype/freetype/include/freetype/ftchapters.h
diff --git a/tools/freetype/freetype/include/freetype/ftcid.h b/drivers/freetype/freetype/include/freetype/ftcid.h
index 203a30caf8..203a30caf8 100644
--- a/tools/freetype/freetype/include/freetype/ftcid.h
+++ b/drivers/freetype/freetype/include/freetype/ftcid.h
diff --git a/tools/freetype/freetype/include/freetype/fterrdef.h b/drivers/freetype/freetype/include/freetype/fterrdef.h
index 76c7b9e36f..76c7b9e36f 100644
--- a/tools/freetype/freetype/include/freetype/fterrdef.h
+++ b/drivers/freetype/freetype/include/freetype/fterrdef.h
diff --git a/tools/freetype/freetype/include/freetype/fterrors.h b/drivers/freetype/freetype/include/freetype/fterrors.h
index 0fa3e4dce1..0fa3e4dce1 100644
--- a/tools/freetype/freetype/include/freetype/fterrors.h
+++ b/drivers/freetype/freetype/include/freetype/fterrors.h
diff --git a/tools/freetype/freetype/include/freetype/ftgasp.h b/drivers/freetype/freetype/include/freetype/ftgasp.h
index 453d4fa42c..453d4fa42c 100644
--- a/tools/freetype/freetype/include/freetype/ftgasp.h
+++ b/drivers/freetype/freetype/include/freetype/ftgasp.h
diff --git a/tools/freetype/freetype/include/freetype/ftglyph.h b/drivers/freetype/freetype/include/freetype/ftglyph.h
index 31dc33187d..31dc33187d 100644
--- a/tools/freetype/freetype/include/freetype/ftglyph.h
+++ b/drivers/freetype/freetype/include/freetype/ftglyph.h
diff --git a/tools/freetype/freetype/include/freetype/ftgxval.h b/drivers/freetype/freetype/include/freetype/ftgxval.h
index 497015c101..497015c101 100644
--- a/tools/freetype/freetype/include/freetype/ftgxval.h
+++ b/drivers/freetype/freetype/include/freetype/ftgxval.h
diff --git a/tools/freetype/freetype/include/freetype/ftgzip.h b/drivers/freetype/freetype/include/freetype/ftgzip.h
index acbc4f0327..acbc4f0327 100644
--- a/tools/freetype/freetype/include/freetype/ftgzip.h
+++ b/drivers/freetype/freetype/include/freetype/ftgzip.h
diff --git a/tools/freetype/freetype/include/freetype/ftimage.h b/drivers/freetype/freetype/include/freetype/ftimage.h
index 3b826b1d32..3b826b1d32 100644
--- a/tools/freetype/freetype/include/freetype/ftimage.h
+++ b/drivers/freetype/freetype/include/freetype/ftimage.h
diff --git a/tools/freetype/freetype/include/freetype/ftincrem.h b/drivers/freetype/freetype/include/freetype/ftincrem.h
index aaf689ff16..aaf689ff16 100644
--- a/tools/freetype/freetype/include/freetype/ftincrem.h
+++ b/drivers/freetype/freetype/include/freetype/ftincrem.h
diff --git a/tools/freetype/freetype/include/freetype/ftlcdfil.h b/drivers/freetype/freetype/include/freetype/ftlcdfil.h
index 8b253f118b..8b253f118b 100644
--- a/tools/freetype/freetype/include/freetype/ftlcdfil.h
+++ b/drivers/freetype/freetype/include/freetype/ftlcdfil.h
diff --git a/tools/freetype/freetype/include/freetype/ftlist.h b/drivers/freetype/freetype/include/freetype/ftlist.h
index bb6f7f119d..bb6f7f119d 100644
--- a/tools/freetype/freetype/include/freetype/ftlist.h
+++ b/drivers/freetype/freetype/include/freetype/ftlist.h
diff --git a/tools/freetype/freetype/include/freetype/ftlzw.h b/drivers/freetype/freetype/include/freetype/ftlzw.h
index 00d40169a7..00d40169a7 100644
--- a/tools/freetype/freetype/include/freetype/ftlzw.h
+++ b/drivers/freetype/freetype/include/freetype/ftlzw.h
diff --git a/tools/freetype/freetype/include/freetype/ftmac.h b/drivers/freetype/freetype/include/freetype/ftmac.h
index ab5bab5170..ab5bab5170 100644
--- a/tools/freetype/freetype/include/freetype/ftmac.h
+++ b/drivers/freetype/freetype/include/freetype/ftmac.h
diff --git a/tools/freetype/freetype/include/freetype/ftmm.h b/drivers/freetype/freetype/include/freetype/ftmm.h
index 3aefb9e4f2..3aefb9e4f2 100644
--- a/tools/freetype/freetype/include/freetype/ftmm.h
+++ b/drivers/freetype/freetype/include/freetype/ftmm.h
diff --git a/tools/freetype/freetype/include/freetype/ftmodapi.h b/drivers/freetype/freetype/include/freetype/ftmodapi.h
index 8abffb558f..8abffb558f 100644
--- a/tools/freetype/freetype/include/freetype/ftmodapi.h
+++ b/drivers/freetype/freetype/include/freetype/ftmodapi.h
diff --git a/tools/freetype/freetype/include/freetype/ftmoderr.h b/drivers/freetype/freetype/include/freetype/ftmoderr.h
index 5a27db151a..5a27db151a 100644
--- a/tools/freetype/freetype/include/freetype/ftmoderr.h
+++ b/drivers/freetype/freetype/include/freetype/ftmoderr.h
diff --git a/tools/freetype/freetype/include/freetype/ftotval.h b/drivers/freetype/freetype/include/freetype/ftotval.h
index 027f2e8865..027f2e8865 100644
--- a/tools/freetype/freetype/include/freetype/ftotval.h
+++ b/drivers/freetype/freetype/include/freetype/ftotval.h
diff --git a/tools/freetype/freetype/include/freetype/ftoutln.h b/drivers/freetype/freetype/include/freetype/ftoutln.h
index fd69f28292..fd69f28292 100644
--- a/tools/freetype/freetype/include/freetype/ftoutln.h
+++ b/drivers/freetype/freetype/include/freetype/ftoutln.h
diff --git a/tools/freetype/freetype/include/freetype/ftpfr.h b/drivers/freetype/freetype/include/freetype/ftpfr.h
index 0b7b7d427c..0b7b7d427c 100644
--- a/tools/freetype/freetype/include/freetype/ftpfr.h
+++ b/drivers/freetype/freetype/include/freetype/ftpfr.h
diff --git a/tools/freetype/freetype/include/freetype/ftrender.h b/drivers/freetype/freetype/include/freetype/ftrender.h
index dd0229b815..dd0229b815 100644
--- a/tools/freetype/freetype/include/freetype/ftrender.h
+++ b/drivers/freetype/freetype/include/freetype/ftrender.h
diff --git a/tools/freetype/freetype/include/freetype/ftsizes.h b/drivers/freetype/freetype/include/freetype/ftsizes.h
index 3e548cc39f..3e548cc39f 100644
--- a/tools/freetype/freetype/include/freetype/ftsizes.h
+++ b/drivers/freetype/freetype/include/freetype/ftsizes.h
diff --git a/tools/freetype/freetype/include/freetype/ftsnames.h b/drivers/freetype/freetype/include/freetype/ftsnames.h
index 485e4e162e..485e4e162e 100644
--- a/tools/freetype/freetype/include/freetype/ftsnames.h
+++ b/drivers/freetype/freetype/include/freetype/ftsnames.h
diff --git a/tools/freetype/freetype/include/freetype/ftstroke.h b/drivers/freetype/freetype/include/freetype/ftstroke.h
index a498e4a883..a498e4a883 100644
--- a/tools/freetype/freetype/include/freetype/ftstroke.h
+++ b/drivers/freetype/freetype/include/freetype/ftstroke.h
diff --git a/tools/freetype/freetype/include/freetype/ftsynth.h b/drivers/freetype/freetype/include/freetype/ftsynth.h
index 2074503cf6..2074503cf6 100644
--- a/tools/freetype/freetype/include/freetype/ftsynth.h
+++ b/drivers/freetype/freetype/include/freetype/ftsynth.h
diff --git a/tools/freetype/freetype/include/freetype/ftsystem.h b/drivers/freetype/freetype/include/freetype/ftsystem.h
index e07460c55d..e07460c55d 100644
--- a/tools/freetype/freetype/include/freetype/ftsystem.h
+++ b/drivers/freetype/freetype/include/freetype/ftsystem.h
diff --git a/tools/freetype/freetype/include/freetype/fttrigon.h b/drivers/freetype/freetype/include/freetype/fttrigon.h
index 65143cb8c8..65143cb8c8 100644
--- a/tools/freetype/freetype/include/freetype/fttrigon.h
+++ b/drivers/freetype/freetype/include/freetype/fttrigon.h
diff --git a/tools/freetype/freetype/include/freetype/ftttdrv.h b/drivers/freetype/freetype/include/freetype/ftttdrv.h
index d5d3f1ccc1..d5d3f1ccc1 100644
--- a/tools/freetype/freetype/include/freetype/ftttdrv.h
+++ b/drivers/freetype/freetype/include/freetype/ftttdrv.h
diff --git a/tools/freetype/freetype/include/freetype/fttypes.h b/drivers/freetype/freetype/include/freetype/fttypes.h
index 027e59ce11..027e59ce11 100644
--- a/tools/freetype/freetype/include/freetype/fttypes.h
+++ b/drivers/freetype/freetype/include/freetype/fttypes.h
diff --git a/tools/freetype/freetype/include/freetype/ftwinfnt.h b/drivers/freetype/freetype/include/freetype/ftwinfnt.h
index ea33353536..ea33353536 100644
--- a/tools/freetype/freetype/include/freetype/ftwinfnt.h
+++ b/drivers/freetype/freetype/include/freetype/ftwinfnt.h
diff --git a/tools/freetype/freetype/include/freetype/ftxf86.h b/drivers/freetype/freetype/include/freetype/ftxf86.h
index 8c68afdcc5..8c68afdcc5 100644
--- a/tools/freetype/freetype/include/freetype/ftxf86.h
+++ b/drivers/freetype/freetype/include/freetype/ftxf86.h
diff --git a/tools/freetype/freetype/include/freetype/internal/autohint.h b/drivers/freetype/freetype/include/freetype/internal/autohint.h
index 545de938c2..545de938c2 100644
--- a/tools/freetype/freetype/include/freetype/internal/autohint.h
+++ b/drivers/freetype/freetype/include/freetype/internal/autohint.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftcalc.h b/drivers/freetype/freetype/include/freetype/internal/ftcalc.h
index faac3a3867..faac3a3867 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftcalc.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftcalc.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftdebug.h b/drivers/freetype/freetype/include/freetype/internal/ftdebug.h
index 58a3916d7e..58a3916d7e 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftdebug.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftdebug.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftdriver.h b/drivers/freetype/freetype/include/freetype/internal/ftdriver.h
index 940218e62d..940218e62d 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftdriver.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftdriver.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftgloadr.h b/drivers/freetype/freetype/include/freetype/internal/ftgloadr.h
index ce4dc6c9cc..ce4dc6c9cc 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftgloadr.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftgloadr.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftmemory.h b/drivers/freetype/freetype/include/freetype/internal/ftmemory.h
index 3d51aeec69..3d51aeec69 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftmemory.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftmemory.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftobjs.h b/drivers/freetype/freetype/include/freetype/internal/ftobjs.h
index 701c850eb7..701c850eb7 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftobjs.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftobjs.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftpic.h b/drivers/freetype/freetype/include/freetype/internal/ftpic.h
index 485ce7a24e..485ce7a24e 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftpic.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftpic.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftrfork.h b/drivers/freetype/freetype/include/freetype/internal/ftrfork.h
index 6307f2d0c5..6307f2d0c5 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftrfork.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftrfork.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftserv.h b/drivers/freetype/freetype/include/freetype/internal/ftserv.h
index cd5fbd0fac..cd5fbd0fac 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftserv.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftserv.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftstream.h b/drivers/freetype/freetype/include/freetype/internal/ftstream.h
index 2661858320..2661858320 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftstream.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftstream.h
diff --git a/tools/freetype/freetype/include/freetype/internal/fttrace.h b/drivers/freetype/freetype/include/freetype/internal/fttrace.h
index a9d98b60aa..a9d98b60aa 100644
--- a/tools/freetype/freetype/include/freetype/internal/fttrace.h
+++ b/drivers/freetype/freetype/include/freetype/internal/fttrace.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftvalid.h b/drivers/freetype/freetype/include/freetype/internal/ftvalid.h
index 12ad03685a..12ad03685a 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftvalid.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftvalid.h
diff --git a/tools/freetype/freetype/include/freetype/internal/internal.h b/drivers/freetype/freetype/include/freetype/internal/internal.h
index 262afcfa8a..262afcfa8a 100644
--- a/tools/freetype/freetype/include/freetype/internal/internal.h
+++ b/drivers/freetype/freetype/include/freetype/internal/internal.h
diff --git a/tools/freetype/freetype/include/freetype/internal/psaux.h b/drivers/freetype/freetype/include/freetype/internal/psaux.h
index e903114f84..e903114f84 100644
--- a/tools/freetype/freetype/include/freetype/internal/psaux.h
+++ b/drivers/freetype/freetype/include/freetype/internal/psaux.h
diff --git a/tools/freetype/freetype/include/freetype/internal/pshints.h b/drivers/freetype/freetype/include/freetype/internal/pshints.h
index 3fb18dc2d5..3fb18dc2d5 100644
--- a/tools/freetype/freetype/include/freetype/internal/pshints.h
+++ b/drivers/freetype/freetype/include/freetype/internal/pshints.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svbdf.h b/drivers/freetype/freetype/include/freetype/internal/services/svbdf.h
index 0974752a79..0974752a79 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svbdf.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svbdf.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svcid.h b/drivers/freetype/freetype/include/freetype/internal/services/svcid.h
index 6be3f9374d..6be3f9374d 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svcid.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svcid.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svgldict.h b/drivers/freetype/freetype/include/freetype/internal/services/svgldict.h
index 1d12534725..1d12534725 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svgldict.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svgldict.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svgxval.h b/drivers/freetype/freetype/include/freetype/internal/services/svgxval.h
index 2cdab50655..2cdab50655 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svgxval.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svgxval.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svkern.h b/drivers/freetype/freetype/include/freetype/internal/services/svkern.h
index 1488adf493..1488adf493 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svkern.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svkern.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svmm.h b/drivers/freetype/freetype/include/freetype/internal/services/svmm.h
index b08a663d66..b08a663d66 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svmm.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svmm.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svotval.h b/drivers/freetype/freetype/include/freetype/internal/services/svotval.h
index 970bbd5759..970bbd5759 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svotval.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svotval.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svpfr.h b/drivers/freetype/freetype/include/freetype/internal/services/svpfr.h
index 462786f9ce..462786f9ce 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svpfr.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svpfr.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svpostnm.h b/drivers/freetype/freetype/include/freetype/internal/services/svpostnm.h
index a76b4fe057..a76b4fe057 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svpostnm.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svpostnm.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svprop.h b/drivers/freetype/freetype/include/freetype/internal/services/svprop.h
index 22da0bbc69..22da0bbc69 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svprop.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svprop.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svpscmap.h b/drivers/freetype/freetype/include/freetype/internal/services/svpscmap.h
index 030948ea64..030948ea64 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svpscmap.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svpscmap.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svpsinfo.h b/drivers/freetype/freetype/include/freetype/internal/services/svpsinfo.h
index 4bfb506711..4bfb506711 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svpsinfo.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svpsinfo.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svsfnt.h b/drivers/freetype/freetype/include/freetype/internal/services/svsfnt.h
index d3835aa1c2..d3835aa1c2 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svsfnt.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svsfnt.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svttcmap.h b/drivers/freetype/freetype/include/freetype/internal/services/svttcmap.h
index 83994aaf8a..83994aaf8a 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svttcmap.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svttcmap.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svtteng.h b/drivers/freetype/freetype/include/freetype/internal/services/svtteng.h
index 58e02a6f9d..58e02a6f9d 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svtteng.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svtteng.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svttglyf.h b/drivers/freetype/freetype/include/freetype/internal/services/svttglyf.h
index 369eb8421b..369eb8421b 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svttglyf.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svttglyf.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svwinfnt.h b/drivers/freetype/freetype/include/freetype/internal/services/svwinfnt.h
index 57f7765d92..57f7765d92 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svwinfnt.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svwinfnt.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svxf86nm.h b/drivers/freetype/freetype/include/freetype/internal/services/svxf86nm.h
index ca5d884a83..ca5d884a83 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svxf86nm.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svxf86nm.h
diff --git a/tools/freetype/freetype/include/freetype/internal/sfnt.h b/drivers/freetype/freetype/include/freetype/internal/sfnt.h
index 6b5e41f1ad..6b5e41f1ad 100644
--- a/tools/freetype/freetype/include/freetype/internal/sfnt.h
+++ b/drivers/freetype/freetype/include/freetype/internal/sfnt.h
diff --git a/tools/freetype/freetype/include/freetype/internal/t1types.h b/drivers/freetype/freetype/include/freetype/internal/t1types.h
index e20237c14d..e20237c14d 100644
--- a/tools/freetype/freetype/include/freetype/internal/t1types.h
+++ b/drivers/freetype/freetype/include/freetype/internal/t1types.h
diff --git a/tools/freetype/freetype/include/freetype/internal/tttypes.h b/drivers/freetype/freetype/include/freetype/internal/tttypes.h
index 1bbfe499c5..1bbfe499c5 100644
--- a/tools/freetype/freetype/include/freetype/internal/tttypes.h
+++ b/drivers/freetype/freetype/include/freetype/internal/tttypes.h
diff --git a/tools/freetype/freetype/include/freetype/t1tables.h b/drivers/freetype/freetype/include/freetype/t1tables.h
index a14255e5f5..a14255e5f5 100644
--- a/tools/freetype/freetype/include/freetype/t1tables.h
+++ b/drivers/freetype/freetype/include/freetype/t1tables.h
diff --git a/tools/freetype/freetype/include/freetype/ttnameid.h b/drivers/freetype/freetype/include/freetype/ttnameid.h
index 173f88c950..173f88c950 100644
--- a/tools/freetype/freetype/include/freetype/ttnameid.h
+++ b/drivers/freetype/freetype/include/freetype/ttnameid.h
diff --git a/tools/freetype/freetype/include/freetype/tttables.h b/drivers/freetype/freetype/include/freetype/tttables.h
index fe07117b0b..fe07117b0b 100644
--- a/tools/freetype/freetype/include/freetype/tttables.h
+++ b/drivers/freetype/freetype/include/freetype/tttables.h
diff --git a/tools/freetype/freetype/include/freetype/tttags.h b/drivers/freetype/freetype/include/freetype/tttags.h
index be8c524edb..be8c524edb 100644
--- a/tools/freetype/freetype/include/freetype/tttags.h
+++ b/drivers/freetype/freetype/include/freetype/tttags.h
diff --git a/tools/freetype/freetype/include/freetype/ttunpat.h b/drivers/freetype/freetype/include/freetype/ttunpat.h
index a0162759b7..a0162759b7 100644
--- a/tools/freetype/freetype/include/freetype/ttunpat.h
+++ b/drivers/freetype/freetype/include/freetype/ttunpat.h
diff --git a/tools/freetype/freetype/include/ftoption.h b/drivers/freetype/freetype/include/ftoption.h
index c9f4708691..c9f4708691 100644
--- a/tools/freetype/freetype/include/ftoption.h
+++ b/drivers/freetype/freetype/include/ftoption.h
diff --git a/tools/freetype/freetype/src/Jamfile b/drivers/freetype/freetype/src/Jamfile
index 76ee0f46e6..76ee0f46e6 100644
--- a/tools/freetype/freetype/src/Jamfile
+++ b/drivers/freetype/freetype/src/Jamfile
diff --git a/tools/freetype/freetype/src/autofit/Jamfile b/drivers/freetype/freetype/src/autofit/Jamfile
index 2714765b5b..2714765b5b 100644
--- a/tools/freetype/freetype/src/autofit/Jamfile
+++ b/drivers/freetype/freetype/src/autofit/Jamfile
diff --git a/tools/freetype/freetype/src/autofit/afangles.c b/drivers/freetype/freetype/src/autofit/afangles.c
index b44a5ba2c6..b44a5ba2c6 100644
--- a/tools/freetype/freetype/src/autofit/afangles.c
+++ b/drivers/freetype/freetype/src/autofit/afangles.c
diff --git a/tools/freetype/freetype/src/autofit/afangles.h b/drivers/freetype/freetype/src/autofit/afangles.h
index f33f9e108e..f33f9e108e 100644
--- a/tools/freetype/freetype/src/autofit/afangles.h
+++ b/drivers/freetype/freetype/src/autofit/afangles.h
diff --git a/tools/freetype/freetype/src/autofit/afcjk.c b/drivers/freetype/freetype/src/autofit/afcjk.c
index f69a528e3b..f69a528e3b 100644
--- a/tools/freetype/freetype/src/autofit/afcjk.c
+++ b/drivers/freetype/freetype/src/autofit/afcjk.c
diff --git a/tools/freetype/freetype/src/autofit/afcjk.h b/drivers/freetype/freetype/src/autofit/afcjk.h
index ab816f20b1..ab816f20b1 100644
--- a/tools/freetype/freetype/src/autofit/afcjk.h
+++ b/drivers/freetype/freetype/src/autofit/afcjk.h
diff --git a/tools/freetype/freetype/src/autofit/afdummy.c b/drivers/freetype/freetype/src/autofit/afdummy.c
index 22944559da..22944559da 100644
--- a/tools/freetype/freetype/src/autofit/afdummy.c
+++ b/drivers/freetype/freetype/src/autofit/afdummy.c
diff --git a/tools/freetype/freetype/src/autofit/afdummy.h b/drivers/freetype/freetype/src/autofit/afdummy.h
index 95d8f8cf19..95d8f8cf19 100644
--- a/tools/freetype/freetype/src/autofit/afdummy.h
+++ b/drivers/freetype/freetype/src/autofit/afdummy.h
diff --git a/tools/freetype/freetype/src/autofit/aferrors.h b/drivers/freetype/freetype/src/autofit/aferrors.h
index 50e1a22dd5..50e1a22dd5 100644
--- a/tools/freetype/freetype/src/autofit/aferrors.h
+++ b/drivers/freetype/freetype/src/autofit/aferrors.h
diff --git a/tools/freetype/freetype/src/autofit/afglobal.c b/drivers/freetype/freetype/src/autofit/afglobal.c
index 3e41465756..3e41465756 100644
--- a/tools/freetype/freetype/src/autofit/afglobal.c
+++ b/drivers/freetype/freetype/src/autofit/afglobal.c
diff --git a/tools/freetype/freetype/src/autofit/afglobal.h b/drivers/freetype/freetype/src/autofit/afglobal.h
index 2e24900822..2e24900822 100644
--- a/tools/freetype/freetype/src/autofit/afglobal.h
+++ b/drivers/freetype/freetype/src/autofit/afglobal.h
diff --git a/tools/freetype/freetype/src/autofit/afhints.c b/drivers/freetype/freetype/src/autofit/afhints.c
index e8defaa88d..e8defaa88d 100644
--- a/tools/freetype/freetype/src/autofit/afhints.c
+++ b/drivers/freetype/freetype/src/autofit/afhints.c
diff --git a/tools/freetype/freetype/src/autofit/afhints.h b/drivers/freetype/freetype/src/autofit/afhints.h
index 776b3c844e..776b3c844e 100644
--- a/tools/freetype/freetype/src/autofit/afhints.h
+++ b/drivers/freetype/freetype/src/autofit/afhints.h
diff --git a/tools/freetype/freetype/src/autofit/afindic.c b/drivers/freetype/freetype/src/autofit/afindic.c
index 8c24972598..8c24972598 100644
--- a/tools/freetype/freetype/src/autofit/afindic.c
+++ b/drivers/freetype/freetype/src/autofit/afindic.c
diff --git a/tools/freetype/freetype/src/autofit/afindic.h b/drivers/freetype/freetype/src/autofit/afindic.h
index c252cf20da..c252cf20da 100644
--- a/tools/freetype/freetype/src/autofit/afindic.h
+++ b/drivers/freetype/freetype/src/autofit/afindic.h
diff --git a/tools/freetype/freetype/src/autofit/aflatin.c b/drivers/freetype/freetype/src/autofit/aflatin.c
index ef0157a13e..ef0157a13e 100644
--- a/tools/freetype/freetype/src/autofit/aflatin.c
+++ b/drivers/freetype/freetype/src/autofit/aflatin.c
diff --git a/tools/freetype/freetype/src/autofit/aflatin.h b/drivers/freetype/freetype/src/autofit/aflatin.h
index d9170b3dcc..d9170b3dcc 100644
--- a/tools/freetype/freetype/src/autofit/aflatin.h
+++ b/drivers/freetype/freetype/src/autofit/aflatin.h
diff --git a/tools/freetype/freetype/src/autofit/aflatin2.c b/drivers/freetype/freetype/src/autofit/aflatin2.c
index b1e9658d5d..b1e9658d5d 100644
--- a/tools/freetype/freetype/src/autofit/aflatin2.c
+++ b/drivers/freetype/freetype/src/autofit/aflatin2.c
diff --git a/tools/freetype/freetype/src/autofit/aflatin2.h b/drivers/freetype/freetype/src/autofit/aflatin2.h
index cbfa395522..cbfa395522 100644
--- a/tools/freetype/freetype/src/autofit/aflatin2.h
+++ b/drivers/freetype/freetype/src/autofit/aflatin2.h
diff --git a/tools/freetype/freetype/src/autofit/afloader.c b/drivers/freetype/freetype/src/autofit/afloader.c
index 17a6fb7c3b..17a6fb7c3b 100644
--- a/tools/freetype/freetype/src/autofit/afloader.c
+++ b/drivers/freetype/freetype/src/autofit/afloader.c
diff --git a/tools/freetype/freetype/src/autofit/afloader.h b/drivers/freetype/freetype/src/autofit/afloader.h
index 1f34d17cce..1f34d17cce 100644
--- a/tools/freetype/freetype/src/autofit/afloader.h
+++ b/drivers/freetype/freetype/src/autofit/afloader.h
diff --git a/tools/freetype/freetype/src/autofit/afmodule.c b/drivers/freetype/freetype/src/autofit/afmodule.c
index b1bb5ee0ed..b1bb5ee0ed 100644
--- a/tools/freetype/freetype/src/autofit/afmodule.c
+++ b/drivers/freetype/freetype/src/autofit/afmodule.c
diff --git a/tools/freetype/freetype/src/autofit/afmodule.h b/drivers/freetype/freetype/src/autofit/afmodule.h
index c4e8f8f66a..c4e8f8f66a 100644
--- a/tools/freetype/freetype/src/autofit/afmodule.h
+++ b/drivers/freetype/freetype/src/autofit/afmodule.h
diff --git a/tools/freetype/freetype/src/autofit/afpic.c b/drivers/freetype/freetype/src/autofit/afpic.c
index 45e1448c08..45e1448c08 100644
--- a/tools/freetype/freetype/src/autofit/afpic.c
+++ b/drivers/freetype/freetype/src/autofit/afpic.c
diff --git a/tools/freetype/freetype/src/autofit/afpic.h b/drivers/freetype/freetype/src/autofit/afpic.h
index 0acf803894..0acf803894 100644
--- a/tools/freetype/freetype/src/autofit/afpic.h
+++ b/drivers/freetype/freetype/src/autofit/afpic.h
diff --git a/tools/freetype/freetype/src/autofit/aftypes.h b/drivers/freetype/freetype/src/autofit/aftypes.h
index 9acd7ad6d2..9acd7ad6d2 100644
--- a/tools/freetype/freetype/src/autofit/aftypes.h
+++ b/drivers/freetype/freetype/src/autofit/aftypes.h
diff --git a/tools/freetype/freetype/src/autofit/afwarp.c b/drivers/freetype/freetype/src/autofit/afwarp.c
index 34a97ffc57..34a97ffc57 100644
--- a/tools/freetype/freetype/src/autofit/afwarp.c
+++ b/drivers/freetype/freetype/src/autofit/afwarp.c
diff --git a/tools/freetype/freetype/src/autofit/afwarp.h b/drivers/freetype/freetype/src/autofit/afwarp.h
index 7343fdd5ef..7343fdd5ef 100644
--- a/tools/freetype/freetype/src/autofit/afwarp.h
+++ b/drivers/freetype/freetype/src/autofit/afwarp.h
diff --git a/tools/freetype/freetype/src/autofit/autofit.c b/drivers/freetype/freetype/src/autofit/autofit.c
index 3883a0a706..3883a0a706 100644
--- a/tools/freetype/freetype/src/autofit/autofit.c
+++ b/drivers/freetype/freetype/src/autofit/autofit.c
diff --git a/tools/freetype/freetype/src/autofit/module.mk b/drivers/freetype/freetype/src/autofit/module.mk
index 6ec60912ab..6ec60912ab 100644
--- a/tools/freetype/freetype/src/autofit/module.mk
+++ b/drivers/freetype/freetype/src/autofit/module.mk
diff --git a/tools/freetype/freetype/src/autofit/rules.mk b/drivers/freetype/freetype/src/autofit/rules.mk
index b76bb79ab4..b76bb79ab4 100644
--- a/tools/freetype/freetype/src/autofit/rules.mk
+++ b/drivers/freetype/freetype/src/autofit/rules.mk
diff --git a/tools/freetype/freetype/src/base/Jamfile b/drivers/freetype/freetype/src/base/Jamfile
index 832e8b8424..832e8b8424 100644
--- a/tools/freetype/freetype/src/base/Jamfile
+++ b/drivers/freetype/freetype/src/base/Jamfile
diff --git a/tools/freetype/freetype/src/base/basepic.c b/drivers/freetype/freetype/src/base/basepic.c
index 0af770ebc2..0af770ebc2 100644
--- a/tools/freetype/freetype/src/base/basepic.c
+++ b/drivers/freetype/freetype/src/base/basepic.c
diff --git a/tools/freetype/freetype/src/base/basepic.h b/drivers/freetype/freetype/src/base/basepic.h
index 329d7c8fd6..329d7c8fd6 100644
--- a/tools/freetype/freetype/src/base/basepic.h
+++ b/drivers/freetype/freetype/src/base/basepic.h
diff --git a/tools/freetype/freetype/src/base/ftadvanc.c b/drivers/freetype/freetype/src/base/ftadvanc.c
index 52078478df..52078478df 100644
--- a/tools/freetype/freetype/src/base/ftadvanc.c
+++ b/drivers/freetype/freetype/src/base/ftadvanc.c
diff --git a/tools/freetype/freetype/src/base/ftapi.c b/drivers/freetype/freetype/src/base/ftapi.c
index 8914d1f4e9..8914d1f4e9 100644
--- a/tools/freetype/freetype/src/base/ftapi.c
+++ b/drivers/freetype/freetype/src/base/ftapi.c
diff --git a/tools/freetype/freetype/src/base/ftbase.c b/drivers/freetype/freetype/src/base/ftbase.c
index 5e5d70ec4b..5e5d70ec4b 100644
--- a/tools/freetype/freetype/src/base/ftbase.c
+++ b/drivers/freetype/freetype/src/base/ftbase.c
diff --git a/tools/freetype/freetype/src/base/ftbase.h b/drivers/freetype/freetype/src/base/ftbase.h
index 51a1db18b8..51a1db18b8 100644
--- a/tools/freetype/freetype/src/base/ftbase.h
+++ b/drivers/freetype/freetype/src/base/ftbase.h
diff --git a/tools/freetype/freetype/src/base/ftbbox.c b/drivers/freetype/freetype/src/base/ftbbox.c
index 6d1c44cb2e..6d1c44cb2e 100644
--- a/tools/freetype/freetype/src/base/ftbbox.c
+++ b/drivers/freetype/freetype/src/base/ftbbox.c
diff --git a/tools/freetype/freetype/src/base/ftbdf.c b/drivers/freetype/freetype/src/base/ftbdf.c
index 5755f8558d..5755f8558d 100644
--- a/tools/freetype/freetype/src/base/ftbdf.c
+++ b/drivers/freetype/freetype/src/base/ftbdf.c
diff --git a/tools/freetype/freetype/src/base/ftbitmap.c b/drivers/freetype/freetype/src/base/ftbitmap.c
index 975818e14f..975818e14f 100644
--- a/tools/freetype/freetype/src/base/ftbitmap.c
+++ b/drivers/freetype/freetype/src/base/ftbitmap.c
diff --git a/tools/freetype/freetype/src/base/ftcalc.c b/drivers/freetype/freetype/src/base/ftcalc.c
index 0ec0d78930..0ec0d78930 100644
--- a/tools/freetype/freetype/src/base/ftcalc.c
+++ b/drivers/freetype/freetype/src/base/ftcalc.c
diff --git a/tools/freetype/freetype/src/base/ftcid.c b/drivers/freetype/freetype/src/base/ftcid.c
index 741879d922..741879d922 100644
--- a/tools/freetype/freetype/src/base/ftcid.c
+++ b/drivers/freetype/freetype/src/base/ftcid.c
diff --git a/tools/freetype/freetype/src/base/ftdbgmem.c b/drivers/freetype/freetype/src/base/ftdbgmem.c
index 6fb86fe77d..6fb86fe77d 100644
--- a/tools/freetype/freetype/src/base/ftdbgmem.c
+++ b/drivers/freetype/freetype/src/base/ftdbgmem.c
diff --git a/tools/freetype/freetype/src/base/ftdebug.c b/drivers/freetype/freetype/src/base/ftdebug.c
index b9156d15ee..b9156d15ee 100644
--- a/tools/freetype/freetype/src/base/ftdebug.c
+++ b/drivers/freetype/freetype/src/base/ftdebug.c
diff --git a/tools/freetype/freetype/src/base/ftfstype.c b/drivers/freetype/freetype/src/base/ftfstype.c
index d0ef7b7c1b..d0ef7b7c1b 100644
--- a/tools/freetype/freetype/src/base/ftfstype.c
+++ b/drivers/freetype/freetype/src/base/ftfstype.c
diff --git a/tools/freetype/freetype/src/base/ftgasp.c b/drivers/freetype/freetype/src/base/ftgasp.c
index 8485d29259..8485d29259 100644
--- a/tools/freetype/freetype/src/base/ftgasp.c
+++ b/drivers/freetype/freetype/src/base/ftgasp.c
diff --git a/tools/freetype/freetype/src/base/ftgloadr.c b/drivers/freetype/freetype/src/base/ftgloadr.c
index 3cc5c7a805..3cc5c7a805 100644
--- a/tools/freetype/freetype/src/base/ftgloadr.c
+++ b/drivers/freetype/freetype/src/base/ftgloadr.c
diff --git a/tools/freetype/freetype/src/base/ftglyph.c b/drivers/freetype/freetype/src/base/ftglyph.c
index 5dd28a8c52..5dd28a8c52 100644
--- a/tools/freetype/freetype/src/base/ftglyph.c
+++ b/drivers/freetype/freetype/src/base/ftglyph.c
diff --git a/tools/freetype/freetype/src/base/ftgxval.c b/drivers/freetype/freetype/src/base/ftgxval.c
index a8ec44ac00..a8ec44ac00 100644
--- a/tools/freetype/freetype/src/base/ftgxval.c
+++ b/drivers/freetype/freetype/src/base/ftgxval.c
diff --git a/tools/freetype/freetype/src/base/ftinit.c b/drivers/freetype/freetype/src/base/ftinit.c
index 85f321fd2d..85f321fd2d 100644
--- a/tools/freetype/freetype/src/base/ftinit.c
+++ b/drivers/freetype/freetype/src/base/ftinit.c
diff --git a/tools/freetype/freetype/src/base/ftlcdfil.c b/drivers/freetype/freetype/src/base/ftlcdfil.c
index 852fb32982..852fb32982 100644
--- a/tools/freetype/freetype/src/base/ftlcdfil.c
+++ b/drivers/freetype/freetype/src/base/ftlcdfil.c
diff --git a/tools/freetype/freetype/src/base/ftmac.c b/drivers/freetype/freetype/src/base/ftmac.c
index 5b5aae61cc..5b5aae61cc 100644
--- a/tools/freetype/freetype/src/base/ftmac.c
+++ b/drivers/freetype/freetype/src/base/ftmac.c
diff --git a/tools/freetype/freetype/src/base/ftmm.c b/drivers/freetype/freetype/src/base/ftmm.c
index 18ff879bfc..18ff879bfc 100644
--- a/tools/freetype/freetype/src/base/ftmm.c
+++ b/drivers/freetype/freetype/src/base/ftmm.c
diff --git a/tools/freetype/freetype/src/base/ftobjs.c b/drivers/freetype/freetype/src/base/ftobjs.c
index 157bf45634..157bf45634 100644
--- a/tools/freetype/freetype/src/base/ftobjs.c
+++ b/drivers/freetype/freetype/src/base/ftobjs.c
diff --git a/tools/freetype/freetype/src/base/ftotval.c b/drivers/freetype/freetype/src/base/ftotval.c
index 5fc73d76ab..5fc73d76ab 100644
--- a/tools/freetype/freetype/src/base/ftotval.c
+++ b/drivers/freetype/freetype/src/base/ftotval.c
diff --git a/tools/freetype/freetype/src/base/ftoutln.c b/drivers/freetype/freetype/src/base/ftoutln.c
index 54ca5cdcf6..54ca5cdcf6 100644
--- a/tools/freetype/freetype/src/base/ftoutln.c
+++ b/drivers/freetype/freetype/src/base/ftoutln.c
diff --git a/tools/freetype/freetype/src/base/ftpatent.c b/drivers/freetype/freetype/src/base/ftpatent.c
index 82b42f0343..82b42f0343 100644
--- a/tools/freetype/freetype/src/base/ftpatent.c
+++ b/drivers/freetype/freetype/src/base/ftpatent.c
diff --git a/tools/freetype/freetype/src/base/ftpfr.c b/drivers/freetype/freetype/src/base/ftpfr.c
index 0ba955f01f..0ba955f01f 100644
--- a/tools/freetype/freetype/src/base/ftpfr.c
+++ b/drivers/freetype/freetype/src/base/ftpfr.c
diff --git a/tools/freetype/freetype/src/base/ftpic.c b/drivers/freetype/freetype/src/base/ftpic.c
index 1c87101696..1c87101696 100644
--- a/tools/freetype/freetype/src/base/ftpic.c
+++ b/drivers/freetype/freetype/src/base/ftpic.c
diff --git a/tools/freetype/freetype/src/base/ftrfork.c b/drivers/freetype/freetype/src/base/ftrfork.c
index 804911721d..804911721d 100644
--- a/tools/freetype/freetype/src/base/ftrfork.c
+++ b/drivers/freetype/freetype/src/base/ftrfork.c
diff --git a/tools/freetype/freetype/src/base/ftsnames.c b/drivers/freetype/freetype/src/base/ftsnames.c
index 260e91c148..260e91c148 100644
--- a/tools/freetype/freetype/src/base/ftsnames.c
+++ b/drivers/freetype/freetype/src/base/ftsnames.c
diff --git a/tools/freetype/freetype/src/base/ftstream.c b/drivers/freetype/freetype/src/base/ftstream.c
index d965333daa..d965333daa 100644
--- a/tools/freetype/freetype/src/base/ftstream.c
+++ b/drivers/freetype/freetype/src/base/ftstream.c
diff --git a/tools/freetype/freetype/src/base/ftstroke.c b/drivers/freetype/freetype/src/base/ftstroke.c
index ee61ceca0e..ee61ceca0e 100644
--- a/tools/freetype/freetype/src/base/ftstroke.c
+++ b/drivers/freetype/freetype/src/base/ftstroke.c
diff --git a/tools/freetype/freetype/src/base/ftsynth.c b/drivers/freetype/freetype/src/base/ftsynth.c
index 241d37f426..241d37f426 100644
--- a/tools/freetype/freetype/src/base/ftsynth.c
+++ b/drivers/freetype/freetype/src/base/ftsynth.c
diff --git a/tools/freetype/freetype/src/base/ftsystem.c b/drivers/freetype/freetype/src/base/ftsystem.c
index 2c6ddac10c..2c6ddac10c 100644
--- a/tools/freetype/freetype/src/base/ftsystem.c
+++ b/drivers/freetype/freetype/src/base/ftsystem.c
diff --git a/tools/freetype/freetype/src/base/fttrigon.c b/drivers/freetype/freetype/src/base/fttrigon.c
index 4ffdcb77f1..4ffdcb77f1 100644
--- a/tools/freetype/freetype/src/base/fttrigon.c
+++ b/drivers/freetype/freetype/src/base/fttrigon.c
diff --git a/tools/freetype/freetype/src/base/fttype1.c b/drivers/freetype/freetype/src/base/fttype1.c
index c1f9931dbb..c1f9931dbb 100644
--- a/tools/freetype/freetype/src/base/fttype1.c
+++ b/drivers/freetype/freetype/src/base/fttype1.c
diff --git a/tools/freetype/freetype/src/base/ftutil.c b/drivers/freetype/freetype/src/base/ftutil.c
index 879d027529..879d027529 100644
--- a/tools/freetype/freetype/src/base/ftutil.c
+++ b/drivers/freetype/freetype/src/base/ftutil.c
diff --git a/tools/freetype/freetype/src/base/ftwinfnt.c b/drivers/freetype/freetype/src/base/ftwinfnt.c
index 463ae761d8..463ae761d8 100644
--- a/tools/freetype/freetype/src/base/ftwinfnt.c
+++ b/drivers/freetype/freetype/src/base/ftwinfnt.c
diff --git a/tools/freetype/freetype/src/base/ftxf86.c b/drivers/freetype/freetype/src/base/ftxf86.c
index a4bf767dfa..a4bf767dfa 100644
--- a/tools/freetype/freetype/src/base/ftxf86.c
+++ b/drivers/freetype/freetype/src/base/ftxf86.c
diff --git a/tools/freetype/freetype/src/base/md5.c b/drivers/freetype/freetype/src/base/md5.c
index 2f01c9302c..2f01c9302c 100644
--- a/tools/freetype/freetype/src/base/md5.c
+++ b/drivers/freetype/freetype/src/base/md5.c
diff --git a/tools/freetype/freetype/src/base/md5.h b/drivers/freetype/freetype/src/base/md5.h
index f1a6857640..f1a6857640 100644
--- a/tools/freetype/freetype/src/base/md5.h
+++ b/drivers/freetype/freetype/src/base/md5.h
diff --git a/tools/freetype/freetype/src/base/rules.mk b/drivers/freetype/freetype/src/base/rules.mk
index e932191157..e932191157 100644
--- a/tools/freetype/freetype/src/base/rules.mk
+++ b/drivers/freetype/freetype/src/base/rules.mk
diff --git a/tools/freetype/freetype/src/bdf/Jamfile b/drivers/freetype/freetype/src/bdf/Jamfile
index da23ccd0ad..da23ccd0ad 100644
--- a/tools/freetype/freetype/src/bdf/Jamfile
+++ b/drivers/freetype/freetype/src/bdf/Jamfile
diff --git a/tools/freetype/freetype/src/bdf/README b/drivers/freetype/freetype/src/bdf/README
index b761aba2b2..b761aba2b2 100644
--- a/tools/freetype/freetype/src/bdf/README
+++ b/drivers/freetype/freetype/src/bdf/README
diff --git a/tools/freetype/freetype/src/bdf/bdf.c b/drivers/freetype/freetype/src/bdf/bdf.c
index f95fb76225..f95fb76225 100644
--- a/tools/freetype/freetype/src/bdf/bdf.c
+++ b/drivers/freetype/freetype/src/bdf/bdf.c
diff --git a/tools/freetype/freetype/src/bdf/bdf.h b/drivers/freetype/freetype/src/bdf/bdf.h
index d11be6f147..d11be6f147 100644
--- a/tools/freetype/freetype/src/bdf/bdf.h
+++ b/drivers/freetype/freetype/src/bdf/bdf.h
diff --git a/tools/freetype/freetype/src/bdf/bdfdrivr.c b/drivers/freetype/freetype/src/bdf/bdfdrivr.c
index 0ea0a5ea5e..0ea0a5ea5e 100644
--- a/tools/freetype/freetype/src/bdf/bdfdrivr.c
+++ b/drivers/freetype/freetype/src/bdf/bdfdrivr.c
diff --git a/tools/freetype/freetype/src/bdf/bdfdrivr.h b/drivers/freetype/freetype/src/bdf/bdfdrivr.h
index ca0dae50d2..ca0dae50d2 100644
--- a/tools/freetype/freetype/src/bdf/bdfdrivr.h
+++ b/drivers/freetype/freetype/src/bdf/bdfdrivr.h
diff --git a/tools/freetype/freetype/src/bdf/bdferror.h b/drivers/freetype/freetype/src/bdf/bdferror.h
index ea545aca06..ea545aca06 100644
--- a/tools/freetype/freetype/src/bdf/bdferror.h
+++ b/drivers/freetype/freetype/src/bdf/bdferror.h
diff --git a/tools/freetype/freetype/src/bdf/bdflib.c b/drivers/freetype/freetype/src/bdf/bdflib.c
index 0b8412d9eb..0b8412d9eb 100644
--- a/tools/freetype/freetype/src/bdf/bdflib.c
+++ b/drivers/freetype/freetype/src/bdf/bdflib.c
diff --git a/tools/freetype/freetype/src/bdf/module.mk b/drivers/freetype/freetype/src/bdf/module.mk
index fe06ae8e06..fe06ae8e06 100644
--- a/tools/freetype/freetype/src/bdf/module.mk
+++ b/drivers/freetype/freetype/src/bdf/module.mk
diff --git a/tools/freetype/freetype/src/bdf/rules.mk b/drivers/freetype/freetype/src/bdf/rules.mk
index 6ff1614dde..6ff1614dde 100644
--- a/tools/freetype/freetype/src/bdf/rules.mk
+++ b/drivers/freetype/freetype/src/bdf/rules.mk
diff --git a/tools/freetype/freetype/src/cache/Jamfile b/drivers/freetype/freetype/src/cache/Jamfile
index 340cff7742..340cff7742 100644
--- a/tools/freetype/freetype/src/cache/Jamfile
+++ b/drivers/freetype/freetype/src/cache/Jamfile
diff --git a/tools/freetype/freetype/src/cache/ftcache.c b/drivers/freetype/freetype/src/cache/ftcache.c
index d41e91e5ec..d41e91e5ec 100644
--- a/tools/freetype/freetype/src/cache/ftcache.c
+++ b/drivers/freetype/freetype/src/cache/ftcache.c
diff --git a/tools/freetype/freetype/src/cache/ftcbasic.c b/drivers/freetype/freetype/src/cache/ftcbasic.c
index 84d336d5d6..84d336d5d6 100644
--- a/tools/freetype/freetype/src/cache/ftcbasic.c
+++ b/drivers/freetype/freetype/src/cache/ftcbasic.c
diff --git a/tools/freetype/freetype/src/cache/ftccache.c b/drivers/freetype/freetype/src/cache/ftccache.c
index f20dd4502c..f20dd4502c 100644
--- a/tools/freetype/freetype/src/cache/ftccache.c
+++ b/drivers/freetype/freetype/src/cache/ftccache.c
diff --git a/tools/freetype/freetype/src/cache/ftccache.h b/drivers/freetype/freetype/src/cache/ftccache.h
index 4155f320e0..4155f320e0 100644
--- a/tools/freetype/freetype/src/cache/ftccache.h
+++ b/drivers/freetype/freetype/src/cache/ftccache.h
diff --git a/tools/freetype/freetype/src/cache/ftccback.h b/drivers/freetype/freetype/src/cache/ftccback.h
index 9528279273..9528279273 100644
--- a/tools/freetype/freetype/src/cache/ftccback.h
+++ b/drivers/freetype/freetype/src/cache/ftccback.h
diff --git a/tools/freetype/freetype/src/cache/ftccmap.c b/drivers/freetype/freetype/src/cache/ftccmap.c
index 848349be2d..848349be2d 100644
--- a/tools/freetype/freetype/src/cache/ftccmap.c
+++ b/drivers/freetype/freetype/src/cache/ftccmap.c
diff --git a/tools/freetype/freetype/src/cache/ftcerror.h b/drivers/freetype/freetype/src/cache/ftcerror.h
index 0e055709bb..0e055709bb 100644
--- a/tools/freetype/freetype/src/cache/ftcerror.h
+++ b/drivers/freetype/freetype/src/cache/ftcerror.h
diff --git a/tools/freetype/freetype/src/cache/ftcglyph.c b/drivers/freetype/freetype/src/cache/ftcglyph.c
index 441e177238..441e177238 100644
--- a/tools/freetype/freetype/src/cache/ftcglyph.c
+++ b/drivers/freetype/freetype/src/cache/ftcglyph.c
diff --git a/tools/freetype/freetype/src/cache/ftcglyph.h b/drivers/freetype/freetype/src/cache/ftcglyph.h
index 5fed19cb8f..5fed19cb8f 100644
--- a/tools/freetype/freetype/src/cache/ftcglyph.h
+++ b/drivers/freetype/freetype/src/cache/ftcglyph.h
diff --git a/tools/freetype/freetype/src/cache/ftcimage.c b/drivers/freetype/freetype/src/cache/ftcimage.c
index c242ece021..c242ece021 100644
--- a/tools/freetype/freetype/src/cache/ftcimage.c
+++ b/drivers/freetype/freetype/src/cache/ftcimage.c
diff --git a/tools/freetype/freetype/src/cache/ftcimage.h b/drivers/freetype/freetype/src/cache/ftcimage.h
index 20d5d3e07d..20d5d3e07d 100644
--- a/tools/freetype/freetype/src/cache/ftcimage.h
+++ b/drivers/freetype/freetype/src/cache/ftcimage.h
diff --git a/tools/freetype/freetype/src/cache/ftcmanag.c b/drivers/freetype/freetype/src/cache/ftcmanag.c
index 4eb2c5bfd6..4eb2c5bfd6 100644
--- a/tools/freetype/freetype/src/cache/ftcmanag.c
+++ b/drivers/freetype/freetype/src/cache/ftcmanag.c
diff --git a/tools/freetype/freetype/src/cache/ftcmanag.h b/drivers/freetype/freetype/src/cache/ftcmanag.h
index 0aec33c584..0aec33c584 100644
--- a/tools/freetype/freetype/src/cache/ftcmanag.h
+++ b/drivers/freetype/freetype/src/cache/ftcmanag.h
diff --git a/tools/freetype/freetype/src/cache/ftcmru.c b/drivers/freetype/freetype/src/cache/ftcmru.c
index dc8b4cc397..dc8b4cc397 100644
--- a/tools/freetype/freetype/src/cache/ftcmru.c
+++ b/drivers/freetype/freetype/src/cache/ftcmru.c
diff --git a/tools/freetype/freetype/src/cache/ftcmru.h b/drivers/freetype/freetype/src/cache/ftcmru.h
index 6fccf11781..6fccf11781 100644
--- a/tools/freetype/freetype/src/cache/ftcmru.h
+++ b/drivers/freetype/freetype/src/cache/ftcmru.h
diff --git a/tools/freetype/freetype/src/cache/ftcsbits.c b/drivers/freetype/freetype/src/cache/ftcsbits.c
index 6df1c19930..6df1c19930 100644
--- a/tools/freetype/freetype/src/cache/ftcsbits.c
+++ b/drivers/freetype/freetype/src/cache/ftcsbits.c
diff --git a/tools/freetype/freetype/src/cache/ftcsbits.h b/drivers/freetype/freetype/src/cache/ftcsbits.h
index df55dca806..df55dca806 100644
--- a/tools/freetype/freetype/src/cache/ftcsbits.h
+++ b/drivers/freetype/freetype/src/cache/ftcsbits.h
diff --git a/tools/freetype/freetype/src/cache/rules.mk b/drivers/freetype/freetype/src/cache/rules.mk
index ed75a6a91f..ed75a6a91f 100644
--- a/tools/freetype/freetype/src/cache/rules.mk
+++ b/drivers/freetype/freetype/src/cache/rules.mk
diff --git a/tools/freetype/freetype/src/cff/Jamfile b/drivers/freetype/freetype/src/cff/Jamfile
index 6705d3cfdb..6705d3cfdb 100644
--- a/tools/freetype/freetype/src/cff/Jamfile
+++ b/drivers/freetype/freetype/src/cff/Jamfile
diff --git a/tools/freetype/freetype/src/cff/cf2arrst.c b/drivers/freetype/freetype/src/cff/cf2arrst.c
index c8d6f13098..c8d6f13098 100644
--- a/tools/freetype/freetype/src/cff/cf2arrst.c
+++ b/drivers/freetype/freetype/src/cff/cf2arrst.c
diff --git a/tools/freetype/freetype/src/cff/cf2arrst.h b/drivers/freetype/freetype/src/cff/cf2arrst.h
index ff5ad8b126..ff5ad8b126 100644
--- a/tools/freetype/freetype/src/cff/cf2arrst.h
+++ b/drivers/freetype/freetype/src/cff/cf2arrst.h
diff --git a/tools/freetype/freetype/src/cff/cf2blues.c b/drivers/freetype/freetype/src/cff/cf2blues.c
index 5b348398af..5b348398af 100644
--- a/tools/freetype/freetype/src/cff/cf2blues.c
+++ b/drivers/freetype/freetype/src/cff/cf2blues.c
diff --git a/tools/freetype/freetype/src/cff/cf2blues.h b/drivers/freetype/freetype/src/cff/cf2blues.h
index 2f38fcad8f..2f38fcad8f 100644
--- a/tools/freetype/freetype/src/cff/cf2blues.h
+++ b/drivers/freetype/freetype/src/cff/cf2blues.h
diff --git a/tools/freetype/freetype/src/cff/cf2error.c b/drivers/freetype/freetype/src/cff/cf2error.c
index b5595a3d1f..b5595a3d1f 100644
--- a/tools/freetype/freetype/src/cff/cf2error.c
+++ b/drivers/freetype/freetype/src/cff/cf2error.c
diff --git a/tools/freetype/freetype/src/cff/cf2error.h b/drivers/freetype/freetype/src/cff/cf2error.h
index 6453ebcb7b..6453ebcb7b 100644
--- a/tools/freetype/freetype/src/cff/cf2error.h
+++ b/drivers/freetype/freetype/src/cff/cf2error.h
diff --git a/tools/freetype/freetype/src/cff/cf2fixed.h b/drivers/freetype/freetype/src/cff/cf2fixed.h
index ed1452a7da..ed1452a7da 100644
--- a/tools/freetype/freetype/src/cff/cf2fixed.h
+++ b/drivers/freetype/freetype/src/cff/cf2fixed.h
diff --git a/tools/freetype/freetype/src/cff/cf2font.c b/drivers/freetype/freetype/src/cff/cf2font.c
index 479d9125d1..479d9125d1 100644
--- a/tools/freetype/freetype/src/cff/cf2font.c
+++ b/drivers/freetype/freetype/src/cff/cf2font.c
diff --git a/tools/freetype/freetype/src/cff/cf2font.h b/drivers/freetype/freetype/src/cff/cf2font.h
index f9dd1bbd40..f9dd1bbd40 100644
--- a/tools/freetype/freetype/src/cff/cf2font.h
+++ b/drivers/freetype/freetype/src/cff/cf2font.h
diff --git a/tools/freetype/freetype/src/cff/cf2ft.c b/drivers/freetype/freetype/src/cff/cf2ft.c
index c09a0244a8..c09a0244a8 100644
--- a/tools/freetype/freetype/src/cff/cf2ft.c
+++ b/drivers/freetype/freetype/src/cff/cf2ft.c
diff --git a/tools/freetype/freetype/src/cff/cf2ft.h b/drivers/freetype/freetype/src/cff/cf2ft.h
index 731da3ca8c..731da3ca8c 100644
--- a/tools/freetype/freetype/src/cff/cf2ft.h
+++ b/drivers/freetype/freetype/src/cff/cf2ft.h
diff --git a/tools/freetype/freetype/src/cff/cf2glue.h b/drivers/freetype/freetype/src/cff/cf2glue.h
index a24da39e93..a24da39e93 100644
--- a/tools/freetype/freetype/src/cff/cf2glue.h
+++ b/drivers/freetype/freetype/src/cff/cf2glue.h
diff --git a/tools/freetype/freetype/src/cff/cf2hints.c b/drivers/freetype/freetype/src/cff/cf2hints.c
index 96bd49f186..96bd49f186 100644
--- a/tools/freetype/freetype/src/cff/cf2hints.c
+++ b/drivers/freetype/freetype/src/cff/cf2hints.c
diff --git a/tools/freetype/freetype/src/cff/cf2hints.h b/drivers/freetype/freetype/src/cff/cf2hints.h
index c4fa922a39..c4fa922a39 100644
--- a/tools/freetype/freetype/src/cff/cf2hints.h
+++ b/drivers/freetype/freetype/src/cff/cf2hints.h
diff --git a/tools/freetype/freetype/src/cff/cf2intrp.c b/drivers/freetype/freetype/src/cff/cf2intrp.c
index 5610917cc3..5610917cc3 100644
--- a/tools/freetype/freetype/src/cff/cf2intrp.c
+++ b/drivers/freetype/freetype/src/cff/cf2intrp.c
diff --git a/tools/freetype/freetype/src/cff/cf2intrp.h b/drivers/freetype/freetype/src/cff/cf2intrp.h
index b5d8947838..b5d8947838 100644
--- a/tools/freetype/freetype/src/cff/cf2intrp.h
+++ b/drivers/freetype/freetype/src/cff/cf2intrp.h
diff --git a/tools/freetype/freetype/src/cff/cf2read.c b/drivers/freetype/freetype/src/cff/cf2read.c
index 2b429e3eeb..2b429e3eeb 100644
--- a/tools/freetype/freetype/src/cff/cf2read.c
+++ b/drivers/freetype/freetype/src/cff/cf2read.c
diff --git a/tools/freetype/freetype/src/cff/cf2read.h b/drivers/freetype/freetype/src/cff/cf2read.h
index 7ef7c8c149..7ef7c8c149 100644
--- a/tools/freetype/freetype/src/cff/cf2read.h
+++ b/drivers/freetype/freetype/src/cff/cf2read.h
diff --git a/tools/freetype/freetype/src/cff/cf2stack.c b/drivers/freetype/freetype/src/cff/cf2stack.c
index 8332b5d91a..8332b5d91a 100644
--- a/tools/freetype/freetype/src/cff/cf2stack.c
+++ b/drivers/freetype/freetype/src/cff/cf2stack.c
diff --git a/tools/freetype/freetype/src/cff/cf2stack.h b/drivers/freetype/freetype/src/cff/cf2stack.h
index 7d6d1961fe..7d6d1961fe 100644
--- a/tools/freetype/freetype/src/cff/cf2stack.h
+++ b/drivers/freetype/freetype/src/cff/cf2stack.h
diff --git a/tools/freetype/freetype/src/cff/cf2types.h b/drivers/freetype/freetype/src/cff/cf2types.h
index ac6a02266e..ac6a02266e 100644
--- a/tools/freetype/freetype/src/cff/cf2types.h
+++ b/drivers/freetype/freetype/src/cff/cf2types.h
diff --git a/tools/freetype/freetype/src/cff/cff.c b/drivers/freetype/freetype/src/cff/cff.c
index c3840b5838..c3840b5838 100644
--- a/tools/freetype/freetype/src/cff/cff.c
+++ b/drivers/freetype/freetype/src/cff/cff.c
diff --git a/tools/freetype/freetype/src/cff/cffcmap.c b/drivers/freetype/freetype/src/cff/cffcmap.c
index f6e03c6420..f6e03c6420 100644
--- a/tools/freetype/freetype/src/cff/cffcmap.c
+++ b/drivers/freetype/freetype/src/cff/cffcmap.c
diff --git a/tools/freetype/freetype/src/cff/cffcmap.h b/drivers/freetype/freetype/src/cff/cffcmap.h
index 3f7f67bbe0..3f7f67bbe0 100644
--- a/tools/freetype/freetype/src/cff/cffcmap.h
+++ b/drivers/freetype/freetype/src/cff/cffcmap.h
diff --git a/tools/freetype/freetype/src/cff/cffdrivr.c b/drivers/freetype/freetype/src/cff/cffdrivr.c
index c8ca96ba49..c8ca96ba49 100644
--- a/tools/freetype/freetype/src/cff/cffdrivr.c
+++ b/drivers/freetype/freetype/src/cff/cffdrivr.c
diff --git a/tools/freetype/freetype/src/cff/cffdrivr.h b/drivers/freetype/freetype/src/cff/cffdrivr.h
index 50e8138701..50e8138701 100644
--- a/tools/freetype/freetype/src/cff/cffdrivr.h
+++ b/drivers/freetype/freetype/src/cff/cffdrivr.h
diff --git a/tools/freetype/freetype/src/cff/cfferrs.h b/drivers/freetype/freetype/src/cff/cfferrs.h
index 801d73ec6b..801d73ec6b 100644
--- a/tools/freetype/freetype/src/cff/cfferrs.h
+++ b/drivers/freetype/freetype/src/cff/cfferrs.h
diff --git a/tools/freetype/freetype/src/cff/cffgload.c b/drivers/freetype/freetype/src/cff/cffgload.c
index 6a8494fa9f..6a8494fa9f 100644
--- a/tools/freetype/freetype/src/cff/cffgload.c
+++ b/drivers/freetype/freetype/src/cff/cffgload.c
diff --git a/tools/freetype/freetype/src/cff/cffgload.h b/drivers/freetype/freetype/src/cff/cffgload.h
index 41df7db692..41df7db692 100644
--- a/tools/freetype/freetype/src/cff/cffgload.h
+++ b/drivers/freetype/freetype/src/cff/cffgload.h
diff --git a/tools/freetype/freetype/src/cff/cffload.c b/drivers/freetype/freetype/src/cff/cffload.c
index 64b497168d..64b497168d 100644
--- a/tools/freetype/freetype/src/cff/cffload.c
+++ b/drivers/freetype/freetype/src/cff/cffload.c
diff --git a/tools/freetype/freetype/src/cff/cffload.h b/drivers/freetype/freetype/src/cff/cffload.h
index 804961964b..804961964b 100644
--- a/tools/freetype/freetype/src/cff/cffload.h
+++ b/drivers/freetype/freetype/src/cff/cffload.h
diff --git a/tools/freetype/freetype/src/cff/cffobjs.c b/drivers/freetype/freetype/src/cff/cffobjs.c
index dd750d1041..dd750d1041 100644
--- a/tools/freetype/freetype/src/cff/cffobjs.c
+++ b/drivers/freetype/freetype/src/cff/cffobjs.c
diff --git a/tools/freetype/freetype/src/cff/cffobjs.h b/drivers/freetype/freetype/src/cff/cffobjs.h
index b375c20c74..b375c20c74 100644
--- a/tools/freetype/freetype/src/cff/cffobjs.h
+++ b/drivers/freetype/freetype/src/cff/cffobjs.h
diff --git a/tools/freetype/freetype/src/cff/cffparse.c b/drivers/freetype/freetype/src/cff/cffparse.c
index 96222120b0..96222120b0 100644
--- a/tools/freetype/freetype/src/cff/cffparse.c
+++ b/drivers/freetype/freetype/src/cff/cffparse.c
diff --git a/tools/freetype/freetype/src/cff/cffparse.h b/drivers/freetype/freetype/src/cff/cffparse.h
index 61d91ed2e2..61d91ed2e2 100644
--- a/tools/freetype/freetype/src/cff/cffparse.h
+++ b/drivers/freetype/freetype/src/cff/cffparse.h
diff --git a/tools/freetype/freetype/src/cff/cffpic.c b/drivers/freetype/freetype/src/cff/cffpic.c
index f22e4f0d53..f22e4f0d53 100644
--- a/tools/freetype/freetype/src/cff/cffpic.c
+++ b/drivers/freetype/freetype/src/cff/cffpic.c
diff --git a/tools/freetype/freetype/src/cff/cffpic.h b/drivers/freetype/freetype/src/cff/cffpic.h
index 50bab4c173..50bab4c173 100644
--- a/tools/freetype/freetype/src/cff/cffpic.h
+++ b/drivers/freetype/freetype/src/cff/cffpic.h
diff --git a/tools/freetype/freetype/src/cff/cfftoken.h b/drivers/freetype/freetype/src/cff/cfftoken.h
index bcb4276a78..bcb4276a78 100644
--- a/tools/freetype/freetype/src/cff/cfftoken.h
+++ b/drivers/freetype/freetype/src/cff/cfftoken.h
diff --git a/tools/freetype/freetype/src/cff/cfftypes.h b/drivers/freetype/freetype/src/cff/cfftypes.h
index 8727446664..8727446664 100644
--- a/tools/freetype/freetype/src/cff/cfftypes.h
+++ b/drivers/freetype/freetype/src/cff/cfftypes.h
diff --git a/tools/freetype/freetype/src/cff/module.mk b/drivers/freetype/freetype/src/cff/module.mk
index ef1391c279..ef1391c279 100644
--- a/tools/freetype/freetype/src/cff/module.mk
+++ b/drivers/freetype/freetype/src/cff/module.mk
diff --git a/tools/freetype/freetype/src/cff/rules.mk b/drivers/freetype/freetype/src/cff/rules.mk
index 13115c2550..13115c2550 100644
--- a/tools/freetype/freetype/src/cff/rules.mk
+++ b/drivers/freetype/freetype/src/cff/rules.mk
diff --git a/tools/freetype/freetype/src/cid/Jamfile b/drivers/freetype/freetype/src/cid/Jamfile
index ebeaed54ea..ebeaed54ea 100644
--- a/tools/freetype/freetype/src/cid/Jamfile
+++ b/drivers/freetype/freetype/src/cid/Jamfile
diff --git a/tools/freetype/freetype/src/cid/ciderrs.h b/drivers/freetype/freetype/src/cid/ciderrs.h
index ef13155504..ef13155504 100644
--- a/tools/freetype/freetype/src/cid/ciderrs.h
+++ b/drivers/freetype/freetype/src/cid/ciderrs.h
diff --git a/tools/freetype/freetype/src/cid/cidgload.c b/drivers/freetype/freetype/src/cid/cidgload.c
index a1a8658693..a1a8658693 100644
--- a/tools/freetype/freetype/src/cid/cidgload.c
+++ b/drivers/freetype/freetype/src/cid/cidgload.c
diff --git a/tools/freetype/freetype/src/cid/cidgload.h b/drivers/freetype/freetype/src/cid/cidgload.h
index a0a91bfea8..a0a91bfea8 100644
--- a/tools/freetype/freetype/src/cid/cidgload.h
+++ b/drivers/freetype/freetype/src/cid/cidgload.h
diff --git a/tools/freetype/freetype/src/cid/cidload.c b/drivers/freetype/freetype/src/cid/cidload.c
index f2a18ea510..f2a18ea510 100644
--- a/tools/freetype/freetype/src/cid/cidload.c
+++ b/drivers/freetype/freetype/src/cid/cidload.c
diff --git a/tools/freetype/freetype/src/cid/cidload.h b/drivers/freetype/freetype/src/cid/cidload.h
index 8c172ffee2..8c172ffee2 100644
--- a/tools/freetype/freetype/src/cid/cidload.h
+++ b/drivers/freetype/freetype/src/cid/cidload.h
diff --git a/tools/freetype/freetype/src/cid/cidobjs.c b/drivers/freetype/freetype/src/cid/cidobjs.c
index 46555e2dc8..46555e2dc8 100644
--- a/tools/freetype/freetype/src/cid/cidobjs.c
+++ b/drivers/freetype/freetype/src/cid/cidobjs.c
diff --git a/tools/freetype/freetype/src/cid/cidobjs.h b/drivers/freetype/freetype/src/cid/cidobjs.h
index aee346d1c8..aee346d1c8 100644
--- a/tools/freetype/freetype/src/cid/cidobjs.h
+++ b/drivers/freetype/freetype/src/cid/cidobjs.h
diff --git a/tools/freetype/freetype/src/cid/cidparse.c b/drivers/freetype/freetype/src/cid/cidparse.c
index 53df3155d1..53df3155d1 100644
--- a/tools/freetype/freetype/src/cid/cidparse.c
+++ b/drivers/freetype/freetype/src/cid/cidparse.c
diff --git a/tools/freetype/freetype/src/cid/cidparse.h b/drivers/freetype/freetype/src/cid/cidparse.h
index ca37deab93..ca37deab93 100644
--- a/tools/freetype/freetype/src/cid/cidparse.h
+++ b/drivers/freetype/freetype/src/cid/cidparse.h
diff --git a/tools/freetype/freetype/src/cid/cidriver.c b/drivers/freetype/freetype/src/cid/cidriver.c
index 6132a27763..6132a27763 100644
--- a/tools/freetype/freetype/src/cid/cidriver.c
+++ b/drivers/freetype/freetype/src/cid/cidriver.c
diff --git a/tools/freetype/freetype/src/cid/cidriver.h b/drivers/freetype/freetype/src/cid/cidriver.h
index 3c45e06886..3c45e06886 100644
--- a/tools/freetype/freetype/src/cid/cidriver.h
+++ b/drivers/freetype/freetype/src/cid/cidriver.h
diff --git a/tools/freetype/freetype/src/cid/cidtoken.h b/drivers/freetype/freetype/src/cid/cidtoken.h
index 904cb09cf4..904cb09cf4 100644
--- a/tools/freetype/freetype/src/cid/cidtoken.h
+++ b/drivers/freetype/freetype/src/cid/cidtoken.h
diff --git a/tools/freetype/freetype/src/cid/module.mk b/drivers/freetype/freetype/src/cid/module.mk
index ce30bfd7ae..ce30bfd7ae 100644
--- a/tools/freetype/freetype/src/cid/module.mk
+++ b/drivers/freetype/freetype/src/cid/module.mk
diff --git a/tools/freetype/freetype/src/cid/rules.mk b/drivers/freetype/freetype/src/cid/rules.mk
index f362744612..f362744612 100644
--- a/tools/freetype/freetype/src/cid/rules.mk
+++ b/drivers/freetype/freetype/src/cid/rules.mk
diff --git a/tools/freetype/freetype/src/cid/type1cid.c b/drivers/freetype/freetype/src/cid/type1cid.c
index 0b866e97c4..0b866e97c4 100644
--- a/tools/freetype/freetype/src/cid/type1cid.c
+++ b/drivers/freetype/freetype/src/cid/type1cid.c
diff --git a/tools/freetype/freetype/src/gxvalid/Jamfile b/drivers/freetype/freetype/src/gxvalid/Jamfile
index 88049a625d..88049a625d 100644
--- a/tools/freetype/freetype/src/gxvalid/Jamfile
+++ b/drivers/freetype/freetype/src/gxvalid/Jamfile
diff --git a/tools/freetype/freetype/src/gxvalid/README b/drivers/freetype/freetype/src/gxvalid/README
index 28e535b0bc..28e535b0bc 100644
--- a/tools/freetype/freetype/src/gxvalid/README
+++ b/drivers/freetype/freetype/src/gxvalid/README
diff --git a/tools/freetype/freetype/src/gxvalid/gxvalid.c b/drivers/freetype/freetype/src/gxvalid/gxvalid.c
index bc36e675d1..bc36e675d1 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvalid.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvalid.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvalid.h b/drivers/freetype/freetype/src/gxvalid/gxvalid.h
index 27be9ecca8..27be9ecca8 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvalid.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxvalid.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxvbsln.c b/drivers/freetype/freetype/src/gxvalid/gxvbsln.c
index 3d10031563..3d10031563 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvbsln.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvbsln.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvcommn.c b/drivers/freetype/freetype/src/gxvalid/gxvcommn.c
index 2ac80be8c7..2ac80be8c7 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvcommn.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvcommn.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvcommn.h b/drivers/freetype/freetype/src/gxvalid/gxvcommn.h
index 1ff87e4423..1ff87e4423 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvcommn.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxvcommn.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxverror.h b/drivers/freetype/freetype/src/gxvalid/gxverror.h
index c573b72de7..c573b72de7 100644
--- a/tools/freetype/freetype/src/gxvalid/gxverror.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxverror.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxvfeat.c b/drivers/freetype/freetype/src/gxvalid/gxvfeat.c
index 6f75650991..6f75650991 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvfeat.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvfeat.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvfeat.h b/drivers/freetype/freetype/src/gxvalid/gxvfeat.h
index 049d23a0b9..049d23a0b9 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvfeat.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxvfeat.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxvfgen.c b/drivers/freetype/freetype/src/gxvalid/gxvfgen.c
index e48778a2a1..e48778a2a1 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvfgen.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvfgen.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvjust.c b/drivers/freetype/freetype/src/gxvalid/gxvjust.c
index 7816e0b7fb..7816e0b7fb 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvjust.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvjust.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvkern.c b/drivers/freetype/freetype/src/gxvalid/gxvkern.c
index 557c5f1fe4..557c5f1fe4 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvkern.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvkern.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvlcar.c b/drivers/freetype/freetype/src/gxvalid/gxvlcar.c
index f14fa5b131..f14fa5b131 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvlcar.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvlcar.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmod.c b/drivers/freetype/freetype/src/gxvalid/gxvmod.c
index 278d47688a..278d47688a 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmod.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmod.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmod.h b/drivers/freetype/freetype/src/gxvalid/gxvmod.h
index 22732ba992..22732ba992 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmod.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmod.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort.c b/drivers/freetype/freetype/src/gxvalid/gxvmort.c
index 5356e67ca7..5356e67ca7 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort.h b/drivers/freetype/freetype/src/gxvalid/gxvmort.h
index 1e5a1f5ab6..1e5a1f5ab6 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort0.c b/drivers/freetype/freetype/src/gxvalid/gxvmort0.c
index b136ceda27..b136ceda27 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort0.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort0.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort1.c b/drivers/freetype/freetype/src/gxvalid/gxvmort1.c
index 1c17a5d92a..1c17a5d92a 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort1.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort1.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort2.c b/drivers/freetype/freetype/src/gxvalid/gxvmort2.c
index 9e08fb792a..9e08fb792a 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort2.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort2.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort4.c b/drivers/freetype/freetype/src/gxvalid/gxvmort4.c
index 83470988c0..83470988c0 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort4.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort4.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort5.c b/drivers/freetype/freetype/src/gxvalid/gxvmort5.c
index 32cfb03639..32cfb03639 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort5.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort5.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx.c b/drivers/freetype/freetype/src/gxvalid/gxvmorx.c
index 5ae04d3212..5ae04d3212 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx.h b/drivers/freetype/freetype/src/gxvalid/gxvmorx.h
index 28c1a44f6f..28c1a44f6f 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx0.c b/drivers/freetype/freetype/src/gxvalid/gxvmorx0.c
index 6a736c1775..6a736c1775 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx0.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx0.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx1.c b/drivers/freetype/freetype/src/gxvalid/gxvmorx1.c
index ce0009a16f..ce0009a16f 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx1.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx1.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx2.c b/drivers/freetype/freetype/src/gxvalid/gxvmorx2.c
index 9d2b0bc4af..9d2b0bc4af 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx2.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx2.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx4.c b/drivers/freetype/freetype/src/gxvalid/gxvmorx4.c
index c0d2f78e39..c0d2f78e39 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx4.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx4.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx5.c b/drivers/freetype/freetype/src/gxvalid/gxvmorx5.c
index d8cf700797..d8cf700797 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx5.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx5.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvopbd.c b/drivers/freetype/freetype/src/gxvalid/gxvopbd.c
index e125060946..e125060946 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvopbd.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvopbd.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvprop.c b/drivers/freetype/freetype/src/gxvalid/gxvprop.c
index 0be21336f8..0be21336f8 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvprop.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvprop.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvtrak.c b/drivers/freetype/freetype/src/gxvalid/gxvtrak.c
index 11fbd7ccfb..11fbd7ccfb 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvtrak.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvtrak.c
diff --git a/tools/freetype/freetype/src/gxvalid/module.mk b/drivers/freetype/freetype/src/gxvalid/module.mk
index 9fd098e2c5..9fd098e2c5 100644
--- a/tools/freetype/freetype/src/gxvalid/module.mk
+++ b/drivers/freetype/freetype/src/gxvalid/module.mk
diff --git a/tools/freetype/freetype/src/gxvalid/rules.mk b/drivers/freetype/freetype/src/gxvalid/rules.mk
index 57bc0823db..57bc0823db 100644
--- a/tools/freetype/freetype/src/gxvalid/rules.mk
+++ b/drivers/freetype/freetype/src/gxvalid/rules.mk
diff --git a/tools/freetype/freetype/src/otvalid/Jamfile b/drivers/freetype/freetype/src/otvalid/Jamfile
index b457143de4..b457143de4 100644
--- a/tools/freetype/freetype/src/otvalid/Jamfile
+++ b/drivers/freetype/freetype/src/otvalid/Jamfile
diff --git a/tools/freetype/freetype/src/otvalid/module.mk b/drivers/freetype/freetype/src/otvalid/module.mk
index 9cadde55e4..9cadde55e4 100644
--- a/tools/freetype/freetype/src/otvalid/module.mk
+++ b/drivers/freetype/freetype/src/otvalid/module.mk
diff --git a/tools/freetype/freetype/src/otvalid/otvalid.c b/drivers/freetype/freetype/src/otvalid/otvalid.c
index d5c2b75abb..d5c2b75abb 100644
--- a/tools/freetype/freetype/src/otvalid/otvalid.c
+++ b/drivers/freetype/freetype/src/otvalid/otvalid.c
diff --git a/tools/freetype/freetype/src/otvalid/otvalid.h b/drivers/freetype/freetype/src/otvalid/otvalid.h
index eb99b9cc48..eb99b9cc48 100644
--- a/tools/freetype/freetype/src/otvalid/otvalid.h
+++ b/drivers/freetype/freetype/src/otvalid/otvalid.h
diff --git a/tools/freetype/freetype/src/otvalid/otvbase.c b/drivers/freetype/freetype/src/otvalid/otvbase.c
index d742d2dc95..d742d2dc95 100644
--- a/tools/freetype/freetype/src/otvalid/otvbase.c
+++ b/drivers/freetype/freetype/src/otvalid/otvbase.c
diff --git a/tools/freetype/freetype/src/otvalid/otvcommn.c b/drivers/freetype/freetype/src/otvalid/otvcommn.c
index a4f885b51f..a4f885b51f 100644
--- a/tools/freetype/freetype/src/otvalid/otvcommn.c
+++ b/drivers/freetype/freetype/src/otvalid/otvcommn.c
diff --git a/tools/freetype/freetype/src/otvalid/otvcommn.h b/drivers/freetype/freetype/src/otvalid/otvcommn.h
index 898887fc95..898887fc95 100644
--- a/tools/freetype/freetype/src/otvalid/otvcommn.h
+++ b/drivers/freetype/freetype/src/otvalid/otvcommn.h
diff --git a/tools/freetype/freetype/src/otvalid/otverror.h b/drivers/freetype/freetype/src/otvalid/otverror.h
index b6f00c9dba..b6f00c9dba 100644
--- a/tools/freetype/freetype/src/otvalid/otverror.h
+++ b/drivers/freetype/freetype/src/otvalid/otverror.h
diff --git a/tools/freetype/freetype/src/otvalid/otvgdef.c b/drivers/freetype/freetype/src/otvalid/otvgdef.c
index 3633ad0de1..3633ad0de1 100644
--- a/tools/freetype/freetype/src/otvalid/otvgdef.c
+++ b/drivers/freetype/freetype/src/otvalid/otvgdef.c
diff --git a/tools/freetype/freetype/src/otvalid/otvgpos.c b/drivers/freetype/freetype/src/otvalid/otvgpos.c
index 49b46183a3..49b46183a3 100644
--- a/tools/freetype/freetype/src/otvalid/otvgpos.c
+++ b/drivers/freetype/freetype/src/otvalid/otvgpos.c
diff --git a/tools/freetype/freetype/src/otvalid/otvgpos.h b/drivers/freetype/freetype/src/otvalid/otvgpos.h
index 14ca408261..14ca408261 100644
--- a/tools/freetype/freetype/src/otvalid/otvgpos.h
+++ b/drivers/freetype/freetype/src/otvalid/otvgpos.h
diff --git a/tools/freetype/freetype/src/otvalid/otvgsub.c b/drivers/freetype/freetype/src/otvalid/otvgsub.c
index ed499d1e92..ed499d1e92 100644
--- a/tools/freetype/freetype/src/otvalid/otvgsub.c
+++ b/drivers/freetype/freetype/src/otvalid/otvgsub.c
diff --git a/tools/freetype/freetype/src/otvalid/otvjstf.c b/drivers/freetype/freetype/src/otvalid/otvjstf.c
index a616a23432..a616a23432 100644
--- a/tools/freetype/freetype/src/otvalid/otvjstf.c
+++ b/drivers/freetype/freetype/src/otvalid/otvjstf.c
diff --git a/tools/freetype/freetype/src/otvalid/otvmath.c b/drivers/freetype/freetype/src/otvalid/otvmath.c
index 96f841f2a9..96f841f2a9 100644
--- a/tools/freetype/freetype/src/otvalid/otvmath.c
+++ b/drivers/freetype/freetype/src/otvalid/otvmath.c
diff --git a/tools/freetype/freetype/src/otvalid/otvmod.c b/drivers/freetype/freetype/src/otvalid/otvmod.c
index 37c6e869dd..37c6e869dd 100644
--- a/tools/freetype/freetype/src/otvalid/otvmod.c
+++ b/drivers/freetype/freetype/src/otvalid/otvmod.c
diff --git a/tools/freetype/freetype/src/otvalid/otvmod.h b/drivers/freetype/freetype/src/otvalid/otvmod.h
index f7e1550787..f7e1550787 100644
--- a/tools/freetype/freetype/src/otvalid/otvmod.h
+++ b/drivers/freetype/freetype/src/otvalid/otvmod.h
diff --git a/tools/freetype/freetype/src/otvalid/rules.mk b/drivers/freetype/freetype/src/otvalid/rules.mk
index 53bd41e5e7..53bd41e5e7 100644
--- a/tools/freetype/freetype/src/otvalid/rules.mk
+++ b/drivers/freetype/freetype/src/otvalid/rules.mk
diff --git a/tools/freetype/freetype/src/pcf/Jamfile b/drivers/freetype/freetype/src/pcf/Jamfile
index 752fcac2a1..752fcac2a1 100644
--- a/tools/freetype/freetype/src/pcf/Jamfile
+++ b/drivers/freetype/freetype/src/pcf/Jamfile
diff --git a/tools/freetype/freetype/src/pcf/README b/drivers/freetype/freetype/src/pcf/README
index 10eff15fbe..10eff15fbe 100644
--- a/tools/freetype/freetype/src/pcf/README
+++ b/drivers/freetype/freetype/src/pcf/README
diff --git a/tools/freetype/freetype/src/pcf/module.mk b/drivers/freetype/freetype/src/pcf/module.mk
index df383ff0fb..df383ff0fb 100644
--- a/tools/freetype/freetype/src/pcf/module.mk
+++ b/drivers/freetype/freetype/src/pcf/module.mk
diff --git a/tools/freetype/freetype/src/pcf/pcf.c b/drivers/freetype/freetype/src/pcf/pcf.c
index 11d5b7b2a0..11d5b7b2a0 100644
--- a/tools/freetype/freetype/src/pcf/pcf.c
+++ b/drivers/freetype/freetype/src/pcf/pcf.c
diff --git a/tools/freetype/freetype/src/pcf/pcf.h b/drivers/freetype/freetype/src/pcf/pcf.h
index af0ffc3378..af0ffc3378 100644
--- a/tools/freetype/freetype/src/pcf/pcf.h
+++ b/drivers/freetype/freetype/src/pcf/pcf.h
diff --git a/tools/freetype/freetype/src/pcf/pcfdrivr.c b/drivers/freetype/freetype/src/pcf/pcfdrivr.c
index df25a645a0..df25a645a0 100644
--- a/tools/freetype/freetype/src/pcf/pcfdrivr.c
+++ b/drivers/freetype/freetype/src/pcf/pcfdrivr.c
diff --git a/tools/freetype/freetype/src/pcf/pcfdrivr.h b/drivers/freetype/freetype/src/pcf/pcfdrivr.h
index 54614951b5..54614951b5 100644
--- a/tools/freetype/freetype/src/pcf/pcfdrivr.h
+++ b/drivers/freetype/freetype/src/pcf/pcfdrivr.h
diff --git a/tools/freetype/freetype/src/pcf/pcferror.h b/drivers/freetype/freetype/src/pcf/pcferror.h
index e51fff8ea6..e51fff8ea6 100644
--- a/tools/freetype/freetype/src/pcf/pcferror.h
+++ b/drivers/freetype/freetype/src/pcf/pcferror.h
diff --git a/tools/freetype/freetype/src/pcf/pcfread.c b/drivers/freetype/freetype/src/pcf/pcfread.c
index 3c1bb7dfa2..3c1bb7dfa2 100644
--- a/tools/freetype/freetype/src/pcf/pcfread.c
+++ b/drivers/freetype/freetype/src/pcf/pcfread.c
diff --git a/tools/freetype/freetype/src/pcf/pcfread.h b/drivers/freetype/freetype/src/pcf/pcfread.h
index c9524f1346..c9524f1346 100644
--- a/tools/freetype/freetype/src/pcf/pcfread.h
+++ b/drivers/freetype/freetype/src/pcf/pcfread.h
diff --git a/tools/freetype/freetype/src/pcf/pcfutil.c b/drivers/freetype/freetype/src/pcf/pcfutil.c
index b91274f935..b91274f935 100644
--- a/tools/freetype/freetype/src/pcf/pcfutil.c
+++ b/drivers/freetype/freetype/src/pcf/pcfutil.c
diff --git a/tools/freetype/freetype/src/pcf/pcfutil.h b/drivers/freetype/freetype/src/pcf/pcfutil.h
index ce10fb541d..ce10fb541d 100644
--- a/tools/freetype/freetype/src/pcf/pcfutil.h
+++ b/drivers/freetype/freetype/src/pcf/pcfutil.h
diff --git a/tools/freetype/freetype/src/pcf/rules.mk b/drivers/freetype/freetype/src/pcf/rules.mk
index 78641528fa..78641528fa 100644
--- a/tools/freetype/freetype/src/pcf/rules.mk
+++ b/drivers/freetype/freetype/src/pcf/rules.mk
diff --git a/tools/freetype/freetype/src/pfr/Jamfile b/drivers/freetype/freetype/src/pfr/Jamfile
index 9e2f2b8d05..9e2f2b8d05 100644
--- a/tools/freetype/freetype/src/pfr/Jamfile
+++ b/drivers/freetype/freetype/src/pfr/Jamfile
diff --git a/tools/freetype/freetype/src/pfr/module.mk b/drivers/freetype/freetype/src/pfr/module.mk
index 8d1d28a9d2..8d1d28a9d2 100644
--- a/tools/freetype/freetype/src/pfr/module.mk
+++ b/drivers/freetype/freetype/src/pfr/module.mk
diff --git a/tools/freetype/freetype/src/pfr/pfr.c b/drivers/freetype/freetype/src/pfr/pfr.c
index eb2c4edb7e..eb2c4edb7e 100644
--- a/tools/freetype/freetype/src/pfr/pfr.c
+++ b/drivers/freetype/freetype/src/pfr/pfr.c
diff --git a/tools/freetype/freetype/src/pfr/pfrcmap.c b/drivers/freetype/freetype/src/pfr/pfrcmap.c
index 740c433d66..740c433d66 100644
--- a/tools/freetype/freetype/src/pfr/pfrcmap.c
+++ b/drivers/freetype/freetype/src/pfr/pfrcmap.c
diff --git a/tools/freetype/freetype/src/pfr/pfrcmap.h b/drivers/freetype/freetype/src/pfr/pfrcmap.h
index a626953054..a626953054 100644
--- a/tools/freetype/freetype/src/pfr/pfrcmap.h
+++ b/drivers/freetype/freetype/src/pfr/pfrcmap.h
diff --git a/tools/freetype/freetype/src/pfr/pfrdrivr.c b/drivers/freetype/freetype/src/pfr/pfrdrivr.c
index 4c43947bf4..4c43947bf4 100644
--- a/tools/freetype/freetype/src/pfr/pfrdrivr.c
+++ b/drivers/freetype/freetype/src/pfr/pfrdrivr.c
diff --git a/tools/freetype/freetype/src/pfr/pfrdrivr.h b/drivers/freetype/freetype/src/pfr/pfrdrivr.h
index 75f86c5cdd..75f86c5cdd 100644
--- a/tools/freetype/freetype/src/pfr/pfrdrivr.h
+++ b/drivers/freetype/freetype/src/pfr/pfrdrivr.h
diff --git a/tools/freetype/freetype/src/pfr/pfrerror.h b/drivers/freetype/freetype/src/pfr/pfrerror.h
index 94dc8c5e1c..94dc8c5e1c 100644
--- a/tools/freetype/freetype/src/pfr/pfrerror.h
+++ b/drivers/freetype/freetype/src/pfr/pfrerror.h
diff --git a/tools/freetype/freetype/src/pfr/pfrgload.c b/drivers/freetype/freetype/src/pfr/pfrgload.c
index 88b4d66a13..88b4d66a13 100644
--- a/tools/freetype/freetype/src/pfr/pfrgload.c
+++ b/drivers/freetype/freetype/src/pfr/pfrgload.c
diff --git a/tools/freetype/freetype/src/pfr/pfrgload.h b/drivers/freetype/freetype/src/pfr/pfrgload.h
index 7cc7a8702a..7cc7a8702a 100644
--- a/tools/freetype/freetype/src/pfr/pfrgload.h
+++ b/drivers/freetype/freetype/src/pfr/pfrgload.h
diff --git a/tools/freetype/freetype/src/pfr/pfrload.c b/drivers/freetype/freetype/src/pfr/pfrload.c
index c19fceb1ee..c19fceb1ee 100644
--- a/tools/freetype/freetype/src/pfr/pfrload.c
+++ b/drivers/freetype/freetype/src/pfr/pfrload.c
diff --git a/tools/freetype/freetype/src/pfr/pfrload.h b/drivers/freetype/freetype/src/pfr/pfrload.h
index ed010715d1..ed010715d1 100644
--- a/tools/freetype/freetype/src/pfr/pfrload.h
+++ b/drivers/freetype/freetype/src/pfr/pfrload.h
diff --git a/tools/freetype/freetype/src/pfr/pfrobjs.c b/drivers/freetype/freetype/src/pfr/pfrobjs.c
index 75fc4c3f1f..75fc4c3f1f 100644
--- a/tools/freetype/freetype/src/pfr/pfrobjs.c
+++ b/drivers/freetype/freetype/src/pfr/pfrobjs.c
diff --git a/tools/freetype/freetype/src/pfr/pfrobjs.h b/drivers/freetype/freetype/src/pfr/pfrobjs.h
index f6aa8b44cc..f6aa8b44cc 100644
--- a/tools/freetype/freetype/src/pfr/pfrobjs.h
+++ b/drivers/freetype/freetype/src/pfr/pfrobjs.h
diff --git a/tools/freetype/freetype/src/pfr/pfrsbit.c b/drivers/freetype/freetype/src/pfr/pfrsbit.c
index 2da1500707..2da1500707 100644
--- a/tools/freetype/freetype/src/pfr/pfrsbit.c
+++ b/drivers/freetype/freetype/src/pfr/pfrsbit.c
diff --git a/tools/freetype/freetype/src/pfr/pfrsbit.h b/drivers/freetype/freetype/src/pfr/pfrsbit.h
index 015e9e6dad..015e9e6dad 100644
--- a/tools/freetype/freetype/src/pfr/pfrsbit.h
+++ b/drivers/freetype/freetype/src/pfr/pfrsbit.h
diff --git a/tools/freetype/freetype/src/pfr/pfrtypes.h b/drivers/freetype/freetype/src/pfr/pfrtypes.h
index 918310814c..918310814c 100644
--- a/tools/freetype/freetype/src/pfr/pfrtypes.h
+++ b/drivers/freetype/freetype/src/pfr/pfrtypes.h
diff --git a/tools/freetype/freetype/src/pfr/rules.mk b/drivers/freetype/freetype/src/pfr/rules.mk
index 60b96c7415..60b96c7415 100644
--- a/tools/freetype/freetype/src/pfr/rules.mk
+++ b/drivers/freetype/freetype/src/pfr/rules.mk
diff --git a/tools/freetype/freetype/src/psaux/Jamfile b/drivers/freetype/freetype/src/psaux/Jamfile
index faeded9044..faeded9044 100644
--- a/tools/freetype/freetype/src/psaux/Jamfile
+++ b/drivers/freetype/freetype/src/psaux/Jamfile
diff --git a/tools/freetype/freetype/src/psaux/afmparse.c b/drivers/freetype/freetype/src/psaux/afmparse.c
index 6a40e110dc..6a40e110dc 100644
--- a/tools/freetype/freetype/src/psaux/afmparse.c
+++ b/drivers/freetype/freetype/src/psaux/afmparse.c
diff --git a/tools/freetype/freetype/src/psaux/afmparse.h b/drivers/freetype/freetype/src/psaux/afmparse.h
index 35d96046c5..35d96046c5 100644
--- a/tools/freetype/freetype/src/psaux/afmparse.h
+++ b/drivers/freetype/freetype/src/psaux/afmparse.h
diff --git a/tools/freetype/freetype/src/psaux/module.mk b/drivers/freetype/freetype/src/psaux/module.mk
index 42bf6f5199..42bf6f5199 100644
--- a/tools/freetype/freetype/src/psaux/module.mk
+++ b/drivers/freetype/freetype/src/psaux/module.mk
diff --git a/tools/freetype/freetype/src/psaux/psaux.c b/drivers/freetype/freetype/src/psaux/psaux.c
index a4b9c5c6e4..a4b9c5c6e4 100644
--- a/tools/freetype/freetype/src/psaux/psaux.c
+++ b/drivers/freetype/freetype/src/psaux/psaux.c
diff --git a/tools/freetype/freetype/src/psaux/psauxerr.h b/drivers/freetype/freetype/src/psaux/psauxerr.h
index d52375f8cb..d52375f8cb 100644
--- a/tools/freetype/freetype/src/psaux/psauxerr.h
+++ b/drivers/freetype/freetype/src/psaux/psauxerr.h
diff --git a/tools/freetype/freetype/src/psaux/psauxmod.c b/drivers/freetype/freetype/src/psaux/psauxmod.c
index 4b1249d49b..4b1249d49b 100644
--- a/tools/freetype/freetype/src/psaux/psauxmod.c
+++ b/drivers/freetype/freetype/src/psaux/psauxmod.c
diff --git a/tools/freetype/freetype/src/psaux/psauxmod.h b/drivers/freetype/freetype/src/psaux/psauxmod.h
index 1217236924..1217236924 100644
--- a/tools/freetype/freetype/src/psaux/psauxmod.h
+++ b/drivers/freetype/freetype/src/psaux/psauxmod.h
diff --git a/tools/freetype/freetype/src/psaux/psconv.c b/drivers/freetype/freetype/src/psaux/psconv.c
index d0d8861c22..d0d8861c22 100644
--- a/tools/freetype/freetype/src/psaux/psconv.c
+++ b/drivers/freetype/freetype/src/psaux/psconv.c
diff --git a/tools/freetype/freetype/src/psaux/psconv.h b/drivers/freetype/freetype/src/psaux/psconv.h
index d91c762210..d91c762210 100644
--- a/tools/freetype/freetype/src/psaux/psconv.h
+++ b/drivers/freetype/freetype/src/psaux/psconv.h
diff --git a/tools/freetype/freetype/src/psaux/psobjs.c b/drivers/freetype/freetype/src/psaux/psobjs.c
index dd976d3a96..dd976d3a96 100644
--- a/tools/freetype/freetype/src/psaux/psobjs.c
+++ b/drivers/freetype/freetype/src/psaux/psobjs.c
diff --git a/tools/freetype/freetype/src/psaux/psobjs.h b/drivers/freetype/freetype/src/psaux/psobjs.h
index e380c60dab..e380c60dab 100644
--- a/tools/freetype/freetype/src/psaux/psobjs.h
+++ b/drivers/freetype/freetype/src/psaux/psobjs.h
diff --git a/tools/freetype/freetype/src/psaux/rules.mk b/drivers/freetype/freetype/src/psaux/rules.mk
index 7a1be37b69..7a1be37b69 100644
--- a/tools/freetype/freetype/src/psaux/rules.mk
+++ b/drivers/freetype/freetype/src/psaux/rules.mk
diff --git a/tools/freetype/freetype/src/psaux/t1cmap.c b/drivers/freetype/freetype/src/psaux/t1cmap.c
index 9e5bd34ffe..9e5bd34ffe 100644
--- a/tools/freetype/freetype/src/psaux/t1cmap.c
+++ b/drivers/freetype/freetype/src/psaux/t1cmap.c
diff --git a/tools/freetype/freetype/src/psaux/t1cmap.h b/drivers/freetype/freetype/src/psaux/t1cmap.h
index 7ae65d2fa1..7ae65d2fa1 100644
--- a/tools/freetype/freetype/src/psaux/t1cmap.h
+++ b/drivers/freetype/freetype/src/psaux/t1cmap.h
diff --git a/tools/freetype/freetype/src/psaux/t1decode.c b/drivers/freetype/freetype/src/psaux/t1decode.c
index 6ce370bfaa..6ce370bfaa 100644
--- a/tools/freetype/freetype/src/psaux/t1decode.c
+++ b/drivers/freetype/freetype/src/psaux/t1decode.c
diff --git a/tools/freetype/freetype/src/psaux/t1decode.h b/drivers/freetype/freetype/src/psaux/t1decode.h
index 00728db501..00728db501 100644
--- a/tools/freetype/freetype/src/psaux/t1decode.h
+++ b/drivers/freetype/freetype/src/psaux/t1decode.h
diff --git a/tools/freetype/freetype/src/pshinter/Jamfile b/drivers/freetype/freetype/src/pshinter/Jamfile
index 779f1b0b82..779f1b0b82 100644
--- a/tools/freetype/freetype/src/pshinter/Jamfile
+++ b/drivers/freetype/freetype/src/pshinter/Jamfile
diff --git a/tools/freetype/freetype/src/pshinter/module.mk b/drivers/freetype/freetype/src/pshinter/module.mk
index ed24eb7fa8..ed24eb7fa8 100644
--- a/tools/freetype/freetype/src/pshinter/module.mk
+++ b/drivers/freetype/freetype/src/pshinter/module.mk
diff --git a/tools/freetype/freetype/src/pshinter/pshalgo.c b/drivers/freetype/freetype/src/pshinter/pshalgo.c
index 343472ddb3..343472ddb3 100644
--- a/tools/freetype/freetype/src/pshinter/pshalgo.c
+++ b/drivers/freetype/freetype/src/pshinter/pshalgo.c
diff --git a/tools/freetype/freetype/src/pshinter/pshalgo.h b/drivers/freetype/freetype/src/pshinter/pshalgo.h
index c70f31ea94..c70f31ea94 100644
--- a/tools/freetype/freetype/src/pshinter/pshalgo.h
+++ b/drivers/freetype/freetype/src/pshinter/pshalgo.h
diff --git a/tools/freetype/freetype/src/pshinter/pshglob.c b/drivers/freetype/freetype/src/pshinter/pshglob.c
index 9285efc9e1..9285efc9e1 100644
--- a/tools/freetype/freetype/src/pshinter/pshglob.c
+++ b/drivers/freetype/freetype/src/pshinter/pshglob.c
diff --git a/tools/freetype/freetype/src/pshinter/pshglob.h b/drivers/freetype/freetype/src/pshinter/pshglob.h
index c511626157..c511626157 100644
--- a/tools/freetype/freetype/src/pshinter/pshglob.h
+++ b/drivers/freetype/freetype/src/pshinter/pshglob.h
diff --git a/tools/freetype/freetype/src/pshinter/pshinter.c b/drivers/freetype/freetype/src/pshinter/pshinter.c
index b35a2a91c5..b35a2a91c5 100644
--- a/tools/freetype/freetype/src/pshinter/pshinter.c
+++ b/drivers/freetype/freetype/src/pshinter/pshinter.c
diff --git a/tools/freetype/freetype/src/pshinter/pshmod.c b/drivers/freetype/freetype/src/pshinter/pshmod.c
index cdeaca18c9..cdeaca18c9 100644
--- a/tools/freetype/freetype/src/pshinter/pshmod.c
+++ b/drivers/freetype/freetype/src/pshinter/pshmod.c
diff --git a/tools/freetype/freetype/src/pshinter/pshmod.h b/drivers/freetype/freetype/src/pshinter/pshmod.h
index 0ae7e96f54..0ae7e96f54 100644
--- a/tools/freetype/freetype/src/pshinter/pshmod.h
+++ b/drivers/freetype/freetype/src/pshinter/pshmod.h
diff --git a/tools/freetype/freetype/src/pshinter/pshnterr.h b/drivers/freetype/freetype/src/pshinter/pshnterr.h
index 7cc180f0ca..7cc180f0ca 100644
--- a/tools/freetype/freetype/src/pshinter/pshnterr.h
+++ b/drivers/freetype/freetype/src/pshinter/pshnterr.h
diff --git a/tools/freetype/freetype/src/pshinter/pshpic.c b/drivers/freetype/freetype/src/pshinter/pshpic.c
index 568f4ac4b0..568f4ac4b0 100644
--- a/tools/freetype/freetype/src/pshinter/pshpic.c
+++ b/drivers/freetype/freetype/src/pshinter/pshpic.c
diff --git a/tools/freetype/freetype/src/pshinter/pshpic.h b/drivers/freetype/freetype/src/pshinter/pshpic.h
index b46f853113..b46f853113 100644
--- a/tools/freetype/freetype/src/pshinter/pshpic.h
+++ b/drivers/freetype/freetype/src/pshinter/pshpic.h
diff --git a/tools/freetype/freetype/src/pshinter/pshrec.c b/drivers/freetype/freetype/src/pshinter/pshrec.c
index cd66ea869a..cd66ea869a 100644
--- a/tools/freetype/freetype/src/pshinter/pshrec.c
+++ b/drivers/freetype/freetype/src/pshinter/pshrec.c
diff --git a/tools/freetype/freetype/src/pshinter/pshrec.h b/drivers/freetype/freetype/src/pshinter/pshrec.h
index dcb3197f94..dcb3197f94 100644
--- a/tools/freetype/freetype/src/pshinter/pshrec.h
+++ b/drivers/freetype/freetype/src/pshinter/pshrec.h
diff --git a/tools/freetype/freetype/src/pshinter/rules.mk b/drivers/freetype/freetype/src/pshinter/rules.mk
index 888ece1058..888ece1058 100644
--- a/tools/freetype/freetype/src/pshinter/rules.mk
+++ b/drivers/freetype/freetype/src/pshinter/rules.mk
diff --git a/tools/freetype/freetype/src/psnames/Jamfile b/drivers/freetype/freetype/src/psnames/Jamfile
index 06c0dda66f..06c0dda66f 100644
--- a/tools/freetype/freetype/src/psnames/Jamfile
+++ b/drivers/freetype/freetype/src/psnames/Jamfile
diff --git a/tools/freetype/freetype/src/psnames/module.mk b/drivers/freetype/freetype/src/psnames/module.mk
index a6e908257c..a6e908257c 100644
--- a/tools/freetype/freetype/src/psnames/module.mk
+++ b/drivers/freetype/freetype/src/psnames/module.mk
diff --git a/tools/freetype/freetype/src/psnames/psmodule.c b/drivers/freetype/freetype/src/psnames/psmodule.c
index 0a5bcb7d2a..0a5bcb7d2a 100644
--- a/tools/freetype/freetype/src/psnames/psmodule.c
+++ b/drivers/freetype/freetype/src/psnames/psmodule.c
diff --git a/tools/freetype/freetype/src/psnames/psmodule.h b/drivers/freetype/freetype/src/psnames/psmodule.h
index 28fa14807c..28fa14807c 100644
--- a/tools/freetype/freetype/src/psnames/psmodule.h
+++ b/drivers/freetype/freetype/src/psnames/psmodule.h
diff --git a/tools/freetype/freetype/src/psnames/psnamerr.h b/drivers/freetype/freetype/src/psnames/psnamerr.h
index acda7f967e..acda7f967e 100644
--- a/tools/freetype/freetype/src/psnames/psnamerr.h
+++ b/drivers/freetype/freetype/src/psnames/psnamerr.h
diff --git a/tools/freetype/freetype/src/psnames/psnames.c b/drivers/freetype/freetype/src/psnames/psnames.c
index 1ede225dc9..1ede225dc9 100644
--- a/tools/freetype/freetype/src/psnames/psnames.c
+++ b/drivers/freetype/freetype/src/psnames/psnames.c
diff --git a/tools/freetype/freetype/src/psnames/pspic.c b/drivers/freetype/freetype/src/psnames/pspic.c
index 3820f65a74..3820f65a74 100644
--- a/tools/freetype/freetype/src/psnames/pspic.c
+++ b/drivers/freetype/freetype/src/psnames/pspic.c
diff --git a/tools/freetype/freetype/src/psnames/pspic.h b/drivers/freetype/freetype/src/psnames/pspic.h
index 6ff002c603..6ff002c603 100644
--- a/tools/freetype/freetype/src/psnames/pspic.h
+++ b/drivers/freetype/freetype/src/psnames/pspic.h
diff --git a/tools/freetype/freetype/src/psnames/pstables.h b/drivers/freetype/freetype/src/psnames/pstables.h
index 0a6637f985..0a6637f985 100644
--- a/tools/freetype/freetype/src/psnames/pstables.h
+++ b/drivers/freetype/freetype/src/psnames/pstables.h
diff --git a/tools/freetype/freetype/src/psnames/rules.mk b/drivers/freetype/freetype/src/psnames/rules.mk
index 4cd39a8ccf..4cd39a8ccf 100644
--- a/tools/freetype/freetype/src/psnames/rules.mk
+++ b/drivers/freetype/freetype/src/psnames/rules.mk
diff --git a/tools/freetype/freetype/src/raster/Jamfile b/drivers/freetype/freetype/src/raster/Jamfile
index 4f60e87c78..4f60e87c78 100644
--- a/tools/freetype/freetype/src/raster/Jamfile
+++ b/drivers/freetype/freetype/src/raster/Jamfile
diff --git a/tools/freetype/freetype/src/raster/ftmisc.h b/drivers/freetype/freetype/src/raster/ftmisc.h
index 703155a429..703155a429 100644
--- a/tools/freetype/freetype/src/raster/ftmisc.h
+++ b/drivers/freetype/freetype/src/raster/ftmisc.h
diff --git a/tools/freetype/freetype/src/raster/ftraster.c b/drivers/freetype/freetype/src/raster/ftraster.c
index bbd503d97d..bbd503d97d 100644
--- a/tools/freetype/freetype/src/raster/ftraster.c
+++ b/drivers/freetype/freetype/src/raster/ftraster.c
diff --git a/tools/freetype/freetype/src/raster/ftraster.h b/drivers/freetype/freetype/src/raster/ftraster.h
index 80fe46deba..80fe46deba 100644
--- a/tools/freetype/freetype/src/raster/ftraster.h
+++ b/drivers/freetype/freetype/src/raster/ftraster.h
diff --git a/tools/freetype/freetype/src/raster/ftrend1.c b/drivers/freetype/freetype/src/raster/ftrend1.c
index aa7f6d5664..aa7f6d5664 100644
--- a/tools/freetype/freetype/src/raster/ftrend1.c
+++ b/drivers/freetype/freetype/src/raster/ftrend1.c
diff --git a/tools/freetype/freetype/src/raster/ftrend1.h b/drivers/freetype/freetype/src/raster/ftrend1.h
index 4cf128622a..4cf128622a 100644
--- a/tools/freetype/freetype/src/raster/ftrend1.h
+++ b/drivers/freetype/freetype/src/raster/ftrend1.h
diff --git a/tools/freetype/freetype/src/raster/module.mk b/drivers/freetype/freetype/src/raster/module.mk
index cbff5df96e..cbff5df96e 100644
--- a/tools/freetype/freetype/src/raster/module.mk
+++ b/drivers/freetype/freetype/src/raster/module.mk
diff --git a/tools/freetype/freetype/src/raster/raster.c b/drivers/freetype/freetype/src/raster/raster.c
index 1202a116cd..1202a116cd 100644
--- a/tools/freetype/freetype/src/raster/raster.c
+++ b/drivers/freetype/freetype/src/raster/raster.c
diff --git a/tools/freetype/freetype/src/raster/rasterrs.h b/drivers/freetype/freetype/src/raster/rasterrs.h
index ab85c002a3..ab85c002a3 100644
--- a/tools/freetype/freetype/src/raster/rasterrs.h
+++ b/drivers/freetype/freetype/src/raster/rasterrs.h
diff --git a/tools/freetype/freetype/src/raster/rastpic.c b/drivers/freetype/freetype/src/raster/rastpic.c
index 5e9f7cc9c4..5e9f7cc9c4 100644
--- a/tools/freetype/freetype/src/raster/rastpic.c
+++ b/drivers/freetype/freetype/src/raster/rastpic.c
diff --git a/tools/freetype/freetype/src/raster/rastpic.h b/drivers/freetype/freetype/src/raster/rastpic.h
index e0ddba624e..e0ddba624e 100644
--- a/tools/freetype/freetype/src/raster/rastpic.h
+++ b/drivers/freetype/freetype/src/raster/rastpic.h
diff --git a/tools/freetype/freetype/src/raster/rules.mk b/drivers/freetype/freetype/src/raster/rules.mk
index 0e0b5e4ebd..0e0b5e4ebd 100644
--- a/tools/freetype/freetype/src/raster/rules.mk
+++ b/drivers/freetype/freetype/src/raster/rules.mk
diff --git a/tools/freetype/freetype/src/sfnt/Jamfile b/drivers/freetype/freetype/src/sfnt/Jamfile
index cb20b1b04b..cb20b1b04b 100644
--- a/tools/freetype/freetype/src/sfnt/Jamfile
+++ b/drivers/freetype/freetype/src/sfnt/Jamfile
diff --git a/tools/freetype/freetype/src/sfnt/module.mk b/drivers/freetype/freetype/src/sfnt/module.mk
index 95fd6a3143..95fd6a3143 100644
--- a/tools/freetype/freetype/src/sfnt/module.mk
+++ b/drivers/freetype/freetype/src/sfnt/module.mk
diff --git a/tools/freetype/freetype/src/sfnt/pngshim.c b/drivers/freetype/freetype/src/sfnt/pngshim.c
index 408f879c34..408f879c34 100644
--- a/tools/freetype/freetype/src/sfnt/pngshim.c
+++ b/drivers/freetype/freetype/src/sfnt/pngshim.c
diff --git a/tools/freetype/freetype/src/sfnt/pngshim.h b/drivers/freetype/freetype/src/sfnt/pngshim.h
index 8a2e69ccf9..8a2e69ccf9 100644
--- a/tools/freetype/freetype/src/sfnt/pngshim.h
+++ b/drivers/freetype/freetype/src/sfnt/pngshim.h
diff --git a/tools/freetype/freetype/src/sfnt/rules.mk b/drivers/freetype/freetype/src/sfnt/rules.mk
index a6c956ab65..a6c956ab65 100644
--- a/tools/freetype/freetype/src/sfnt/rules.mk
+++ b/drivers/freetype/freetype/src/sfnt/rules.mk
diff --git a/tools/freetype/freetype/src/sfnt/sfdriver.c b/drivers/freetype/freetype/src/sfnt/sfdriver.c
index a368b8caea..a368b8caea 100644
--- a/tools/freetype/freetype/src/sfnt/sfdriver.c
+++ b/drivers/freetype/freetype/src/sfnt/sfdriver.c
diff --git a/tools/freetype/freetype/src/sfnt/sfdriver.h b/drivers/freetype/freetype/src/sfnt/sfdriver.h
index 5de25d51ca..5de25d51ca 100644
--- a/tools/freetype/freetype/src/sfnt/sfdriver.h
+++ b/drivers/freetype/freetype/src/sfnt/sfdriver.h
diff --git a/tools/freetype/freetype/src/sfnt/sferrors.h b/drivers/freetype/freetype/src/sfnt/sferrors.h
index e981e1d26f..e981e1d26f 100644
--- a/tools/freetype/freetype/src/sfnt/sferrors.h
+++ b/drivers/freetype/freetype/src/sfnt/sferrors.h
diff --git a/tools/freetype/freetype/src/sfnt/sfnt.c b/drivers/freetype/freetype/src/sfnt/sfnt.c
index d62ed4e0b5..d62ed4e0b5 100644
--- a/tools/freetype/freetype/src/sfnt/sfnt.c
+++ b/drivers/freetype/freetype/src/sfnt/sfnt.c
diff --git a/tools/freetype/freetype/src/sfnt/sfntpic.c b/drivers/freetype/freetype/src/sfnt/sfntpic.c
index b3fb24b3f0..b3fb24b3f0 100644
--- a/tools/freetype/freetype/src/sfnt/sfntpic.c
+++ b/drivers/freetype/freetype/src/sfnt/sfntpic.c
diff --git a/tools/freetype/freetype/src/sfnt/sfntpic.h b/drivers/freetype/freetype/src/sfnt/sfntpic.h
index b09a9141e0..b09a9141e0 100644
--- a/tools/freetype/freetype/src/sfnt/sfntpic.h
+++ b/drivers/freetype/freetype/src/sfnt/sfntpic.h
diff --git a/tools/freetype/freetype/src/sfnt/sfobjs.c b/drivers/freetype/freetype/src/sfnt/sfobjs.c
index f975e71c3b..f975e71c3b 100644
--- a/tools/freetype/freetype/src/sfnt/sfobjs.c
+++ b/drivers/freetype/freetype/src/sfnt/sfobjs.c
diff --git a/tools/freetype/freetype/src/sfnt/sfobjs.h b/drivers/freetype/freetype/src/sfnt/sfobjs.h
index 6241c93b39..6241c93b39 100644
--- a/tools/freetype/freetype/src/sfnt/sfobjs.h
+++ b/drivers/freetype/freetype/src/sfnt/sfobjs.h
diff --git a/tools/freetype/freetype/src/sfnt/ttbdf.c b/drivers/freetype/freetype/src/sfnt/ttbdf.c
index 9401dae5f8..9401dae5f8 100644
--- a/tools/freetype/freetype/src/sfnt/ttbdf.c
+++ b/drivers/freetype/freetype/src/sfnt/ttbdf.c
diff --git a/tools/freetype/freetype/src/sfnt/ttbdf.h b/drivers/freetype/freetype/src/sfnt/ttbdf.h
index 48a10d6e9b..48a10d6e9b 100644
--- a/tools/freetype/freetype/src/sfnt/ttbdf.h
+++ b/drivers/freetype/freetype/src/sfnt/ttbdf.h
diff --git a/tools/freetype/freetype/src/sfnt/ttcmap.c b/drivers/freetype/freetype/src/sfnt/ttcmap.c
index 1507202ea8..1507202ea8 100644
--- a/tools/freetype/freetype/src/sfnt/ttcmap.c
+++ b/drivers/freetype/freetype/src/sfnt/ttcmap.c
diff --git a/tools/freetype/freetype/src/sfnt/ttcmap.h b/drivers/freetype/freetype/src/sfnt/ttcmap.h
index 0fde1676bf..0fde1676bf 100644
--- a/tools/freetype/freetype/src/sfnt/ttcmap.h
+++ b/drivers/freetype/freetype/src/sfnt/ttcmap.h
diff --git a/tools/freetype/freetype/src/sfnt/ttcmapc.h b/drivers/freetype/freetype/src/sfnt/ttcmapc.h
index 2ea204309c..2ea204309c 100644
--- a/tools/freetype/freetype/src/sfnt/ttcmapc.h
+++ b/drivers/freetype/freetype/src/sfnt/ttcmapc.h
diff --git a/tools/freetype/freetype/src/sfnt/ttkern.c b/drivers/freetype/freetype/src/sfnt/ttkern.c
index 60ee546d79..60ee546d79 100644
--- a/tools/freetype/freetype/src/sfnt/ttkern.c
+++ b/drivers/freetype/freetype/src/sfnt/ttkern.c
diff --git a/tools/freetype/freetype/src/sfnt/ttkern.h b/drivers/freetype/freetype/src/sfnt/ttkern.h
index df1da9b273..df1da9b273 100644
--- a/tools/freetype/freetype/src/sfnt/ttkern.h
+++ b/drivers/freetype/freetype/src/sfnt/ttkern.h
diff --git a/tools/freetype/freetype/src/sfnt/ttload.c b/drivers/freetype/freetype/src/sfnt/ttload.c
index fbe70f7974..fbe70f7974 100644
--- a/tools/freetype/freetype/src/sfnt/ttload.c
+++ b/drivers/freetype/freetype/src/sfnt/ttload.c
diff --git a/tools/freetype/freetype/src/sfnt/ttload.h b/drivers/freetype/freetype/src/sfnt/ttload.h
index 49a1aee163..49a1aee163 100644
--- a/tools/freetype/freetype/src/sfnt/ttload.h
+++ b/drivers/freetype/freetype/src/sfnt/ttload.h
diff --git a/tools/freetype/freetype/src/sfnt/ttmtx.c b/drivers/freetype/freetype/src/sfnt/ttmtx.c
index 371a9edabe..371a9edabe 100644
--- a/tools/freetype/freetype/src/sfnt/ttmtx.c
+++ b/drivers/freetype/freetype/src/sfnt/ttmtx.c
diff --git a/tools/freetype/freetype/src/sfnt/ttmtx.h b/drivers/freetype/freetype/src/sfnt/ttmtx.h
index 8b91a113d8..8b91a113d8 100644
--- a/tools/freetype/freetype/src/sfnt/ttmtx.h
+++ b/drivers/freetype/freetype/src/sfnt/ttmtx.h
diff --git a/tools/freetype/freetype/src/sfnt/ttpost.c b/drivers/freetype/freetype/src/sfnt/ttpost.c
index 47a85c0c9f..47a85c0c9f 100644
--- a/tools/freetype/freetype/src/sfnt/ttpost.c
+++ b/drivers/freetype/freetype/src/sfnt/ttpost.c
diff --git a/tools/freetype/freetype/src/sfnt/ttpost.h b/drivers/freetype/freetype/src/sfnt/ttpost.h
index 6f06d75a71..6f06d75a71 100644
--- a/tools/freetype/freetype/src/sfnt/ttpost.h
+++ b/drivers/freetype/freetype/src/sfnt/ttpost.h
diff --git a/tools/freetype/freetype/src/sfnt/ttsbit.c b/drivers/freetype/freetype/src/sfnt/ttsbit.c
index cd3e5a4a00..cd3e5a4a00 100644
--- a/tools/freetype/freetype/src/sfnt/ttsbit.c
+++ b/drivers/freetype/freetype/src/sfnt/ttsbit.c
diff --git a/tools/freetype/freetype/src/sfnt/ttsbit.h b/drivers/freetype/freetype/src/sfnt/ttsbit.h
index ea0b5f8ada..ea0b5f8ada 100644
--- a/tools/freetype/freetype/src/sfnt/ttsbit.h
+++ b/drivers/freetype/freetype/src/sfnt/ttsbit.h
diff --git a/tools/freetype/freetype/src/smooth/Jamfile b/drivers/freetype/freetype/src/smooth/Jamfile
index a8496aa2c2..a8496aa2c2 100644
--- a/tools/freetype/freetype/src/smooth/Jamfile
+++ b/drivers/freetype/freetype/src/smooth/Jamfile
diff --git a/tools/freetype/freetype/src/smooth/ftgrays.c b/drivers/freetype/freetype/src/smooth/ftgrays.c
index 7532a35829..7532a35829 100644
--- a/tools/freetype/freetype/src/smooth/ftgrays.c
+++ b/drivers/freetype/freetype/src/smooth/ftgrays.c
diff --git a/tools/freetype/freetype/src/smooth/ftgrays.h b/drivers/freetype/freetype/src/smooth/ftgrays.h
index f20f55f14b..f20f55f14b 100644
--- a/tools/freetype/freetype/src/smooth/ftgrays.h
+++ b/drivers/freetype/freetype/src/smooth/ftgrays.h
diff --git a/tools/freetype/freetype/src/smooth/ftsmerrs.h b/drivers/freetype/freetype/src/smooth/ftsmerrs.h
index 413d2f1f70..413d2f1f70 100644
--- a/tools/freetype/freetype/src/smooth/ftsmerrs.h
+++ b/drivers/freetype/freetype/src/smooth/ftsmerrs.h
diff --git a/tools/freetype/freetype/src/smooth/ftsmooth.c b/drivers/freetype/freetype/src/smooth/ftsmooth.c
index 89088cd091..89088cd091 100644
--- a/tools/freetype/freetype/src/smooth/ftsmooth.c
+++ b/drivers/freetype/freetype/src/smooth/ftsmooth.c
diff --git a/tools/freetype/freetype/src/smooth/ftsmooth.h b/drivers/freetype/freetype/src/smooth/ftsmooth.h
index 3708790df1..3708790df1 100644
--- a/tools/freetype/freetype/src/smooth/ftsmooth.h
+++ b/drivers/freetype/freetype/src/smooth/ftsmooth.h
diff --git a/tools/freetype/freetype/src/smooth/ftspic.c b/drivers/freetype/freetype/src/smooth/ftspic.c
index 67a2b8310c..67a2b8310c 100644
--- a/tools/freetype/freetype/src/smooth/ftspic.c
+++ b/drivers/freetype/freetype/src/smooth/ftspic.c
diff --git a/tools/freetype/freetype/src/smooth/ftspic.h b/drivers/freetype/freetype/src/smooth/ftspic.h
index 334b51c3f1..334b51c3f1 100644
--- a/tools/freetype/freetype/src/smooth/ftspic.h
+++ b/drivers/freetype/freetype/src/smooth/ftspic.h
diff --git a/tools/freetype/freetype/src/smooth/module.mk b/drivers/freetype/freetype/src/smooth/module.mk
index 47f6c04076..47f6c04076 100644
--- a/tools/freetype/freetype/src/smooth/module.mk
+++ b/drivers/freetype/freetype/src/smooth/module.mk
diff --git a/tools/freetype/freetype/src/smooth/rules.mk b/drivers/freetype/freetype/src/smooth/rules.mk
index 88d0aa53ac..88d0aa53ac 100644
--- a/tools/freetype/freetype/src/smooth/rules.mk
+++ b/drivers/freetype/freetype/src/smooth/rules.mk
diff --git a/tools/freetype/freetype/src/smooth/smooth.c b/drivers/freetype/freetype/src/smooth/smooth.c
index a8ac51f9f8..a8ac51f9f8 100644
--- a/tools/freetype/freetype/src/smooth/smooth.c
+++ b/drivers/freetype/freetype/src/smooth/smooth.c
diff --git a/tools/freetype/freetype/src/truetype/Jamfile b/drivers/freetype/freetype/src/truetype/Jamfile
index a8cccfe137..a8cccfe137 100644
--- a/tools/freetype/freetype/src/truetype/Jamfile
+++ b/drivers/freetype/freetype/src/truetype/Jamfile
diff --git a/tools/freetype/freetype/src/truetype/module.mk b/drivers/freetype/freetype/src/truetype/module.mk
index baee81a773..baee81a773 100644
--- a/tools/freetype/freetype/src/truetype/module.mk
+++ b/drivers/freetype/freetype/src/truetype/module.mk
diff --git a/tools/freetype/freetype/src/truetype/rules.mk b/drivers/freetype/freetype/src/truetype/rules.mk
index d4b69f578b..d4b69f578b 100644
--- a/tools/freetype/freetype/src/truetype/rules.mk
+++ b/drivers/freetype/freetype/src/truetype/rules.mk
diff --git a/tools/freetype/freetype/src/truetype/truetype.c b/drivers/freetype/freetype/src/truetype/truetype.c
index 576912b219..576912b219 100644
--- a/tools/freetype/freetype/src/truetype/truetype.c
+++ b/drivers/freetype/freetype/src/truetype/truetype.c
diff --git a/tools/freetype/freetype/src/truetype/ttdriver.c b/drivers/freetype/freetype/src/truetype/ttdriver.c
index fb25706ab8..fb25706ab8 100644
--- a/tools/freetype/freetype/src/truetype/ttdriver.c
+++ b/drivers/freetype/freetype/src/truetype/ttdriver.c
diff --git a/tools/freetype/freetype/src/truetype/ttdriver.h b/drivers/freetype/freetype/src/truetype/ttdriver.h
index aae00f2617..aae00f2617 100644
--- a/tools/freetype/freetype/src/truetype/ttdriver.h
+++ b/drivers/freetype/freetype/src/truetype/ttdriver.h
diff --git a/tools/freetype/freetype/src/truetype/tterrors.h b/drivers/freetype/freetype/src/truetype/tterrors.h
index 78d138fab2..78d138fab2 100644
--- a/tools/freetype/freetype/src/truetype/tterrors.h
+++ b/drivers/freetype/freetype/src/truetype/tterrors.h
diff --git a/tools/freetype/freetype/src/truetype/ttgload.c b/drivers/freetype/freetype/src/truetype/ttgload.c
index f640a6c78e..f640a6c78e 100644
--- a/tools/freetype/freetype/src/truetype/ttgload.c
+++ b/drivers/freetype/freetype/src/truetype/ttgload.c
diff --git a/tools/freetype/freetype/src/truetype/ttgload.h b/drivers/freetype/freetype/src/truetype/ttgload.h
index 05f75882dc..05f75882dc 100644
--- a/tools/freetype/freetype/src/truetype/ttgload.h
+++ b/drivers/freetype/freetype/src/truetype/ttgload.h
diff --git a/tools/freetype/freetype/src/truetype/ttgxvar.c b/drivers/freetype/freetype/src/truetype/ttgxvar.c
index 7899d3671d..7899d3671d 100644
--- a/tools/freetype/freetype/src/truetype/ttgxvar.c
+++ b/drivers/freetype/freetype/src/truetype/ttgxvar.c
diff --git a/tools/freetype/freetype/src/truetype/ttgxvar.h b/drivers/freetype/freetype/src/truetype/ttgxvar.h
index 82dfc4431f..82dfc4431f 100644
--- a/tools/freetype/freetype/src/truetype/ttgxvar.h
+++ b/drivers/freetype/freetype/src/truetype/ttgxvar.h
diff --git a/tools/freetype/freetype/src/truetype/ttinterp.c b/drivers/freetype/freetype/src/truetype/ttinterp.c
index e7ffb987ce..e7ffb987ce 100644
--- a/tools/freetype/freetype/src/truetype/ttinterp.c
+++ b/drivers/freetype/freetype/src/truetype/ttinterp.c
diff --git a/tools/freetype/freetype/src/truetype/ttinterp.h b/drivers/freetype/freetype/src/truetype/ttinterp.h
index 69f5011ed4..69f5011ed4 100644
--- a/tools/freetype/freetype/src/truetype/ttinterp.h
+++ b/drivers/freetype/freetype/src/truetype/ttinterp.h
diff --git a/tools/freetype/freetype/src/truetype/ttobjs.c b/drivers/freetype/freetype/src/truetype/ttobjs.c
index 7897efa77a..7897efa77a 100644
--- a/tools/freetype/freetype/src/truetype/ttobjs.c
+++ b/drivers/freetype/freetype/src/truetype/ttobjs.c
diff --git a/tools/freetype/freetype/src/truetype/ttobjs.h b/drivers/freetype/freetype/src/truetype/ttobjs.h
index a11dd3752a..a11dd3752a 100644
--- a/tools/freetype/freetype/src/truetype/ttobjs.h
+++ b/drivers/freetype/freetype/src/truetype/ttobjs.h
diff --git a/tools/freetype/freetype/src/truetype/ttpic.c b/drivers/freetype/freetype/src/truetype/ttpic.c
index edefae72c5..edefae72c5 100644
--- a/tools/freetype/freetype/src/truetype/ttpic.c
+++ b/drivers/freetype/freetype/src/truetype/ttpic.c
diff --git a/tools/freetype/freetype/src/truetype/ttpic.h b/drivers/freetype/freetype/src/truetype/ttpic.h
index cfb4ee6281..cfb4ee6281 100644
--- a/tools/freetype/freetype/src/truetype/ttpic.h
+++ b/drivers/freetype/freetype/src/truetype/ttpic.h
diff --git a/tools/freetype/freetype/src/truetype/ttpload.c b/drivers/freetype/freetype/src/truetype/ttpload.c
index 9723a515b9..9723a515b9 100644
--- a/tools/freetype/freetype/src/truetype/ttpload.c
+++ b/drivers/freetype/freetype/src/truetype/ttpload.c
diff --git a/tools/freetype/freetype/src/truetype/ttpload.h b/drivers/freetype/freetype/src/truetype/ttpload.h
index f61ac079ce..f61ac079ce 100644
--- a/tools/freetype/freetype/src/truetype/ttpload.h
+++ b/drivers/freetype/freetype/src/truetype/ttpload.h
diff --git a/tools/freetype/freetype/src/truetype/ttsubpix.c b/drivers/freetype/freetype/src/truetype/ttsubpix.c
index 28470ad655..28470ad655 100644
--- a/tools/freetype/freetype/src/truetype/ttsubpix.c
+++ b/drivers/freetype/freetype/src/truetype/ttsubpix.c
diff --git a/tools/freetype/freetype/src/truetype/ttsubpix.h b/drivers/freetype/freetype/src/truetype/ttsubpix.h
index 8a54fc7cc7..8a54fc7cc7 100644
--- a/tools/freetype/freetype/src/truetype/ttsubpix.h
+++ b/drivers/freetype/freetype/src/truetype/ttsubpix.h
diff --git a/tools/freetype/freetype/src/type1/Jamfile b/drivers/freetype/freetype/src/type1/Jamfile
index 8e366baae5..8e366baae5 100644
--- a/tools/freetype/freetype/src/type1/Jamfile
+++ b/drivers/freetype/freetype/src/type1/Jamfile
diff --git a/tools/freetype/freetype/src/type1/module.mk b/drivers/freetype/freetype/src/type1/module.mk
index ade0210d76..ade0210d76 100644
--- a/tools/freetype/freetype/src/type1/module.mk
+++ b/drivers/freetype/freetype/src/type1/module.mk
diff --git a/tools/freetype/freetype/src/type1/rules.mk b/drivers/freetype/freetype/src/type1/rules.mk
index 15087b0304..15087b0304 100644
--- a/tools/freetype/freetype/src/type1/rules.mk
+++ b/drivers/freetype/freetype/src/type1/rules.mk
diff --git a/tools/freetype/freetype/src/type1/t1afm.c b/drivers/freetype/freetype/src/type1/t1afm.c
index de9c1997c4..de9c1997c4 100644
--- a/tools/freetype/freetype/src/type1/t1afm.c
+++ b/drivers/freetype/freetype/src/type1/t1afm.c
diff --git a/tools/freetype/freetype/src/type1/t1afm.h b/drivers/freetype/freetype/src/type1/t1afm.h
index 8eb1764de7..8eb1764de7 100644
--- a/tools/freetype/freetype/src/type1/t1afm.h
+++ b/drivers/freetype/freetype/src/type1/t1afm.h
diff --git a/tools/freetype/freetype/src/type1/t1driver.c b/drivers/freetype/freetype/src/type1/t1driver.c
index 697288d66d..697288d66d 100644
--- a/tools/freetype/freetype/src/type1/t1driver.c
+++ b/drivers/freetype/freetype/src/type1/t1driver.c
diff --git a/tools/freetype/freetype/src/type1/t1driver.h b/drivers/freetype/freetype/src/type1/t1driver.h
index 639cd4a7ad..639cd4a7ad 100644
--- a/tools/freetype/freetype/src/type1/t1driver.h
+++ b/drivers/freetype/freetype/src/type1/t1driver.h
diff --git a/tools/freetype/freetype/src/type1/t1errors.h b/drivers/freetype/freetype/src/type1/t1errors.h
index 8740530eef..8740530eef 100644
--- a/tools/freetype/freetype/src/type1/t1errors.h
+++ b/drivers/freetype/freetype/src/type1/t1errors.h
diff --git a/tools/freetype/freetype/src/type1/t1gload.c b/drivers/freetype/freetype/src/type1/t1gload.c
index 23478d1288..23478d1288 100644
--- a/tools/freetype/freetype/src/type1/t1gload.c
+++ b/drivers/freetype/freetype/src/type1/t1gload.c
diff --git a/tools/freetype/freetype/src/type1/t1gload.h b/drivers/freetype/freetype/src/type1/t1gload.h
index 0bdea3a8d5..0bdea3a8d5 100644
--- a/tools/freetype/freetype/src/type1/t1gload.h
+++ b/drivers/freetype/freetype/src/type1/t1gload.h
diff --git a/tools/freetype/freetype/src/type1/t1load.c b/drivers/freetype/freetype/src/type1/t1load.c
index 1c834a17bb..1c834a17bb 100644
--- a/tools/freetype/freetype/src/type1/t1load.c
+++ b/drivers/freetype/freetype/src/type1/t1load.c
diff --git a/tools/freetype/freetype/src/type1/t1load.h b/drivers/freetype/freetype/src/type1/t1load.h
index 546fc33530..546fc33530 100644
--- a/tools/freetype/freetype/src/type1/t1load.h
+++ b/drivers/freetype/freetype/src/type1/t1load.h
diff --git a/tools/freetype/freetype/src/type1/t1objs.c b/drivers/freetype/freetype/src/type1/t1objs.c
index 837b7911d4..837b7911d4 100644
--- a/tools/freetype/freetype/src/type1/t1objs.c
+++ b/drivers/freetype/freetype/src/type1/t1objs.c
diff --git a/tools/freetype/freetype/src/type1/t1objs.h b/drivers/freetype/freetype/src/type1/t1objs.h
index 54ccbb996a..54ccbb996a 100644
--- a/tools/freetype/freetype/src/type1/t1objs.h
+++ b/drivers/freetype/freetype/src/type1/t1objs.h
diff --git a/tools/freetype/freetype/src/type1/t1parse.c b/drivers/freetype/freetype/src/type1/t1parse.c
index 106e4e7ecd..106e4e7ecd 100644
--- a/tools/freetype/freetype/src/type1/t1parse.c
+++ b/drivers/freetype/freetype/src/type1/t1parse.c
diff --git a/tools/freetype/freetype/src/type1/t1parse.h b/drivers/freetype/freetype/src/type1/t1parse.h
index fb1c8a8830..fb1c8a8830 100644
--- a/tools/freetype/freetype/src/type1/t1parse.h
+++ b/drivers/freetype/freetype/src/type1/t1parse.h
diff --git a/tools/freetype/freetype/src/type1/t1tokens.h b/drivers/freetype/freetype/src/type1/t1tokens.h
index e37276b908..e37276b908 100644
--- a/tools/freetype/freetype/src/type1/t1tokens.h
+++ b/drivers/freetype/freetype/src/type1/t1tokens.h
diff --git a/tools/freetype/freetype/src/type1/type1.c b/drivers/freetype/freetype/src/type1/type1.c
index ccc12be103..ccc12be103 100644
--- a/tools/freetype/freetype/src/type1/type1.c
+++ b/drivers/freetype/freetype/src/type1/type1.c
diff --git a/tools/freetype/freetype/src/type42/Jamfile b/drivers/freetype/freetype/src/type42/Jamfile
index 00371d54f3..00371d54f3 100644
--- a/tools/freetype/freetype/src/type42/Jamfile
+++ b/drivers/freetype/freetype/src/type42/Jamfile
diff --git a/tools/freetype/freetype/src/type42/module.mk b/drivers/freetype/freetype/src/type42/module.mk
index b3f10a8d3c..b3f10a8d3c 100644
--- a/tools/freetype/freetype/src/type42/module.mk
+++ b/drivers/freetype/freetype/src/type42/module.mk
diff --git a/tools/freetype/freetype/src/type42/rules.mk b/drivers/freetype/freetype/src/type42/rules.mk
index eac1081eb1..eac1081eb1 100644
--- a/tools/freetype/freetype/src/type42/rules.mk
+++ b/drivers/freetype/freetype/src/type42/rules.mk
diff --git a/tools/freetype/freetype/src/type42/t42drivr.c b/drivers/freetype/freetype/src/type42/t42drivr.c
index 3ad1bde79f..3ad1bde79f 100644
--- a/tools/freetype/freetype/src/type42/t42drivr.c
+++ b/drivers/freetype/freetype/src/type42/t42drivr.c
diff --git a/tools/freetype/freetype/src/type42/t42drivr.h b/drivers/freetype/freetype/src/type42/t42drivr.h
index 9a1e97e30e..9a1e97e30e 100644
--- a/tools/freetype/freetype/src/type42/t42drivr.h
+++ b/drivers/freetype/freetype/src/type42/t42drivr.h
diff --git a/tools/freetype/freetype/src/type42/t42error.h b/drivers/freetype/freetype/src/type42/t42error.h
index 217ae8bd52..217ae8bd52 100644
--- a/tools/freetype/freetype/src/type42/t42error.h
+++ b/drivers/freetype/freetype/src/type42/t42error.h
diff --git a/tools/freetype/freetype/src/type42/t42objs.c b/drivers/freetype/freetype/src/type42/t42objs.c
index 18e2c0b625..18e2c0b625 100644
--- a/tools/freetype/freetype/src/type42/t42objs.c
+++ b/drivers/freetype/freetype/src/type42/t42objs.c
diff --git a/tools/freetype/freetype/src/type42/t42objs.h b/drivers/freetype/freetype/src/type42/t42objs.h
index 02d13259be..02d13259be 100644
--- a/tools/freetype/freetype/src/type42/t42objs.h
+++ b/drivers/freetype/freetype/src/type42/t42objs.h
diff --git a/tools/freetype/freetype/src/type42/t42parse.c b/drivers/freetype/freetype/src/type42/t42parse.c
index 3cdd8a1acf..3cdd8a1acf 100644
--- a/tools/freetype/freetype/src/type42/t42parse.c
+++ b/drivers/freetype/freetype/src/type42/t42parse.c
diff --git a/tools/freetype/freetype/src/type42/t42parse.h b/drivers/freetype/freetype/src/type42/t42parse.h
index f77ec4af4f..f77ec4af4f 100644
--- a/tools/freetype/freetype/src/type42/t42parse.h
+++ b/drivers/freetype/freetype/src/type42/t42parse.h
diff --git a/tools/freetype/freetype/src/type42/t42types.h b/drivers/freetype/freetype/src/type42/t42types.h
index c7c2db490d..c7c2db490d 100644
--- a/tools/freetype/freetype/src/type42/t42types.h
+++ b/drivers/freetype/freetype/src/type42/t42types.h
diff --git a/tools/freetype/freetype/src/type42/type42.c b/drivers/freetype/freetype/src/type42/type42.c
index d13df56b10..d13df56b10 100644
--- a/tools/freetype/freetype/src/type42/type42.c
+++ b/drivers/freetype/freetype/src/type42/type42.c
diff --git a/tools/freetype/freetype/src/winfonts/Jamfile b/drivers/freetype/freetype/src/winfonts/Jamfile
index 71cf5678e8..71cf5678e8 100644
--- a/tools/freetype/freetype/src/winfonts/Jamfile
+++ b/drivers/freetype/freetype/src/winfonts/Jamfile
diff --git a/tools/freetype/freetype/src/winfonts/fnterrs.h b/drivers/freetype/freetype/src/winfonts/fnterrs.h
index 463ba77ee2..463ba77ee2 100644
--- a/tools/freetype/freetype/src/winfonts/fnterrs.h
+++ b/drivers/freetype/freetype/src/winfonts/fnterrs.h
diff --git a/tools/freetype/freetype/src/winfonts/module.mk b/drivers/freetype/freetype/src/winfonts/module.mk
index b44d7f0570..b44d7f0570 100644
--- a/tools/freetype/freetype/src/winfonts/module.mk
+++ b/drivers/freetype/freetype/src/winfonts/module.mk
diff --git a/tools/freetype/freetype/src/winfonts/rules.mk b/drivers/freetype/freetype/src/winfonts/rules.mk
index 71a7df2d8a..71a7df2d8a 100644
--- a/tools/freetype/freetype/src/winfonts/rules.mk
+++ b/drivers/freetype/freetype/src/winfonts/rules.mk
diff --git a/tools/freetype/freetype/src/winfonts/winfnt.c b/drivers/freetype/freetype/src/winfonts/winfnt.c
index e8055c0898..e8055c0898 100644
--- a/tools/freetype/freetype/src/winfonts/winfnt.c
+++ b/drivers/freetype/freetype/src/winfonts/winfnt.c
diff --git a/tools/freetype/freetype/src/winfonts/winfnt.h b/drivers/freetype/freetype/src/winfonts/winfnt.h
index b7a80736d8..b7a80736d8 100644
--- a/tools/freetype/freetype/src/winfonts/winfnt.h
+++ b/drivers/freetype/freetype/src/winfonts/winfnt.h
diff --git a/tools/freetype/ft2build.h b/drivers/freetype/ft2build.h
index 5137b50f38..5137b50f38 100644
--- a/tools/freetype/ft2build.h
+++ b/drivers/freetype/ft2build.h
diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp
index c7b2d65a13..79465638d1 100644
--- a/drivers/gles2/rasterizer_gles2.cpp
+++ b/drivers/gles2/rasterizer_gles2.cpp
@@ -4737,10 +4737,10 @@ void RasterizerGLES2::_update_shader( Shader* p_shader) const {
}
-void RasterizerGLES2::_add_geometry( const Geometry* p_geometry, const InstanceData *p_instance, const Geometry *p_geometry_cmp, const GeometryOwner *p_owner) {
+void RasterizerGLES2::_add_geometry( const Geometry* p_geometry, const InstanceData *p_instance, const Geometry *p_geometry_cmp, const GeometryOwner *p_owner,int p_material) {
Material *m=NULL;
- RID m_src=p_instance->material_override.is_valid() ? p_instance->material_override : p_geometry->material;
+ RID m_src=p_instance->material_override.is_valid() ? p_instance->material_override :(p_material>=0?p_instance->materials[p_material]:p_geometry->material);
#ifdef DEBUG_ENABLED
if (current_debug==VS::SCENARIO_DEBUG_OVERDRAW) {
@@ -4988,8 +4988,9 @@ void RasterizerGLES2::add_mesh( const RID& p_mesh, const InstanceData *p_data) {
for (int i=0;i<ssize;i++) {
+ int mat_idx = p_data->materials[i].is_valid() ? i : -1;
Surface *s = mesh->surfaces[i];
- _add_geometry(s,p_data,s,NULL);
+ _add_geometry(s,p_data,s,NULL,mat_idx);
}
mesh->last_pass=frame;
diff --git a/drivers/gles2/rasterizer_gles2.h b/drivers/gles2/rasterizer_gles2.h
index b52918c02f..35efedc9c8 100644
--- a/drivers/gles2/rasterizer_gles2.h
+++ b/drivers/gles2/rasterizer_gles2.h
@@ -1070,7 +1070,7 @@ class RasterizerGLES2 : public Rasterizer {
Plane camera_plane;
- void _add_geometry( const Geometry* p_geometry, const InstanceData *p_instance, const Geometry *p_geometry_cmp, const GeometryOwner *p_owner);
+ void _add_geometry( const Geometry* p_geometry, const InstanceData *p_instance, const Geometry *p_geometry_cmp, const GeometryOwner *p_owner,int p_material=-1);
void _render_list_forward(RenderList *p_render_list,const Transform& p_view_transform,const Transform& p_view_transform_inverse, const CameraMatrix& p_projection,bool p_reverse_cull=false,bool p_fragment_light=false,bool p_alpha_pass=false);
//void _setup_light(LightInstance* p_instance, int p_idx);
diff --git a/drivers/register_driver_types.cpp b/drivers/register_driver_types.cpp
index 235438f126..afa5f34bea 100644
--- a/drivers/register_driver_types.cpp
+++ b/drivers/register_driver_types.cpp
@@ -113,6 +113,7 @@ static ResourceFormatLoaderAudioStreamMPC * mpc_stream_loader=NULL;
#endif
+
static ResourceFormatPBM * pbm_loader=NULL;
void register_core_driver_types() {
@@ -141,6 +142,7 @@ void register_core_driver_types() {
ImageLoader::add_image_format_loader( image_loader_jpg );
#endif
+
pbm_loader = memnew( ResourceFormatPBM );
ResourceLoader::add_resource_format_loader(pbm_loader);
@@ -250,6 +252,7 @@ void register_driver_types() {
void unregister_driver_types() {
+
#ifdef TREMOR_ENABLED
memdelete( vorbis_stream_loader );
#endif
diff --git a/modules/gdscript/gd_parser.cpp b/modules/gdscript/gd_parser.cpp
index b713dc318f..9e90027a70 100644
--- a/modules/gdscript/gd_parser.cpp
+++ b/modules/gdscript/gd_parser.cpp
@@ -86,7 +86,7 @@ bool GDParser::_enter_indent_block(BlockNode* p_block) {
while(true) {
if (tokenizer->get_token()!=GDTokenizer::TK_NEWLINE) {
- print_line("no newline");
+
return false; //wtf
} else if (tokenizer->get_token(1)!=GDTokenizer::TK_NEWLINE) {
diff --git a/platform/osx/detect.py b/platform/osx/detect.py
index 28bc42f6bb..d668509b90 100644
--- a/platform/osx/detect.py
+++ b/platform/osx/detect.py
@@ -58,8 +58,8 @@ def configure(env):
if (env["freetype"]!="no"):
env.Append(CCFLAGS=['-DFREETYPE_ENABLED'])
- env.Append(CPPPATH=['#tools/freetype'])
- env.Append(CPPPATH=['#tools/freetype/freetype/include'])
+ env.Append(CPPPATH=['#drivers/freetype'])
+ env.Append(CPPPATH=['#drivers/freetype/freetype/include'])
diff --git a/platform/osx/export/export.cpp b/platform/osx/export/export.cpp
index 3bc4ebdb1a..2604c2c15a 100644
--- a/platform/osx/export/export.cpp
+++ b/platform/osx/export/export.cpp
@@ -32,6 +32,7 @@ class EditorExportPlatformOSX : public EditorExportPlatform {
String signature;
String copyright;
bool use64;
+ bool useFat;
bool high_resolution;
Ref<ImageTexture> logo;
@@ -95,6 +96,8 @@ bool EditorExportPlatformOSX::_set(const StringName& p_name, const Variant& p_va
copyright=p_value;
else if (n=="application/64_bits")
use64=p_value;
+ else if (n=="application/fat_bits")
+ useFat=p_value;
else if (n=="display/high_res")
high_resolution=p_value;
else
@@ -129,6 +132,8 @@ bool EditorExportPlatformOSX::_get(const StringName& p_name,Variant &r_ret) cons
r_ret=copyright;
else if (n=="application/64_bits")
r_ret=use64;
+ else if (n=="application/fat_bits")
+ r_ret=useFat;
else if (n=="display/high_res")
r_ret=high_resolution;
else
@@ -150,6 +155,7 @@ void EditorExportPlatformOSX::_get_property_list( List<PropertyInfo> *p_list) co
p_list->push_back( PropertyInfo( Variant::STRING, "application/version") );
p_list->push_back( PropertyInfo( Variant::STRING, "application/copyright") );
p_list->push_back( PropertyInfo( Variant::BOOL, "application/64_bits") );
+ p_list->push_back( PropertyInfo( Variant::BOOL, "application/fat_bits") );
p_list->push_back( PropertyInfo( Variant::BOOL, "display/high_res") );
@@ -287,7 +293,7 @@ Error EditorExportPlatformOSX::export_project(const String& p_path, bool p_debug
io2.opaque=&dst_f;
zipFile dpkg=zipOpen2(p_path.utf8().get_data(),APPEND_STATUS_CREATE,NULL,&io2);
- String binary_to_use="godot_osx_"+String(p_debug?"debug":"release")+"."+String(use64?"64":"32");
+ String binary_to_use="godot_osx_"+String(p_debug?"debug":"release")+"."+String(useFat?"fat":use64?"64":"32");
print_line("binary: "+binary_to_use);
String pkg_name;
@@ -459,6 +465,7 @@ EditorExportPlatformOSX::EditorExportPlatformOSX() {
short_version="1.0";
version="1.0";
use64=false;
+ useFat=false;
high_resolution=false;
}
diff --git a/platform/windows/detect.py b/platform/windows/detect.py
index 56e8a5d45d..97d2461e58 100644
--- a/platform/windows/detect.py
+++ b/platform/windows/detect.py
@@ -204,8 +204,8 @@ def configure(env):
if (env["freetype"]!="no"):
env.Append(CCFLAGS=['/DFREETYPE_ENABLED'])
- env.Append(CPPPATH=['#tools/freetype'])
- env.Append(CPPPATH=['#tools/freetype/freetype/include'])
+ env.Append(CPPPATH=['#drivers/freetype'])
+ env.Append(CPPPATH=['#drivers/freetype/freetype/include'])
if (env["target"]=="release"):
@@ -352,8 +352,9 @@ def configure(env):
if (env["freetype"]!="no"):
env.Append(CCFLAGS=['-DFREETYPE_ENABLED'])
- env.Append(CPPPATH=['#tools/freetype'])
- env.Append(CPPPATH=['#tools/freetype/freetype/include'])
+ env.Append(CPPPATH=['#drivers/freetype'])
+ env.Append(CPPPATH=['#drivers/freetype/freetype/include'])
+
env["CC"]=mingw_prefix+"gcc"
env['AS']=mingw_prefix+"as"
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index c9c7780a2a..bf8b0ee6b5 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -724,6 +724,32 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) {
}
} break;
+ case WM_DROPFILES: {
+
+ HDROP hDropInfo = NULL;
+ hDropInfo = (HDROP) wParam;
+ const int buffsize=4096;
+ wchar_t buf[buffsize];
+
+ int fcount = DragQueryFileW(hDropInfo, 0xFFFFFFFF,NULL,0);
+
+ Vector<String> files;
+
+ for(int i=0;i<fcount;i++) {
+
+ DragQueryFileW(hDropInfo, i, buf, buffsize);
+ String file=buf;
+ files.push_back(file);
+ }
+
+ if (files.size() && main_loop) {
+ main_loop->drop_files(files,0);
+ }
+
+
+ } break;
+
+
default: {
@@ -1035,6 +1061,8 @@ void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_
_ensure_data_dir();
+ DragAcceptFiles(hWnd,true);
+
}
diff --git a/platform/x11/detect.py b/platform/x11/detect.py
index 6b3f7147ef..5a43bf9323 100644
--- a/platform/x11/detect.py
+++ b/platform/x11/detect.py
@@ -143,8 +143,8 @@ def configure(env):
if (env["freetype"]!="no"):
env.Append(CCFLAGS=['-DFREETYPE_ENABLED'])
if (env["freetype"]=="builtin"):
- env.Append(CPPPATH=['#tools/freetype'])
- env.Append(CPPPATH=['#tools/freetype/freetype/include'])
+ env.Append(CPPPATH=['#drivers/freetype'])
+ env.Append(CPPPATH=['#drivers/freetype/freetype/include'])
env.Append(CPPFLAGS=['-DOPENGL_ENABLED','-DGLEW_ENABLED'])
diff --git a/scene/3d/mesh_instance.cpp b/scene/3d/mesh_instance.cpp
index cfe273fa20..ef956e8ad9 100644
--- a/scene/3d/mesh_instance.cpp
+++ b/scene/3d/mesh_instance.cpp
@@ -31,8 +31,8 @@
#include "skeleton.h"
#include "physics_body.h"
#include "body_shape.h"
-
-
+#include "scene/scene_string_names.h"
+#include "core_string_names.h"
bool MeshInstance::_set(const StringName& p_name, const Variant& p_value) {
//this is not _too_ bad performance wise, really. it only arrives here if the property was not set anywhere else.
@@ -43,13 +43,22 @@ bool MeshInstance::_set(const StringName& p_name, const Variant& p_value) {
Map<StringName,MorphTrack>::Element *E = morph_tracks.find(p_name);
- if (!E)
- return false;
+ if (E) {
+ E->get().value=p_value;
+ VisualServer::get_singleton()->instance_set_morph_target_weight(get_instance(),E->get().idx,E->get().value);
+ return true;
+ }
- E->get().value=p_value;
- VisualServer::get_singleton()->instance_set_morph_target_weight(get_instance(),E->get().idx,E->get().value);
+ if (p_name.operator String().begins_with("material/")) {
+ int idx = p_name.operator String().get_slicec('/',1).to_int();
+ if (idx>=materials.size() || idx<0)
+ return false;
- return true;
+ set_surface_material(idx,p_value);
+ return true;
+ }
+
+ return false;
}
bool MeshInstance::_get(const StringName& p_name,Variant &r_ret) const {
@@ -59,12 +68,19 @@ bool MeshInstance::_get(const StringName& p_name,Variant &r_ret) const {
return false;
const Map<StringName,MorphTrack>::Element *E = morph_tracks.find(p_name);
- if (!E)
- return false;
-
- r_ret = E->get().value;
+ if (E) {
+ r_ret = E->get().value;
+ return true;
+ }
- return true;
+ if (p_name.operator String().begins_with("material/")) {
+ int idx = p_name.operator String().get_slicec('/',1).to_int();
+ if (idx>=materials.size() || idx<0)
+ return false;
+ r_ret=materials[idx];
+ return true;
+ }
+ return false;
}
void MeshInstance::_get_property_list( List<PropertyInfo> *p_list) const {
@@ -80,6 +96,12 @@ void MeshInstance::_get_property_list( List<PropertyInfo> *p_list) const {
for(List<String>::Element *E=ls.front();E;E=E->next()) {
p_list->push_back( PropertyInfo(Variant::REAL,E->get(),PROPERTY_HINT_RANGE,"0,1,0.01"));
}
+
+ if (mesh.is_valid()) {
+ for(int i=0;i<mesh->get_surface_count();i++) {
+ p_list->push_back( PropertyInfo(Variant::OBJECT, "material/"+itos(i), PROPERTY_HINT_RESOURCE_TYPE, "Material"));
+ }
+ }
}
@@ -87,6 +109,14 @@ void MeshInstance::_get_property_list( List<PropertyInfo> *p_list) const {
void MeshInstance::set_mesh(const Ref<Mesh>& p_mesh) {
+ if (mesh==p_mesh)
+ return;
+
+ if (mesh.is_valid()) {
+ mesh->disconnect(CoreStringNames::get_singleton()->changed,this,SceneStringNames::get_singleton()->_mesh_changed);
+ materials.clear();
+ }
+
mesh=p_mesh;
morph_tracks.clear();
@@ -100,13 +130,17 @@ void MeshInstance::set_mesh(const Ref<Mesh>& p_mesh) {
mt.value=0;
morph_tracks["morph/"+String(mesh->get_morph_target_name(i))]=mt;
}
+
+ mesh->connect(CoreStringNames::get_singleton()->changed,this,SceneStringNames::get_singleton()->_mesh_changed);
+ materials.resize(mesh->get_surface_count());
+
set_base(mesh->get_rid());
} else {
set_base(RID());
}
- _change_notify("mesh");
+ _change_notify();
}
Ref<Mesh> MeshInstance::get_mesh() const {
@@ -232,6 +266,32 @@ void MeshInstance::_notification(int p_what) {
}
+void MeshInstance::set_surface_material(int p_surface,const Ref<Material>& p_material) {
+
+ ERR_FAIL_INDEX(p_surface,materials.size());
+
+ materials[p_surface]=p_material;
+
+ if (materials[p_surface].is_valid())
+ VS::get_singleton()->instance_set_surface_material(get_instance(),p_surface,materials[p_surface]->get_rid());
+ else
+ VS::get_singleton()->instance_set_surface_material(get_instance(),p_surface,RID());
+
+}
+
+Ref<Material> MeshInstance::get_surface_material(int p_surface) const {
+
+ ERR_FAIL_INDEX_V(p_surface,materials.size(),Ref<Material>());
+
+ return materials[p_surface];
+}
+
+
+void MeshInstance::_mesh_changed() {
+
+ materials.resize( mesh->get_surface_count() );
+}
+
void MeshInstance::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_mesh","mesh:Mesh"),&MeshInstance::set_mesh);
@@ -243,6 +303,7 @@ void MeshInstance::_bind_methods() {
ObjectTypeDB::set_method_flags("MeshInstance","create_trimesh_collision",METHOD_FLAGS_DEFAULT);
ObjectTypeDB::bind_method(_MD("create_convex_collision"),&MeshInstance::create_convex_collision);
ObjectTypeDB::set_method_flags("MeshInstance","create_convex_collision",METHOD_FLAGS_DEFAULT);
+ ObjectTypeDB::bind_method(_MD("_mesh_changed"),&MeshInstance::_mesh_changed);
ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "mesh/mesh", PROPERTY_HINT_RESOURCE_TYPE, "Mesh" ), _SCS("set_mesh"), _SCS("get_mesh"));
ADD_PROPERTY( PropertyInfo (Variant::NODE_PATH, "mesh/skeleton"), _SCS("set_skeleton_path"), _SCS("get_skeleton_path"));
}
diff --git a/scene/3d/mesh_instance.h b/scene/3d/mesh_instance.h
index 7c605c2d6d..fd8faf38b4 100644
--- a/scene/3d/mesh_instance.h
+++ b/scene/3d/mesh_instance.h
@@ -50,7 +50,9 @@ class MeshInstance : public GeometryInstance {
};
Map<StringName,MorphTrack> morph_tracks;
+ Vector<Ref<Material> > materials;
+ void _mesh_changed();
void _resolve_skeleton_path();
protected:
@@ -69,6 +71,9 @@ public:
void set_skeleton_path(const NodePath& p_skeleton);
NodePath get_skeleton_path();
+ void set_surface_material(int p_surface,const Ref<Material>& p_material);
+ Ref<Material> get_surface_material(int p_surface) const;
+
Node* create_trimesh_collision_node();
void create_trimesh_collision();
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 03024daff5..827b420d3e 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -412,7 +412,7 @@ void TextEdit::_notification(int p_what) {
case NOTIFICATION_THEME_CHANGED: {
_update_caches();
- };
+ } break;
case NOTIFICATION_DRAW: {
int line_number_char_count=0;
@@ -682,9 +682,13 @@ void TextEdit::_notification(int p_what) {
// check if line contains highlighted word
int highlighted_text_col = -1;
- if (highlighted_text.length() != 0) {
- highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, 0);
- }
+ int search_text_col = -1;
+
+ if (!search_text.empty())
+ search_text_col = _get_column_pos_of_word(search_text, str, search_flags, 0);
+
+ if (highlighted_text.length() != 0 && highlighted_text != search_text)
+ highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, SEARCH_MATCH_CASE|SEARCH_WHOLE_WORDS, 0);
if (cache.line_number_w) {
String fc = String::num(line+1);
@@ -879,20 +883,45 @@ void TextEdit::_notification(int p_what) {
break;
}
- bool in_selection = (selection.active && line>=selection.from_line && line<=selection.to_line && (line>selection.from_line || j>=selection.from_column) && (line<selection.to_line || j<selection.to_column));
+ bool in_search_result=false;
+
+ if (search_text_col != -1) {
+ // if we are at the end check for new search result on same line
+ if (j >= search_text_col+search_text.length())
+ search_text_col = _get_column_pos_of_word(search_text, str, search_flags, j);
+
+ in_search_result = j >= search_text_col && j < search_text_col+search_text.length();
+
+ if (in_search_result) {
+ VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y ), Size2i(char_w, get_row_height())),cache.search_result_color);
+ }
+ }
+ bool in_selection = (selection.active && line>=selection.from_line && line<=selection.to_line && (line>selection.from_line || j>=selection.from_column) && (line<selection.to_line || j<selection.to_column));
if (in_selection) {
//inside selection!
VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y ), Size2i(char_w,get_row_height())),cache.selection_color);
}
+ if (in_search_result) {
+ Color border_color=(line==search_result_line && j>=search_result_col && j<search_result_col+search_text.length())?cache.font_color:cache.search_result_border_color;
+
+ VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y ), Size2i(char_w,1)),border_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y+get_row_height()-1 ), Size2i(char_w,1)),border_color);
+
+ if (j==search_text_col)
+ VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y ), Size2i(1,get_row_height())),border_color);
+ if (j==search_text_col+search_text.length()-1)
+ VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin+char_w-1, ofs_y ), Size2i(1,get_row_height())),border_color);
+ }
+
if (highlight_all_occurrences) {
if (highlighted_text_col != -1) {
// if we are at the end check for new word on same line
if (j > highlighted_text_col+highlighted_text.length()) {
- highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, j);
+ highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, SEARCH_MATCH_CASE|SEARCH_WHOLE_WORDS, j);
}
bool in_highlighted_word = (j >= highlighted_text_col && j < highlighted_text_col+highlighted_text.length());
@@ -1892,7 +1921,8 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
if (completion_hint!="") {
completion_hint="";
update();
-
+ } else {
+ scancode_handled=false;
}
} break;
case KEY_TAB: {
@@ -3220,6 +3250,8 @@ void TextEdit::_update_caches() {
cache.breakpoint_color=get_color("breakpoint_color");
cache.brace_mismatch_color=get_color("brace_mismatch_color");
cache.word_highlighted_color=get_color("word_highlighted_color");
+ cache.search_result_color=get_color("search_result_color");
+ cache.search_result_border_color=get_color("search_result_border_color");
cache.line_spacing=get_constant("line_spacing");
cache.row_height = cache.font->get_height() + cache.line_spacing;
cache.tab_icon=get_icon("tab");
@@ -3481,12 +3513,25 @@ String TextEdit::get_word_under_cursor() const {
return text[cursor.line].substr(prev_cc, next_cc-prev_cc);
}
+void TextEdit::set_search_text(const String &p_search_text) {
+ search_text = p_search_text;
+}
+
+void TextEdit::set_search_flags(uint32_t p_flags) {
+ search_flags = p_flags;
+}
+
+void TextEdit::set_current_search_result(int line, int col) {
+ search_result_line = line;
+ search_result_col = col;
+}
+
void TextEdit::set_highlight_all_occurrences(const bool p_enabled) {
highlight_all_occurrences = p_enabled;
update();
}
-int TextEdit::_get_column_pos_of_word(const String &p_key, const String &p_search, int p_from_column) {
+int TextEdit::_get_column_pos_of_word(const String &p_key, const String &p_search, uint32_t p_search_flags, int p_from_column) {
int col = -1;
if (p_key.length() > 0 && p_search.length() > 0) {
@@ -3494,12 +3539,15 @@ int TextEdit::_get_column_pos_of_word(const String &p_key, const String &p_searc
p_from_column = 0;
}
- while (col == -1 && p_from_column <= p_search.length()) {
- // match case
- col = p_search.findn(p_key, p_from_column);
+ while (col == -1 && p_from_column <= p_search.length()) {
+ if (p_search_flags&SEARCH_MATCH_CASE) {
+ col = p_search.find(p_key,p_from_column);
+ } else {
+ col = p_search.findn(p_key,p_from_column);
+ }
// whole words only
- if (col != -1) {
+ if (col != -1 && p_search_flags&SEARCH_WHOLE_WORDS) {
p_from_column=col;
if (col > 0 && _is_text_char(p_search[col-1])) {
@@ -3565,10 +3613,8 @@ bool TextEdit::search(const String &p_key,uint32_t p_search_flags, int p_from_li
//wrapped
if (p_search_flags&SEARCH_BACKWARDS) {
- text_line=text_line.substr(from_column,text_line.length());
from_column=text_line.length();
} else {
- text_line=text_line.substr(0,from_column);
from_column=0;
}
@@ -3579,7 +3625,6 @@ bool TextEdit::search(const String &p_key,uint32_t p_search_flags, int p_from_li
} else {
- //text_line=text_line.substr(0,p_from_column); //wrap around for missing begining.
if (p_search_flags&SEARCH_BACKWARDS)
from_column=text_line.length()-1;
else
@@ -3588,12 +3633,25 @@ bool TextEdit::search(const String &p_key,uint32_t p_search_flags, int p_from_li
pos=-1;
- if (!(p_search_flags&SEARCH_BACKWARDS)) {
+ int pos_from=0;
+ int last_pos=-1;
+ while ((last_pos=(p_search_flags&SEARCH_MATCH_CASE)?text_line.find(p_key,pos_from):text_line.findn(p_key,pos_from))!=-1) {
- pos = (p_search_flags&SEARCH_MATCH_CASE)?text_line.find(p_key,from_column):text_line.findn(p_key,from_column);
- } else {
+ if (p_search_flags&SEARCH_BACKWARDS) {
+
+ if (last_pos>from_column)
+ break;
+ pos=last_pos;
+
+ } else {
+
+ if (last_pos>=from_column) {
+ pos=last_pos;
+ break;
+ }
+ }
- pos = (p_search_flags&SEARCH_MATCH_CASE)?text_line.rfind(p_key,from_column):text_line.rfindn(p_key,from_column);
+ pos_from=last_pos+p_key.length();
}
if (pos!=-1 && (p_search_flags&SEARCH_WHOLE_WORDS)) {
diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h
index dbe6293240..f39b898c66 100644
--- a/scene/gui/text_edit.h
+++ b/scene/gui/text_edit.h
@@ -88,6 +88,8 @@ class TextEdit : public Control {
Color current_line_color;
Color brace_mismatch_color;
Color word_highlighted_color;
+ Color search_result_color;
+ Color search_result_border_color;
int row_height;
int line_spacing;
@@ -249,6 +251,11 @@ class TextEdit : public Control {
bool callhint_below;
Vector2 callhint_offset;
+ String search_text;
+ uint32_t search_flags;
+ int search_result_line;
+ int search_result_col;
+
int get_visible_rows() const;
int get_char_count();
@@ -287,7 +294,7 @@ class TextEdit : public Control {
String _base_get_text(int p_from_line, int p_from_column,int p_to_line,int p_to_column) const;
void _base_remove_text(int p_from_line, int p_from_column,int p_to_line,int p_to_column);
- int _get_column_pos_of_word(const String &p_key, const String &p_search, int p_from_column);
+ int _get_column_pos_of_word(const String &p_key, const String &p_search, uint32_t p_search_flags, int p_from_column);
DVector<int> _search_bind(const String &p_key,uint32_t p_search_flags, int p_from_line,int p_from_column) const;
@@ -408,6 +415,10 @@ public:
void select(int p_from_line,int p_from_column,int p_to_line,int p_to_column);
void deselect();
+ void set_search_text(const String& p_search_text);
+ void set_search_flags(uint32_t p_flags);
+ void set_current_search_result(int line, int col);
+
void set_highlight_all_occurrences(const bool p_enabled);
bool is_selection_active() const;
int get_selection_from_line() const;
diff --git a/scene/main/scene_main_loop.cpp b/scene/main/scene_main_loop.cpp
index 24fe1e1bb3..d7f22c3228 100644
--- a/scene/main/scene_main_loop.cpp
+++ b/scene/main/scene_main_loop.cpp
@@ -1593,6 +1593,14 @@ void SceneTree::_live_edit_reparent_node_func(const NodePath& p_at,const NodePat
#endif
+
+
+void SceneTree::drop_files(const Vector<String>& p_files,int p_from_screen) {
+
+ emit_signal("files_dropped",p_files,p_from_screen);
+ MainLoop::drop_files(p_files,p_from_screen);
+}
+
void SceneTree::_bind_methods() {
@@ -1666,6 +1674,8 @@ void SceneTree::_bind_methods() {
ADD_SIGNAL( MethodInfo("idle_frame"));
ADD_SIGNAL( MethodInfo("fixed_frame"));
+ ADD_SIGNAL( MethodInfo("files_dropped",PropertyInfo(Variant::STRING_ARRAY,"files"),PropertyInfo(Variant::INT,"screen")) );
+
BIND_CONSTANT( GROUP_CALL_DEFAULT );
BIND_CONSTANT( GROUP_CALL_REVERSE );
BIND_CONSTANT( GROUP_CALL_REALTIME );
diff --git a/scene/main/scene_main_loop.h b/scene/main/scene_main_loop.h
index b6a015c9ed..5fc9e0c1ae 100644
--- a/scene/main/scene_main_loop.h
+++ b/scene/main/scene_main_loop.h
@@ -344,6 +344,7 @@ public:
static SceneTree* get_singleton() { return singleton; }
+ void drop_files(const Vector<String>& p_files,int p_from_screen=0);
SceneTree();
~SceneTree();
diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp
index 8327473a60..1fd1c77dca 100644
--- a/scene/register_scene_types.cpp
+++ b/scene/register_scene_types.cpp
@@ -133,6 +133,7 @@
#include "scene/resources/mesh_data_tool.h"
#include "scene/resources/scene_preloader.h"
#include "scene/resources/dynamic_font.h"
+#include "scene/resources/dynamic_font_stb.h"
#include "scene/main/timer.h"
@@ -254,7 +255,6 @@ void register_scene_types() {
resource_loader_wav = memnew( ResourceFormatLoaderWAV );
ResourceLoader::add_resource_format_loader( resource_loader_wav );
-
resource_loader_dynamic_font = memnew( ResourceFormatLoaderDynamicFont );
ResourceLoader::add_resource_format_loader( resource_loader_dynamic_font );
@@ -578,8 +578,10 @@ void register_scene_types() {
ObjectTypeDB::register_type<Animation>();
ObjectTypeDB::register_virtual_type<Font>();
ObjectTypeDB::register_type<BitmapFont>();
+
ObjectTypeDB::register_type<DynamicFontData>();
ObjectTypeDB::register_type<DynamicFont>();
+
ObjectTypeDB::register_type<StyleBoxEmpty>();
ObjectTypeDB::register_type<StyleBoxTexture>();
ObjectTypeDB::register_type<StyleBoxFlat>();
@@ -647,6 +649,7 @@ void unregister_scene_types() {
memdelete( resource_loader_image );
memdelete( resource_loader_wav );
memdelete( resource_loader_dynamic_font );
+
#ifdef TOOLS_ENABLED
diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp
index 19aa0e79cc..c76b5f3d3a 100644
--- a/scene/resources/dynamic_font.cpp
+++ b/scene/resources/dynamic_font.cpp
@@ -1,65 +1,11 @@
+#ifdef FREETYPE_ENABLED
#include "dynamic_font.h"
-#define STB_TRUETYPE_IMPLEMENTATION
-#include "stb_truetype.h"
#include "os/file_access.h"
-void DynamicFontData::lock() {
- fr=font_data.read();
-
- if (fr.ptr()!=last_data_ptr) {
-
- last_data_ptr=fr.ptr();
-
- if (!stbtt_InitFont(&info, last_data_ptr, 0)) {
- valid=false;
- } else {
- valid=true;
- }
-
- last_data_ptr=fr.ptr();
- }
-}
-
-void DynamicFontData::unlock() {
-
- fr = DVector<uint8_t>::Read();
-}
-
-void DynamicFontData::set_font_data(const DVector<uint8_t>& p_font) {
- //clear caches and stuff
- ERR_FAIL_COND(font_data.size()) ;
- font_data=p_font;
-
- lock();
-
- if (valid) {
- stbtt_GetFontVMetrics(&info, &ascent, &descent, &linegap);
- descent=-descent + linegap;
-
- for(int i=32;i<1024;i++) {
- for(int j=32;j<1024;j++) {
-
- int kern = stbtt_GetCodepointKernAdvance(&info, i,j);
- if (kern!=0) {
- KerningPairKey kpk;
- kpk.A=i;
- kpk.B=j;
- kerning_map[kpk]=kern;
- }
- }
- }
- }
-
- unlock();
- //clear existing stuff
-
- ERR_FAIL_COND(!valid);
-}
Ref<DynamicFontAtSize> DynamicFontData::_get_dynamic_font_at_size(int p_size) {
- ERR_FAIL_COND_V(!valid,Ref<DynamicFontAtSize>());
if (size_cache.has(p_size)) {
return Ref<DynamicFontAtSize>( size_cache[p_size] );
@@ -67,6 +13,7 @@ Ref<DynamicFontAtSize> DynamicFontData::_get_dynamic_font_at_size(int p_size) {
Ref<DynamicFontAtSize> dfas;
+
dfas.instance();
dfas->font=Ref<DynamicFontData>( this );
@@ -74,21 +21,34 @@ Ref<DynamicFontAtSize> DynamicFontData::_get_dynamic_font_at_size(int p_size) {
size_cache[p_size]=dfas.ptr();
dfas->size=p_size;
+ dfas->_load();
+
+ return dfas;
- lock();
+}
- dfas->scale = stbtt_ScaleForPixelHeight(&info, p_size);
+void DynamicFontData::set_font_ptr(const uint8_t* p_font_mem,int p_font_mem_size) {
- unlock();
+ font_mem=p_font_mem;
+ font_mem_size=p_font_mem_size;
+}
- return dfas;
+void DynamicFontData::set_font_path(const String& p_path) {
+
+ font_path=p_path;
+}
+
+void DynamicFontData::set_force_autohinter(bool p_force) {
+ force_autohinter=p_force;
}
DynamicFontData::DynamicFontData()
{
- last_data_ptr=NULL;
- valid=false;
+
+ force_autohinter=false;
+ font_mem=NULL;
+ font_mem_size=0;
}
DynamicFontData::~DynamicFontData()
@@ -100,22 +60,106 @@ DynamicFontData::~DynamicFontData()
////////////////////
+Error DynamicFontAtSize::_load() {
+
+
+ int error = FT_Init_FreeType( &library );
+
+ ERR_EXPLAIN(TTR("Error initializing FreeType."));
+ ERR_FAIL_COND_V( error !=0, ERR_CANT_CREATE );
+
+ if (font->font_path!=String()) {
+
+ FileAccess *f=FileAccess::open(font->font_path,FileAccess::READ);
+ ERR_FAIL_COND_V(!f,ERR_CANT_OPEN);
+
+ memset(&stream,0,sizeof(FT_StreamRec));
+ stream.base=NULL;
+ stream.size=f->get_len();
+ stream.pos=0;
+ stream.descriptor.pointer=f;
+ stream.read=_ft_stream_io;
+ stream.close=_ft_stream_close;
+
+ FT_Open_Args fargs;
+ memset(&fargs,0,sizeof(FT_Open_Args));
+ fargs.flags=FT_OPEN_STREAM;
+ fargs.stream=&stream;
+ error = FT_Open_Face( library,&fargs,0,&face);
+ } else if (font->font_mem) {
+
+ memset(&stream,0,sizeof(FT_StreamRec));
+ stream.base=(unsigned char*)font->font_mem;
+ stream.size=font->font_mem_size;
+ stream.pos=0;
+
+ FT_Open_Args fargs;
+ memset(&fargs,0,sizeof(FT_Open_Args));
+ fargs.memory_base=(unsigned char*)font->font_mem;
+ fargs.memory_size=font->font_mem_size;
+ fargs.flags= FT_OPEN_MEMORY;
+ fargs.stream=&stream;
+ error = FT_Open_Face( library,&fargs,0,&face);
+
+ } else {
+ ERR_EXPLAIN("DynamicFont uninitialized");
+ ERR_FAIL_V(ERR_UNCONFIGURED);
+ }
+
+ //error = FT_New_Face( library, src_path.utf8().get_data(),0,&face );
+
+ if ( error == FT_Err_Unknown_File_Format ) {
+ ERR_EXPLAIN(TTR("Unknown font format."));
+ FT_Done_FreeType( library );
+
+ } else if ( error ) {
+
+ ERR_EXPLAIN(TTR("Error loading font."));
+ FT_Done_FreeType( library );
+
+ }
+
+ ERR_FAIL_COND_V(error,ERR_FILE_CANT_OPEN);
+
+
+ /*error = FT_Set_Char_Size(face,0,64*size,512,512);
+
+ if ( error ) {
+ FT_Done_FreeType( library );
+ ERR_EXPLAIN(TTR("Invalid font size."));
+ ERR_FAIL_COND_V( error, ERR_INVALID_PARAMETER );
+ }*/
+
+ error = FT_Set_Pixel_Sizes(face,0,size);
+
+ ascent=face->size->metrics.ascender>>6;
+ descent=-face->size->metrics.descender>>6;
+ linegap=0;
+
+ //print_line("ASCENT: "+itos(ascent)+" descent "+itos(descent)+" hinted: "+itos(face->face_flags&FT_FACE_FLAG_HINTER));
+
+ valid=true;
+ return OK;
+}
+
float DynamicFontAtSize::get_height() const {
- return (font->ascent+font->descent)*scale;
+ return ascent+descent;
}
float DynamicFontAtSize::get_ascent() const {
- return font->ascent*scale;
+ return ascent;
}
float DynamicFontAtSize::get_descent() const {
- return font->descent*scale;
+ return descent;
}
Size2 DynamicFontAtSize::get_char_size(CharType p_char,CharType p_next) const {
+ if (!valid)
+ return Size2(1,1);
const_cast<DynamicFontAtSize*>(this)->_update_char(p_char);
const Character *c = char_map.getptr(p_char);
@@ -124,14 +168,9 @@ Size2 DynamicFontAtSize::get_char_size(CharType p_char,CharType p_next) const {
Size2 ret( c->advance, get_height());
if (p_next) {
- DynamicFontData::KerningPairKey kpk;
- kpk.A=p_char;
- kpk.B=p_next;
-
- const Map<DynamicFontData::KerningPairKey,int>::Element *K=font->kerning_map.find(kpk);
- if (K) {
- ret.x+=K->get()*scale;
- }
+ FT_Vector delta;
+ FT_Get_Kerning( face, p_char,p_next, FT_KERNING_DEFAULT, &delta );
+ ret.x+=delta.x>>6;
}
@@ -141,6 +180,9 @@ Size2 DynamicFontAtSize::get_char_size(CharType p_char,CharType p_next) const {
float DynamicFontAtSize::draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next,const Color& p_modulate) const {
+ if (!valid)
+ return 0;
+
const_cast<DynamicFontAtSize*>(this)->_update_char(p_char);
const Character * c = char_map.getptr(p_char);
@@ -161,58 +203,84 @@ float DynamicFontAtSize::draw_char(RID p_canvas_item, const Point2& p_pos, const
float ret = c->advance;
if (p_next) {
- DynamicFontData::KerningPairKey kpk;
- kpk.A=p_char;
- kpk.B=p_next;
- const Map<DynamicFontData::KerningPairKey,int>::Element *K=font->kerning_map.find(kpk);
- if (K) {
- ret+=K->get()*scale;
- }
+ FT_Vector delta;
+ FT_Get_Kerning( face, p_char,p_next, FT_KERNING_DEFAULT, &delta );
+ ret+=delta.x>>6;
}
return ret;
}
+unsigned long DynamicFontAtSize::_ft_stream_io(FT_Stream stream, unsigned long offset, unsigned char* buffer, unsigned long count ) {
+
+
+ FileAccess *f=(FileAccess*)stream->descriptor.pointer;
+
+ if (f->get_pos()!=offset) {
+ f->seek(offset);
+
+ }
+
+ if (count==0)
+ return 0;
+
+ return f->get_buffer(buffer,count);
+}
+void DynamicFontAtSize::_ft_stream_close(FT_Stream stream) {
+
+ FileAccess *f=(FileAccess*)stream->descriptor.pointer;
+ f->close();
+ memdelete(f);
+}
+
void DynamicFontAtSize::_update_char(CharType p_char) {
if (char_map.has(p_char))
return;
- font->lock();
-
+ _THREAD_SAFE_METHOD_
- int w,h,xofs,yofs;
- unsigned char * cpbitmap = stbtt_GetCodepointBitmap(&font->info, scale, scale, p_char, &w, &h, &xofs, &yofs );
+ FT_GlyphSlot slot = face->glyph;
- if (!cpbitmap) {
- //no glyph
+ int error = FT_Load_Char( face, p_char, FT_LOAD_RENDER|(font->force_autohinter?FT_LOAD_FORCE_AUTOHINT:0) );
+ if (!error) {
+ error = FT_Render_Glyph( face->glyph, ft_render_mode_normal );
+ }
+ if (error) {
- int advance;
- stbtt_GetCodepointHMetrics(&font->info, p_char, &advance, 0);
+ int advance=0;
+ //stbtt_GetCodepointHMetrics(&font->info, p_char, &advance, 0);
//print_line("char has no bitmap: "+itos(p_char)+" but advance is "+itos(advance*scale));
Character ch;
ch.texture_idx=-1;
- ch.advance=advance*scale;
+ ch.advance=advance;
ch.h_align=0;
ch.v_align=0;
char_map[p_char]=ch;
- font->unlock();
return;
}
+
+
+ int w = slot->bitmap.width;
+ int h = slot->bitmap.rows;
+ int p = slot->bitmap.pitch;
+ int yofs=slot->bitmap_top;
+ int xofs=slot->bitmap_left;
+ int advance=slot->advance.x>>6;
+
+
int mw=w+rect_margin*2;
int mh=h+rect_margin*2;
if (mw>4096 || mh>4096) {
- stbtt_FreeBitmap(cpbitmap,NULL);
- font->unlock();
ERR_FAIL_COND(mw>4096);
ERR_FAIL_COND(mh>4096);
}
@@ -304,13 +372,14 @@ void DynamicFontAtSize::_update_char(CharType p_char) {
{
DVector<uint8_t>::Write wr = tex.imgdata.write();
+
for(int i=0;i<h;i++) {
for(int j=0;j<w;j++) {
int ofs = ( (i+tex_y+rect_margin)*tex.texture_size+j+tex_x+rect_margin)*2;
ERR_FAIL_COND(ofs >= tex.imgdata.size());
wr[ofs+0]=255; //grayscale as 1
- wr[ofs+1]=cpbitmap[i*w+j]; //alpha as 0
+ wr[ofs+1]=slot->bitmap.buffer[i*slot->bitmap.width+j];
}
}
}
@@ -322,7 +391,7 @@ void DynamicFontAtSize::_update_char(CharType p_char) {
if (tex.texture.is_null()) {
tex.texture.instance();
- tex.texture->create_from_image(img,Texture::FLAG_FILTER);
+ tex.texture->create_from_image(img,0/*Texture::FLAG_FILTER*/);
} else {
tex.texture->set_data(img); //update
}
@@ -337,13 +406,11 @@ void DynamicFontAtSize::_update_char(CharType p_char) {
tex.offsets[k]=tex_y+mh;
}
- int advance;
- stbtt_GetCodepointHMetrics(&font->info, p_char, &advance, 0);
Character chr;
chr.h_align=xofs;
- chr.v_align=yofs + get_ascent();
- chr.advance=advance*scale;
+ chr.v_align=ascent-yofs;// + ascent - descent;
+ chr.advance=advance;
chr.texture_idx=tex_index;
@@ -353,21 +420,24 @@ void DynamicFontAtSize::_update_char(CharType p_char) {
char_map[p_char]=chr;
- stbtt_FreeBitmap(cpbitmap,NULL);
-
- font->unlock();
}
DynamicFontAtSize::DynamicFontAtSize() {
+ valid=false;
rect_margin=1;
+ ascent=1;
+ descent=1;
+ linegap=1;
}
DynamicFontAtSize::~DynamicFontAtSize(){
- ERR_FAIL_COND(!font.ptr());
- font->size_cache.erase(size);
+ if (valid) {
+ FT_Done_FreeType( library );
+ font->size_cache.erase(size);
+ }
}
/////////////////////////
@@ -478,34 +548,21 @@ RES ResourceFormatLoaderDynamicFont::load(const String &p_path, const String& p_
if (r_error)
*r_error=ERR_FILE_CANT_OPEN;
+ Ref<DynamicFontData> dfont;
+ dfont.instance();;
+ dfont->set_font_path(p_path);
- FileAccess *f = FileAccess::open(p_path,FileAccess::READ);
- ERR_FAIL_COND_V(!f,RES());
-
- DVector<uint8_t> data;
-
- data.resize(f->get_len());
-
- ERR_FAIL_COND_V(data.size()==0,RES());
-
- {
- DVector<uint8_t>::Write w = data.write();
- f->get_buffer(w.ptr(),data.size());
- }
-
- Ref<DynamicFontData> dfd;
- dfd.instance();
- dfd->set_font_data(data);
if (r_error)
*r_error=OK;
- return dfd;
+ return dfont;
}
void ResourceFormatLoaderDynamicFont::get_recognized_extensions(List<String> *p_extensions) const {
p_extensions->push_back("ttf");
+ p_extensions->push_back("otf");
}
bool ResourceFormatLoaderDynamicFont::handles_type(const String& p_type) const {
@@ -516,8 +573,10 @@ bool ResourceFormatLoaderDynamicFont::handles_type(const String& p_type) const {
String ResourceFormatLoaderDynamicFont::get_resource_type(const String &p_path) const {
String el = p_path.extension().to_lower();
- if (el=="ttf")
+ if (el=="ttf" || el=="otf")
return "DynamicFontData";
return "";
}
+
+#endif
diff --git a/scene/resources/dynamic_font.h b/scene/resources/dynamic_font.h
index ba7249a7b7..f0cf80b042 100644
--- a/scene/resources/dynamic_font.h
+++ b/scene/resources/dynamic_font.h
@@ -1,10 +1,14 @@
-#ifndef DYNAMICFONT_H
-#define DYNAMICFONT_H
+#ifndef DYNAMIC_FONT_H
+#define DYNAMIC_FONT_H
-#include "font.h"
-#include "stb_truetype.h"
+#ifdef FREETYPE_ENABLED
+#include "scene/resources/font.h"
+#include "os/thread_safe.h"
#include "io/resource_loader.h"
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
class DynamicFontAtSize;
class DynamicFont;
@@ -13,39 +17,16 @@ class DynamicFontData : public Resource {
OBJ_TYPE(DynamicFontData,Resource);
- bool valid;
-
- DVector<uint8_t> font_data;
- DVector<uint8_t>::Read fr;
- const uint8_t* last_data_ptr;
-
- struct KerningPairKey {
-
- union {
- struct {
- uint32_t A,B;
- };
-
- uint64_t pair;
- };
-
- _FORCE_INLINE_ bool operator<(const KerningPairKey& p_r) const { return pair<p_r.pair; }
- };
- Map<KerningPairKey,int> kerning_map;
+ const uint8_t *font_mem;
+ int font_mem_size;
+ bool force_autohinter;
+ String font_path;
Map<int,DynamicFontAtSize*> size_cache;
-friend class DynamicFontAtSize;
-
- stbtt_fontinfo info;
- int ascent;
- int descent;
- int linegap;
-
- void lock();
- void unlock();
+ friend class DynamicFontAtSize;
friend class DynamicFont;
@@ -53,7 +34,10 @@ friend class DynamicFont;
Ref<DynamicFontAtSize> _get_dynamic_font_at_size(int p_size);
public:
- void set_font_data(const DVector<uint8_t>& p_font);
+ void set_font_ptr(const uint8_t* p_font_mem,int p_font_mem_size);
+ void set_font_path(const String& p_path);
+ void set_force_autohinter(bool p_force);
+
DynamicFontData();
~DynamicFontData();
};
@@ -61,11 +45,21 @@ public:
class DynamicFontAtSize : public Reference {
- OBJ_TYPE(DynamicFontAtSize,Reference);
+ OBJ_TYPE(DynamicFontAtSize,Reference)
+ _THREAD_SAFE_CLASS_
+ FT_Library library; /* handle to library */
+ FT_Face face; /* handle to face object */
+ FT_StreamRec stream;
+
+ int ascent;
+ int descent;
+ int linegap;
int rect_margin;
+ bool valid;
+
struct CharTexture {
DVector<uint8_t> imgdata;
@@ -88,6 +82,8 @@ class DynamicFontAtSize : public Reference {
};
+ static unsigned long _ft_stream_io(FT_Stream stream, unsigned long offset, unsigned char* buffer, unsigned long count );
+ static void _ft_stream_close(FT_Stream stream);
HashMap< CharType, Character > char_map;
@@ -95,13 +91,18 @@ class DynamicFontAtSize : public Reference {
friend class DynamicFontData;
Ref<DynamicFontData> font;
- float scale;
int size;
+
+
+ Error _load();
protected:
+
+
public:
+
float get_height() const;
float get_ascent() const;
@@ -126,7 +127,7 @@ class DynamicFont : public Font {
Ref<DynamicFontData> data;
Ref<DynamicFontAtSize> data_at_size;
int size;
-
+ bool valid;
protected:
@@ -171,5 +172,6 @@ public:
};
+#endif
-#endif // DYNAMICFONT_H
+#endif
diff --git a/scene/resources/dynamic_font_stb.cpp b/scene/resources/dynamic_font_stb.cpp
new file mode 100644
index 0000000000..344043fcdd
--- /dev/null
+++ b/scene/resources/dynamic_font_stb.cpp
@@ -0,0 +1,527 @@
+#include "dynamic_font_stb.h"
+
+#ifndef FREETYPE_ENABLED
+
+#define STB_TRUETYPE_IMPLEMENTATION
+#include "stb_truetype.h"
+#include "os/file_access.h"
+
+void DynamicFontData::lock() {
+
+ fr=font_data.read();
+
+ if (fr.ptr()!=last_data_ptr) {
+
+ last_data_ptr=fr.ptr();
+
+ if (!stbtt_InitFont(&info, last_data_ptr, 0)) {
+ valid=false;
+ } else {
+ valid=true;
+ }
+
+ last_data_ptr=fr.ptr();
+ }
+}
+
+void DynamicFontData::unlock() {
+
+ fr = DVector<uint8_t>::Read();
+}
+
+void DynamicFontData::set_font_data(const DVector<uint8_t>& p_font) {
+ //clear caches and stuff
+ ERR_FAIL_COND(font_data.size()) ;
+ font_data=p_font;
+
+ lock();
+
+ if (valid) {
+ stbtt_GetFontVMetrics(&info, &ascent, &descent, &linegap);
+ descent=-descent + linegap;
+
+ for(int i=32;i<1024;i++) {
+ for(int j=32;j<1024;j++) {
+
+ int kern = stbtt_GetCodepointKernAdvance(&info, i,j);
+ if (kern!=0) {
+ KerningPairKey kpk;
+ kpk.A=i;
+ kpk.B=j;
+ kerning_map[kpk]=kern;
+ }
+ }
+ }
+ }
+
+ unlock();
+ //clear existing stuff
+
+ ERR_FAIL_COND(!valid);
+}
+
+Ref<DynamicFontAtSize> DynamicFontData::_get_dynamic_font_at_size(int p_size) {
+
+ ERR_FAIL_COND_V(!valid,Ref<DynamicFontAtSize>());
+
+ if (size_cache.has(p_size)) {
+ return Ref<DynamicFontAtSize>( size_cache[p_size] );
+ }
+
+
+ Ref<DynamicFontAtSize> dfas;
+ dfas.instance();
+
+ dfas->font=Ref<DynamicFontData>( this );
+
+ size_cache[p_size]=dfas.ptr();
+
+ dfas->size=p_size;
+
+ lock();
+
+ dfas->scale = stbtt_ScaleForPixelHeight(&info, p_size);
+
+ unlock();
+
+ return dfas;
+
+}
+
+DynamicFontData::DynamicFontData()
+{
+ last_data_ptr=NULL;
+ valid=false;
+}
+
+DynamicFontData::~DynamicFontData()
+{
+
+}
+
+
+
+////////////////////
+
+float DynamicFontAtSize::get_height() const {
+
+ return (font->ascent+font->descent)*scale;
+}
+
+float DynamicFontAtSize::get_ascent() const {
+
+ return font->ascent*scale;
+}
+float DynamicFontAtSize::get_descent() const {
+
+ return font->descent*scale;
+}
+
+Size2 DynamicFontAtSize::get_char_size(CharType p_char,CharType p_next) const {
+
+ const_cast<DynamicFontAtSize*>(this)->_update_char(p_char);
+
+ const Character *c = char_map.getptr(p_char);
+ ERR_FAIL_COND_V(!c,Size2());
+
+ Size2 ret( c->advance, get_height());
+
+ if (p_next) {
+ DynamicFontData::KerningPairKey kpk;
+ kpk.A=p_char;
+ kpk.B=p_next;
+
+ const Map<DynamicFontData::KerningPairKey,int>::Element *K=font->kerning_map.find(kpk);
+ if (K) {
+ ret.x+=K->get()*scale;
+ }
+
+ }
+
+ return ret;
+}
+
+
+float DynamicFontAtSize::draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next,const Color& p_modulate) const {
+
+ const_cast<DynamicFontAtSize*>(this)->_update_char(p_char);
+
+ const Character * c = char_map.getptr(p_char);
+
+ if (!c) {
+ return 0;
+ }
+
+ Point2 cpos=p_pos;
+ cpos.x+=c->h_align;
+ cpos.y-=get_ascent();
+ cpos.y+=c->v_align;
+ ERR_FAIL_COND_V( c->texture_idx<-1 || c->texture_idx>=textures.size(),0);
+ if (c->texture_idx!=-1)
+ VisualServer::get_singleton()->canvas_item_add_texture_rect_region( p_canvas_item, Rect2( cpos, c->rect.size ), textures[c->texture_idx].texture->get_rid(),c->rect, p_modulate );
+
+ //textures[c->texture_idx].texture->draw(p_canvas_item,Vector2());
+
+ float ret = c->advance;
+ if (p_next) {
+ DynamicFontData::KerningPairKey kpk;
+ kpk.A=p_char;
+ kpk.B=p_next;
+
+ const Map<DynamicFontData::KerningPairKey,int>::Element *K=font->kerning_map.find(kpk);
+ if (K) {
+ ret+=K->get()*scale;
+ }
+
+ }
+
+ return ret;
+}
+
+
+void DynamicFontAtSize::_update_char(CharType p_char) {
+
+ if (char_map.has(p_char))
+ return;
+
+ font->lock();
+
+
+ int w,h,xofs,yofs;
+ unsigned char * cpbitmap = stbtt_GetCodepointBitmap(&font->info, scale, scale, p_char, &w, &h, &xofs, &yofs );
+
+ if (!cpbitmap) {
+ //no glyph
+
+ int advance;
+ stbtt_GetCodepointHMetrics(&font->info, p_char, &advance, 0);
+ //print_line("char has no bitmap: "+itos(p_char)+" but advance is "+itos(advance*scale));
+ Character ch;
+ ch.texture_idx=-1;
+ ch.advance=advance*scale;
+ ch.h_align=0;
+ ch.v_align=0;
+
+ char_map[p_char]=ch;
+
+ font->unlock();
+
+ return;
+ }
+
+ int mw=w+rect_margin*2;
+ int mh=h+rect_margin*2;
+
+ if (mw>4096 || mh>4096) {
+
+ stbtt_FreeBitmap(cpbitmap,NULL);
+ font->unlock();
+ ERR_FAIL_COND(mw>4096);
+ ERR_FAIL_COND(mh>4096);
+ }
+
+ //find a texture to fit this...
+
+ int tex_index=-1;
+ int tex_x=0;
+ int tex_y=0;
+
+ for(int i=0;i<textures.size();i++) {
+
+ CharTexture &ct=textures[i];
+
+ if (mw > ct.texture_size || mh > ct.texture_size) //too big for this texture
+ continue;
+
+ tex_y=0x7FFFFFFF;
+ tex_x=0;
+
+ for(int j=0;j<ct.texture_size-mw;j++) {
+
+ int max_y=0;
+
+ for(int k=j;k<j+mw;k++) {
+
+ int y = ct.offsets[k];
+ if (y>max_y)
+ max_y=y;
+ }
+
+ if (max_y<tex_y) {
+ tex_y=max_y;
+ tex_x=j;
+ }
+ }
+
+ if (tex_y==0x7FFFFFFF || tex_y+mh > ct.texture_size)
+ continue; //fail, could not fit it here
+
+ tex_index=i;
+ break;
+ }
+
+// print_line("CHAR: "+String::chr(p_char)+" TEX INDEX: "+itos(tex_index)+" X: "+itos(tex_x)+" Y: "+itos(tex_y));
+
+ if (tex_index==-1) {
+ //could not find texture to fit, create one
+ tex_x = 0;
+ tex_y = 0;
+
+ int texsize = MAX(size*8,256);
+ if (mw>texsize)
+ texsize=mw; //special case, adapt to it?
+ if (mh>texsize)
+ texsize=mh; //special case, adapt to it?
+
+ texsize=nearest_power_of_2(texsize);
+
+ texsize=MIN(texsize,4096);
+
+
+ CharTexture tex;
+ tex.texture_size=texsize;
+ tex.imgdata.resize(texsize*texsize*2); //grayscale alpha
+
+ {
+ //zero texture
+ DVector<uint8_t>::Write w = tex.imgdata.write();
+ ERR_FAIL_COND(texsize*texsize*2 > tex.imgdata.size());
+ for(int i=0;i<texsize*texsize*2;i++) {
+ w[i]=0;
+ }
+ }
+ tex.offsets.resize(texsize);
+ for(int i=0;i<texsize;i++) //zero offsets
+ tex.offsets[i]=0;
+
+ textures.push_back(tex);
+ tex_index=textures.size()-1;
+
+ }
+
+
+ //fit character in char texture
+
+ CharTexture &tex=textures[tex_index];
+
+ {
+ DVector<uint8_t>::Write wr = tex.imgdata.write();
+
+ for(int i=0;i<h;i++) {
+ for(int j=0;j<w;j++) {
+
+ int ofs = ( (i+tex_y+rect_margin)*tex.texture_size+j+tex_x+rect_margin)*2;
+ ERR_FAIL_COND(ofs >= tex.imgdata.size());
+ wr[ofs+0]=255; //grayscale as 1
+ wr[ofs+1]=cpbitmap[i*w+j]; //alpha as 0
+ }
+ }
+ }
+
+ //blit to image and texture
+ {
+
+ Image img(tex.texture_size,tex.texture_size,0,Image::FORMAT_GRAYSCALE_ALPHA,tex.imgdata);
+
+ if (tex.texture.is_null()) {
+ tex.texture.instance();
+ tex.texture->create_from_image(img,Texture::FLAG_FILTER);
+ } else {
+ tex.texture->set_data(img); //update
+ }
+
+ }
+
+
+ // update height array
+
+ for(int k=tex_x;k<tex_x+mw;k++) {
+
+ tex.offsets[k]=tex_y+mh;
+ }
+
+ int advance;
+ stbtt_GetCodepointHMetrics(&font->info, p_char, &advance, 0);
+
+ Character chr;
+ chr.h_align=xofs;
+ chr.v_align=yofs + get_ascent();
+ chr.advance=advance*scale;
+ chr.texture_idx=tex_index;
+
+
+ chr.rect=Rect2(tex_x+rect_margin,tex_y+rect_margin,w,h);
+
+ //print_line("CHAR: "+String::chr(p_char)+" TEX INDEX: "+itos(tex_index)+" RECT: "+chr.rect+" X OFS: "+itos(xofs)+" Y OFS: "+itos(yofs));
+
+ char_map[p_char]=chr;
+
+ stbtt_FreeBitmap(cpbitmap,NULL);
+
+ font->unlock();
+
+}
+
+DynamicFontAtSize::DynamicFontAtSize() {
+
+ rect_margin=1;
+}
+
+DynamicFontAtSize::~DynamicFontAtSize(){
+
+ ERR_FAIL_COND(!font.ptr());
+ font->size_cache.erase(size);
+}
+
+/////////////////////////
+
+
+void DynamicFont::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("set_font_data","data:DynamicFontData"),&DynamicFont::set_font_data);
+ ObjectTypeDB::bind_method(_MD("get_font_data:DynamicFontData"),&DynamicFont::get_font_data);
+
+ ObjectTypeDB::bind_method(_MD("set_size","data"),&DynamicFont::set_size);
+ ObjectTypeDB::bind_method(_MD("get_size"),&DynamicFont::get_size);
+
+ ADD_PROPERTY(PropertyInfo(Variant::INT,"size"),_SCS("set_size"),_SCS("get_size"));
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"font",PROPERTY_HINT_RESOURCE_TYPE,"DynamicFontData"),_SCS("set_font_data"),_SCS("get_font_data"));
+}
+
+
+void DynamicFont::set_font_data(const Ref<DynamicFontData>& p_data) {
+
+ data=p_data;
+ data_at_size=data->_get_dynamic_font_at_size(size);
+}
+
+Ref<DynamicFontData> DynamicFont::get_font_data() const{
+
+ return data;
+}
+
+void DynamicFont::set_size(int p_size){
+
+ if (size==p_size)
+ return;
+ size=p_size;
+ ERR_FAIL_COND(p_size<1);
+ if (!data.is_valid())
+ return;
+ data_at_size=data->_get_dynamic_font_at_size(size);
+
+}
+int DynamicFont::get_size() const{
+
+ return size;
+}
+
+float DynamicFont::get_height() const{
+
+ if (!data_at_size.is_valid())
+ return 1;
+
+ return data_at_size->get_height();
+}
+
+float DynamicFont::get_ascent() const{
+
+ if (!data_at_size.is_valid())
+ return 1;
+
+ return data_at_size->get_ascent();
+}
+
+float DynamicFont::get_descent() const{
+
+ if (!data_at_size.is_valid())
+ return 1;
+
+ return data_at_size->get_descent();
+
+}
+
+Size2 DynamicFont::get_char_size(CharType p_char,CharType p_next) const{
+
+ if (!data_at_size.is_valid())
+ return Size2(1,1);
+
+ return data_at_size->get_char_size(p_char,p_next);
+
+}
+
+bool DynamicFont::is_distance_field_hint() const{
+
+ return false;
+}
+
+float DynamicFont::draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next,const Color& p_modulate) const {
+
+ if (!data_at_size.is_valid())
+ return 0;
+
+ return data_at_size->draw_char(p_canvas_item,p_pos,p_char,p_next,p_modulate);
+
+}
+
+DynamicFont::DynamicFont() {
+
+ size=16;
+}
+
+DynamicFont::~DynamicFont() {
+
+}
+
+/////////////////////////
+
+
+RES ResourceFormatLoaderDynamicFont::load(const String &p_path, const String& p_original_path, Error *r_error) {
+
+ if (r_error)
+ *r_error=ERR_FILE_CANT_OPEN;
+
+
+ FileAccess *f = FileAccess::open(p_path,FileAccess::READ);
+ ERR_FAIL_COND_V(!f,RES());
+
+ DVector<uint8_t> data;
+
+ data.resize(f->get_len());
+
+ ERR_FAIL_COND_V(data.size()==0,RES());
+
+ {
+ DVector<uint8_t>::Write w = data.write();
+ f->get_buffer(w.ptr(),data.size());
+ }
+
+ Ref<DynamicFontData> dfd;
+ dfd.instance();
+ dfd->set_font_data(data);
+
+ if (r_error)
+ *r_error=OK;
+
+ return dfd;
+}
+
+void ResourceFormatLoaderDynamicFont::get_recognized_extensions(List<String> *p_extensions) const {
+
+ p_extensions->push_back("ttf");
+}
+
+bool ResourceFormatLoaderDynamicFont::handles_type(const String& p_type) const {
+
+ return (p_type=="DynamicFontData");
+}
+
+String ResourceFormatLoaderDynamicFont::get_resource_type(const String &p_path) const {
+
+ String el = p_path.extension().to_lower();
+ if (el=="ttf")
+ return "DynamicFontData";
+ return "";
+}
+
+#endif
diff --git a/scene/resources/dynamic_font_stb.h b/scene/resources/dynamic_font_stb.h
new file mode 100644
index 0000000000..6b72fb3703
--- /dev/null
+++ b/scene/resources/dynamic_font_stb.h
@@ -0,0 +1,178 @@
+#ifndef DYNAMICFONT_STB_H
+#define DYNAMICFONT_STB_H
+
+#ifndef FREETYPE_ENABLED
+
+#include "font.h"
+#include "stb_truetype.h"
+#include "io/resource_loader.h"
+
+
+
+class DynamicFontAtSize;
+class DynamicFont;
+
+class DynamicFontData : public Resource {
+
+ OBJ_TYPE(DynamicFontData,Resource);
+
+ bool valid;
+
+ DVector<uint8_t> font_data;
+ DVector<uint8_t>::Read fr;
+ const uint8_t* last_data_ptr;
+
+ struct KerningPairKey {
+
+ union {
+ struct {
+ uint32_t A,B;
+ };
+
+ uint64_t pair;
+ };
+
+ _FORCE_INLINE_ bool operator<(const KerningPairKey& p_r) const { return pair<p_r.pair; }
+ };
+
+ Map<KerningPairKey,int> kerning_map;
+
+
+ Map<int,DynamicFontAtSize*> size_cache;
+
+friend class DynamicFontAtSize;
+
+ stbtt_fontinfo info;
+ int ascent;
+ int descent;
+ int linegap;
+
+ void lock();
+ void unlock();
+
+friend class DynamicFont;
+
+
+ Ref<DynamicFontAtSize> _get_dynamic_font_at_size(int p_size);
+public:
+
+ void set_font_data(const DVector<uint8_t>& p_font);
+ DynamicFontData();
+ ~DynamicFontData();
+};
+
+
+class DynamicFontAtSize : public Reference {
+
+ OBJ_TYPE(DynamicFontAtSize,Reference);
+
+
+ int rect_margin;
+
+ struct CharTexture {
+
+ DVector<uint8_t> imgdata;
+ int texture_size;
+ Vector<int> offsets;
+ Ref<ImageTexture> texture;
+ };
+
+ Vector<CharTexture> textures;
+
+ struct Character {
+
+ int texture_idx;
+ Rect2 rect;
+ float v_align;
+ float h_align;
+ float advance;
+
+ Character() { texture_idx=0; v_align=0; }
+ };
+
+
+
+ HashMap< CharType, Character > char_map;
+
+ _FORCE_INLINE_ void _update_char(CharType p_char);
+
+friend class DynamicFontData;
+ Ref<DynamicFontData> font;
+ float scale;
+ int size;
+
+protected:
+
+public:
+
+ float get_height() const;
+
+ float get_ascent() const;
+ float get_descent() const;
+
+ Size2 get_char_size(CharType p_char,CharType p_next=0) const;
+
+ float draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next=0,const Color& p_modulate=Color(1,1,1)) const;
+
+
+
+ DynamicFontAtSize();
+ ~DynamicFontAtSize();
+};
+
+///////////////
+
+class DynamicFont : public Font {
+
+ OBJ_TYPE( DynamicFont, Font );
+
+ Ref<DynamicFontData> data;
+ Ref<DynamicFontAtSize> data_at_size;
+ int size;
+
+
+protected:
+
+ static void _bind_methods();
+
+public:
+
+ void set_font_data(const Ref<DynamicFontData>& p_data);
+ Ref<DynamicFontData> get_font_data() const;
+
+ void set_size(int p_size);
+ int get_size() const;
+
+ virtual float get_height() const;
+
+ virtual float get_ascent() const;
+ virtual float get_descent() const;
+
+ virtual Size2 get_char_size(CharType p_char,CharType p_next=0) const;
+
+ virtual bool is_distance_field_hint() const;
+
+ virtual float draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next=0,const Color& p_modulate=Color(1,1,1)) const;
+
+ DynamicFont();
+ ~DynamicFont();
+
+};
+
+
+
+/////////////
+
+class ResourceFormatLoaderDynamicFont : public ResourceFormatLoader {
+public:
+
+ virtual RES load(const String &p_path,const String& p_original_path="",Error *r_error=NULL);
+ virtual void get_recognized_extensions(List<String> *p_extensions) const;
+ virtual bool handles_type(const String& p_type) const;
+ virtual String get_resource_type(const String &p_path) const;
+
+};
+
+
+#endif
+#endif // DYNAMICFONT_H
diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp
index 09c0a21f53..e6356d3366 100644
--- a/scene/resources/mesh.cpp
+++ b/scene/resources/mesh.cpp
@@ -30,7 +30,6 @@
#include "scene/resources/concave_polygon_shape.h"
#include "scene/resources/convex_polygon_shape.h"
#include "surface_tool.h"
-
static const char*_array_name[]={
"vertex_array",
"normal_array",
@@ -288,6 +287,7 @@ void Mesh::add_surface(PrimitiveType p_primitive,const Array& p_arrays,const Arr
triangle_mesh=Ref<TriangleMesh>();
_change_notify();
+ emit_changed();
}
@@ -387,6 +387,7 @@ void Mesh::surface_remove(int p_idx) {
triangle_mesh=Ref<TriangleMesh>();
_recompute_aabb();
_change_notify();
+ emit_changed();
}
@@ -491,6 +492,8 @@ void Mesh::add_surface_from_mesh_data(const Geometry::MeshData& p_mesh_data) {
surfaces.push_back(s);
_change_notify();
+
+ emit_changed();
}
RID Mesh::get_rid() const {
diff --git a/scene/scene_string_names.cpp b/scene/scene_string_names.cpp
index 7e8dd41ed9..164ae55c9f 100644
--- a/scene/scene_string_names.cpp
+++ b/scene/scene_string_names.cpp
@@ -176,4 +176,11 @@ SceneStringNames::SceneStringNames() {
path_pp=NodePath("..");
_default=StaticCString::create("default");
+
+ for(int i=0;i<MAX_MATERIALS;i++) {
+
+ mesh_materials[i]="material/"+itos(i);
+ }
+
+ _mesh_changed=StaticCString::create("_mesh_changed");
}
diff --git a/scene/scene_string_names.h b/scene/scene_string_names.h
index 7143bd539f..32e51ce8f4 100644
--- a/scene/scene_string_names.h
+++ b/scene/scene_string_names.h
@@ -186,6 +186,12 @@ public:
StringName node_configuration_warning_changed;
+ enum {
+ MAX_MATERIALS=32
+ };
+ StringName mesh_materials[MAX_MATERIALS];
+ StringName _mesh_changed;
+
};
diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h
index e3d1b14835..f1ad685879 100644
--- a/servers/visual/rasterizer.h
+++ b/servers/visual/rasterizer.h
@@ -542,6 +542,7 @@ public:
RID skeleton;
RID material_override;
RID sampled_light;
+ Vector<RID> materials;
Vector<RID> light_instances;
Vector<float> morph_values;
BakedLightData *baked_light;
diff --git a/servers/visual/visual_server_raster.cpp b/servers/visual/visual_server_raster.cpp
index 6b5f1ba353..b3721268bf 100644
--- a/servers/visual/visual_server_raster.cpp
+++ b/servers/visual/visual_server_raster.cpp
@@ -398,7 +398,7 @@ void VisualServerRaster::mesh_add_custom_surface(RID p_mesh,const Variant& p_dat
void VisualServerRaster::mesh_add_surface(RID p_mesh,PrimitiveType p_primitive,const Array& p_arrays,const Array& p_blend_shapes,bool p_alpha_sort) {
VS_CHANGED;
- _dependency_queue_update(p_mesh,true);
+ _dependency_queue_update(p_mesh,true,true);
rasterizer->mesh_add_surface(p_mesh,p_primitive,p_arrays,p_blend_shapes,p_alpha_sort);
}
@@ -452,6 +452,7 @@ VisualServer::PrimitiveType VisualServerRaster::mesh_surface_get_primitive_type(
void VisualServerRaster::mesh_remove_surface(RID p_mesh,int p_surface){
rasterizer->mesh_remove_surface(p_mesh,p_surface);
+ _dependency_queue_update(p_mesh,true,true);
}
int VisualServerRaster::mesh_get_surface_count(RID p_mesh) const{
@@ -480,6 +481,8 @@ void VisualServerRaster::mesh_clear(RID p_mesh) {
while(rasterizer->mesh_get_surface_count(p_mesh)) {
rasterizer->mesh_remove_surface(p_mesh,0);
}
+
+ _dependency_queue_update(p_mesh,true,true);
}
@@ -2038,7 +2041,7 @@ Variant VisualServerRaster::environment_fx_get_param(RID p_env,EnvironmentFxPara
/* SCENARIO API */
-void VisualServerRaster::_dependency_queue_update(RID p_rid,bool p_update_aabb) {
+void VisualServerRaster::_dependency_queue_update(RID p_rid,bool p_update_aabb,bool p_update_materials) {
Map< RID, Set<RID> >::Element * E = instance_dependency_map.find( p_rid );
@@ -2051,17 +2054,19 @@ void VisualServerRaster::_dependency_queue_update(RID p_rid,bool p_update_aabb)
while(I) {
Instance *ins = instance_owner.get( I->get() );
- _instance_queue_update( ins , p_update_aabb );
+ _instance_queue_update( ins , p_update_aabb, p_update_materials );
I = I->next();
}
}
-void VisualServerRaster::_instance_queue_update(Instance *p_instance,bool p_update_aabb) {
+void VisualServerRaster::_instance_queue_update(Instance *p_instance,bool p_update_aabb,bool p_update_materials) {
if (p_update_aabb)
p_instance->update_aabb=true;
+ if (p_update_materials)
+ p_instance->update_materials=true;
if (p_instance->update)
return;
@@ -2273,6 +2278,7 @@ void VisualServerRaster::instance_set_base(RID p_instance, RID p_base) {
}
instance->data.morph_values.clear();
+ instance->data.materials.clear();
}
@@ -2286,6 +2292,7 @@ void VisualServerRaster::instance_set_base(RID p_instance, RID p_base) {
if (rasterizer->is_mesh(p_base)) {
instance->base_type=INSTANCE_MESH;
instance->data.morph_values.resize( rasterizer->mesh_get_morph_target_count(p_base));
+ instance->data.materials.resize( rasterizer->mesh_get_surface_count(p_base));
} else if (rasterizer->is_multimesh(p_base)) {
instance->base_type=INSTANCE_MULTIMESH;
} else if (rasterizer->is_immediate(p_base)) {
@@ -2510,6 +2517,16 @@ float VisualServerRaster::instance_get_morph_target_weight(RID p_instance,int p_
return instance->data.morph_values[p_shape];
}
+void VisualServerRaster::instance_set_surface_material(RID p_instance,int p_surface, RID p_material) {
+
+ VS_CHANGED;
+ Instance *instance = instance_owner.get( p_instance );
+ ERR_FAIL_COND( !instance);
+ ERR_FAIL_INDEX( p_surface, instance->data.materials.size() );
+ instance->data.materials[p_surface]=p_material;
+}
+
+
void VisualServerRaster::instance_set_transform(RID p_instance, const Transform& p_transform) {
VS_CHANGED;
Instance *instance = instance_owner.get( p_instance );
@@ -3046,6 +3063,7 @@ void VisualServerRaster::_update_instance(Instance *p_instance) {
}
+
if (p_instance->aabb.has_no_surface())
return;
@@ -3301,10 +3319,17 @@ void VisualServerRaster::_update_instances() {
if (instance->update_aabb)
_update_instance_aabb(instance);
+ if (instance->update_materials) {
+ if (instance->base_type==INSTANCE_MESH) {
+ instance->data.materials.resize(rasterizer->mesh_get_surface_count(instance->base_rid));
+ }
+ }
+
_update_instance(instance);
instance->update=false;
instance->update_aabb=false;
+ instance->update_materials=false;
instance->update_next=0;
}
}
diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h
index 5abad863ee..39ea2f55e6 100644
--- a/servers/visual/visual_server_raster.h
+++ b/servers/visual/visual_server_raster.h
@@ -160,6 +160,7 @@ class VisualServerRaster : public VisualServer {
Scenario *scenario;
bool update;
bool update_aabb;
+ bool update_materials;
Instance *update_next;
InstanceType base_type;
@@ -317,6 +318,8 @@ class VisualServerRaster : public VisualServer {
draw_range_end=0;
extra_margin=0;
visible_in_all_rooms=false;
+ update_aabb=false;
+ update_materials=false;
baked_light=NULL;
baked_light_info=NULL;
@@ -583,8 +586,8 @@ class VisualServerRaster : public VisualServer {
void _portal_disconnect(Instance *p_portal,bool p_cleanup=false);
void _portal_attempt_connect(Instance *p_portal);
- void _dependency_queue_update(RID p_rid,bool p_update_aabb=false);
- _FORCE_INLINE_ void _instance_queue_update(Instance *p_instance,bool p_update_aabb=false);
+ void _dependency_queue_update(RID p_rid, bool p_update_aabb=false, bool p_update_materials=false);
+ _FORCE_INLINE_ void _instance_queue_update(Instance *p_instance,bool p_update_aabb=false,bool p_update_materials=false);
void _update_instances();
void _update_instance_aabb(Instance *p_instance);
void _update_instance(Instance *p_instance);
@@ -1083,6 +1086,9 @@ public:
virtual void instance_set_morph_target_weight(RID p_instance,int p_shape, float p_weight);
virtual float instance_get_morph_target_weight(RID p_instance,int p_shape) const;
+ virtual void instance_set_surface_material(RID p_instance,int p_surface, RID p_material);
+
+
virtual void instance_set_transform(RID p_instance, const Transform& p_transform);
virtual Transform instance_get_transform(RID p_instance) const;
diff --git a/servers/visual/visual_server_wrap_mt.h b/servers/visual/visual_server_wrap_mt.h
index 6a42fcc8a6..80cf43d572 100644
--- a/servers/visual/visual_server_wrap_mt.h
+++ b/servers/visual/visual_server_wrap_mt.h
@@ -525,6 +525,8 @@ public:
FUNC3(instance_set_morph_target_weight,RID,int, float);
FUNC2RC(float,instance_get_morph_target_weight,RID,int);
+ FUNC3(instance_set_surface_material,RID,int, RID);
+
FUNC2(instance_set_transform,RID, const Transform&);
FUNC1RC(Transform,instance_get_transform,RID);
diff --git a/servers/visual_server.h b/servers/visual_server.h
index 750c090bbe..f32e976b57 100644
--- a/servers/visual_server.h
+++ b/servers/visual_server.h
@@ -919,6 +919,8 @@ public:
virtual void instance_set_morph_target_weight(RID p_instance,int p_shape, float p_weight)=0;
virtual float instance_get_morph_target_weight(RID p_instance,int p_shape) const=0;
+ virtual void instance_set_surface_material(RID p_instance,int p_surface, RID p_material)=0;
+
virtual void instance_attach_skeleton(RID p_instance,RID p_skeleton)=0;
virtual RID instance_get_skeleton(RID p_instance) const=0;
diff --git a/tools/SCsub b/tools/SCsub
index 5613d8a6c9..7a0feb6e3d 100644
--- a/tools/SCsub
+++ b/tools/SCsub
@@ -5,12 +5,117 @@ env.add_source_files(env.tool_sources,"*.cpp")
Export('env')
+
+def make_translations_header(target,source,env):
+
+
+ dst = target[0].srcnode().abspath
+
+ g = open(dst,"wb")
+
+
+ """"
+ """
+
+ g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
+ g.write("#ifndef _EDITOR_TRANSLATIONS_H\n")
+ g.write("#define _EDITOR_TRANSLATIONS_H\n")
+
+ xl_names=[]
+ for i in range(len(source)):
+ print("Appending translation: "+source[i].srcnode().abspath)
+ f = open(source[i].srcnode().abspath,"rb")
+ buf = f.read()
+ decomp_size = len(buf)
+ import zlib
+ import os.path
+ buf = zlib.compress(buf)
+
+ name = os.path.splitext(os.path.basename(source[i].srcnode().abspath))[0]
+
+ #g.write("static const int _translation_"+name+"_compressed_size="+str(len(buf))+";\n")
+ #g.write("static const int _translation_"+name+"_uncompressed_size="+str(decomp_size)+";\n")
+ g.write("static const unsigned char _translation_"+name+"_compressed[]={\n")
+ for i in range(len(buf)):
+ g.write(str(ord(buf[i]))+",\n")
+
+ g.write("};\n")
+
+ xl_names.append([name,len(buf),str(decomp_size)])
+
+ g.write("struct EditorTranslationList {\n")
+ g.write("\tconst char* lang;\n");
+ g.write("\tint comp_size;\n");
+ g.write("\tint uncomp_size;\n");
+ g.write("\tconst unsigned char* data;\n");
+ g.write("};\n\n");
+ g.write("static EditorTranslationList _editor_translations[]={\n")
+ for x in xl_names:
+ g.write("\t{ \""+x[0]+"\", "+str(x[1])+", "+str(x[2])+",_translation_"+x[0]+"_compressed},\n")
+ g.write("\t{NULL,0,0,NULL}\n")
+ g.write("};\n")
+
+ g.write("#endif")
+
+
+def make_fonts_header(target,source,env):
+
+
+ dst = target[0].srcnode().abspath
+
+ g = open(dst,"wb")
+
+
+ """"
+ """
+
+ g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
+ g.write("#ifndef _EDITOR_FONTS_H\n")
+ g.write("#define _EDITOR_FONTS_H\n")
+
+ #saving uncompressed, since freetype will reference from memory pointer
+ xl_names=[]
+ for i in range(len(source)):
+ print("Appending font: "+source[i].srcnode().abspath)
+ f = open(source[i].srcnode().abspath,"rb")
+ buf = f.read()
+ import os.path
+
+ name = os.path.splitext(os.path.basename(source[i].srcnode().abspath))[0]
+
+ g.write("static const int _font_"+name+"_size="+str(len(buf))+";\n")
+ g.write("static const unsigned char _font_"+name+"[]={\n")
+ for i in range(len(buf)):
+ g.write(str(ord(buf[i]))+",\n")
+
+ g.write("};\n")
+
+ g.write("#endif")
+
+
if (env["tools"]!="no"):
+
+ import glob
+
+ dir = env.Dir('.').abspath
+ tlist = glob.glob(dir + "/translations/*.po")
+
+ print("translations: ",tlist)
+ env.Depends('#tools/editor/translations.h',tlist)
+ env.Command('#tools/editor/translations.h',tlist,make_translations_header)
+
+ flist = glob.glob(dir + "/editor_fonts/*.ttf")
+ flist.append( glob.glob(dir + "/editor_fonts/*.otf") )
+
+ print("fonts: ",flist)
+ env.Depends('#tools/editor/builtin_fonts.h',flist)
+ env.Command('#tools/editor/builtin_fonts.h',flist,make_fonts_header)
+
SConscript('editor/SCsub');
#SConscript('scintilla/SCsub');
SConscript('collada/SCsub');
SConscript('docdump/SCsub');
- SConscript('freetype/SCsub');
+ #SConscript('freetype/SCsub');
SConscript('doc/SCsub')
SConscript('pck/SCsub')
diff --git a/tools/doc/doc_data.h b/tools/doc/doc_data.h
index 877f30defb..d1aebff4ce 100644
--- a/tools/doc/doc_data.h
+++ b/tools/doc/doc_data.h
@@ -50,6 +50,9 @@ public:
String qualifiers;
String description;
Vector<ArgumentDoc> arguments;
+ bool operator<(const MethodDoc& p_md) const {
+ return name<p_md.name;
+ }
};
struct ConstantDoc {
diff --git a/tools/editor/code_editor.cpp b/tools/editor/code_editor.cpp
index c92b40628c..a9e31a6561 100644
--- a/tools/editor/code_editor.cpp
+++ b/tools/editor/code_editor.cpp
@@ -30,6 +30,7 @@
#include "editor_settings.h"
#include "scene/gui/margin_container.h"
#include "scene/gui/separator.h"
+#include "os/keyboard.h"
void GotoLineDialog::popup_find_line(TextEdit *p_edit) {
@@ -76,6 +77,436 @@ GotoLineDialog::GotoLineDialog() {
}
+void FindReplaceBar::_notification(int p_what) {
+
+ if (p_what == NOTIFICATION_READY) {
+
+ find_prev->set_icon(get_icon("MoveUp", "EditorIcons"));
+ find_next->set_icon(get_icon("MoveDown", "EditorIcons"));
+ hide_button->set_normal_texture(get_icon("Close","EditorIcons"));
+ hide_button->set_hover_texture(get_icon("CloseHover","EditorIcons"));
+ hide_button->set_pressed_texture(get_icon("Close","EditorIcons"));
+
+ } else if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
+
+ set_process_unhandled_input(is_visible());
+ }
+}
+
+void FindReplaceBar::_unhandled_input(const InputEvent &p_event) {
+
+ if (p_event.type == InputEvent::KEY) {
+
+ const InputEventKey& k = p_event.key;
+
+ if (k.pressed && (text_edit->has_focus() || text_vbc->is_a_parent_of(get_focus_owner()))) {
+
+ bool accepted = true;
+
+ switch (k.scancode) {
+
+ case KEY_ESCAPE: {
+
+ _hide_bar();
+ } break;
+ default: {
+
+ accepted = false;
+ } break;
+ }
+
+ if (accepted) {
+ accept_event();
+ }
+ }
+ }
+}
+
+bool FindReplaceBar::_search(bool p_include_current, bool p_backwards) {
+
+ String text=get_search_text();
+ uint32_t flags=0;
+
+ if (is_whole_words())
+ flags|=TextEdit::SEARCH_WHOLE_WORDS;
+ if (is_case_sensitive())
+ flags|=TextEdit::SEARCH_MATCH_CASE;
+ if (p_backwards)
+ flags|=TextEdit::SEARCH_BACKWARDS;
+
+ int line=text_edit->cursor_get_line();
+ int col=text_edit->cursor_get_column();
+
+ if (text_edit->is_selection_active() && !replace_all_mode) {
+ line = text_edit->get_selection_from_line();
+ col = text_edit->get_selection_from_column();
+ }
+
+ bool cursor_at_result=false;
+
+ if (line==current_result_line && col>=current_result_col && col<=current_result_col+text.length()) {
+ col=current_result_col;
+ cursor_at_result=true;
+ }
+
+ if (!p_include_current) {
+ if (p_backwards) {
+ col-=text.length();
+ if (col<0) {
+ line-=1;
+ if (line<0)
+ line=text_edit->get_line_count()-1;
+ col=text_edit->get_line(line).length();
+ }
+ } else if (cursor_at_result) {
+ col+=text.length();
+ if (col>text_edit->get_line(line).length()) {
+ line+=1;
+ if (line>=text_edit->get_line_count())
+ line=0;
+ col=0;
+ }
+ }
+ }
+
+ bool found = text_edit->search(text,flags,line,col,line,col);
+
+ if (!found) {
+ if (p_backwards) {
+ line = text_edit->get_line_count()-1;
+ col = text_edit->get_line(line).length()-1;
+ } else {
+ line = 0;
+ col = 0;
+ }
+
+ found = text_edit->search(text,flags,line,col,line,col);
+ }
+
+ if (found) {
+ text_edit->cursor_set_line(line);
+ text_edit->cursor_set_column(p_backwards?col:col+text.length());
+ text_edit->select(line,col,line,col+text.length());
+ text_edit->set_search_text(text);
+ text_edit->set_search_flags(flags);
+ text_edit->set_current_search_result(line,col);
+
+ current_result_line = line;
+ current_result_col = col;
+
+ set_error("");
+ } else {
+ current_result_line = -1;
+ current_result_col = -1;
+ text_edit->set_search_text("");
+ set_error(text.empty()?"":TTR("No Matches"));
+ }
+
+ return found;
+}
+
+void FindReplaceBar::_replace() {
+
+ if (text_edit->get_selection_text()==get_search_text()) {
+ text_edit->insert_text_at_cursor(get_replace_text());
+ }
+
+ search_current();
+}
+
+void FindReplaceBar::_replace_all() {
+
+ // line as x so it gets priority in comparison, column as y
+ Point2i orig_cursor(text_edit->cursor_get_line(),text_edit->cursor_get_column());
+ Point2i prev_match=Point2(-1,-1);
+
+ bool selection_enabled = text_edit->is_selection_active();
+ Point2i selection_begin,selection_end;
+ if (selection_enabled) {
+ selection_begin=Point2i(text_edit->get_selection_from_line(),text_edit->get_selection_from_column());
+ selection_end=Point2i(text_edit->get_selection_to_line(),text_edit->get_selection_to_column());
+ }
+
+ int vsval = text_edit->get_v_scroll();
+
+ text_edit->cursor_set_line(0);
+ text_edit->cursor_set_column(0);
+
+ int rc=0;
+
+ replace_all_mode = true;
+
+ text_edit->begin_complex_operation();
+
+ while(_search(false)) {
+
+ if (!text_edit->is_selection_active()) {
+ // search selects
+ break;
+ }
+
+ // replace area
+ Point2i match_from(text_edit->get_selection_from_line(),text_edit->get_selection_from_column());
+ Point2i match_to(text_edit->get_selection_to_line(),text_edit->get_selection_to_column());
+
+ if (match_from < prev_match)
+ break; // done
+
+ prev_match=match_to;
+
+ if (selection_enabled && is_selection_only()) {
+
+ if (match_from<selection_begin || match_to>selection_end)
+ continue;
+
+ // replace but adjust selection bounds
+ text_edit->insert_text_at_cursor(get_replace_text());
+ if (match_to.x==selection_end.x)
+ selection_end.y+=get_replace_text().length() - get_search_text().length();
+ } else {
+ //just replace
+ text_edit->insert_text_at_cursor(get_replace_text());
+ }
+
+ rc++;
+ }
+
+ text_edit->end_complex_operation();
+
+ replace_all_mode = false;
+
+ // restore editor state (selection, cursor, scroll)
+ text_edit->cursor_set_line(orig_cursor.x);
+ text_edit->cursor_set_column(orig_cursor.y);
+
+ if (selection_enabled && is_selection_only()) {
+ // reselect
+ text_edit->select(selection_begin.x,selection_begin.y,selection_end.x,selection_end.y);
+ } else {
+ text_edit->deselect();
+ }
+
+ text_edit->set_v_scroll(vsval);
+ set_error(vformat(TTR("Replaced %d Ocurrence(s)."), rc));
+}
+
+void FindReplaceBar::search_current() {
+
+ _search(true);
+}
+
+void FindReplaceBar::search_prev() {
+
+ _search(false, true);
+}
+
+void FindReplaceBar::search_next() {
+
+ _search();
+}
+
+void FindReplaceBar::_hide_bar() {
+
+ text_edit->set_search_text("");
+ current_result_line = -1;
+ current_result_col = -1;
+ replace_hbc->hide();
+ replace_options_hbc->hide();
+ hide();
+}
+
+void FindReplaceBar::_show_search() {
+
+ show();
+ search_text->grab_focus();
+
+ if (text_edit->is_selection_active()) {
+ search_text->set_text(text_edit->get_selection_text());
+ }
+
+ if (!get_search_text().empty()) {
+ search_text->select_all();
+ search_text->set_cursor_pos(search_text->get_text().length());
+ search_current();
+ }
+}
+
+void FindReplaceBar::popup_search() {
+
+ replace_hbc->hide();
+ replace_options_hbc->hide();
+ _show_search();
+}
+
+void FindReplaceBar::popup_replace() {
+
+ if (!replace_hbc->is_visible() || !replace_options_hbc->is_visible()) {
+ replace_text->clear();
+ replace_hbc->show();
+ replace_options_hbc->show();
+ }
+
+ _show_search();
+}
+
+void FindReplaceBar::_search_options_changed(bool p_pressed) {
+
+ search_current();
+}
+
+void FindReplaceBar::_search_text_changed(const String& p_text) {
+
+ search_current();
+}
+
+void FindReplaceBar::_search_text_entered(const String& p_text) {
+
+ search_next();
+}
+
+String FindReplaceBar::get_search_text() const {
+
+ return search_text->get_text();
+}
+
+String FindReplaceBar::get_replace_text() const {
+
+ return replace_text->get_text();
+}
+
+bool FindReplaceBar::is_case_sensitive() const {
+
+ return case_sensitive->is_pressed();
+}
+
+bool FindReplaceBar::is_whole_words() const {
+
+ return whole_words->is_pressed();
+}
+
+bool FindReplaceBar::is_selection_only() const {
+
+ return selection_only->is_pressed();
+}
+
+void FindReplaceBar::set_error(const String &p_label) {
+
+ error_label->set_text(p_label);
+}
+
+void FindReplaceBar::set_text_edit(TextEdit *p_text_edit) {
+
+ text_edit = p_text_edit;
+ text_edit->connect("_text_changed",this,"_search_text_changed",varray(String()));
+}
+
+void FindReplaceBar::_bind_methods() {
+
+ ObjectTypeDB::bind_method("_unhandled_input",&FindReplaceBar::_unhandled_input);
+
+ ObjectTypeDB::bind_method("_search_text_changed",&FindReplaceBar::_search_text_changed);
+ ObjectTypeDB::bind_method("_search_text_entered",&FindReplaceBar::_search_text_entered);
+ ObjectTypeDB::bind_method("_search_current",&FindReplaceBar::search_current);
+ ObjectTypeDB::bind_method("_search_next",&FindReplaceBar::search_next);
+ ObjectTypeDB::bind_method("_search_prev",&FindReplaceBar::search_prev);
+ ObjectTypeDB::bind_method("_replace_pressed",&FindReplaceBar::_replace);
+ ObjectTypeDB::bind_method("_replace_all_pressed",&FindReplaceBar::_replace_all);
+ ObjectTypeDB::bind_method("_search_options_changed",&FindReplaceBar::_search_options_changed);
+ ObjectTypeDB::bind_method("_hide_pressed",&FindReplaceBar::_hide_bar);
+
+ ADD_SIGNAL(MethodInfo("search"));
+}
+
+FindReplaceBar::FindReplaceBar() {
+
+ text_vbc = memnew(VBoxContainer);
+ add_child(text_vbc);
+
+ HBoxContainer *search_hbc = memnew(HBoxContainer);
+ text_vbc->add_child(search_hbc);
+
+ search_text = memnew(LineEdit);
+ search_hbc->add_child(search_text);
+ search_text->set_custom_minimum_size(Size2(200, 0));
+ search_text->connect("text_changed",this,"_search_text_changed");
+ search_text->connect("text_entered",this,"_search_text_entered");
+
+ find_prev = memnew(ToolButton);
+ search_hbc->add_child(find_prev);
+ find_prev->set_focus_mode(FOCUS_NONE);
+ find_prev->connect("pressed",this,"_search_prev");
+
+ find_next = memnew(ToolButton);
+ search_hbc->add_child(find_next);
+ find_next->set_focus_mode(FOCUS_NONE);
+ find_next->connect("pressed",this,"_search_next");
+
+ replace_hbc = memnew(HBoxContainer);
+ text_vbc->add_child(replace_hbc);
+ replace_hbc->hide();
+
+ replace_text = memnew(LineEdit);
+ replace_hbc->add_child(replace_text);
+ replace_text->set_custom_minimum_size(Size2(200, 0));
+ replace_text->connect("text_entered",this,"_search_text_entered");
+
+ replace = memnew(ToolButton);
+ replace_hbc->add_child(replace);
+ replace->set_text(TTR("Replace"));
+ replace->set_focus_mode(FOCUS_NONE);
+ replace->connect("pressed",this,"_replace_pressed");
+
+ replace_all = memnew(ToolButton);
+ replace_hbc->add_child(replace_all);
+ replace_all->set_text(TTR("Replace All"));
+ replace_all->set_focus_mode(FOCUS_NONE);
+ replace_all->connect("pressed",this,"_replace_all_pressed");
+
+ Control *spacer_split = memnew( Control );
+ spacer_split->set_custom_minimum_size(Size2(0, 1));
+ text_vbc->add_child(spacer_split);
+
+ VBoxContainer *options_vbc = memnew(VBoxContainer);
+ add_child(options_vbc);
+ options_vbc->set_h_size_flags(SIZE_EXPAND_FILL);
+
+ HBoxContainer *search_options = memnew(HBoxContainer);
+ options_vbc->add_child(search_options);
+
+ case_sensitive = memnew(CheckBox);
+ search_options->add_child(case_sensitive);
+ case_sensitive->set_text(TTR("Match Case"));
+ case_sensitive->set_focus_mode(FOCUS_NONE);
+ case_sensitive->connect("toggled",this,"_search_options_changed");
+
+ whole_words = memnew(CheckBox);
+ search_options->add_child(whole_words);
+ whole_words->set_text(TTR("Whole Words"));
+ whole_words->set_focus_mode(FOCUS_NONE);
+ whole_words->connect("toggled",this,"_search_options_changed");
+
+ error_label = memnew(Label);
+ search_options->add_child(error_label);
+
+ search_options->add_spacer();
+
+ hide_button = memnew(TextureButton);
+ search_options->add_child(hide_button);
+ hide_button->set_focus_mode(FOCUS_NONE);
+ hide_button->connect("pressed",this,"_hide_pressed");
+
+ replace_options_hbc = memnew(HBoxContainer);
+ options_vbc->add_child(replace_options_hbc);
+ replace_options_hbc->hide();
+
+ selection_only = memnew(CheckBox);
+ replace_options_hbc->add_child(selection_only);
+ selection_only->set_text(TTR("Selection Only"));
+ selection_only->set_focus_mode(FOCUS_NONE);
+ selection_only->connect("toggled",this,"_search_options_changed");
+}
+
+
void FindReplaceDialog::popup_search() {
set_title(TTR("Search"));
@@ -544,7 +975,7 @@ void CodeTextEditor::set_error(const String& p_error) {
}
-void CodeTextEditor::_on_settings_change() {
+void CodeTextEditor::_update_font() {
// FONTS
String editor_font = EDITOR_DEF("text_editor/font", "");
@@ -557,7 +988,12 @@ void CodeTextEditor::_on_settings_change() {
}
}
if(!font_overrode)
- text_editor->add_font_override("font",get_font("source","Fonts"));
+ text_editor->add_font_override("font",get_font("source","EditorFonts"));
+}
+
+void CodeTextEditor::_on_settings_change() {
+
+ _update_font();
// AUTO BRACE COMPLETION
text_editor->set_auto_brace_completion(
@@ -588,6 +1024,9 @@ void CodeTextEditor::_notification(int p_what) {
if (p_what==EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED)
_load_theme_settings();
+ if (p_what==NOTIFICATION_ENTER_TREE) {
+ _update_font();
+ }
}
void CodeTextEditor::_bind_methods() {
@@ -602,35 +1041,32 @@ void CodeTextEditor::_bind_methods() {
CodeTextEditor::CodeTextEditor() {
+ find_replace_bar = memnew( FindReplaceBar );
+ add_child(find_replace_bar);
+ find_replace_bar->set_h_size_flags(SIZE_EXPAND_FILL);
+ find_replace_bar->hide();
+
text_editor = memnew( TextEdit );
add_child(text_editor);
- text_editor->set_area_as_parent_rect();
- text_editor->set_margin(MARGIN_BOTTOM,20);
+ text_editor->set_v_size_flags(SIZE_EXPAND_FILL);
- String editor_font = EDITOR_DEF("text_editor/font", "");
- bool font_overrode = false;
- if (editor_font!="") {
- Ref<Font> fnt = ResourceLoader::load(editor_font);
- if (fnt.is_valid()) {
- text_editor->add_font_override("font",fnt);
- font_overrode = true;
- }
- }
-
- if (!font_overrode)
- text_editor->add_font_override("font",get_font("source","Fonts"));
+ find_replace_bar->set_text_edit(text_editor);
text_editor->set_show_line_numbers(true);
text_editor->set_brace_matching(true);
text_editor->set_auto_indent(true);
- line_col = memnew( Label );
- add_child(line_col);
- line_col->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_END,135);
- line_col->set_anchor_and_margin(MARGIN_TOP,ANCHOR_END,15);
- line_col->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END,1);
- line_col->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,5);
- //line_col->set_align(Label::ALIGN_RIGHT);
+ MarginContainer *status_mc = memnew( MarginContainer );
+ add_child(status_mc);
+ status_mc->set("custom_constants/margin_left", 2);
+ status_mc->set("custom_constants/margin_top", 5);
+ status_mc->set("custom_constants/margin_right", 2);
+ status_mc->set("custom_constants/margin_bottom", 1);
+
+ HBoxContainer *status_bar = memnew( HBoxContainer );
+ status_mc->add_child(status_bar);
+ status_bar->set_h_size_flags(SIZE_EXPAND_FILL);
+
idle = memnew( Timer );
add_child(idle);
idle->set_one_shot(true);
@@ -644,14 +1080,16 @@ CodeTextEditor::CodeTextEditor() {
code_complete_timer->set_wait_time(EDITOR_DEF("text_editor/code_complete_delay",.3f));
error = memnew( Label );
- add_child(error);
- error->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN,5);
- error->set_anchor_and_margin(MARGIN_TOP,ANCHOR_END,15);
- error->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END,1);
- error->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,130);
+ status_bar->add_child(error);
error->hide();
+ error->set_valign(Label::VALIGN_CENTER);
error->add_color_override("font_color",Color(1,0.7,0.6,0.9));
+ status_bar->add_spacer();
+
+ line_col = memnew( Label );
+ status_bar->add_child(line_col);
+ line_col->set_valign(Label::VALIGN_CENTER);
text_editor->connect("cursor_changed", this,"_line_col_changed");
diff --git a/tools/editor/code_editor.h b/tools/editor/code_editor.h
index e28517c601..52a36c979d 100644
--- a/tools/editor/code_editor.h
+++ b/tools/editor/code_editor.h
@@ -33,7 +33,9 @@
#include "scene/gui/text_edit.h"
#include "scene/gui/dialogs.h"
#include "scene/main/timer.h"
+#include "scene/gui/tool_button.h"
#include "scene/gui/check_button.h"
+#include "scene/gui/check_box.h"
#include "scene/gui/line_edit.h"
@@ -58,8 +60,71 @@ public:
GotoLineDialog();
};
+class FindReplaceBar : public HBoxContainer {
+ OBJ_TYPE(FindReplaceBar,HBoxContainer);
+ LineEdit *search_text;
+ ToolButton *find_prev;
+ ToolButton *find_next;
+ CheckBox *case_sensitive;
+ CheckBox *whole_words;
+ Label *error_label;
+ TextureButton *hide_button;
+
+ LineEdit *replace_text;
+ ToolButton *replace;
+ ToolButton *replace_all;
+ CheckBox *selection_only;
+
+ VBoxContainer *text_vbc;
+ HBoxContainer *replace_hbc;
+ HBoxContainer *replace_options_hbc;
+
+ TextEdit *text_edit;
+
+ int current_result_line;
+ int current_result_col;
+
+ bool replace_all_mode;
+
+ void _show_search();
+ void _hide_bar();
+ void _search_options_changed(bool p_pressed);
+ void _search_text_changed(const String& p_text);
+ void _search_text_entered(const String& p_text);
+
+protected:
+ void _notification(int p_what);
+ void _unhandled_input(const InputEvent &p_event);
+
+ bool _search(bool p_include_current=false, bool p_backwards=false);
+
+ void _replace();
+ void _replace_all();
+
+ static void _bind_methods();
+
+public:
+ String get_search_text() const;
+ String get_replace_text() const;
+
+ bool is_case_sensitive() const;
+ bool is_whole_words() const;
+ bool is_selection_only() const;
+ void set_error(const String& p_label);
+
+ void set_text_edit(TextEdit *p_text_edit);
+
+ void popup_search();
+ void popup_replace();
+
+ void search_current();
+ void search_prev();
+ void search_next();
+
+ FindReplaceBar();
+};
class FindReplaceDialog : public ConfirmationDialog {
@@ -119,11 +184,12 @@ public:
};
-class CodeTextEditor : public Control {
+class CodeTextEditor : public VBoxContainer {
- OBJ_TYPE(CodeTextEditor,Control);
+ OBJ_TYPE(CodeTextEditor,VBoxContainer);
TextEdit *text_editor;
+ FindReplaceBar *find_replace_bar;
Label *line_col;
Label *info;
@@ -135,6 +201,7 @@ class CodeTextEditor : public Control {
void _on_settings_change();
+ void _update_font();
void _complete_request();
protected:
@@ -157,6 +224,7 @@ protected:
public:
TextEdit *get_text_edit() { return text_editor; }
+ FindReplaceBar *get_find_replace_bar() { return find_replace_bar; }
virtual void apply_code() {}
CodeTextEditor();
diff --git a/tools/editor/create_dialog.cpp b/tools/editor/create_dialog.cpp
index 151208ace0..8bce415fb8 100644
--- a/tools/editor/create_dialog.cpp
+++ b/tools/editor/create_dialog.cpp
@@ -255,6 +255,15 @@ void CreateDialog::set_base_type(const String& p_base) {
_update_search();
}
+String CreateDialog::get_selected_type() {
+
+ TreeItem *selected = search_options->get_selected();
+ if (selected)
+ return selected->get_text(0);
+ else
+ return String();
+}
+
Object *CreateDialog::instance_selected() {
TreeItem *selected = search_options->get_selected();
diff --git a/tools/editor/create_dialog.h b/tools/editor/create_dialog.h
index a46ff5ae06..8957479beb 100644
--- a/tools/editor/create_dialog.h
+++ b/tools/editor/create_dialog.h
@@ -66,6 +66,7 @@ protected:
public:
Object *instance_selected();
+ String get_selected_type();
void set_base_type(const String& p_base);
String get_base_type() const;
diff --git a/tools/editor/dependency_editor.cpp b/tools/editor/dependency_editor.cpp
index 633a414b07..a702d3c687 100644
--- a/tools/editor/dependency_editor.cpp
+++ b/tools/editor/dependency_editor.cpp
@@ -240,8 +240,8 @@ DependencyEditor::DependencyEditor() {
tree = memnew( Tree );
tree->set_columns(2);
tree->set_column_titles_visible(true);
- tree->set_column_title(0,"Resource");
- tree->set_column_title(1,"Path");
+ tree->set_column_title(0,TTR("Resource"));
+ tree->set_column_title(1,TTR("Path"));
tree->set_hide_root(true);
tree->connect("button_pressed",this,"_load_pressed");
@@ -401,7 +401,7 @@ void DependencyRemoveDialog::show(const Vector<String> &to_erase) {
if (exist) {
owners->show();
- text->set_text("The files being removed are required by other resources in order for them to work.\nRemove them anyway? (no undo)");
+ text->set_text(TTR("The files being removed are required by other resources in order for them to work.\nRemove them anyway? (no undo)"));
popup_centered_minsize(Size2(500,220));
} else {
owners->hide();
@@ -675,7 +675,7 @@ OrphanResourcesDialog::OrphanResourcesDialog(){
files->set_column_min_width(1,100);
files->set_column_expand(0,true);
files->set_column_expand(1,false);
- files->set_column_title(0,"Resource");
+ files->set_column_title(0,TTR("Resource"));
files->set_column_title(1,TTR("Owns"));
files->set_hide_root(true);
vbc->add_margin_child(TTR("Resources Without Explicit Ownership:"),files,true);
diff --git a/tools/editor/editor_file_system.cpp b/tools/editor/editor_file_system.cpp
index 1062417fec..3fd5f7e444 100644
--- a/tools/editor/editor_file_system.cpp
+++ b/tools/editor/editor_file_system.cpp
@@ -149,6 +149,41 @@ bool EditorFileSystemDirectory::is_missing_sources(int p_idx) const {
return false;
}
+bool EditorFileSystemDirectory::have_sources_changed(int p_idx) const {
+
+ ERR_FAIL_INDEX_V(p_idx,files.size(),false);
+ return files[p_idx]->meta.sources_changed;
+
+}
+
+int EditorFileSystemDirectory::get_source_count(int p_idx) const {
+
+ ERR_FAIL_INDEX_V(p_idx,files.size(),0);
+ if (!files[p_idx]->meta.enabled)
+ return 0;
+
+}
+String EditorFileSystemDirectory::get_source_file(int p_idx,int p_source) const {
+
+ ERR_FAIL_INDEX_V(p_idx,files.size(),String());
+ ERR_FAIL_INDEX_V(p_source,files[p_idx]->meta.sources.size(),String());
+ if (!files[p_idx]->meta.enabled)
+ return String();
+
+ return files[p_idx]->meta.sources[p_source].path;
+
+}
+bool EditorFileSystemDirectory::is_source_file_missing(int p_idx,int p_source) const {
+
+ ERR_FAIL_INDEX_V(p_idx,files.size(),false);
+ ERR_FAIL_INDEX_V(p_source,files[p_idx]->meta.sources.size(),false);
+ if (!files[p_idx]->meta.enabled)
+ return false;
+
+ return files[p_idx]->meta.sources[p_source].missing;
+}
+
+
StringName EditorFileSystemDirectory::get_file_type(int p_idx) const {
ERR_FAIL_INDEX_V(p_idx,files.size(),"");
@@ -210,8 +245,11 @@ EditorFileSystemDirectory::ImportMeta EditorFileSystem::_get_meta(const String&
EditorFileSystemDirectory::ImportMeta m;
if (imd.is_null()) {
m.enabled=false;
+ m.sources_changed=false;
} else {
m.enabled=true;
+ m.sources_changed=false;
+
for(int i=0;i<imd->get_source_count();i++) {
EditorFileSystemDirectory::ImportMeta::Source s;
s.path=imd->get_source_path(i);
@@ -649,7 +687,13 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir,DirAccess
ia.dir=p_dir;
ia.file=E->get();
scan_actions.push_back(ia);
+ fi->meta.sources_changed=true;
+ } else {
+ fi->meta.sources_changed=false;
}
+
+ } else {
+ fi->meta.sources_changed=true;
}
p_dir->files.push_back(fi);
@@ -764,6 +808,9 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir,const S
ia.dir=p_dir;
ia.file=f;
scan_actions.push_back(ia);
+ fi->meta.sources_changed=true;
+ } else {
+ fi->meta.sources_changed=false;
}
} else {
@@ -800,6 +847,9 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir,const S
ia.dir=p_dir;
ia.file=p_dir->files[i]->file;
scan_actions.push_back(ia);
+ p_dir->files[i]->meta.sources_changed=true;
+ } else {
+ p_dir->files[i]->meta.sources_changed=false;
}
}
@@ -1113,6 +1163,25 @@ String EditorFileSystem::get_file_type(const String& p_file) const {
}
+EditorFileSystemDirectory* EditorFileSystem::find_file(const String& p_file,int* r_index) const {
+
+ if (!filesystem || scanning)
+ return NULL;
+
+ EditorFileSystemDirectory *fs=NULL;
+ int cpos=-1;
+ if (!_find_file(p_file,&fs,cpos)) {
+
+ return NULL;
+ }
+
+
+ if (r_index)
+ *r_index=cpos;
+
+ return fs;
+}
+
EditorFileSystemDirectory *EditorFileSystem::get_path(const String& p_path) {
diff --git a/tools/editor/editor_file_system.h b/tools/editor/editor_file_system.h
index 254dd68c14..b96e947569 100644
--- a/tools/editor/editor_file_system.h
+++ b/tools/editor/editor_file_system.h
@@ -55,7 +55,7 @@ class EditorFileSystemDirectory : public Object {
String path;
String md5;
uint64_t modified_time;
- bool missing;
+ bool missing;
};
@@ -63,6 +63,7 @@ class EditorFileSystemDirectory : public Object {
String import_editor;
Vector<String> deps;
bool enabled;
+ bool sources_changed;
};
@@ -102,8 +103,12 @@ public:
StringName get_file_type(int p_idx) const;
bool get_file_meta(int p_idx) const;
bool is_missing_sources(int p_idx) const;
+ bool have_sources_changed(int p_idx) const;
Vector<String> get_missing_sources(int p_idx) const;
Vector<String> get_file_deps(int p_idx) const;
+ int get_source_count(int p_idx) const;
+ String get_source_file(int p_idx,int p_source) const;
+ bool is_source_file_missing(int p_idx,int p_source) const;
EditorFileSystemDirectory *get_parent();
@@ -230,6 +235,7 @@ public:
String find_resource_from_source(const String& p_path) const;
EditorFileSystemDirectory *get_path(const String& p_path);
String get_file_type(const String& p_file) const;
+ EditorFileSystemDirectory* find_file(const String& p_file,int* r_index) const;
EditorFileSystem();
~EditorFileSystem();
};
diff --git a/tools/editor/editor_fonts.cpp b/tools/editor/editor_fonts.cpp
index a3ec08f986..e04dce294a 100644
--- a/tools/editor/editor_fonts.cpp
+++ b/tools/editor/editor_fonts.cpp
@@ -30,6 +30,9 @@
#include "doc_font.h"
#include "doc_title_font.h"
#include "doc_code_font.h"
+#include "builtin_fonts.h"
+#include "editor_settings.h"
+#include "scene/resources/dynamic_font.h"
static Ref<BitmapFont> make_font(int p_height,int p_ascent, int p_valign, int p_charcount, const int *p_chars,const Ref<Texture> &p_texture) {
@@ -64,12 +67,54 @@ static Ref<BitmapFont> make_font(int p_height,int p_ascent, int p_valign, int p_
void editor_register_fonts(Ref<Theme> p_theme) {
+ Ref<DynamicFontData> dfd;
+ dfd.instance();
+ dfd->set_font_ptr(_font_droid_sans,_font_droid_sans_size);
+ dfd->set_force_autohinter(true); //just looks better..i think?
- Ref<BitmapFont> doc_font = make_font(_bi_font_doc_font_height,_bi_font_doc_font_ascent,0,_bi_font_doc_font_charcount,_bi_font_doc_font_characters,p_theme->get_icon("DocFont","EditorIcons"));
- Ref<BitmapFont> doc_code_font = make_font(_bi_font_doc_code_font_height,_bi_font_doc_code_font_ascent,0,_bi_font_doc_code_font_charcount,_bi_font_doc_code_font_characters,p_theme->get_icon("DocCodeFont","EditorIcons"));
- Ref<BitmapFont> doc_title_font = make_font(_bi_font_doc_title_font_height,_bi_font_doc_title_font_ascent,0,_bi_font_doc_title_font_charcount,_bi_font_doc_title_font_characters,p_theme->get_icon("DocTitleFont","EditorIcons"));
- p_theme->set_font("doc","EditorFonts",doc_font);
- p_theme->set_font("doc_code","EditorFonts",doc_code_font);
- p_theme->set_font("doc_title","EditorFonts",doc_title_font);
+ Ref<DynamicFontData> dfmono;
+ dfmono.instance();
+ dfmono->set_font_ptr(_font_source_code_pro,_font_source_code_pro_size);
+ //dfd->set_force_autohinter(true); //just looks better..i think?
+
+ Ref<DynamicFont> df;
+ df.instance();
+ df->set_size(int(EditorSettings::get_singleton()->get("global/font_size")));
+ df->set_font_data(dfd);
+
+
+ p_theme->set_default_theme_font(df);
+
+// Ref<BitmapFont> doc_font = make_font(_bi_font_doc_font_height,_bi_font_doc_font_ascent,0,_bi_font_doc_font_charcount,_bi_font_doc_font_characters,p_theme->get_icon("DocFont","EditorIcons"));
+// Ref<BitmapFont> doc_title_font = make_font(_bi_font_doc_title_font_height,_bi_font_doc_title_font_ascent,0,_bi_font_doc_title_font_charcount,_bi_font_doc_title_font_characters,p_theme->get_icon("DocTitleFont","EditorIcons"));
+// Ref<BitmapFont> doc_code_font = make_font(_bi_font_doc_code_font_height,_bi_font_doc_code_font_ascent,0,_bi_font_doc_code_font_charcount,_bi_font_doc_code_font_characters,p_theme->get_icon("DocCodeFont","EditorIcons"));
+
+ Ref<DynamicFont> df_title;
+ df_title.instance();
+ df_title->set_size(int(EDITOR_DEF("help/help_title_font_size",18)));
+ df_title->set_font_data(dfd);
+
+ Ref<DynamicFont> df_doc;
+ df_doc.instance();
+ df_doc->set_size(int(EDITOR_DEF("help/help_font_size",16)));
+ df_doc->set_font_data(dfd);
+
+ p_theme->set_font("doc","EditorFonts",df_doc);
+ p_theme->set_font("doc_title","EditorFonts",df_title);
+
+
+ Ref<DynamicFont> df_code;
+ df_code.instance();
+ df_code->set_size(int(EditorSettings::get_singleton()->get("global/source_font_size")));
+ df_code->set_font_data(dfmono);
+
+ p_theme->set_font("source","EditorFonts",df_code);
+
+ Ref<DynamicFont> df_doc_code;
+ df_doc_code.instance();
+ df_doc_code->set_size(int(EDITOR_DEF("help/help_source_font_size",14)));
+ df_doc_code->set_font_data(dfmono);
+
+ p_theme->set_font("doc_source","EditorFonts",df_doc_code);
}
diff --git a/tools/editor/editor_help.cpp b/tools/editor/editor_help.cpp
index 616037c545..b426def503 100644
--- a/tools/editor/editor_help.cpp
+++ b/tools/editor/editor_help.cpp
@@ -130,6 +130,7 @@ void EditorHelpSearch::_update_search() {
else
cicon=def_icon;
+
for(int i=0;i<c.methods.size();i++) {
if( (term.begins_with(".") && c.methods[i].name.begins_with(term.right(1)))
|| (term.ends_with("(") && c.methods[i].name.ends_with(term.left(term.length()-1).strip_edges()))
@@ -697,13 +698,13 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
//edited_class->show();
- DocData::ClassDoc &cd=doc->class_list[p_class];
+ DocData::ClassDoc cd=doc->class_list[p_class]; //make a copy, so we can sort without worrying
Color h_color;
- Ref<Font> doc_font = get_font("normal","Fonts");
- Ref<Font> doc_code_font = get_font("source","Fonts");
- Ref<Font> doc_title_font = get_font("large","Fonts");
+ Ref<Font> doc_font = get_font("doc","EditorFonts");
+ Ref<Font> doc_title_font = get_font("doc_title","EditorFonts");
+ Ref<Font> doc_code_font = get_font("doc_source","EditorFonts");
h_color=Color(1,1,1,1);
@@ -794,7 +795,7 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
//class_desc->add_newline();
class_desc->add_newline();
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/text_color"));
- class_desc->push_font( get_font("normal","Fonts") );
+ class_desc->push_font( doc_font );
class_desc->push_indent(1);
_add_text(cd.brief_description);
class_desc->pop();
@@ -805,9 +806,14 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
}
bool method_descr=false;
+ bool sort_methods = EditorSettings::get_singleton()->get("help/sort_functions_alphabetically");
+
if (cd.methods.size()) {
+ if (sort_methods)
+ cd.methods.sort();
+
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
class_desc->push_font(doc_title_font);
class_desc->add_text(TTR("Public Methods:"));
@@ -979,6 +985,9 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
}
if (cd.signals.size()) {
+ if (sort_methods) {
+ cd.signals.sort();
+ }
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
class_desc->push_font(doc_title_font);
class_desc->add_text(TTR("Signals:"));
@@ -1098,7 +1107,7 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
class_desc->add_newline();
class_desc->add_newline();
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/text_color"));
- class_desc->push_font( get_font("normal","Fonts") );
+ class_desc->push_font( doc_font );
class_desc->push_indent(1);
_add_text(cd.description);
class_desc->pop();
@@ -1168,7 +1177,7 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
class_desc->add_newline();
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/text_color"));
- class_desc->push_font( get_font("normal","Fonts") );
+ class_desc->push_font( doc_font );
class_desc->push_indent(1);
_add_text(cd.methods[i].description);
class_desc->pop();
@@ -1248,9 +1257,12 @@ void EditorHelp::_add_text(const String& p_bbcode) {
class_desc->push_indent(1);*/
int pos = 0;
+ Ref<Font> doc_font = get_font("doc","EditorFonts");
+ Ref<Font> doc_code_font = get_font("doc_source","EditorFonts");
+
String bbcode=p_bbcode.replace("\t"," ").replace("\r"," ").strip_edges();
- //find double newlines, keep them
+ //change newlines for double newlines
for(int i=0;i<bbcode.length();i++) {
//find valid newlines (double)
@@ -1269,10 +1281,13 @@ void EditorHelp::_add_text(const String& p_bbcode) {
if (dnl) {
bbcode[i]=0xFFFF;
+ //keep
i=j;
} else {
- bbcode[i]=' ';
- i=j-1;
+ bbcode=bbcode.insert(i,"\n");
+ i++;
+ //bbcode[i]=' ';
+ //i=j-1;
}
}
}
@@ -1280,7 +1295,7 @@ void EditorHelp::_add_text(const String& p_bbcode) {
//remove double spaces or spaces after newlines
for(int i=0;i<bbcode.length();i++) {
- if (bbcode[i]==' ' || bbcode[i]==0xFFFF) {
+ if (bbcode[i]==' ' || bbcode[i]=='\n' || bbcode[i]==0xFFFF) {
for(int j=i+1;j<p_bbcode.length();j++) {
if (bbcode[j]==' ') {
@@ -1353,35 +1368,45 @@ void EditorHelp::_add_text(const String& p_bbcode) {
} else if (tag.begins_with("method ")) {
String m = tag.substr(7,tag.length());
+ class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
class_desc->push_meta("@"+m);
class_desc->add_text(m+"()");
class_desc->pop();
+ class_desc->pop();
pos=brk_end+1;
} else if (doc->class_list.has(tag)) {
+ class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
class_desc->push_meta("#"+tag);
class_desc->add_text(tag);
class_desc->pop();
+ class_desc->pop();
pos=brk_end+1;
} else if (tag=="b") {
//use bold font
- class_desc->push_font(get_font("source","Fonts"));
+ class_desc->push_font(doc_code_font);
pos=brk_end+1;
tag_stack.push_front(tag);
} else if (tag=="i") {
//use italics font
- class_desc->push_font(get_font("italic","Fonts"));
+ Color text_color = EditorSettings::get_singleton()->get("text_editor/text_color");
+ //no italics so emphasize with color
+ text_color.r*=1.1;
+ text_color.g*=1.1;
+ text_color.b*=1.1;
+ class_desc->push_color(text_color);
+ //class_desc->push_font(get_font("italic","Fonts"));
pos=brk_end+1;
tag_stack.push_front(tag);
} else if (tag=="code" || tag=="codeblock") {
//use monospace font
- class_desc->push_font(get_font("source","EditorFonts"));
+ class_desc->push_font(doc_code_font);
pos=brk_end+1;
tag_stack.push_front(tag);
} else if (tag=="center") {
@@ -1496,7 +1521,7 @@ void EditorHelp::_add_text(const String& p_bbcode) {
if (font.is_valid())
class_desc->push_font(font);
else {
- class_desc->push_font(get_font("source","rFonts"));
+ class_desc->push_font(doc_font);
}
pos=brk_end+1;
@@ -1618,6 +1643,7 @@ EditorHelp::EditorHelp() {
VBoxContainer *vbc = this;
+ EDITOR_DEF("help/sort_functions_alphabetically",true);
//class_list->connect("meta_clicked",this,"_class_list_select");
//class_list->set_selection_enabled(true);
diff --git a/tools/editor/editor_import_export.cpp b/tools/editor/editor_import_export.cpp
index 25dced4745..ac7ea514d7 100644
--- a/tools/editor/editor_import_export.cpp
+++ b/tools/editor/editor_import_export.cpp
@@ -85,6 +85,9 @@ void EditorImportPlugin::_bind_methods() {
ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo("import_dialog",PropertyInfo(Variant::STRING,"from")));
ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo(Variant::INT,"import",PropertyInfo(Variant::STRING,"path"),PropertyInfo(Variant::OBJECT,"from",PROPERTY_HINT_RESOURCE_TYPE,"ResourceImportMetadata")));
ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo(Variant::RAW_ARRAY,"custom_export",PropertyInfo(Variant::STRING,"path"),PropertyInfo(Variant::OBJECT,"platform",PROPERTY_HINT_RESOURCE_TYPE,"EditorExportPlatform")));
+ ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo("import_from_drop",PropertyInfo(Variant::STRING_ARRAY,"files"),PropertyInfo(Variant::STRING,"dest_path")));
+ ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo("reimport_multiple_files",PropertyInfo(Variant::STRING_ARRAY,"files")));
+ ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo(Variant::BOOL,"can_reimport_multiple_files"));
// BIND_VMETHOD( mi );
}
@@ -130,13 +133,37 @@ Error EditorImportPlugin::import(const String& p_path, const Ref<ResourceImportM
Vector<uint8_t> EditorImportPlugin::custom_export(const String& p_path, const Ref<EditorExportPlatform> &p_platform) {
- if (get_script_instance() && get_script_instance()->has_method("_custom_export")) {
- get_script_instance()->call("_custom_export",p_path,p_platform);
+ if (get_script_instance() && get_script_instance()->has_method("custom_export")) {
+ get_script_instance()->call("custom_export",p_path,p_platform);
}
return Vector<uint8_t>();
}
+bool EditorImportPlugin::can_reimport_multiple_files() const {
+
+ if (get_script_instance() && get_script_instance()->has_method("can_reimport_multiple_files")) {
+ return get_script_instance()->call("can_reimport_multiple_files");
+ }
+
+ return false;
+}
+void EditorImportPlugin::reimport_multiple_files(const Vector<String>& p_list) {
+
+ if (get_script_instance() && get_script_instance()->has_method("reimport_multiple_files")) {
+ get_script_instance()->call("reimport_multiple_files",p_list);
+ }
+
+}
+
+void EditorImportPlugin::import_from_drop(const Vector<String>& p_drop, const String &p_dest_path) {
+
+ if (get_script_instance() && get_script_instance()->has_method("import_from_drop")) {
+ get_script_instance()->call("import_from_drop",p_drop,p_dest_path);
+ }
+
+}
+
EditorImportPlugin::EditorImportPlugin() {
diff --git a/tools/editor/editor_import_export.h b/tools/editor/editor_import_export.h
index 5e09d674d1..e21fd8c8f8 100644
--- a/tools/editor/editor_import_export.h
+++ b/tools/editor/editor_import_export.h
@@ -60,6 +60,9 @@ public:
virtual String get_visible_name() const;
virtual void import_dialog(const String& p_from="");
virtual Error import(const String& p_path, const Ref<ResourceImportMetadata>& p_from);
+ virtual void import_from_drop(const Vector<String>& p_drop,const String& p_dest_path);
+ virtual void reimport_multiple_files(const Vector<String>& p_list);
+ virtual bool can_reimport_multiple_files() const;
virtual Vector<uint8_t> custom_export(const String& p_path,const Ref<EditorExportPlatform> &p_platform);
EditorImportPlugin();
diff --git a/tools/editor/editor_node.cpp b/tools/editor/editor_node.cpp
index 69dfc556b4..8313e38f02 100644
--- a/tools/editor/editor_node.cpp
+++ b/tools/editor/editor_node.cpp
@@ -288,6 +288,7 @@ void EditorNode::_notification(int p_what) {
get_tree()->get_root()->set_as_audio_listener(false);
get_tree()->get_root()->set_as_audio_listener_2d(false);
get_tree()->set_auto_accept_quit(false);
+ get_tree()->connect("files_dropped",this,"_dropped_files");
//VisualServer::get_singleton()->viewport_set_hide_canvas(editor->get_scene_root()->get_viewport(),false);
//import_monitor->scan_changes();
@@ -375,6 +376,7 @@ void EditorNode::_notification(int p_what) {
_menu_option_confirm(DEPENDENCY_LOAD_CHANGED_IMAGES,true);
}
+ waiting_for_sources_changed=true;
EditorFileSystem::get_singleton()->scan_sources();
}
@@ -412,6 +414,42 @@ void EditorNode::_fs_changed() {
void EditorNode::_sources_changed(bool p_exist) {
+ if (p_exist && bool(EditorSettings::get_singleton()->get("import/automatic_reimport_on_sources_changed"))) {
+ p_exist=false;
+
+ List<String> changed_sources;
+ EditorFileSystem::get_singleton()->get_changed_sources(&changed_sources);
+
+
+ EditorProgress ep("reimport",TTR("Re-Importing"),changed_sources.size());
+ int step_idx=0;
+
+ for(List<String>::Element *E=changed_sources.front();E;E=E->next()) {
+
+ ep.step(TTR("Importing:")+" "+E->get(),step_idx++);
+
+ Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(E->get());
+ ERR_CONTINUE(rimd.is_null());
+ String editor = rimd->get_editor();
+ if (editor.begins_with("texture_")) {
+ editor="texture"; //compatibility fix for old versions
+ }
+ Ref<EditorImportPlugin> eip = EditorImportExport::get_singleton()->get_import_plugin_by_name(editor);
+ ERR_CONTINUE(eip.is_null());
+ Error err = eip->import(E->get(),rimd);
+ if (err!=OK) {
+ EditorNode::add_io_error("Error Re Importing:\n "+E->get());
+ }
+
+ }
+
+ EditorFileSystem::get_singleton()->scan_sources();
+ waiting_for_sources_changed=false;
+
+ return;
+ }
+
+
if (p_exist) {
sources_button->set_icon(gui_base->get_icon("DependencyChanged","EditorIcons"));
@@ -424,6 +462,8 @@ void EditorNode::_sources_changed(bool p_exist) {
}
+ waiting_for_sources_changed=false;
+
}
void EditorNode::_vp_resized() {
@@ -435,13 +475,13 @@ void EditorNode::_rebuild_import_menu()
{
PopupMenu* p = import_menu->get_popup();
p->clear();
- p->add_item(TTR("Node From Scene"), FILE_IMPORT_SUBSCENE);
- p->add_separator();
+ //p->add_item(TTR("Node From Scene"), FILE_IMPORT_SUBSCENE);
+ //p->add_separator();
for (int i = 0; i < editor_import_export->get_import_plugin_count(); i++) {
p->add_item(editor_import_export->get_import_plugin(i)->get_visible_name(), IMPORT_PLUGIN_BASE + i);
}
- p->add_separator();
- p->add_item(TTR("Re-Import.."), SETTINGS_IMPORT);
+ //p->add_separator();
+ //p->add_item(TTR("Re-Import.."), SETTINGS_IMPORT);
}
void EditorNode::_node_renamed() {
@@ -2692,8 +2732,8 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
String exec = OS::get_singleton()->get_executable_path();
List<String> args;
- //args.push_back ( "-path" );
- //args.push_back (exec.get_base_dir() );
+ args.push_back("-path");
+ args.push_back(exec.get_base_dir());
args.push_back("-pm");
OS::ProcessID pid=0;
@@ -2858,6 +2898,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
} break;
+
default: {
if (p_option>=OBJECT_METHOD_BASE) {
@@ -4899,6 +4940,7 @@ Variant EditorNode::drag_resource(const Ref<Resource>& p_res,Control* p_from) {
TextureFrame *drag_preview = memnew( TextureFrame );
Label* label=memnew( Label );
+ waiting_for_sources_changed=true; //
Ref<Texture> preview;
{
@@ -5000,6 +5042,15 @@ Variant EditorNode::drag_files_and_dirs(const Vector<String>& p_files, Control *
}
+
+void EditorNode::_dropped_files(const Vector<String>& p_files,int p_screen) {
+
+ String cur_path = scenes_dock->get_current_path();
+ for(int i=0;i<EditorImportExport::get_singleton()->get_import_plugin_count();i++) {
+ EditorImportExport::get_singleton()->get_import_plugin(i)->import_from_drop(p_files,cur_path);
+ }
+}
+
void EditorNode::_bind_methods() {
@@ -5067,6 +5118,9 @@ void EditorNode::_bind_methods() {
ObjectTypeDB::bind_method("_toggle_search_bar",&EditorNode::_toggle_search_bar);
ObjectTypeDB::bind_method("_clear_search_box",&EditorNode::_clear_search_box);
ObjectTypeDB::bind_method("_clear_undo_history",&EditorNode::_clear_undo_history);
+ ObjectTypeDB::bind_method("_dropped_files",&EditorNode::_dropped_files);
+
+
ObjectTypeDB::bind_method(_MD("add_editor_import_plugin", "plugin"), &EditorNode::add_editor_import_plugin);
ObjectTypeDB::bind_method(_MD("remove_editor_import_plugin", "plugin"), &EditorNode::remove_editor_import_plugin);
@@ -5171,7 +5225,7 @@ EditorNode::EditorNode() {
//theme->set_icon("folder","EditorFileDialog",Theme::get_default()->get_icon("folder","EditorFileDialog"));
//theme->set_color("files_disabled","EditorFileDialog",Color(0,0,0,0.7));
- String global_font = EditorSettings::get_singleton()->get("global/font");
+ String global_font = EditorSettings::get_singleton()->get("global/custom_font");
if (global_font!="") {
Ref<Font> fnt = ResourceLoader::load(global_font);
if (fnt.is_valid()) {
@@ -6185,10 +6239,7 @@ EditorNode::EditorNode() {
file_server = memnew( EditorFileServer );
- editor_import_export->add_import_plugin( Ref<EditorTextureImportPlugin>( memnew(EditorTextureImportPlugin(this,EditorTextureImportPlugin::MODE_TEXTURE_2D) )));
- editor_import_export->add_import_plugin( Ref<EditorTextureImportPlugin>( memnew(EditorTextureImportPlugin(this,EditorTextureImportPlugin::MODE_ATLAS) )));
- editor_import_export->add_import_plugin( Ref<EditorTextureImportPlugin>( memnew(EditorTextureImportPlugin(this,EditorTextureImportPlugin::MODE_LARGE) )));
- editor_import_export->add_import_plugin( Ref<EditorTextureImportPlugin>( memnew(EditorTextureImportPlugin(this,EditorTextureImportPlugin::MODE_TEXTURE_3D) )));
+ editor_import_export->add_import_plugin( Ref<EditorTextureImportPlugin>( memnew(EditorTextureImportPlugin(this) )));
Ref<EditorSceneImportPlugin> _scene_import = memnew(EditorSceneImportPlugin(this) );
Ref<EditorSceneImporterCollada> _collada_import = memnew( EditorSceneImporterCollada);
_scene_import->add_importer(_collada_import);
@@ -6401,6 +6452,7 @@ EditorNode::EditorNode() {
_load_docks();
+
}
diff --git a/tools/editor/editor_node.h b/tools/editor/editor_node.h
index 18a88f63bb..db589bb1c3 100644
--- a/tools/editor/editor_node.h
+++ b/tools/editor/editor_node.h
@@ -366,6 +366,8 @@ private:
String open_navigate;
bool changing_scene;
+ bool waiting_for_sources_changed;
+
uint32_t circle_step_msec;
uint64_t circle_step_frame;
int circle_step;
@@ -464,6 +466,7 @@ private:
void _add_to_recent_scenes(const String& p_scene);
void _update_recent_scenes();
void _open_recent_scene(int p_idx);
+ void _dropped_files(const Vector<String>& p_files,int p_screen);
//void _open_recent_scene_confirm();
String _recent_scene;
@@ -607,6 +610,8 @@ public:
void save_resource(const Ref<Resource>& p_resource);
void save_resource_as(const Ref<Resource>& p_resource, const String &p_at_path=String());
+ void merge_from_scene() { _menu_option_confirm(FILE_IMPORT_SUBSCENE,false); }
+
static bool has_unsaved_changes() { return singleton->unsaved_cache; }
static HBoxContainer *get_menu_hb() { return singleton->menu_hb; }
diff --git a/tools/editor/editor_plugin_settings.cpp b/tools/editor/editor_plugin_settings.cpp
index 3eefe10448..1a6be05af3 100644
--- a/tools/editor/editor_plugin_settings.cpp
+++ b/tools/editor/editor_plugin_settings.cpp
@@ -150,7 +150,7 @@ void EditorPluginSettings::_bind_methods() {
EditorPluginSettings::EditorPluginSettings() {
HBoxContainer *title_hb = memnew( HBoxContainer );
- title_hb->add_child(memnew( Label("Installed Plugins:")));
+ title_hb->add_child(memnew( Label(TTR("Installed Plugins:"))));
title_hb->add_spacer();
update_list = memnew( Button(TTR("Update")) );
update_list->connect("pressed",this,"update_plugins");
@@ -162,9 +162,9 @@ EditorPluginSettings::EditorPluginSettings() {
plugin_list->set_columns(4);
plugin_list->set_column_titles_visible(true);
plugin_list->set_column_title(0,TTR("Name:"));
- plugin_list->set_column_title(1,"Version:");
- plugin_list->set_column_title(2,"Author:");
- plugin_list->set_column_title(3,"Status:");
+ plugin_list->set_column_title(1,TTR("Version:"));
+ plugin_list->set_column_title(2,TTR("Author:"));
+ plugin_list->set_column_title(3,TTR("Status:"));
plugin_list->set_column_expand(0,true);
plugin_list->set_column_expand(1,false);
plugin_list->set_column_expand(2,false);
@@ -185,4 +185,3 @@ EditorPluginSettings::EditorPluginSettings() {
updating=false;
}
-
diff --git a/tools/editor/editor_profiler.cpp b/tools/editor/editor_profiler.cpp
index 955af6b603..c9ee60cd54 100644
--- a/tools/editor/editor_profiler.cpp
+++ b/tools/editor/editor_profiler.cpp
@@ -425,10 +425,10 @@ void EditorProfiler::_activate_pressed() {
if (activate->is_pressed()) {
clear();
activate->set_icon(get_icon("Stop","EditorIcons"));
- activate->set_text(TTR("Stop Profilinng"));
+ activate->set_text(TTR("Stop Profiling"));
} else {
activate->set_icon(get_icon("Play","EditorIcons"));
- activate->set_text(TTR("Start Profilinng"));
+ activate->set_text(TTR("Start Profiling"));
}
@@ -672,7 +672,7 @@ EditorProfiler::EditorProfiler()
hb->add_spacer();
- hb->add_child( memnew( Label(TTR("Frame#:") ) ) );
+ hb->add_child( memnew( Label(TTR("Frame #:") ) ) );
cursor_metric_edit = memnew( SpinBox );
cursor_metric_edit->set_h_size_flags(SIZE_FILL);
diff --git a/tools/editor/editor_resource_preview.cpp b/tools/editor/editor_resource_preview.cpp
index f684b49a2c..d31cf9e0fd 100644
--- a/tools/editor/editor_resource_preview.cpp
+++ b/tools/editor/editor_resource_preview.cpp
@@ -36,14 +36,24 @@ void EditorResourcePreview::_preview_ready(const String& p_str,const Ref<Texture
//print_line("preview is ready");
preview_mutex->lock();
+ String path = p_str;
+ uint32_t hash=0;
+
+ if (p_str.begins_with("ID:")) {
+ hash=p_str.get_slicec(':',2).to_int();
+ path="ID:"+p_str.get_slicec(':',1);
+ }
+
Item item;
item.order=order++;
item.preview=p_texture;
- cache[p_str]=item;
+ item.last_hash=hash;
+
+ cache[path]=item;
Object *recv = ObjectDB::get_instance(id);
if (recv) {
- recv->call_deferred(p_func,p_str,p_texture,p_ud);
+ recv->call_deferred(p_func,path,p_texture,p_ud);
}
preview_mutex->unlock();
@@ -51,7 +61,12 @@ void EditorResourcePreview::_preview_ready(const String& p_str,const Ref<Texture
Ref<Texture> EditorResourcePreview::_generate_preview(const QueueItem& p_item,const String& cache_base) {
- String type = ResourceLoader::get_resource_type(p_item.path);
+ String type;
+
+ if (p_item.resource.is_valid())
+ type=p_item.resource->get_type();
+ else
+ type=ResourceLoader::get_resource_type(p_item.path);
//print_line("resource type is: "+type);
if (type=="")
@@ -62,24 +77,31 @@ Ref<Texture> EditorResourcePreview::_generate_preview(const QueueItem& p_item,co
for(int i=0;i<preview_generators.size();i++) {
if (!preview_generators[i]->handles(type))
continue;
- generated = preview_generators[i]->generate_from_path(p_item.path);
+ if (p_item.resource.is_valid()) {
+ generated = preview_generators[i]->generate(p_item.resource);
+ } else {
+ generated = preview_generators[i]->generate_from_path(p_item.path);
+ }
break;
}
- if (generated.is_valid()) {
- //print_line("was generated");
- int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
- //wow it generated a preview... save cache
- ResourceSaver::save(cache_base+".png",generated);
- FileAccess *f=FileAccess::open(cache_base+".txt",FileAccess::WRITE);
- f->store_line(itos(thumbnail_size));
- f->store_line(itos(FileAccess::get_modified_time(p_item.path)));
- f->store_line(FileAccess::get_md5(p_item.path));
- memdelete(f);
- } else {
- //print_line("was not generated");
+ if (!p_item.resource.is_valid()) {
+ // cache the preview in case it's a resource on disk
+ if (generated.is_valid()) {
+ //print_line("was generated");
+ int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
+ //wow it generated a preview... save cache
+ ResourceSaver::save(cache_base+".png",generated);
+ FileAccess *f=FileAccess::open(cache_base+".txt",FileAccess::WRITE);
+ f->store_line(itos(thumbnail_size));
+ f->store_line(itos(FileAccess::get_modified_time(p_item.path)));
+ f->store_line(FileAccess::get_md5(p_item.path));
+ memdelete(f);
+ } else {
+ //print_line("was not generated");
+ }
}
return generated;
@@ -113,8 +135,17 @@ void EditorResourcePreview::_thread() {
if (cache.has(item.path)) {
//already has it because someone loaded it, just let it know it's ready
+ if (item.resource.is_valid()) {
+ item.path+=":"+itos(cache[item.path].last_hash); //keep last hash (see description of what this is in condition below)
+ }
call_deferred("_preview_ready",item.path,cache[item.path].preview,item.id,item.function,item.userdata);
+ } else if (item.resource.is_valid()){
+
+ texture=_generate_preview(item,String());
+ //adding hash to the end of path (should be ID:<objid>:<hash>) because of 5 argument limit to call_deferred
+ call_deferred("_preview_ready",item.path+":"+itos(item.resource->hash_edited_version()),texture,item.id,item.function,item.userdata);
+
} else {
@@ -194,6 +225,35 @@ void EditorResourcePreview::_thread() {
+void EditorResourcePreview::queue_edited_resource_preview(const Ref<Resource>& p_res, Object* p_receiver, const StringName& p_receiver_func, const Variant& p_userdata) {
+
+ ERR_FAIL_NULL(p_receiver);
+ ERR_FAIL_COND(!p_res.is_valid());
+
+ preview_mutex->lock();
+
+ String path_id = "ID:"+itos(p_res->get_instance_ID());
+ if (cache.has(path_id) && cache[path_id].last_hash==p_res->hash_edited_version()) {
+
+ cache[path_id].order=order++;
+ p_receiver->call_deferred(p_receiver_func,path_id,cache[path_id].preview,p_userdata);
+ preview_mutex->unlock();
+ return;
+
+ }
+
+ //print_line("send to thread "+p_path);
+ QueueItem item;
+ item.function=p_receiver_func;
+ item.id=p_receiver->get_instance_ID();
+ item.resource=p_res;
+ item.path=path_id;
+ item.userdata=p_userdata;
+
+ queue.push_back(item);
+ preview_mutex->unlock();
+ preview_sem->post();
+}
void EditorResourcePreview::queue_resource_preview(const String& p_path, Object* p_receiver, const StringName& p_receiver_func, const Variant& p_userdata) {
@@ -204,7 +264,6 @@ void EditorResourcePreview::queue_resource_preview(const String& p_path, Object*
p_receiver->call_deferred(p_receiver_func,p_path,cache[p_path].preview,p_userdata);
preview_mutex->unlock();
return;
-
}
//print_line("send to thread "+p_path);
diff --git a/tools/editor/editor_resource_preview.h b/tools/editor/editor_resource_preview.h
index aadae75597..13c3d51313 100644
--- a/tools/editor/editor_resource_preview.h
+++ b/tools/editor/editor_resource_preview.h
@@ -47,6 +47,7 @@ class EditorResourcePreview : public Node {
static EditorResourcePreview* singleton;
struct QueueItem {
+ Ref<Resource> resource;
String path;
ObjectID id;
StringName function;
@@ -63,6 +64,7 @@ class EditorResourcePreview : public Node {
struct Item {
Ref<Texture> preview;
int order;
+ uint32_t last_hash;
};
int order;
@@ -84,7 +86,8 @@ public:
static EditorResourcePreview* get_singleton();
//callback funtion is callback(String p_path,Ref<Texture> preview,Variant udata) preview null if could not load
- void queue_resource_preview(const String& p_path, Object* p_receiver, const StringName& p_receiver_func, const Variant& p_userdata);
+ void queue_resource_preview(const String& p_res, Object* p_receiver, const StringName& p_receiver_func, const Variant& p_userdata);
+ void queue_edited_resource_preview(const Ref<Resource>& p_path, Object* p_receiver, const StringName& p_receiver_func, const Variant& p_userdata);
void add_preview_generator(const Ref<EditorResourcePreviewGenerator>& p_generator);
diff --git a/tools/editor/editor_settings.cpp b/tools/editor/editor_settings.cpp
index ad990e3fab..c589cb05be 100644
--- a/tools/editor/editor_settings.cpp
+++ b/tools/editor/editor_settings.cpp
@@ -41,6 +41,10 @@
#include "io/config_file.h"
#include "editor_node.h"
#include "globals.h"
+#include "translations.h"
+#include "io/file_access_memory.h"
+#include "io/translation_loader_po.h"
+#include "io/compression.h"
Ref<EditorSettings> EditorSettings::singleton=NULL;
@@ -284,6 +288,7 @@ void EditorSettings::create() {
print_line("EditorSettings: Load OK!");
}
+ singleton->setup_language();
singleton->setup_network();
singleton->load_favorites();
singleton->list_text_editor_themes();
@@ -309,10 +314,12 @@ void EditorSettings::create() {
singleton = Ref<EditorSettings>( memnew( EditorSettings ) );
singleton->config_file_path=config_file_path;
singleton->settings_path=config_path+"/"+config_dir;
- singleton->_load_defaults(extra_config);
+ singleton->_load_defaults(extra_config);
+ singleton->setup_language();
singleton->setup_network();
singleton->list_text_editor_themes();
+
}
String EditorSettings::get_settings_path() const {
@@ -322,6 +329,23 @@ String EditorSettings::get_settings_path() const {
+void EditorSettings::setup_language() {
+
+ String lang = get("global/editor_language");
+ print_line("LANG IS "+lang);
+ if (lang=="en")
+ return; //none to do
+
+ for(int i=0;i<translations.size();i++) {
+ print_line("TESTING "+translations[i]->get_locale());
+ if (translations[i]->get_locale()==lang) {
+ print_line("ok translation");
+ TranslationServer::get_singleton()->set_tool_translation(translations[i]);
+ break;
+ }
+ }
+}
+
void EditorSettings::setup_network() {
List<IP_Address> local_ip;
@@ -389,8 +413,42 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
_THREAD_SAFE_METHOD_
- set("global/font","");
- hints["global/font"]=PropertyInfo(Variant::STRING,"global/font",PROPERTY_HINT_GLOBAL_FILE,"*.fnt");
+
+ {
+ String lang_hint="en";
+ String host_lang = OS::get_singleton()->get_locale();
+
+ String best;
+
+ for(int i=0;i<translations.size();i++) {
+ String locale = translations[i]->get_locale();
+ lang_hint+=",";
+ lang_hint+=locale;
+
+ if (host_lang==locale) {
+ best=locale;
+ }
+
+ if (best==String() && host_lang.begins_with(locale)) {
+ best=locale;
+ }
+ }
+
+ if (best==String()) {
+ best="en";
+ }
+
+ set("global/editor_language",best);
+ hints["global/editor_language"]=PropertyInfo(Variant::STRING,"global/editor_language",PROPERTY_HINT_ENUM,lang_hint,PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_RESTART_IF_CHANGED);
+ }
+
+ set("global/show_script_in_scene_tabs",false);
+ set("global/font_size",14);
+ hints["global/font_size"]=PropertyInfo(Variant::INT,"global/font_size",PROPERTY_HINT_RANGE,"10,40,1",PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_RESTART_IF_CHANGED);
+ set("global/source_font_size",14);
+ hints["global/source_font_size"]=PropertyInfo(Variant::INT,"global/source_font_size",PROPERTY_HINT_RANGE,"10,40,1",PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_RESTART_IF_CHANGED);
+ set("global/custom_font","");
+ hints["global/custom_font"]=PropertyInfo(Variant::STRING,"global/custom_font",PROPERTY_HINT_GLOBAL_FILE,"*.fnt",PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_RESTART_IF_CHANGED);
set("global/autoscan_project_path","");
hints["global/autoscan_project_path"]=PropertyInfo(Variant::STRING,"global/autoscan_project_path",PROPERTY_HINT_GLOBAL_DIR);
set("global/default_project_path","");
@@ -399,6 +457,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
hints["global/default_project_export_path"]=PropertyInfo(Variant::STRING,"global/default_project_export_path",PROPERTY_HINT_GLOBAL_DIR);
set("global/show_script_in_scene_tabs",false);
+
set("text_editor/color_theme","Default");
hints["text_editor/color_theme"]=PropertyInfo(Variant::STRING,"text_editor/color_theme",PROPERTY_HINT_ENUM,"Default");
@@ -507,6 +566,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
set("resources/save_compressed_resources",true);
set("resources/auto_reload_modified_images",true);
+ set("import/automatic_reimport_on_sources_changed",true);
+
if (p_extra_config.is_valid()) {
if (p_extra_config->has_section("init_projects") && p_extra_config->has_section_key("init_projects", "list")) {
@@ -559,6 +620,8 @@ void EditorSettings::_load_default_text_editor_theme() {
set("text_editor/mark_color", Color(1.0,0.4,0.4,0.4));
set("text_editor/breakpoint_color", Color(0.8,0.8,0.4,0.2));
set("text_editor/word_highlighted_color",Color(0.8,0.9,0.9,0.15));
+ set("text_editor/search_result_color",Color(0.05,0.25,0.05,1));
+ set("text_editor/search_result_border_color",Color(0.1,0.45,0.1,1));
}
void EditorSettings::notify_changes() {
@@ -790,6 +853,8 @@ bool EditorSettings::_save_text_editor_theme(String p_file) {
cf->set_value(theme_section, "mark_color", ((Color)get("text_editor/mark_color")).to_html());
cf->set_value(theme_section, "breakpoint_color", ((Color)get("text_editor/breakpoint_color")).to_html());
cf->set_value(theme_section, "word_highlighted_color", ((Color)get("text_editor/word_highlighted_color")).to_html());
+ cf->set_value(theme_section, "search_result_color", ((Color)get("text_editor/search_result_color")).to_html());
+ cf->set_value(theme_section, "search_result_border_color", ((Color)get("text_editor/search_result_border_color")).to_html());
Error err = cf->save(p_file);
if (err == OK) {
@@ -819,7 +884,32 @@ EditorSettings::EditorSettings() {
//singleton=this;
last_order=0;
+
+ EditorTranslationList *etl=_editor_translations;
+
+ while(etl->data) {
+
+ Vector<uint8_t> data;
+ data.resize(etl->uncomp_size);
+ Compression::decompress(data.ptr(),etl->uncomp_size,etl->data,etl->comp_size,Compression::MODE_DEFLATE);
+
+ FileAccessMemory *fa = memnew (FileAccessMemory);
+ fa->open_custom(data.ptr(),data.size());
+
+ Ref<Translation> tr = TranslationLoaderPO::load_translation(fa,NULL,"translation_"+String(etl->lang));
+
+ if (tr.is_valid()) {
+ tr->set_locale(etl->lang);
+ translations.push_back(tr);
+ }
+
+ etl++;
+
+ }
+
_load_defaults();
+
+
}
diff --git a/tools/editor/editor_settings.h b/tools/editor/editor_settings.h
index afd3232752..879c97c349 100644
--- a/tools/editor/editor_settings.h
+++ b/tools/editor/editor_settings.h
@@ -34,7 +34,7 @@
#include "resource.h"
#include "os/thread_safe.h"
#include "core/io/config_file.h"
-
+#include "translation.h"
class EditorPlugin;
class EditorSettings : public Resource {
@@ -93,6 +93,8 @@ private:
Vector<String> favorite_dirs;
Vector<String> recent_dirs;
+ Vector<Ref<Translation> > translations;
+
protected:
static void _bind_methods();
@@ -111,6 +113,7 @@ public:
String get_project_settings_path() const;
+ void setup_language();
void setup_network();
void raise_order(const String& p_name);
diff --git a/tools/editor/icons/SCsub b/tools/editor/icons/SCsub
index addf6879a2..14d2be66f6 100644
--- a/tools/editor/icons/SCsub
+++ b/tools/editor/icons/SCsub
@@ -35,7 +35,9 @@ def make_editor_icons_action(target, source, env):
s.write("static Ref<ImageTexture> make_icon(const uint8_t* p_png) {\n")
s.write("\tRef<ImageTexture> texture( memnew( ImageTexture ) );\n")
- s.write("\ttexture->create_from_image( Image(p_png),ImageTexture::FLAG_FILTER );\n")
+ s.write("\tImage img(p_png);\n")
+ #s.write("\timg.expand_x2_hq2x();\n")
+ s.write("\ttexture->create_from_image( img,ImageTexture::FLAG_FILTER );\n")
s.write("\treturn texture;\n")
s.write("}\n\n")
diff --git a/tools/editor/icons/icon_dependency_changed.png b/tools/editor/icons/icon_dependency_changed.png
index ecf8a011cf..f48906f256 100644
--- a/tools/editor/icons/icon_dependency_changed.png
+++ b/tools/editor/icons/icon_dependency_changed.png
Binary files differ
diff --git a/tools/editor/icons/icon_dependency_ok.png b/tools/editor/icons/icon_dependency_ok.png
index f4d4c9ea29..fe4d7053f7 100644
--- a/tools/editor/icons/icon_dependency_ok.png
+++ b/tools/editor/icons/icon_dependency_ok.png
Binary files differ
diff --git a/tools/editor/io_plugins/editor_font_import_plugin.cpp b/tools/editor/io_plugins/editor_font_import_plugin.cpp
index 6ac67ab8a6..f4d6af7e10 100644
--- a/tools/editor/io_plugins/editor_font_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_font_import_plugin.cpp
@@ -601,6 +601,13 @@ public:
}
}
+
+ void set_source_and_dest(const String& p_font,const String& p_dest) {
+ source->get_line_edit()->set_text(p_font);
+ dest->get_line_edit()->set_text(p_dest);
+ _prop_changed();
+ }
+
EditorFontImportDialog(EditorFontImportPlugin *p_plugin) {
plugin=p_plugin;
VBoxContainer *vbc = memnew( VBoxContainer );
@@ -1607,7 +1614,7 @@ String EditorFontImportPlugin::get_name() const {
}
String EditorFontImportPlugin::get_visible_name() const{
- return "Font";
+ return TTR("Font");
}
void EditorFontImportPlugin::import_dialog(const String& p_from){
@@ -1629,6 +1636,20 @@ Error EditorFontImportPlugin::import(const String& p_path, const Ref<ResourceImp
}
+void EditorFontImportPlugin::import_from_drop(const Vector<String>& p_drop, const String &p_dest_path) {
+
+ for(int i=0;i<p_drop.size();i++) {
+ String ext = p_drop[i].extension().to_lower();
+ String file = p_drop[i].get_file();
+ if (ext=="ttf" || ext=="otf" || ext=="fnt") {
+
+ import_dialog();
+ dialog->set_source_and_dest(p_drop[i],p_dest_path.plus_file(file.basename()+".fnt"));
+ break;
+ }
+ }
+}
+
EditorFontImportPlugin::EditorFontImportPlugin(EditorNode* p_editor) {
diff --git a/tools/editor/io_plugins/editor_font_import_plugin.h b/tools/editor/io_plugins/editor_font_import_plugin.h
index ce26ef91e2..25914e6f83 100644
--- a/tools/editor/io_plugins/editor_font_import_plugin.h
+++ b/tools/editor/io_plugins/editor_font_import_plugin.h
@@ -48,6 +48,7 @@ public:
virtual String get_visible_name() const;
virtual void import_dialog(const String& p_from="");
virtual Error import(const String& p_path, const Ref<ResourceImportMetadata>& p_from);
+ virtual void import_from_drop(const Vector<String>& p_drop,const String& p_dest_path);
EditorFontImportPlugin(EditorNode* p_editor);
diff --git a/tools/editor/io_plugins/editor_mesh_import_plugin.cpp b/tools/editor/io_plugins/editor_mesh_import_plugin.cpp
index 9af7d8daa5..45da42969c 100644
--- a/tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_mesh_import_plugin.cpp
@@ -331,7 +331,7 @@ String EditorMeshImportPlugin::get_name() const {
}
String EditorMeshImportPlugin::get_visible_name() const{
- return "3D Mesh";
+ return TTR("Mesh");
}
void EditorMeshImportPlugin::import_dialog(const String& p_from){
@@ -536,9 +536,28 @@ Error EditorMeshImportPlugin::import(const String& p_path, const Ref<ResourceImp
}
+void EditorMeshImportPlugin::import_from_drop(const Vector<String>& p_drop, const String &p_dest_path) {
+
+
+ Vector<String> files;
+ for(int i=0;i<p_drop.size();i++) {
+ String ext = p_drop[i].extension().to_lower();
+ String file = p_drop[i].get_file();
+ if (ext=="obj") {
+
+ files.push_back(p_drop[i]);
+ }
+ }
+
+ if (files.size()) {
+ import_dialog();
+ dialog->_choose_files(files);
+ dialog->_choose_save_dir(p_dest_path);
+ }
+}
+
EditorMeshImportPlugin::EditorMeshImportPlugin(EditorNode* p_editor) {
dialog = memnew( EditorMeshImportDialog(this));
p_editor->get_gui_base()->add_child(dialog);
}
-
diff --git a/tools/editor/io_plugins/editor_mesh_import_plugin.h b/tools/editor/io_plugins/editor_mesh_import_plugin.h
index 014954685d..ed30d69e18 100644
--- a/tools/editor/io_plugins/editor_mesh_import_plugin.h
+++ b/tools/editor/io_plugins/editor_mesh_import_plugin.h
@@ -21,6 +21,7 @@ public:
virtual String get_visible_name() const;
virtual void import_dialog(const String& p_from="");
virtual Error import(const String& p_path, const Ref<ResourceImportMetadata>& p_from);
+ void import_from_drop(const Vector<String>& p_drop, const String &p_dest_path);
EditorMeshImportPlugin(EditorNode* p_editor);
diff --git a/tools/editor/io_plugins/editor_sample_import_plugin.cpp b/tools/editor/io_plugins/editor_sample_import_plugin.cpp
index c608fe906f..120bdc6f44 100644
--- a/tools/editor/io_plugins/editor_sample_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_sample_import_plugin.cpp
@@ -406,7 +406,7 @@ String EditorSampleImportPlugin::get_name() const {
}
String EditorSampleImportPlugin::get_visible_name() const{
- return "Audio Sample";
+ return TTR("Audio Sample");
}
void EditorSampleImportPlugin::import_dialog(const String& p_from){
@@ -823,6 +823,58 @@ void EditorSampleImportPlugin::_compress_ima_adpcm(const Vector<float>& p_data,D
EditorSampleImportPlugin* EditorSampleImportPlugin::singleton=NULL;
+void EditorSampleImportPlugin::import_from_drop(const Vector<String>& p_drop, const String &p_dest_path) {
+
+
+ Vector<String> files;
+ for(int i=0;i<p_drop.size();i++) {
+ String ext = p_drop[i].extension().to_lower();
+
+ if (ext=="wav") {
+
+ files.push_back(p_drop[i]);
+ }
+ }
+
+ if (files.size()) {
+ import_dialog();
+ dialog->_choose_files(files);
+ dialog->_choose_save_dir(p_dest_path);
+ }
+}
+
+void EditorSampleImportPlugin::reimport_multiple_files(const Vector<String>& p_list) {
+
+ if (p_list.size()==0)
+ return;
+
+ Vector<String> sources;
+ for(int i=0;i<p_list.size();i++) {
+ int idx;
+ EditorFileSystemDirectory *efsd = EditorFileSystem::get_singleton()->find_file(p_list[i],&idx);
+ if (efsd) {
+ for(int j=0;j<efsd->get_source_count(idx);j++) {
+ String file = expand_source_path(efsd->get_source_file(idx,j));
+ if (sources.find(file)==-1) {
+ sources.push_back(file);
+ }
+
+ }
+ }
+ }
+
+ if (sources.size()) {
+
+ dialog->popup_import(p_list[0]);
+ dialog->_choose_files(sources);
+ dialog->_choose_save_dir(p_list[0].get_base_dir());
+ }
+}
+
+bool EditorSampleImportPlugin::can_reimport_multiple_files() const {
+
+ return true;
+}
EditorSampleImportPlugin::EditorSampleImportPlugin(EditorNode* p_editor) {
@@ -865,8 +917,7 @@ Vector<uint8_t> EditorSampleExportPlugin::custom_export(String& p_path,const Ref
}
+
EditorSampleExportPlugin::EditorSampleExportPlugin() {
}
-
-
diff --git a/tools/editor/io_plugins/editor_sample_import_plugin.h b/tools/editor/io_plugins/editor_sample_import_plugin.h
index b31562af76..a2686ebe4f 100644
--- a/tools/editor/io_plugins/editor_sample_import_plugin.h
+++ b/tools/editor/io_plugins/editor_sample_import_plugin.h
@@ -49,6 +49,9 @@ public:
virtual String get_visible_name() const;
virtual void import_dialog(const String& p_from="");
virtual Error import(const String& p_path, const Ref<ResourceImportMetadata>& p_from);
+ void import_from_drop(const Vector<String>& p_drop, const String &p_dest_path);
+ virtual void reimport_multiple_files(const Vector<String>& p_list);
+ virtual bool can_reimport_multiple_files() const;
EditorSampleImportPlugin(EditorNode* p_editor);
diff --git a/tools/editor/io_plugins/editor_scene_import_plugin.cpp b/tools/editor/io_plugins/editor_scene_import_plugin.cpp
index 84ef5f1973..3effb1d0aa 100644
--- a/tools/editor/io_plugins/editor_scene_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_scene_import_plugin.cpp
@@ -41,6 +41,7 @@
#include "scene/3d/physics_body.h"
#include "scene/3d/portal.h"
#include "scene/3d/vehicle_body.h"
+#include "tools/editor/create_dialog.h"
#include "os/os.h"
@@ -95,6 +96,7 @@ class EditorImportAnimationOptions : public VBoxContainer {
Tree *optimization_tree;
Vector<TreeItem*> items;
+
bool updating;
bool validating;
@@ -167,6 +169,7 @@ class EditorSceneImportDialog : public ConfirmationDialog {
EditorFileDialog *script_select;
EditorDirDialog *save_select;
OptionButton *texture_action;
+ CreateDialog *root_type_choose;
ConfirmationDialog *confirm_open;
@@ -178,8 +181,13 @@ class EditorSceneImportDialog : public ConfirmationDialog {
Map<Ref<Mesh>,Ref<Shape> > collision_map;
ConfirmationDialog *error_dialog;
- OptionButton *this_import;
- OptionButton *next_import;
+ Button *root_type;
+ CheckBox *root_default;
+
+
+ void _root_default_pressed();
+ void _root_type_pressed();
+ void _set_root_type();
void _choose_file(const String& p_path);
void _choose_save_file(const String& p_path);
@@ -206,6 +214,11 @@ protected:
static void _bind_methods();
public:
+ void setup_popup(const String& p_from,const String& p_to_path) {
+ _choose_file(p_from);
+ _choose_save_file(p_to_path);
+ }
+
Error import(const String& p_from, const String& p_to, const String& p_preset);
void popup_import(const String& p_from);
EditorSceneImportDialog(EditorNode *p_editor,EditorSceneImportPlugin *p_plugin);
@@ -764,9 +777,10 @@ void EditorSceneImportDialog::_import(bool p_and_open) {
rim->set_option("animation_filters",animation_options->get_filter());
rim->set_option("animation_clips",animation_options->get_clips());
rim->set_option("post_import_script",script_path->get_text());
- rim->set_option("import_this_time",this_import->get_selected());
- rim->set_option("import_next_time",next_import->get_selected());
rim->set_option("reimport",true);
+ if (!root_default->is_pressed()) {
+ rim->set_option("root_type",root_type->get_text());
+ }
List<String> missing;
Error err = plugin->import1(rim,&scene,&missing);
@@ -909,12 +923,24 @@ void EditorSceneImportDialog::popup_import(const String &p_from) {
if (rimd->has_option("animation_optimizer_max_angle"))
animation_options->set_optimize_max_angle(rimd->get_option("animation_optimizer_max_angle"));
+ if (rimd->has_option("root_type")) {
+ root_default->set_pressed(false);
+ String type = rimd->get_option("root_type");
+ root_type->set_text(type);
+ root_type->set_disabled(false);
+
+ if (has_icon(type,"EditorIcons")) {
+ root_type->set_icon(get_icon(type,"EditorIcons"));
+ } else {
+ root_type->set_icon(get_icon("Object","EditorIcons"));
+ }
+
+ } else {
+ root_default->set_pressed(true);
+ root_type->set_disabled(true);
+ }
script_path->set_text(rimd->get_option("post_import_script"));
- if (rimd->has_option("import_this_time"))
- this_import->select(rimd->get_option("import_this_time"));
- if (rimd->has_option("import_next_time"))
- next_import->select(rimd->get_option("import_next_time"));
save_path->set_text(p_from.get_base_dir());
import_path->set_text(EditorImportPlugin::expand_source_path(rimd->get_source_path(0)));
@@ -931,6 +957,9 @@ void EditorSceneImportDialog::_notification(int p_what) {
List<String> extensions;
file_select->clear_filters();
+ root_type->set_icon(get_icon("Spatial","EditorIcons"));
+ root_type->set_text("Spatial");
+ root_type->set_disabled(true);
for(int i=0;i<plugin->get_importers().size();i++) {
plugin->get_importers()[i]->get_extensions(&extensions);
@@ -981,7 +1010,30 @@ void EditorSceneImportDialog::_dialog_hid() {
wip_rimd=Ref<ResourceImportMetadata>();
}
}
+void EditorSceneImportDialog::_root_default_pressed() {
+
+ root_type->set_disabled(root_default->is_pressed());
+}
+
+void EditorSceneImportDialog::_root_type_pressed() {
+
+
+ root_type_choose->popup(false);
+}
+
+
+void EditorSceneImportDialog::_set_root_type() {
+ String type = root_type_choose->get_selected_type();
+ if (type==String())
+ return;
+ root_type->set_text(type);
+ if (has_icon(type,"EditorIcons")) {
+ root_type->set_icon(get_icon(type,"EditorIcons"));
+ } else {
+ root_type->set_icon(get_icon("Object","EditorIcons"));
+ }
+}
void EditorSceneImportDialog::_bind_methods() {
@@ -996,13 +1048,16 @@ void EditorSceneImportDialog::_bind_methods() {
ObjectTypeDB::bind_method("_dialog_hid",&EditorSceneImportDialog::_dialog_hid);
ObjectTypeDB::bind_method("_import_confirm",&EditorSceneImportDialog::_import_confirm);
ObjectTypeDB::bind_method("_open_and_import",&EditorSceneImportDialog::_open_and_import);
+ ObjectTypeDB::bind_method("_root_default_pressed",&EditorSceneImportDialog::_root_default_pressed);
+ ObjectTypeDB::bind_method("_root_type_pressed",&EditorSceneImportDialog::_root_type_pressed);
+ ObjectTypeDB::bind_method("_set_root_type",&EditorSceneImportDialog::_set_root_type);
+
ADD_SIGNAL( MethodInfo("imported",PropertyInfo(Variant::OBJECT,"scene")) );
}
-
const EditorSceneImportDialog::FlagInfo EditorSceneImportDialog::scene_flag_names[]={
{EditorSceneImportPlugin::SCENE_FLAG_REMOVE_NOIMP,("Actions"),"Remove Nodes (-noimp)",true},
@@ -1162,6 +1217,23 @@ EditorSceneImportDialog::EditorSceneImportDialog(EditorNode *p_editor, EditorSce
error_dialog->get_ok()->set_text(TTR("Accept"));
// error_dialog->get_cancel()->hide();
+
+ HBoxContainer *custom_root_hb = memnew( HBoxContainer );
+ vbc->add_margin_child(TTR("Custom Root Node Type:"),custom_root_hb);
+ root_type = memnew(Button);
+ root_type->set_h_size_flags(SIZE_EXPAND_FILL);
+ root_type->set_text_align(Button::ALIGN_LEFT);
+ root_type->connect("pressed",this,"_root_type_pressed");
+ custom_root_hb->add_child(root_type);
+
+ root_default = memnew(CheckBox);
+ root_default->set_text("Auto");
+ root_default->set_pressed(true);
+ root_default->connect("pressed",this,"_root_default_pressed");
+ custom_root_hb->add_child(root_default);
+
+
+ /*
this_import = memnew( OptionButton );
this_import->add_item(TTR("Overwrite Existing Scene"));
this_import->add_item(TTR("Overwrite Existing, Keep Materials"));
@@ -1175,7 +1247,7 @@ EditorSceneImportDialog::EditorSceneImportDialog(EditorNode *p_editor, EditorSce
next_import->add_item(TTR("Keep Existing, Merge with New"));
next_import->add_item(TTR("Keep Existing, Ignore New"));
vbc->add_margin_child(TTR("Next Time:"),next_import);
-
+*/
set_hide_on_ok(false);
GLOBAL_DEF("import/shared_textures","res://");
@@ -1183,6 +1255,7 @@ EditorSceneImportDialog::EditorSceneImportDialog(EditorNode *p_editor, EditorSce
import_hb->add_constant_override("separation",30);
+
VBoxContainer *ovb = memnew( VBoxContainer);
ovb->set_h_size_flags(SIZE_EXPAND_FILL);
import_hb->add_child(ovb);
@@ -1232,6 +1305,10 @@ EditorSceneImportDialog::EditorSceneImportDialog(EditorNode *p_editor, EditorSce
wip_open=false;
//texture_options->set_format(EditorImport::IMAGE_FORMAT_C);
+ root_type_choose = memnew( CreateDialog );
+ add_child(root_type_choose);
+ root_type_choose->set_base_type("Node");
+ root_type_choose->connect("create",this,"_set_root_type");
}
@@ -1247,7 +1324,7 @@ String EditorSceneImportPlugin::get_name() const {
String EditorSceneImportPlugin::get_visible_name() const{
- return "3D Scene";
+ return "Scene";
}
void EditorSceneImportPlugin::import_dialog(const String& p_from){
@@ -1906,397 +1983,7 @@ Node* EditorSceneImportPlugin::_fix_node(Node *p_node,Node *p_root,Map<Ref<Mesh>
}
-void EditorSceneImportPlugin::_merge_existing_node(Node *p_node,Node *p_imported_scene,Set<Ref<Resource> >& checked_resources,Set<Node*> &checked_nodes) {
-
-
- NodePath path = p_node->get_import_path();
-
- if (!path.is_empty() && p_imported_scene->has_node(path)) {
-
- Node *imported_node = p_imported_scene->get_node(path);
-
- if (imported_node->get_type()==p_node->get_type()) {
- //same thing, check what it is
-
- if (p_node->get_type()=="MeshInstance") {
-
- //merge mesh instance, this is a special case!
- MeshInstance *mi_imported=imported_node->cast_to<MeshInstance>();
- MeshInstance *mi_node=p_node->cast_to<MeshInstance>();
-
- Ref<Mesh> mesh_imported = mi_imported->get_mesh();
- Ref<Mesh> mesh_node = mi_node->get_mesh();
-
- if (mesh_node.is_null() && mesh_imported.is_valid()) {
-
- mi_node->set_mesh(mesh_imported);
-
- } else if (mesh_node.is_valid() && mesh_imported.is_valid()) {
-
- if (checked_resources.has(mesh_imported)) {
-
- mi_node->set_mesh(mesh_imported);
- } else {
- //mix up meshes
- //import new geometry but keep materials
- for(int i=0;i<mesh_imported->get_surface_count();i++) {
-
- String name = mesh_imported->surface_get_name(i);
-
- for(int j=0;j<mesh_node->get_surface_count();j++) {
-
- Ref<Material> mat = mesh_node->surface_get_material(j);
- if (mat.is_valid() && mesh_node->surface_get_name(j)==name ) {
-
- mesh_imported->surface_set_material(i,mat);
- break;
- }
- }
- }
- // was imported, do nothing further
- checked_resources.insert(mesh_imported);
- mi_node->set_mesh(mesh_imported);
- }
-
- }
- } else if (p_node->get_type()=="Path") {
- //for paths, overwrite path
- Path *path_imported =imported_node->cast_to<Path>();
- Path *path_node =p_node->cast_to<Path>();
-
- if (path_imported->get_curve().is_valid()) {
-
- path_node->set_curve(path_imported->get_curve());
- }
- } else if (p_node->get_type()=="Portal") {
- //for paths, overwrite path
-
- Portal *portal_imported =imported_node->cast_to<Portal>();
- Portal *portal_node =p_node->cast_to<Portal>();
-
- portal_node->set_shape( portal_imported->get_shape() );
-
- } else if (p_node->get_type()=="Room") {
- //for paths, overwrite path
-
- Room *room_imported =imported_node->cast_to<Room>();
- Room *room_node =p_node->cast_to<Room>();
-
- room_node->set_room( room_imported->get_room() );
-
- } else if (p_node->get_type()=="Skeleton") {
- //for paths, overwrite path
-
- Skeleton *skeleton_imported =imported_node->cast_to<Skeleton>();
- Skeleton *skeleton_node =p_node->cast_to<Skeleton>();
-
- //use imported bones, obviously
- skeleton_node->clear_bones();
- for(int i=0;i<skeleton_imported->get_bone_count();i++) {
-
- skeleton_node->add_bone(skeleton_imported->get_bone_name(i));
- skeleton_node->set_bone_parent(i,skeleton_imported->get_bone_parent(i));
- skeleton_node->set_bone_rest(i,skeleton_imported->get_bone_rest(i));
- //skeleton_node->set_bone_pose(i,skeleton_imported->get_bone_pose(i)); // not in a scene, will throw errors
- }
- }
- else if (p_node->get_type() == "AnimationPlayer") {
- //for paths, overwrite path
- AnimationPlayer *aplayer_imported = imported_node->cast_to<AnimationPlayer>();
- AnimationPlayer *aplayer_node = p_node->cast_to<AnimationPlayer>();
-
- //use imported bones, obviously
- List<StringName> anims;
- List<StringName> existing_anims;
- aplayer_imported->get_animation_list(&anims);
- aplayer_node->get_animation_list(&existing_anims);
-
- //use imported animations
- for (List<StringName>::Element *N = anims.front(); N; N = N->next()) {
-
- Ref<Animation> candidate = aplayer_imported->get_animation(N->get());
-
- if (aplayer_node->has_animation(N->get())) {
-
- Ref<Animation> found = aplayer_node->get_animation(N->get());
-
- candidate->set_loop(found->has_loop());
- candidate->set_step(found->get_step());
-
- //For each track candidate
- for (int i = 0; i < candidate->get_track_count(); i++) {
-
- NodePath track_path = candidate->track_get_path(i);
- // For each track existing
- for (int x = 0; x < found->get_track_count(); x++) {
-
- NodePath path_to_compare = found->track_get_path(x);
-
- if (track_path.hash() == path_to_compare.hash() && candidate->track_get_type(x) == found->track_get_type(i)) {
-
- //Tracks matches
- if (candidate->track_get_interpolation_type(i) != found->track_get_interpolation_type(x))
- candidate->track_set_interpolation_type(i, found->track_get_interpolation_type(x));
- if (candidate->track_get_type(i) == Animation::TYPE_VALUE && candidate->value_track_is_continuous(i) != found->value_track_is_continuous(x))
- candidate->value_track_set_continuous(i, found->value_track_is_continuous(x));
-
- //Key transitions might have changed, but the animation remained unchanged
- if (candidate->track_get_key_count(i) == found->track_get_key_count(x)) {
- for (int k = 0; k < candidate->track_get_key_count(i); k++) {
-
- if (candidate->track_get_key_transition(i, k) != found->track_get_key_transition(x, k))
- candidate->track_set_key_transition(i, k, found->track_get_key_transition(x, k));
- }
- }
-
- }
-
- }
- }
-
- // Append function callbacks and values
- for (int x = 0; x < found->get_track_count(); x++) {
- if (found->track_get_type(x) == Animation::TYPE_METHOD || found->track_get_type(x) == Animation::TYPE_VALUE)
- candidate->add_track(found->track_get_type(x), candidate->get_track_count());
-
- for (int k = 0; k < found->track_get_key_count(x); k++)
- candidate->track_insert_key(x, found->track_get_key_time(x, k), found->track_get_key_value(x, k), found->track_get_key_transition(x, k));
- }
- }
-
- aplayer_node->add_animation(N->get(), candidate);
- }
-
- } else if (p_node->get_type()=="CollisionShape") {
- //for paths, overwrite path
-
- CollisionShape *collision_imported =imported_node->cast_to<CollisionShape>();
- CollisionShape *collision_node =p_node->cast_to<CollisionShape>();
-
- collision_node->set_shape( collision_imported->get_shape() );
- }
- }
-
- if (p_node->cast_to<Spatial>() && imported_node->cast_to<Spatial>()) {
- //apply transform if changed
- Spatial *snode = p_node->cast_to<Spatial>();
- Spatial *simp = imported_node->cast_to<Spatial>();
-
- if (snode->get_import_transform() == snode->get_transform()) {
- //not moved, apply new
- snode->set_import_transform(simp->get_transform());
- snode->set_transform(simp->get_transform());
- } else if (snode->get_import_transform() == simp->get_import_transform()) {
- //do nothing, nothing changed keep local changes
- } else {
- //changed both, imported and edited, merge
- Transform local_xform = snode->get_import_transform().affine_inverse() * snode->get_transform();
- snode->set_import_transform(simp->get_import_transform());
- snode->set_transform(simp->get_import_transform() * local_xform);
- }
- }
-
- checked_nodes.insert(imported_node);
-
- }
-#if 0
- else {
-
- if (p_node!=p_root && p_existing->has_node(p_root->get_path_to(p_node->get_parent()))) {
-
- Node *parent = p_existing->get_node(p_root->get_path_to(p_node->get_parent()));
- NodePath path = p_root->get_path_to(p_node);
-
- //add it.. because not existing in existing scene
- Object *o = ObjectTypeDB::instance(p_existing->get_type());
- Node *n=NULL;
- if (o)
- n=o->cast_to<Node>();
-
- if (n) {
-
- List<PropertyInfo> pl;
- p_existing->get_property_list(&pl);
- for(List<PropertyInfo>::Element *E=pl.front();E;E=E->next()) {
- if (!(E->get().usage&PROPERTY_USAGE_STORAGE))
- continue;
- n->set( E->get().name, p_existing->get(E->get().name) );
- }
-
- parent->add_child(n);
-
- valid=true;
- }
- }
-
- }
-#endif
-
- for(int i=0;i<p_node->get_child_count();i++) {
- _merge_existing_node(p_node->get_child(i),p_imported_scene,checked_resources,checked_nodes);
- }
-}
-
-
-void EditorSceneImportPlugin::_add_new_nodes(Node *p_node,Node *p_imported,Node *p_imported_scene,Node *p_existing_scene,Set<Node*> &checked_nodes) {
-
-
- for(int i=0;i<p_imported->get_child_count();i++) {
-
-
- Node *imported_node = p_imported->get_child(i);
-
- if (imported_node->get_owner()!=p_imported_scene) {
- // print_line("skipping because not imported at "+String(imported_node->get_name()));
- continue; //end of the road
- }
-
- Vector<StringName> nn;
- nn.push_back(imported_node->get_name());
- NodePath imported_path(nn,false);
- //print_line("check for: "+String(imported_path));
-
- if (!p_node->has_node(imported_path) && !checked_nodes.has(imported_node)) {
- //not there, re-add it
- //add it.. because not existing in existing scene
- Object *o = ObjectTypeDB::instance(imported_node->get_type());
- Node *n=NULL;
- if (o)
- n=o->cast_to<Node>();
-
- //print_line("creating node of same type..");
-
- if (n) {
-
- //print_line("copy props and add");
- List<PropertyInfo> pl;
- imported_node->get_property_list(&pl);
- for(List<PropertyInfo>::Element *E=pl.front();E;E=E->next()) {
- if (!(E->get().usage&PROPERTY_USAGE_STORAGE))
- continue;
- n->set( E->get().name, imported_node->get(E->get().name) );
- }
-
- p_node->add_child(n);
- n->set_owner(p_existing_scene);
- }
-
- } else {
- //print_line("already exists");
- }
-
-
- if (p_node->has_node(imported_path)) {
-
- Node *other_node = p_node->get_node(imported_path);
-
- _add_new_nodes(other_node,imported_node,p_imported_scene,p_existing_scene,checked_nodes);
-
- }
-
- }
-}
-
-
-void EditorSceneImportPlugin::_merge_scenes(Node *p_node,Node *p_imported) {
-
- Set<Ref<Resource> > checked_resources;
- Set<Node*> checked_nodes;
- _merge_existing_node(p_node,p_imported,checked_resources,checked_nodes);
- _add_new_nodes(p_node,p_imported,p_imported,p_node,checked_nodes);
- //add existing.. ?
-}
-
-
-void EditorSceneImportPlugin::_scan_materials(Node*p_base,Node *p_node,Map<String,Ref<Material> > &mesh_materials,Map<String,Ref<Material> >& override_materials) {
-
- if (!p_base && p_node->get_owner()!=p_base)
- return;
- MeshInstance *mi=p_node->cast_to<MeshInstance>();
-
- if (mi) {
- if (mi->get_material_override().is_valid()) {
- String path = p_base->get_path_to(p_node);
- override_materials[path]=mi->get_material_override();
- }
- Ref<Mesh> mesh = mi->get_mesh();
- if (mesh.is_valid()) {
-
- for(int i=0;i<mesh->get_surface_count();i++) {
-
- String name = mesh->get_name()+":"+mesh->surface_get_name(i);
- if (!mesh_materials.has(name)) {
- mesh_materials[name]=mesh->surface_get_material(i);
- }
- }
- }
- }
-
- for(int i=0;i<p_node->get_child_count();i++) {
- _scan_materials(p_base,p_node->get_child(i),mesh_materials,override_materials);
- }
-}
-
-
-void EditorSceneImportPlugin::_apply_materials(Node*p_base,Node *p_node,Map<String,Ref<Material> > &mesh_materials,Map<String,Ref<Material> >& override_materials,Set<Ref<Mesh> >& meshes_processed) {
-
- if (p_node!=p_base && p_node->get_owner()!=p_base)
- return;
-
- MeshInstance *mi=p_node->cast_to<MeshInstance>();
-
- if (mi) {
-
- print_line("is mesh "+String(p_node->get_name()));
- String path = p_base->get_path_to(p_node);
- if (override_materials.has(path)) {
- print_line("is in material overrides");
- mi->set_material_override(override_materials[path]);
- }
-
- Ref<Mesh> mesh = mi->get_mesh();
- if (mesh.is_valid() && !meshes_processed.has(mesh)) {
- print_line("mesh was not processed");
- meshes_processed.insert(mesh);
- for(int i=0;i<mesh->get_surface_count();i++) {
-
- String name = mesh->get_name()+":"+mesh->surface_get_name(i);
- print_line("name for surface "+itos(i)+": "+name);
- if (mesh_materials.has(name)) {
-
- Ref<Material> mat = mesh_materials[name];
- mesh->surface_set_material(i,mat);
- print_line("overriding!");
- }
- }
- }
- }
-
- for(int i=0;i<p_node->get_child_count();i++) {
- _apply_materials(p_base,p_node->get_child(i),mesh_materials,override_materials,meshes_processed);
- }
-}
-
-void EditorSceneImportPlugin::_merge_materials(Node *p_node,Node *p_imported) {
-
- Map<String,Ref<Material> > mesh_materials;
- Map<String,Ref<Material> > override_materials;
-
- _scan_materials(p_node,p_node,mesh_materials,override_materials);
- for (Map<String,Ref<Material> >::Element *E=mesh_materials.front();E;E=E->next()) {
- print_line("Mats: "+String(E->key()));
- }
-
- for (Map<String,Ref<Material> >::Element *E=override_materials.front();E;E=E->next()) {
- print_line("Overrides: "+String(E->key()));
- }
-
- Set<Ref<Mesh> > mp;
- _apply_materials(p_imported,p_imported,mesh_materials,override_materials,mp);
-
-
-}
#if 0
@@ -2397,6 +2084,21 @@ Error EditorSceneImportPlugin::import1(const Ref<ResourceImportMetadata>& p_from
return err;
}
+ if (from->has_option("root_type")) {
+ String type = from->get_option("root_type");
+ Object *base = ObjectTypeDB::instance(type);
+ Node *base_node = NULL;
+ if (base)
+ base_node=base->cast_to<Node>();
+
+ if (base_node) {
+
+ scene->replace_by(base_node);
+ memdelete(scene);
+ scene=base_node;
+ }
+ }
+
_tag_import_paths(scene,scene);
*r_node=scene;
@@ -2839,66 +2541,12 @@ Error EditorSceneImportPlugin::import2(Node *scene, const String& p_dest_path, c
}
}
- Error err = EditorTextureImportPlugin::get_singleton(EditorTextureImportPlugin::MODE_TEXTURE_3D)->import(target_path,imd);
+ Error err = EditorTextureImportPlugin::get_singleton()->import(target_path,imd);
}
}
- /// BEFORE SAVING - MERGE
-
-
- if (import_action!=SCENE_UPDATE_REPLACE_WITH_NEW) {
-
-
- progress.step(TTR("Merging.."),103);
-
- FileAccess *fa = FileAccess::create(FileAccess::ACCESS_RESOURCES);
-
- if (fa->file_exists(p_dest_path)) {
-
-
- //try to merge
-
- Ref<PackedScene> s = ResourceLoader::load(p_dest_path);
- if (s.is_valid()) {
-
- Node *existing = s->instance(true);
-
- if (existing) {
-
-
- switch(import_action) {
-
- case SCENE_UPDATE_REPLACE_WITH_NEW: break;
- case SCENE_UPDATE_REPLACE_WITH_NEW_KEEP_MATERIALS: {
-
- _merge_materials(existing,scene);
- memdelete(existing);
-
- } break;
- case SCENE_UPDATE_KEEP_OLD_MERGE_CHANGES: {
-
- _merge_scenes(existing,scene);
- memdelete(scene);
- scene=existing;
-
- } break;
- case SCENE_UPDATE_KEEP_OLD: {
-
- memdelete(scene);
- scene=existing;
- } break;
- }
-
- }
- }
-
- }
-
- memdelete(fa);
- }
-
progress.step(TTR("Saving.."),104);
@@ -2957,6 +2605,30 @@ void EditorSceneImportPlugin::add_importer(const Ref<EditorSceneImporter>& p_imp
importers.push_back(p_importer);
}
+void EditorSceneImportPlugin::import_from_drop(const Vector<String>& p_drop,const String& p_dest_path) {
+
+ List<String> extensions;
+ for(int i=0;i<importers.size();i++) {
+ importers[i]->get_extensions(&extensions);
+ }
+ //bool warn_compatible=false;
+ for(int i=0;i<p_drop.size();i++) {
+
+ String extension = p_drop[i].extension().to_lower();
+
+ for(List<String>::Element *E=extensions.front();E;E=E->next()) {
+
+ if (E->get()==extension) {
+
+ dialog->popup_import(String());
+ dialog->setup_popup(p_drop[i],p_dest_path);
+ return;
+ }
+ }
+ }
+
+}
+
EditorSceneImportPlugin::EditorSceneImportPlugin(EditorNode* p_editor) {
@@ -2975,7 +2647,7 @@ String EditorSceneAnimationImportPlugin::get_name() const {
String EditorSceneAnimationImportPlugin::get_visible_name() const{
- return "3D Scene Animation";
+ return TTR("3D Scene Animation");
}
void EditorSceneAnimationImportPlugin::import_dialog(const String& p_from){
@@ -2990,4 +2662,3 @@ EditorSceneAnimationImportPlugin::EditorSceneAnimationImportPlugin(EditorNode* p
}
-
diff --git a/tools/editor/io_plugins/editor_scene_import_plugin.h b/tools/editor/io_plugins/editor_scene_import_plugin.h
index a1a090de7e..8a2d30f1f6 100644
--- a/tools/editor/io_plugins/editor_scene_import_plugin.h
+++ b/tools/editor/io_plugins/editor_scene_import_plugin.h
@@ -45,6 +45,7 @@
#include "tools/editor/io_plugins/editor_texture_import_plugin.h"
#include "scene/resources/animation.h"
+
class EditorNode;
class EditorSceneImportDialog;
@@ -111,16 +112,8 @@ class EditorSceneImportPlugin : public EditorImportPlugin {
void _create_clips(Node *scene, const Array& p_clips, bool p_bake_all);
void _filter_anim_tracks(Ref<Animation> anim,Set<String> &keep);
void _filter_tracks(Node *scene, const String& p_text);
- void _merge_existing_node(Node *p_node,Node *p_imported_scene,Set<Ref<Resource> >& checked_resources,Set<Node*> &checked_nodes);
-
- void _add_new_nodes(Node *p_node,Node *p_imported,Node *p_imported_scene,Node *p_existing_scene,Set<Node*> &checked_nodes);
void _optimize_animations(Node *scene, float p_max_lin_error,float p_max_ang_error,float p_max_angle);
- void _merge_scenes(Node *p_node, Node *p_imported);
- void _scan_materials(Node*p_base,Node *p_node,Map<String,Ref<Material> > &mesh_materials,Map<String,Ref<Material> >& override_materials);
- void _apply_materials(Node*p_base,Node *p_node,Map<String,Ref<Material> > &mesh_materials,Map<String,Ref<Material> >& override_materials,Set<Ref<Mesh> >& meshes_processed);
- void _merge_materials(Node *p_node,Node *p_imported);
-
void _tag_import_paths(Node *p_scene,Node *p_node);
public:
@@ -150,13 +143,6 @@ public:
SCENE_FLAG_CONVERT_NORMALMAPS_TO_XY=1<<30,
};
- enum SceneUpdate {
- SCENE_UPDATE_REPLACE_WITH_NEW,
- SCENE_UPDATE_REPLACE_WITH_NEW_KEEP_MATERIALS,
- SCENE_UPDATE_KEEP_OLD_MERGE_CHANGES,
- SCENE_UPDATE_KEEP_OLD,
- };
-
virtual String get_name() const;
virtual String get_visible_name() const;
@@ -169,6 +155,8 @@ public:
void add_importer(const Ref<EditorSceneImporter>& p_importer);
const Vector<Ref<EditorSceneImporter> >& get_importers() { return importers; }
+ virtual void import_from_drop(const Vector<String>& p_drop,const String& p_dest_path);
+
EditorSceneImportPlugin(EditorNode* p_editor=NULL);
diff --git a/tools/editor/io_plugins/editor_texture_import_plugin.cpp b/tools/editor/io_plugins/editor_texture_import_plugin.cpp
index 0e2d35b9f2..2376f3a395 100644
--- a/tools/editor/io_plugins/editor_texture_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_texture_import_plugin.cpp
@@ -35,6 +35,9 @@
#include "io/md5.h"
#include "io/marshalls.h"
#include "globals.h"
+#include "scene/gui/check_button.h"
+#include "scene/gui/button_group.h"
+#include "scene/gui/margin_container.h"
static const char *flag_names[]={
("Streaming Format"),
@@ -164,12 +167,13 @@ void EditorImportTextureOptions::_notification(int p_what) {
void EditorImportTextureOptions::show_2d_notice() {
- notice_for_2d->show();
+ //notice_for_2d->show();
}
EditorImportTextureOptions::EditorImportTextureOptions() {
+ add_constant_override("separation",3);
updating=false;
format = memnew( OptionButton );
@@ -223,12 +227,6 @@ EditorImportTextureOptions::EditorImportTextureOptions() {
add_margin_child(TTR("Texture Options"),flags,true);
- notice_for_2d = memnew( Label );
- notice_for_2d->set_text(TTR("NOTICE: You are not forced to import textures for 2D projects. Just copy your .jpg or .png files to your project, and change export options later. Atlases can be generated on export too."));
- notice_for_2d->set_custom_minimum_size(Size2(0,50));
- notice_for_2d->set_autowrap(true);
- add_child(notice_for_2d);
- notice_for_2d->hide();
}
@@ -242,8 +240,13 @@ class EditorTextureImportDialog : public ConfirmationDialog {
OBJ_TYPE(EditorTextureImportDialog,ConfirmationDialog);
+
+ HBoxContainer *mode_hb;
+ CheckBox *mode_check[EditorTextureImportPlugin::MODE_MAX];
+
EditorImportTextureOptions *texture_options;
+ EditorTextureImportPlugin::Mode mode;
//EditorNode *editor;
LineEdit *import_path;
@@ -255,11 +258,16 @@ class EditorTextureImportDialog : public ConfirmationDialog {
ConfirmationDialog *error_dialog;
CheckButton *crop_source;
SpinBox *size;
- bool atlas;
- bool large;
+
+ MarginContainer *size_mc;
+ Label* size_label;
+
+ Label* source_label;
+ Label *notice_for_2d;
EditorTextureImportPlugin *plugin;
+ void _mode_changed(int p_mode);
void _choose_files(const Vector<String>& p_path);
void _choose_file(const String& p_path);
void _choose_save_dir(const String& p_path);
@@ -274,9 +282,23 @@ protected:
static void _bind_methods();
public:
+
+ void setup_multiple_import_3d(const Vector<String>& p_path,const String& p_dest) {
+
+ _mode_changed(EditorTextureImportPlugin::MODE_TEXTURE_3D);
+ _choose_files(p_path);
+ _choose_save_dir(p_dest);
+ }
+
+ void add_sources_and_dest(const Vector<String>& p_path,const String& p_dest) {
+
+ _choose_files(p_path);
+ _choose_save_dir(p_dest);
+ }
+
Error import(const String& p_from, const String& p_to, const String& p_preset);
void popup_import(const String &p_from=String());
- EditorTextureImportDialog(EditorTextureImportPlugin *p_plugin=NULL,bool p_2d=false,bool p_atlas=false,bool p_large=false);
+ EditorTextureImportDialog(EditorTextureImportPlugin *p_plugin=NULL);
};
@@ -349,13 +371,13 @@ void EditorTextureImportDialog::_import() {
}
- if (!atlas && !large && !DirAccess::exists(save_path->get_text())) {
+ if (mode!=EditorTextureImportPlugin::MODE_ATLAS && mode!=EditorTextureImportPlugin::MODE_LARGE && !DirAccess::exists(save_path->get_text())) {
error_dialog->set_text(TTR("Target path must exist."));
error_dialog->popup_centered_minsize();
return;
}
- if (atlas) { //atlas
+ if (mode==EditorTextureImportPlugin::MODE_ATLAS) { //atlas
if (files.size()==0) {
@@ -378,6 +400,7 @@ void EditorTextureImportDialog::_import() {
imd->set_option("atlas_size",int(size->get_val()));
imd->set_option("large",false);
imd->set_option("crop",crop_source->is_pressed());
+ imd->set_option("mode",mode);
Error err = plugin->import(dst_file,imd);
if (err) {
@@ -387,7 +410,7 @@ void EditorTextureImportDialog::_import() {
return;
}
- } else if (large) { //atlas
+ } else if (mode==EditorTextureImportPlugin::MODE_LARGE) { //large
if (files.size()!=1) {
@@ -410,6 +433,7 @@ void EditorTextureImportDialog::_import() {
imd->set_option("large",true);
imd->set_option("large_cell_size",int(size->get_val()));
imd->set_option("crop",crop_source->is_pressed());
+ imd->set_option("mode",mode);
Error err = plugin->import(dst_file,imd);
if (err) {
@@ -434,6 +458,7 @@ void EditorTextureImportDialog::_import() {
imd->set_option("quality",texture_options->get_quality());
imd->set_option("atlas",false);
imd->set_option("large",false);
+ imd->set_option("mode",mode);
Error err = plugin->import(dst_file,imd);
if (err) {
@@ -456,7 +481,7 @@ void EditorTextureImportDialog::_browse() {
void EditorTextureImportDialog::_browse_target() {
- if (atlas || large) {
+ if (mode==EditorTextureImportPlugin::MODE_ATLAS || mode==EditorTextureImportPlugin::MODE_LARGE) {
save_file_select->popup_centered_ratio();
} else {
save_select->popup_centered_ratio();
@@ -467,12 +492,28 @@ void EditorTextureImportDialog::_browse_target() {
void EditorTextureImportDialog::popup_import(const String& p_from) {
- popup_centered(Size2(400,400));
+ popup_centered(Size2(600,500));
if (p_from!="") {
Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(p_from);
ERR_FAIL_COND(!rimd.is_valid());
- if (plugin->get_mode()==EditorTextureImportPlugin::MODE_ATLAS || plugin->get_mode()==EditorTextureImportPlugin::MODE_LARGE)
+ if (rimd->has_option("mode")) {
+ //new imported stuff uses this option
+ _mode_changed(rimd->get_option("mode"));
+ } else {
+ //this one is for compatibility, will have to guess it
+ if (rimd->has_option("atlas") && rimd->get_option("atlas")) {
+ _mode_changed(EditorTextureImportPlugin::MODE_ATLAS);
+ } else if (rimd->has_option("large") && rimd->get_option("large")) {
+ _mode_changed(EditorTextureImportPlugin::MODE_LARGE);
+ } else {
+ //guess by usage of mipmaps..?
+ _mode_changed(EditorTextureImportPlugin::MODE_TEXTURE_2D);
+ }
+
+ }
+
+ if (mode==EditorTextureImportPlugin::MODE_ATLAS || mode==EditorTextureImportPlugin::MODE_LARGE)
save_path->set_text(p_from);
else
save_path->set_text(p_from.get_base_dir());
@@ -518,6 +559,81 @@ Error EditorTextureImportDialog::import(const String& p_from, const String& p_to
return OK;
}
+void EditorTextureImportDialog::_mode_changed(int p_mode) {
+
+ mode = EditorTextureImportPlugin::Mode(p_mode);
+
+ for(int i=0;i<EditorTextureImportPlugin::MODE_MAX;i++) {
+ mode_check[i]->set_pressed(i==mode);
+ }
+
+ if (p_mode==EditorTextureImportPlugin::MODE_ATLAS) {
+
+ size_label->set_text(TTR("Max Texture Size:"));
+ size->set_val(2048);
+ crop_source->show();
+ size_label->show();
+ size->show();
+
+ texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS|EditorTextureImportPlugin::IMAGE_FLAG_FILTER);
+ texture_options->set_quality(0.7);
+ texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSY);
+ set_title(TTR("Import Textures for Atlas (2D)"));
+
+ } else {
+ crop_source->hide();
+ }
+
+
+ if (p_mode==EditorTextureImportPlugin::MODE_LARGE) {
+
+ size_label->set_text(TTR("Cell Size:"));
+ size->set_val(256);
+ size_label->show();
+ size->show();
+
+ file_select->set_mode(EditorFileDialog::MODE_OPEN_FILE);
+ save_file_select->add_filter("*.ltex;"+TTR("Large Texture"));
+
+ texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS|EditorTextureImportPlugin::IMAGE_FLAG_FILTER);
+ texture_options->set_quality(0.7);
+ texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSLESS);
+ set_title(TTR("Import Large Textures (2D)"));
+ source_label->set_text(TTR("Source Texture"));
+
+ } else {
+ file_select->set_mode(EditorFileDialog::MODE_OPEN_FILES);
+ save_file_select->add_filter("*.tex;"+TTR("Base Atlas Texture"));
+ source_label->set_text(TTR("Source Texture(s)"));
+ }
+
+ if (p_mode==EditorTextureImportPlugin::MODE_TEXTURE_2D) {
+
+ size_label->hide();
+ size->hide();
+
+ texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS|EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_FILTER);
+ texture_options->set_quality(0.7);
+ texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSY);
+ notice_for_2d->show();
+ set_title(TTR("Import Textures for 2D"));
+
+ } else {
+ notice_for_2d->hide();
+ }
+
+ if (p_mode==EditorTextureImportPlugin::MODE_TEXTURE_3D) {
+
+ size_label->hide();
+ size->hide();
+ //texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_);
+ //texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS);
+ texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_FILTER|EditorTextureImportPlugin::IMAGE_FLAG_REPEAT);
+ texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_RAM);
+ set_title(TTR("Import Textures for 3D"));
+ }
+}
+
void EditorTextureImportDialog::_bind_methods() {
@@ -527,28 +643,64 @@ void EditorTextureImportDialog::_bind_methods() {
ObjectTypeDB::bind_method("_import",&EditorTextureImportDialog::_import);
ObjectTypeDB::bind_method("_browse",&EditorTextureImportDialog::_browse);
ObjectTypeDB::bind_method("_browse_target",&EditorTextureImportDialog::_browse_target);
+ ObjectTypeDB::bind_method("_mode_changed",&EditorTextureImportDialog::_mode_changed);
// ADD_SIGNAL( MethodInfo("imported",PropertyInfo(Variant::OBJECT,"scene")) );
}
-EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin* p_plugin, bool p_2d, bool p_atlas,bool p_large) {
+EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin* p_plugin) {
+
+
+
- atlas=p_atlas;
- large=p_large;
plugin=p_plugin;
set_title(TTR("Import Textures"));
+ mode_hb = memnew( HBoxContainer );
+ add_child(mode_hb);
+ set_child_rect(mode_hb);
+
+ VBoxContainer *vbcg = memnew( VBoxContainer);
+
+
+ mode_hb->add_child(vbcg);
+ mode_hb->add_constant_override("separation",15);
+ ButtonGroup *bg = memnew( ButtonGroup );
+ vbcg->add_margin_child("Import Mode",bg);
+
+ for(int i=0;i<EditorTextureImportPlugin::MODE_MAX;i++) {
+ String mode_name[EditorTextureImportPlugin::MODE_MAX]={
+ TTR("2D Texture"),
+ TTR("3D Texture"),
+ TTR("Atlas Texture"),
+ TTR("Large Texture")
+ };
+
+
+ mode_check[i]=memnew(CheckBox);
+ bg->add_child(mode_check[i]);
+ mode_check[i]->set_text(mode_name[i]);
+ mode_check[i]->connect("pressed",this,"_mode_changed",varray(i));
+ }
VBoxContainer *vbc = memnew(VBoxContainer);
- add_child(vbc);
- set_child_rect(vbc);
+ mode_hb->add_child(vbc);
+ vbc->set_h_size_flags(SIZE_EXPAND_FILL);
+ vbc->add_constant_override("separation",4);
+ notice_for_2d = memnew( Label );
+ notice_for_2d->set_text(TTR("NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to the project."));
+ //notice_for_2d->set_custom_minimum_size(Size2(0,50));
+ notice_for_2d->set_autowrap(true);
+ notice_for_2d->hide();
+ vbcg->add_child(notice_for_2d);
+ notice_for_2d->set_v_size_flags(SIZE_EXPAND_FILL);
+ notice_for_2d->set_valign(Label::VALIGN_BOTTOM);
VBoxContainer *source_vb=memnew(VBoxContainer);
- if (large)
- vbc->add_margin_child(TTR("Source Texture:"),source_vb);
- else
- vbc->add_margin_child(TTR("Source Texture(s):"),source_vb);
+ MarginContainer *source_mc = vbc->add_margin_child(TTR("Source Texture(s):"),source_vb);
+
+ source_label = vbc->get_child(source_mc->get_index()-1)->cast_to<Label>();
HBoxContainer *hbc = memnew( HBoxContainer );
source_vb->add_child(hbc);
@@ -560,8 +712,6 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
crop_source->set_pressed(true);
source_vb->add_child(crop_source);
crop_source->set_text(TTR("Crop empty space."));
- if (!p_atlas)
- crop_source->hide();
Button * import_choose = memnew( Button );
@@ -577,13 +727,10 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
size->set_min(128);
size->set_max(16384);
- if (p_atlas) {
- size->set_val(2048);
- vbc->add_margin_child(TTR("Max Texture Size:"),size);
- } else {
- size->set_val(256);
- vbc->add_margin_child(TTR("Cell Size:"),size);
- }
+
+ size->set_val(256);
+ size_mc=vbc->add_margin_child(TTR("Cell Size:"),size);
+ size_label=vbc->get_child(size_mc->get_index()-1)->cast_to<Label>();
save_path = memnew( LineEdit );
@@ -599,10 +746,7 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
file_select = memnew(EditorFileDialog);
file_select->set_access(EditorFileDialog::ACCESS_FILESYSTEM);
add_child(file_select);
- if (!large)
- file_select->set_mode(EditorFileDialog::MODE_OPEN_FILES);
- else
- file_select->set_mode(EditorFileDialog::MODE_OPEN_FILE);
+
file_select->connect("files_selected", this,"_choose_files");
file_select->connect("file_selected", this,"_choose_file");
@@ -611,10 +755,7 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
add_child(save_file_select);
save_file_select->set_mode(EditorFileDialog::MODE_SAVE_FILE);
save_file_select->clear_filters();
- if (large)
- save_file_select->add_filter("*.ltex;"+TTR("Large Texture"));
- else
- save_file_select->add_filter("*.tex;"+TTR("Base Atlas Texture"));
+
save_file_select->connect("file_selected", this,"_choose_save_dir");
save_select = memnew( EditorDirDialog );
@@ -641,36 +782,7 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
vbc->add_child(texture_options);
texture_options->set_v_size_flags(SIZE_EXPAND_FILL);
- if (atlas) {
-
- texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS|EditorTextureImportPlugin::IMAGE_FLAG_FILTER);
- texture_options->set_quality(0.7);
- texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSY);
- //texture_options->show_2d_notice();
- set_title(TTR("Import Textures for Atlas (2D)"));
- } else if (large) {
-
- texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS|EditorTextureImportPlugin::IMAGE_FLAG_FILTER);
- texture_options->set_quality(0.7);
- texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSLESS);
- texture_options->show_2d_notice();
- set_title(TTR("Import Large Textures (2D)"));
-
- } else if (p_2d) {
-
- texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS|EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_FILTER);
- texture_options->set_quality(0.7);
- texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSY);
- texture_options->show_2d_notice();
- set_title(TTR("Import Textures for 2D"));
- } else {
-
- //texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_);
- //texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS);
- texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_FILTER|EditorTextureImportPlugin::IMAGE_FLAG_REPEAT);
- texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_RAM);
- set_title(TTR("Import Textures for 3D"));
- }
+ _mode_changed(EditorTextureImportPlugin::MODE_TEXTURE_3D);
// GLOBAL_DEF("import/shared_textures","res://");
@@ -686,6 +798,8 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
String EditorTextureImportPlugin::get_name() const {
+ return "texture";
+#if 0 //old names, kept for compatibility reference
switch(mode) {
case MODE_TEXTURE_2D: {
@@ -707,34 +821,14 @@ String EditorTextureImportPlugin::get_name() const {
}
- return "";
+ return "";
+#endif
}
String EditorTextureImportPlugin::get_visible_name() const {
- switch(mode) {
- case MODE_TEXTURE_2D: {
-
- return "2D Texture";
- } break;
- case MODE_TEXTURE_3D: {
-
- return "3D Texture";
-
- } break;
- case MODE_ATLAS: {
-
- return "2D Atlas Texture";
- } break;
- case MODE_LARGE: {
-
- return "2D Large Texture";
- } break;
-
- }
-
- return "";
+ return TTR("Texture");
}
void EditorTextureImportPlugin::import_dialog(const String& p_from) {
@@ -1626,15 +1720,93 @@ Vector<uint8_t> EditorTextureImportPlugin::custom_export(const String& p_path, c
return ret;
}
+void EditorTextureImportPlugin::import_from_drop(const Vector<String>& p_drop,const String& p_dest_path) {
+
+ Vector<String> valid;
+
+ List<String> valid_extensions;
+ ImageLoader::get_recognized_extensions(&valid_extensions);
+ for(int i=0;i<p_drop.size();i++) {
+
+ String extension=p_drop[i].extension().to_lower();
+
+ for (List<String>::Element *E=valid_extensions.front();E;E=E->next()) {
+
+ if (E->get()==extension) {
+ valid.push_back(p_drop[i]);
+ break;
+ }
+ }
+ }
+
+ if (valid.size()) {
+ dialog->popup_import();
+ dialog->setup_multiple_import_3d(valid,p_dest_path);
+ }
+}
+
+void EditorTextureImportPlugin::reimport_multiple_files(const Vector<String>& p_list) {
+
+ Vector<String> valid;
+
+
+ bool warning=false;
+ for(int i=0;i<p_list.size();i++) {
+
+ Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(p_list[i]);
+ String type = rimd->get_editor();
+ if (type=="texture" || type.begins_with("texture_")) {
+
+ if ((rimd->has_option("atlas") && rimd->get_option("atlas")) || (rimd->has_option("large") && rimd->get_option("large"))) {
+ warning=true;
+ continue;
+ }
+
+ valid.push_back(p_list[i]);
+ }
+ }
+
+ if (valid.size()) {
+
+ dialog->popup_import(valid[0]);
+
+ Vector<String> sources;
+ for(int i=0;i<valid.size();i++) {
+ int idx;
+ EditorFileSystemDirectory *efsd = EditorFileSystem::get_singleton()->find_file(valid[i],&idx);
+ if (efsd) {
+ for(int j=0;j<efsd->get_source_count(idx);j++) {
+ String file = expand_source_path(efsd->get_source_file(idx,j));
+ if (sources.find(file)==-1) {
+ sources.push_back(file);
+ }
+
+ }
+ }
+ }
+
+ if (sources.size()) {
+
+ dialog->add_sources_and_dest(sources,valid[0].get_base_dir());
+ }
+ }
+}
+
+bool EditorTextureImportPlugin::can_reimport_multiple_files() const {
+
+ return true;
+
+}
+
+
-EditorTextureImportPlugin *EditorTextureImportPlugin::singleton[EditorTextureImportPlugin::MODE_MAX]={NULL,NULL,NULL,NULL};
+EditorTextureImportPlugin *EditorTextureImportPlugin::singleton=NULL;
-EditorTextureImportPlugin::EditorTextureImportPlugin(EditorNode *p_editor, Mode p_mode) {
+EditorTextureImportPlugin::EditorTextureImportPlugin(EditorNode *p_editor) {
- singleton[p_mode]=this;
+ singleton=this;
editor=p_editor;
- mode=p_mode;
- dialog = memnew( EditorTextureImportDialog(this,p_mode==MODE_TEXTURE_2D || p_mode==MODE_ATLAS || p_mode==MODE_LARGE,p_mode==MODE_ATLAS,p_mode==MODE_LARGE) );
+ dialog = memnew( EditorTextureImportDialog(this) );
editor->get_gui_base()->add_child(dialog);
}
diff --git a/tools/editor/io_plugins/editor_texture_import_plugin.h b/tools/editor/io_plugins/editor_texture_import_plugin.h
index cb63ba98c8..5c8abd10a4 100644
--- a/tools/editor/io_plugins/editor_texture_import_plugin.h
+++ b/tools/editor/io_plugins/editor_texture_import_plugin.h
@@ -64,10 +64,10 @@ public:
private:
- Mode mode;
+
EditorNode *editor;
EditorTextureImportDialog *dialog;
- static EditorTextureImportPlugin *singleton[MODE_MAX];
+ static EditorTextureImportPlugin *singleton;
//used by other importers such as mesh
Error _process_texture_data(Ref<ImageTexture> &texture, int format, float quality, int flags,EditorExportPlatform::ImageCompression p_compr,int tex_flags,float shrink);
@@ -75,7 +75,7 @@ private:
public:
- static EditorTextureImportPlugin *get_singleton(Mode p_mode) { return singleton[p_mode]; }
+ static EditorTextureImportPlugin *get_singleton() { return singleton; }
enum ImageFormat {
@@ -100,7 +100,6 @@ public:
IMAGE_FLAG_USE_ANISOTROPY=1024, //convert image to linear
};
- Mode get_mode() const { return mode; }
virtual String get_name() const;
virtual String get_visible_name() const;
virtual void import_dialog(const String& p_from="");
@@ -108,8 +107,11 @@ public:
virtual Error import2(const String& p_path, const Ref<ResourceImportMetadata>& p_from,EditorExportPlatform::ImageCompression p_compr, bool p_external=false);
virtual Vector<uint8_t> custom_export(const String& p_path,const Ref<EditorExportPlatform> &p_platform);
+ virtual void import_from_drop(const Vector<String>& p_drop,const String& p_dest_path);
+ virtual void reimport_multiple_files(const Vector<String>& p_list);
+ virtual bool can_reimport_multiple_files() const;
- EditorTextureImportPlugin(EditorNode* p_editor=NULL,Mode p_mode=MODE_TEXTURE_2D);
+ EditorTextureImportPlugin(EditorNode* p_editor=NULL);
};
@@ -134,7 +136,7 @@ class EditorImportTextureOptions : public VBoxContainer {
HSlider *quality;
Tree *flags;
Vector<TreeItem*> items;
- Label *notice_for_2d;
+
bool updating;
diff --git a/tools/editor/io_plugins/editor_translation_import_plugin.cpp b/tools/editor/io_plugins/editor_translation_import_plugin.cpp
index b57e4cb84c..2b5bd29ac8 100644
--- a/tools/editor/io_plugins/editor_translation_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_translation_import_plugin.cpp
@@ -387,13 +387,33 @@ String EditorTranslationImportPlugin::get_name() const {
}
String EditorTranslationImportPlugin::get_visible_name() const {
- return "Translation";
+ return TTR("Translation");
}
void EditorTranslationImportPlugin::import_dialog(const String& p_from) {
dialog->popup_import(p_from);
}
+
+
+void EditorTranslationImportPlugin::import_from_drop(const Vector<String>& p_drop, const String &p_dest_path) {
+
+
+ for(int i=0;i<p_drop.size();i++) {
+ String ext = p_drop[i].extension().to_lower();
+
+ if (ext=="csv") {
+
+ import_dialog();
+ dialog->_choose_file(p_drop[i]);
+ dialog->_choose_save_dir(p_dest_path);
+ break;
+ }
+ }
+
+
+}
+
Error EditorTranslationImportPlugin::import(const String& p_path, const Ref<ResourceImportMetadata>& p_from) {
Ref<ResourceImportMetadata> from = p_from;
diff --git a/tools/editor/io_plugins/editor_translation_import_plugin.h b/tools/editor/io_plugins/editor_translation_import_plugin.h
index cadcdc03b3..532f2cedcc 100644
--- a/tools/editor/io_plugins/editor_translation_import_plugin.h
+++ b/tools/editor/io_plugins/editor_translation_import_plugin.h
@@ -46,6 +46,7 @@ public:
virtual String get_visible_name() const;
virtual void import_dialog(const String& p_from="");
virtual Error import(const String& p_path, const Ref<ResourceImportMetadata>& p_from);
+ void import_from_drop(const Vector<String>& p_drop, const String &p_dest_path);
EditorTranslationImportPlugin(EditorNode* p_editor);
diff --git a/tools/editor/plugins/animation_player_editor_plugin.cpp b/tools/editor/plugins/animation_player_editor_plugin.cpp
index 343fcce5cd..4bbcb396af 100644
--- a/tools/editor/plugins/animation_player_editor_plugin.cpp
+++ b/tools/editor/plugins/animation_player_editor_plugin.cpp
@@ -1544,7 +1544,7 @@ AnimationPlayerEditorPlugin::AnimationPlayerEditorPlugin(EditorNode *p_node) {
anim_editor = memnew( AnimationPlayerEditor(editor) );
anim_editor->set_undo_redo(editor->get_undo_redo());
- editor->add_bottom_panel_item("Animation",anim_editor);
+ editor->add_bottom_panel_item(TTR("Animation"),anim_editor);
/*
editor->get_viewport()->add_child(anim_editor);
anim_editor->set_area_as_parent_rect();
@@ -1562,5 +1562,3 @@ AnimationPlayerEditorPlugin::AnimationPlayerEditorPlugin(EditorNode *p_node) {
AnimationPlayerEditorPlugin::~AnimationPlayerEditorPlugin()
{
}
-
-
diff --git a/tools/editor/plugins/mesh_editor_plugin.cpp b/tools/editor/plugins/mesh_editor_plugin.cpp
index c4f44f6082..ecf17fec19 100644
--- a/tools/editor/plugins/mesh_editor_plugin.cpp
+++ b/tools/editor/plugins/mesh_editor_plugin.cpp
@@ -71,6 +71,22 @@ void MeshEditor::edit(Ref<Mesh> p_mesh) {
rot_x=0;
rot_y=0;
_update_rotation();
+
+ AABB aabb= mesh->get_aabb();
+ Vector3 ofs = aabb.pos + aabb.size*0.5;
+ aabb.pos-=ofs;
+ float m = MAX(aabb.size.x,aabb.size.y)*0.5;
+ if (m!=0) {
+ m=1.0/m;
+ m*=0.5;
+ //print_line("scale: "+rtos(m));
+ Transform xform;
+ xform.basis.scale(Vector3(m,m,m));
+ xform.origin=-xform.basis.xform(ofs); //-ofs*m;
+ xform.origin.z-=aabb.size.z*2;
+ mesh_instance->set_transform(xform);
+ }
+
}
}
diff --git a/tools/editor/plugins/script_editor_plugin.cpp b/tools/editor/plugins/script_editor_plugin.cpp
index e3c339f1d6..34f7c7b5e8 100644
--- a/tools/editor/plugins/script_editor_plugin.cpp
+++ b/tools/editor/plugins/script_editor_plugin.cpp
@@ -300,6 +300,8 @@ void ScriptTextEditor::_load_theme_settings() {
get_text_edit()->add_color_override("member_variable_color",EDITOR_DEF("text_editor/member_variable_color",Color(0.9,0.3,0.3)));
get_text_edit()->add_color_override("mark_color", EDITOR_DEF("text_editor/mark_color", Color(1.0,0.4,0.4,0.4)));
get_text_edit()->add_color_override("breakpoint_color", EDITOR_DEF("text_editor/breakpoint_color", Color(0.8,0.8,0.4,0.2)));
+ get_text_edit()->add_color_override("search_result_color",EDITOR_DEF("text_editor/search_result_color",Color(0.05,0.25,0.05,1)));
+ get_text_edit()->add_color_override("search_result_border_color",EDITOR_DEF("text_editor/search_result_border_color",Color(0.1,0.45,0.1,1)));
Color keyword_color= EDITOR_DEF("text_editor/keyword_color",Color(0.5,0.0,0.2));
@@ -1405,18 +1407,19 @@ void ScriptEditor::_menu_option(int p_option) {
} break;
case SEARCH_FIND: {
- find_replace_dialog->set_text_edit(current->get_text_edit());
- find_replace_dialog->popup_search();
+ current->get_find_replace_bar()->popup_search();
} break;
case SEARCH_FIND_NEXT: {
- find_replace_dialog->set_text_edit(current->get_text_edit());
- find_replace_dialog->search_next();
+ current->get_find_replace_bar()->search_next();
+ } break;
+ case SEARCH_FIND_PREV: {
+
+ current->get_find_replace_bar()->search_prev();
} break;
case SEARCH_REPLACE: {
- find_replace_dialog->set_text_edit(current->get_text_edit());
- find_replace_dialog->popup_replace();
+ current->get_find_replace_bar()->popup_replace();
} break;
case SEARCH_LOCATE_FUNCTION: {
@@ -2531,6 +2534,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
search_menu->set_text(TTR("Search"));
search_menu->get_popup()->add_item(TTR("Find.."),SEARCH_FIND,KEY_MASK_CMD|KEY_F);
search_menu->get_popup()->add_item(TTR("Find Next"),SEARCH_FIND_NEXT,KEY_F3);
+ search_menu->get_popup()->add_item(TTR("Find Previous"),SEARCH_FIND_PREV,KEY_MASK_SHIFT|KEY_F3);
search_menu->get_popup()->add_item(TTR("Replace.."),SEARCH_REPLACE,KEY_MASK_CMD|KEY_R);
search_menu->get_popup()->add_separator();
search_menu->get_popup()->add_item(TTR("Goto Function.."),SEARCH_LOCATE_FUNCTION,KEY_MASK_SHIFT|KEY_MASK_CMD|KEY_F);
@@ -2635,9 +2639,6 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
tab_container->connect("tab_changed", this,"_tab_changed");
- find_replace_dialog = memnew(FindReplaceDialog);
- add_child(find_replace_dialog);
-
erase_tab_confirm = memnew( ConfirmationDialog );
add_child(erase_tab_confirm);
erase_tab_confirm->connect("confirmed", this,"_close_current_tab");
diff --git a/tools/editor/plugins/script_editor_plugin.h b/tools/editor/plugins/script_editor_plugin.h
index 20e0b621c4..c6610a0209 100644
--- a/tools/editor/plugins/script_editor_plugin.h
+++ b/tools/editor/plugins/script_editor_plugin.h
@@ -144,6 +144,7 @@ class ScriptEditor : public VBoxContainer {
EDIT_CLONE_DOWN,
SEARCH_FIND,
SEARCH_FIND_NEXT,
+ SEARCH_FIND_PREV,
SEARCH_REPLACE,
SEARCH_LOCATE_FUNCTION,
SEARCH_GOTO_LINE,
@@ -184,7 +185,6 @@ class ScriptEditor : public VBoxContainer {
HSplitContainer *script_split;
TabContainer *tab_container;
EditorFileDialog *file_dialog;
- FindReplaceDialog *find_replace_dialog;
GotoLineDialog *goto_line_dialog;
ConfirmationDialog *erase_tab_confirm;
ScriptCreateDialog *script_create_dialog;
diff --git a/tools/editor/plugins/shader_editor_plugin.cpp b/tools/editor/plugins/shader_editor_plugin.cpp
index cc121d6c6f..0ca6a069bc 100644
--- a/tools/editor/plugins/shader_editor_plugin.cpp
+++ b/tools/editor/plugins/shader_editor_plugin.cpp
@@ -90,6 +90,8 @@ void ShaderTextEditor::_load_theme_settings() {
get_text_edit()->add_color_override("member_variable_color",EDITOR_DEF("text_editor/member_variable_color",Color(0.9,0.3,0.3)));
get_text_edit()->add_color_override("mark_color", EDITOR_DEF("text_editor/mark_color", Color(1.0,0.4,0.4,0.4)));
get_text_edit()->add_color_override("breakpoint_color", EDITOR_DEF("text_editor/breakpoint_color", Color(0.8,0.8,0.4,0.2)));
+ get_text_edit()->add_color_override("search_result_color",EDITOR_DEF("text_editor/search_result_color",Color(0.05,0.25,0.05,1)));
+ get_text_edit()->add_color_override("search_result_border_color",EDITOR_DEF("text_editor/search_result_border_color",Color(0.1,0.45,0.1,1)));
Color keyword_color= EDITOR_DEF("text_editor/keyword_color",Color(0.5,0.0,0.2));
@@ -212,18 +214,19 @@ void ShaderEditor::_menu_option(int p_option) {
} break;
case SEARCH_FIND: {
- find_replace_dialog->set_text_edit(current->get_text_edit());
- find_replace_dialog->popup_search();
+ current->get_find_replace_bar()->popup_search();
} break;
case SEARCH_FIND_NEXT: {
- find_replace_dialog->set_text_edit(current->get_text_edit());
- find_replace_dialog->search_next();
+ current->get_find_replace_bar()->search_next();
+ } break;
+ case SEARCH_FIND_PREV: {
+
+ current->get_find_replace_bar()->search_prev();
} break;
case SEARCH_REPLACE: {
- find_replace_dialog->set_text_edit(current->get_text_edit());
- find_replace_dialog->popup_replace();
+ current->get_find_replace_bar()->popup_replace();
} break;
// case SEARCH_LOCATE_SYMBOL: {
@@ -507,6 +510,7 @@ ShaderEditor::ShaderEditor() {
search_menu->set_text(TTR("Search"));
search_menu->get_popup()->add_item(TTR("Find.."),SEARCH_FIND,KEY_MASK_CMD|KEY_F);
search_menu->get_popup()->add_item(TTR("Find Next"),SEARCH_FIND_NEXT,KEY_F3);
+ search_menu->get_popup()->add_item(TTR("Find Previous"),SEARCH_FIND_PREV,KEY_MASK_SHIFT|KEY_F3);
search_menu->get_popup()->add_item(TTR("Replace.."),SEARCH_REPLACE,KEY_MASK_CMD|KEY_R);
search_menu->get_popup()->add_separator();
// search_menu->get_popup()->add_item("Locate Symbol..",SEARCH_LOCATE_SYMBOL,KEY_MASK_CMD|KEY_K);
@@ -516,9 +520,6 @@ ShaderEditor::ShaderEditor() {
tab_container->connect("tab_changed", this,"_tab_changed");
- find_replace_dialog = memnew(FindReplaceDialog);
- add_child(find_replace_dialog);
-
erase_tab_confirm = memnew( ConfirmationDialog );
add_child(erase_tab_confirm);
erase_tab_confirm->connect("confirmed", this,"_close_current_tab");
diff --git a/tools/editor/plugins/shader_editor_plugin.h b/tools/editor/plugins/shader_editor_plugin.h
index e10c10a446..9219a1fbc2 100644
--- a/tools/editor/plugins/shader_editor_plugin.h
+++ b/tools/editor/plugins/shader_editor_plugin.h
@@ -76,6 +76,7 @@ class ShaderEditor : public Control {
EDIT_SELECT_ALL,
SEARCH_FIND,
SEARCH_FIND_NEXT,
+ SEARCH_FIND_PREV,
SEARCH_REPLACE,
//SEARCH_LOCATE_SYMBOL,
SEARCH_GOTO_LINE,
@@ -88,7 +89,6 @@ class ShaderEditor : public Control {
uint64_t idle;
TabContainer *tab_container;
- FindReplaceDialog *find_replace_dialog;
GotoLineDialog *goto_line_dialog;
ConfirmationDialog *erase_tab_confirm;
diff --git a/tools/editor/plugins/sprite_region_editor_plugin.cpp b/tools/editor/plugins/sprite_region_editor_plugin.cpp
index 50afa65263..802a12eedd 100644
--- a/tools/editor/plugins/sprite_region_editor_plugin.cpp
+++ b/tools/editor/plugins/sprite_region_editor_plugin.cpp
@@ -386,6 +386,7 @@ void SpriteRegionEditor::_edit_node()
rect=node->get_region_rect();
dlg_editor->popup_centered_ratio(0.85);
+ dlg_editor->get_ok()->release_focus();
}
inline float _snap_scalar(float p_offset, float p_step, float p_target) {
diff --git a/tools/editor/project_export.cpp b/tools/editor/project_export.cpp
index dea15ebd35..2045f2c030 100644
--- a/tools/editor/project_export.cpp
+++ b/tools/editor/project_export.cpp
@@ -1427,7 +1427,7 @@ ProjectExportDialog::ProjectExportDialog(EditorNode *p_editor) {
sample_vbox->add_margin_child(TTR("Trailing Silence:"),sample_trim);
script_vbox = memnew( VBoxContainer );
- script_vbox->set_name("Script");
+ script_vbox->set_name(TTR("Script"));
sections->add_child(script_vbox);
script_mode = memnew( OptionButton );
script_vbox->add_margin_child(TTR("Script Export Mode:"),script_mode);
diff --git a/tools/editor/project_manager.cpp b/tools/editor/project_manager.cpp
index c06a8cd081..af57d5264e 100644
--- a/tools/editor/project_manager.cpp
+++ b/tools/editor/project_manager.cpp
@@ -1016,7 +1016,7 @@ void ProjectListFilter::_setup_filters() {
filter_option->clear();
filter_option->add_item(TTR("Name"));
- filter_option->add_item("Path");
+ filter_option->add_item(TTR("Path"));
}
void ProjectListFilter::_command(int p_command) {
diff --git a/tools/editor/project_settings.cpp b/tools/editor/project_settings.cpp
index 605b12c879..ed26af29f7 100644
--- a/tools/editor/project_settings.cpp
+++ b/tools/editor/project_settings.cpp
@@ -1761,7 +1761,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
tmc->add_child(translation_remap_options);
translation_remap_options->set_columns(2);
- translation_remap_options->set_column_title(0,"Path");
+ translation_remap_options->set_column_title(0,TTR("Path"));
translation_remap_options->set_column_title(1,TTR("Locale"));
translation_remap_options->set_column_titles_visible(true);
translation_remap_options->set_column_expand(0,true);
@@ -1827,7 +1827,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
autoload_list->set_column_title(0,TTR("Name"));
autoload_list->set_column_expand(0,true);
autoload_list->set_column_min_width(0,100);
- autoload_list->set_column_title(1,"Path");
+ autoload_list->set_column_title(1,TTR("Path"));
autoload_list->set_column_expand(1,true);
autoload_list->set_column_min_width(1,100);
autoload_list->set_column_title(2,TTR("Singleton"));
diff --git a/tools/editor/property_editor.cpp b/tools/editor/property_editor.cpp
index afc6396ab3..ddbaad5ea1 100644
--- a/tools/editor/property_editor.cpp
+++ b/tools/editor/property_editor.cpp
@@ -1673,6 +1673,7 @@ void CustomPropertyEditor::config_value_editors(int p_amount, int p_columns,int
}
+
void CustomPropertyEditor::_bind_methods() {
ObjectTypeDB::bind_method("_focus_enter", &CustomPropertyEditor::_focus_enter);
@@ -1691,6 +1692,7 @@ void CustomPropertyEditor::_bind_methods() {
ObjectTypeDB::bind_method( "_menu_option",&CustomPropertyEditor::_menu_option);
+
ADD_SIGNAL( MethodInfo("variant_changed") );
ADD_SIGNAL( MethodInfo("resource_edit_request") );
}
@@ -2180,6 +2182,11 @@ void PropertyEditor::set_item_text(TreeItem *p_item, int p_type, const String& p
}
}
+ if (!res->is_type("Texture")) {
+ //texture already previews via itself
+ EditorResourcePreview::get_singleton()->queue_edited_resource_preview(res,this,"_resource_preview_done",p_item->get_instance_ID());
+ }
+
}
@@ -3357,6 +3364,10 @@ void PropertyEditor::update_tree() {
} else if (res.is_valid()) {
item->set_tooltip(1,res->get_name()+" ("+res->get_type()+")");
}
+ if (!res->is_type("Texture")) {
+ //texture already previews via itself
+ EditorResourcePreview::get_singleton()->queue_edited_resource_preview(res,this,"_resource_preview_done",item->get_instance_ID());
+ }
}
@@ -3870,6 +3881,29 @@ void PropertyEditor::_filter_changed(const String& p_text) {
update_tree();
}
+
+
+void PropertyEditor::_resource_preview_done(const String& p_path,const Ref<Texture>& p_preview,Variant p_ud) {
+
+ if (p_preview.is_null())
+ return; //don't bother with empty preview
+
+ ObjectID id = p_ud;
+ Object *obj = ObjectDB::get_instance(id);
+
+ if (!obj)
+ return;
+
+ TreeItem *ti = obj->cast_to<TreeItem>();
+
+ ERR_FAIL_COND(!ti);
+
+ int tw = EditorSettings::get_singleton()->get("property_editor/texture_preview_width");
+
+ ti->set_icon(1,p_preview); //should be scaled I think?
+ ti->set_icon_max_width(1,tw);
+ ti->set_text(1,"");
+}
void PropertyEditor::_bind_methods() {
ObjectTypeDB::bind_method( "_item_edited",&PropertyEditor::_item_edited);
@@ -3884,6 +3918,7 @@ void PropertyEditor::_bind_methods() {
ObjectTypeDB::bind_method( "_set_range_def",&PropertyEditor::_set_range_def);
ObjectTypeDB::bind_method( "_filter_changed",&PropertyEditor::_filter_changed);
ObjectTypeDB::bind_method( "update_tree",&PropertyEditor::update_tree);
+ ObjectTypeDB::bind_method( "_resource_preview_done",&PropertyEditor::_resource_preview_done);
ObjectTypeDB::bind_method(_MD("get_drag_data_fw"), &PropertyEditor::get_drag_data_fw);
ObjectTypeDB::bind_method(_MD("can_drop_data_fw"), &PropertyEditor::can_drop_data_fw);
diff --git a/tools/editor/property_editor.h b/tools/editor/property_editor.h
index ac58011d43..a909b5ccd3 100644
--- a/tools/editor/property_editor.h
+++ b/tools/editor/property_editor.h
@@ -131,6 +131,7 @@ class CustomPropertyEditor : public Popup {
void config_value_editors(int p_amount, int p_columns,int p_label_w,const List<String>& p_strings);
void config_action_buttons(const List<String>& p_strings);
+
protected:
void _notification(int p_what);
@@ -231,6 +232,7 @@ class PropertyEditor : public Control {
bool can_drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from) const;
void drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from);
+ void _resource_preview_done(const String& p_path,const Ref<Texture>& p_preview,Variant p_ud);
UndoRedo *undo_redo;
protected:
diff --git a/tools/editor/scene_tree_dock.cpp b/tools/editor/scene_tree_dock.cpp
index 517162b81e..3e36a30361 100644
--- a/tools/editor/scene_tree_dock.cpp
+++ b/tools/editor/scene_tree_dock.cpp
@@ -542,6 +542,10 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
}
} break;
+ case TOOL_MERGE_FROM_SCENE: {
+
+ EditorNode::get_singleton()->merge_from_scene();
+ } break;
case TOOL_NEW_SCENE_FROM: {
Node *scene = editor_data->get_edited_scene_root();
@@ -1696,6 +1700,7 @@ void SceneTreeDock::_tree_rmb(const Vector2& p_menu_pos) {
if (selection.size()==1) {
menu->add_separator();
+ menu->add_item(TTR("Merge From Scene"),TOOL_MERGE_FROM_SCENE);
menu->add_item(TTR("Save Branch as Scene"),TOOL_NEW_SCENE_FROM);
}
menu->add_separator();
diff --git a/tools/editor/scene_tree_dock.h b/tools/editor/scene_tree_dock.h
index 0894dc8ffa..a5866944f3 100644
--- a/tools/editor/scene_tree_dock.h
+++ b/tools/editor/scene_tree_dock.h
@@ -64,6 +64,7 @@ class SceneTreeDock : public VBoxContainer {
TOOL_DUPLICATE,
TOOL_REPARENT,
TOOL_NEW_SCENE_FROM,
+ TOOL_MERGE_FROM_SCENE,
TOOL_MULTI_EDIT,
TOOL_ERASE,
TOOL_BUTTON_MAX
diff --git a/tools/editor/scenes_dock.cpp b/tools/editor/scenes_dock.cpp
index fc0bcfe7b9..a814dc2d9a 100644
--- a/tools/editor/scenes_dock.cpp
+++ b/tools/editor/scenes_dock.cpp
@@ -326,6 +326,10 @@ String ScenesDock::get_selected_path() const {
return "res://"+path;
}
+String ScenesDock::get_current_path() const {
+
+ return path;
+}
void ScenesDock::_thumbnail_done(const String& p_path,const Ref<Texture>& p_preview, const Variant& p_udata) {
@@ -388,6 +392,25 @@ void ScenesDock::_search(EditorFileSystemDirectory *p_path,List<FileInfo>* match
fi.name=file;
fi.type=p_path->get_file_type(i);
fi.path=p_path->get_file_path(i);
+ if (p_path->get_file_meta(i)) {
+ if (p_path->is_missing_sources(i)) {
+ fi.import_status=3;
+ } else if (p_path->have_sources_changed(i)) {
+ fi.import_status=2;
+ } else {
+ fi.import_status=1;
+ }
+ } else {
+ fi.import_status=0;
+ }
+ for(int j=0;j<p_path->get_source_count(i);j++) {
+ String s = EditorImportPlugin::expand_source_path(p_path->get_source_file(i,j));
+ if (p_path->is_source_file_missing(i,j)) {
+ s+=" (Missing)";
+ }
+ fi.sources.push_back(s);
+ }
+
matches->push_back(fi);
if (matches->size()>p_max_items)
return;
@@ -517,6 +540,27 @@ void ScenesDock::_update_files(bool p_keep_selection) {
fi.name=efd->get_file(i);
fi.path=path.plus_file(fi.name);
fi.type=efd->get_file_type(i);
+ if (efd->get_file_meta(i)) {
+ if (efd->is_missing_sources(i)) {
+ fi.import_status=3;
+ } else if (efd->have_sources_changed(i)) {
+ fi.import_status=2;
+ } else {
+ fi.import_status=1;
+ }
+
+ for(int j=0;j<efd->get_source_count(i);j++) {
+ String s = EditorImportPlugin::expand_source_path(efd->get_source_file(i,j));
+ if (efd->is_source_file_missing(i,j)) {
+ s+=" (Missing)";
+ }
+ fi.sources.push_back(s);
+ }
+ } else {
+ fi.import_status=0;
+ }
+
+
filelist.push_back(fi);
}
@@ -533,12 +577,33 @@ void ScenesDock::_update_files(bool p_keep_selection) {
Ref<Texture> type_icon;
- if (has_icon(type,ei)) {
- type_icon=get_icon(type,ei);
- } else {
- type_icon=get_icon(oi,ei);
+ String tooltip=fname;
+
+ if (E->get().import_status==0) {
+
+ if (has_icon(type,ei)) {
+ type_icon=get_icon(type,ei);
+ } else {
+ type_icon=get_icon(oi,ei);
+ }
+ } else if (E->get().import_status==1) {
+ type_icon=get_icon("DependencyOk","EditorIcons");
+ } else if (E->get().import_status==2) {
+ type_icon=get_icon("DependencyChanged","EditorIcons");
+ tooltip+"\nStatus: Needs Re-Import";
+ } else if (E->get().import_status==3) {
+ type_icon=get_icon("ImportFail","EditorIcons");
+ tooltip+"\nStatus: Missing Dependencies";
+ }
+
+ if (E->get().sources.size()) {
+ for(int i=0;i<E->get().sources.size();i++) {
+ tooltip+="\nSource: "+E->get().sources[i];
+ }
}
+
+
if (use_thumbnails) {
files->add_item(fname,file_thumbnail,true);
files->set_item_metadata(files->get_item_count()-1,fp);
@@ -557,6 +622,9 @@ void ScenesDock::_update_files(bool p_keep_selection) {
if (cselection.has(fname))
files->select(files->get_item_count()-1,false);
+ files->set_item_tooltip(files->get_item_count()-1,tooltip);
+
+
}
@@ -997,6 +1065,40 @@ void ScenesDock::_file_option(int p_option) {
case FILE_INFO: {
} break;
+ case FILE_REIMPORT: {
+
+
+ Vector<String> reimport;
+ for(int i=0;i<files->get_item_count();i++) {
+
+ if (!files->is_selected(i))
+ continue;
+
+ String path = files->get_item_metadata(i);
+ reimport.push_back(path);
+ }
+
+ ERR_FAIL_COND(reimport.size()==0);
+
+ Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(reimport[0]);
+ ERR_FAIL_COND(!rimd.is_valid());
+ String editor=rimd->get_editor();
+
+ if (editor.begins_with("texture_")) { //compatibility fix for old texture format
+ editor="texture";
+ }
+
+ Ref<EditorImportPlugin> rimp = EditorImportExport::get_singleton()->get_import_plugin_by_name(editor);
+ ERR_FAIL_COND(!rimp.is_valid());
+
+ if (reimport.size()==1) {
+ rimp->import_dialog(reimport[0]);
+ } else {
+ rimp->reimport_multiple_files(reimport);
+
+ }
+
+ } break;
}
}
@@ -1362,6 +1464,8 @@ void ScenesDock::_files_list_rmb_select(int p_item,const Vector2& p_pos) {
Vector<String> filenames;
bool all_scenes=true;
+ bool all_can_reimport=true;
+ Set<String> types;
for(int i=0;i<files->get_item_count();i++) {
@@ -1381,6 +1485,38 @@ void ScenesDock::_files_list_rmb_select(int p_item,const Vector2& p_pos) {
}
+ EditorFileSystemDirectory *efsd=NULL;
+ int pos;
+
+ efsd = EditorFileSystem::get_singleton()->find_file(path,&pos);
+
+ if (efsd) {
+
+
+ if (!efsd->get_file_meta(pos)) {
+ all_can_reimport=false;
+
+
+ } else {
+ Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(path);
+ if (rimd.is_valid()) {
+
+ String editor=rimd->get_editor();
+ if (editor.begins_with("texture_")) { //compatibility fix for old texture format
+ editor="texture";
+ }
+ types.insert(editor);
+
+ } else {
+ all_can_reimport=false;
+
+ }
+ }
+ } else {
+ all_can_reimport=false;
+
+ }
+
filenames.push_back(path);
if (EditorFileSystem::get_singleton()->get_file_type(path)!="PackedScene")
all_scenes=false;
@@ -1412,12 +1548,34 @@ void ScenesDock::_files_list_rmb_select(int p_item,const Vector2& p_pos) {
file_options->add_item(TTR("Move To.."),FILE_MOVE);
}
+
file_options->add_item(TTR("Delete"),FILE_REMOVE);
+
//file_options->add_item(TTR("Info"),FILE_INFO);
file_options->add_separator();
file_options->add_item(TTR("Show In File Manager"),FILE_SHOW_IN_EXPLORER);
+ if (all_can_reimport && types.size()==1) { //all can reimport and are of the same type
+
+
+ bool valid=true;
+ Ref<EditorImportPlugin> rimp = EditorImportExport::get_singleton()->get_import_plugin_by_name(types.front()->get());
+ if (rimp.is_valid()) {
+
+ if (filenames.size()>1 && !rimp->can_reimport_multiple_files()) {
+ valid=false;
+ }
+ } else {
+ valid=false;
+ }
+
+ if (valid) {
+ file_options->add_separator();
+ file_options->add_item(TTR("Re-Import.."),FILE_REIMPORT);
+ }
+ }
+
file_options->set_pos(files->get_global_pos() + p_pos);
file_options->popup();
diff --git a/tools/editor/scenes_dock.h b/tools/editor/scenes_dock.h
index 1d6d03374a..9a0d6c87cf 100644
--- a/tools/editor/scenes_dock.h
+++ b/tools/editor/scenes_dock.h
@@ -153,6 +153,8 @@ class ScenesDock : public VBoxContainer {
String name;
String path;
StringName type;
+ int import_status; //0 not imported, 1 - ok, 2- must reimport, 3- broken
+ Vector<String> sources;
bool operator<(const FileInfo& fi) const {
return name < fi.name;
@@ -171,6 +173,8 @@ protected:
public:
String get_selected_path() const;
+
+ String get_current_path() const;
void focus_on_filter();
void fix_dependencies(const String& p_for_file);
diff --git a/tools/editor_fonts/droid_sans.ttf b/tools/editor_fonts/droid_sans.ttf
new file mode 100644
index 0000000000..a117feac85
--- /dev/null
+++ b/tools/editor_fonts/droid_sans.ttf
Binary files differ
diff --git a/tools/editor_fonts/source_code_pro.otf b/tools/editor_fonts/source_code_pro.otf
new file mode 100644
index 0000000000..4e3b9d0bcd
--- /dev/null
+++ b/tools/editor_fonts/source_code_pro.otf
Binary files differ
diff --git a/tools/translations/Makefile b/tools/translations/Makefile
new file mode 100644
index 0000000000..30b0832783
--- /dev/null
+++ b/tools/translations/Makefile
@@ -0,0 +1,20 @@
+# Makefile providing various facilities to manage translations
+
+TEMPLATE = tools.pot
+POFILES = $(wildcard *.po)
+LANGS = $(POFILES:%.po=%)
+
+all: update merge
+
+update:
+ @cd ../..; python tools/translations/extract.py
+
+merge:
+ @for po in $(POFILES); do \
+ echo -e "\nMerging $$po..."; \
+ msgmerge -w 80 -C $$po $$po $(TEMPLATE) > "$$po".new; \
+ mv -f "$$po".new $$po; \
+ done
+
+check:
+ @for po in $(POFILES); do msgfmt -c $$po -o /dev/null; done
diff --git a/tools/translations/extract.py b/tools/translations/extract.py
index 195f45f637..ef3ad4da65 100755
--- a/tools/translations/extract.py
+++ b/tools/translations/extract.py
@@ -107,5 +107,5 @@ shutil.move("tools.pot", "tools/translations/tools.pot")
if (os.name == "posix"):
added = subprocess.check_output("git diff tools/translations/tools.pot | grep \+msgid | wc -l", shell = True)
removed = subprocess.check_output("git diff tools/translations/tools.pot | grep \\\-msgid | wc -l", shell = True)
- print("Template changes compared to the staged status:")
- print(" Additions: %s msgids.\n Deletions: %s msgids." % (int(added), int(removed)))
+ print("\n# Template changes compared to the staged status:")
+ print("# Additions: %s msgids.\n# Deletions: %s msgids." % (int(added), int(removed)))
diff --git a/tools/translations/fr.po b/tools/translations/fr.po
new file mode 100644
index 0000000000..d7678f0c48
--- /dev/null
+++ b/tools/translations/fr.po
@@ -0,0 +1,5794 @@
+# French translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+# Hugo Locurcio <hugo.l@openmailbox.org>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: Hugo Locurcio <hugo.l@openmailbox.org>\n"
+"Language-Team: French\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: scene/audio/sample_player.cpp scene/2d/sample_player_2d.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+"Un CollisionShape n'est utile que lorsqu'il est enfant d'un nœud dérivé de "
+"CollisionObject, comme Area, StaticBody, RigidBody, KinematicBody, etc."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Afin qu'une CollisionShape fonctionne, il lui faut une forme. Créez une "
+"ressource de forme pour cette CollisionShape !"
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+"Un CollisionPolygon n'est utile que lorsqu'il est enfant d'un nœud dérivé de "
+"CollisionObject, comme Area, StaticBody, RigidBody, KinematicBody, etc."
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr "Un CollisionPolygon vide n'a pas d'effet sur les collisions."
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+"Seul un WorldEnvironnement ne peut être utilisé par scène (ou ensemble de "
+"scènes instanciées)."
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+"Une ressource de type SampleLibrary doit être créée ou définie dans la "
+"propriété « samples » afin que le SpatialSamplePlayer joue des sons."
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+"Une ressource de type NavigationMesh doit être définie ou créée pour que ce "
+"nœud fonctionne."
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. It "
+"only provides navigation data."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr ""
+"La propriété Path doit pointer à un nœud de type Particles2D valide pour "
+"fonctionner."
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+"Le nœud ParallaxLayer ne fonctionne que lorsqu'il s'agit d'un enfant d'un "
+"nœud de type ParallaxBackground."
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+"Un polygone d'occultation doit être défini (ou dessiné) afin que cet "
+"occulteur ait un effet."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+"Le polygone d'occultation pour cet occulteur est vide. Veuillez dessiner un "
+"polygone !"
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport must "
+"be set to 'render target' mode."
+msgstr ""
+"La propriété Path doit pointer vers un nœud de type Viewport valide pour "
+"fonctionner. Ce Viewport doit utiliser le mode « render target »."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in order "
+"for this sprite to work."
+msgstr ""
+"Le Viewport défini dans la propriété Path doit utiliser le mode « render "
+"target » pour que cette sprite fonctionne."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"Un CollisionPolygon2D n'est utile que lorsqu'il est enfant d'un nœud dérivé "
+"de CollisionObject2D, comme Area2D, StaticBody2D, RigidBody2D, "
+"KinematicBody2D, etc."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr "Un CollisionPolygon2D vide n'a pas d'effet sur les collisions."
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+"Seul un nœud de type CanvasModulate est autorisé par scène (ou ensemble de "
+"scènes instanciées). Le premier créé fonctionnera, les autres seront ignorés."
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+"La propriété Path doit pointer vers un nœud de type Node2D valide pour "
+"fonctionner."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"Un CollisionShape2D n'est utile que lorsqu'il est enfant d'un nœud dérivé de "
+"CollisionObject2D, comme Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, "
+"etc."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Une forme doit être créée afin qu'une CollisionShape2D fonctionne. Veuillez "
+"créer une ressource de forme !"
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+"Une texture avec la forme de la lumière doit être fournie dans la propriété « "
+"texture »."
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will hide "
+"upon running."
+msgstr ""
+"Les pop-ups seront cachés par défaut jusqu'à ce que vous appelez une fonction "
+"popup() ou une des fonctions popup*(). Les rendre visibles pour l'édition ne "
+"pose pas de problème, mais elles seront cachées lors de l'exécution."
+
+#: scene/gui/text_edit.cpp scene/gui/line_edit.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Cut"
+msgstr "Couper"
+
+#: scene/gui/text_edit.cpp scene/gui/line_edit.cpp
+#: tools/editor/resources_dock.cpp tools/editor/property_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Copy"
+msgstr "Copier"
+
+#: scene/gui/text_edit.cpp scene/gui/line_edit.cpp
+#: tools/editor/resources_dock.cpp tools/editor/property_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste"
+msgstr "Coller"
+
+#: scene/gui/text_edit.cpp scene/gui/line_edit.cpp
+#: tools/editor/project_export.cpp tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Select All"
+msgstr "Tout sélectionner"
+
+#: scene/gui/text_edit.cpp scene/gui/line_edit.cpp
+#: tools/editor/script_editor_debugger.cpp tools/editor/editor_log.cpp
+#: tools/editor/property_editor.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear"
+msgstr "Effacer"
+
+#: scene/gui/text_edit.cpp scene/gui/line_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Undo"
+msgstr "Annuler"
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Script Options"
+msgstr "Modifier les options du script"
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr "Veuillez exporter en dehors du dossier du projet !"
+
+#: tools/editor/project_export.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Error exporting project!"
+msgstr "Erreur d'exportation du projet !"
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr "Erreur d'écriture du PCK du projet !"
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr "Pas d'exportateur pour la plate-forme « %s » actuellement."
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr "Inclure"
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr "Changer le groupe d'images"
+
+#: tools/editor/project_export.cpp tools/editor/groups_editor.cpp
+msgid "Group name can't be empty!"
+msgstr "Le nom du groupe ne peut pas être vide !"
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr "Caractère invalide dans le nom du groupe !"
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr "Le nom du groupe existe déjà !"
+
+#: tools/editor/project_export.cpp tools/editor/project_settings.cpp
+#: tools/editor/groups_editor.cpp tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Add Image Group"
+msgstr "Ajouter un groupe d'images"
+
+#: tools/editor/project_export.cpp tools/editor/scenes_dock.cpp
+#: tools/editor/editor_node.cpp tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Delete Image Group"
+msgstr "Supprimer le groupe d'images"
+
+#: tools/editor/project_export.cpp tools/editor/editor_import_export.cpp
+msgid "Error saving atlas:"
+msgstr "Erreur de sauvegarde de l'atlas :"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr "Aperçu de l'atlas"
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr "Paramètres d'exportation du projet"
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr "Cible"
+
+#: tools/editor/project_export.cpp tools/editor/editor_node.cpp
+msgid "Export to Platform"
+msgstr "Exporter vers la plate-forme"
+
+#: tools/editor/project_export.cpp tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Options"
+msgstr "Options"
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr "Ressources"
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr "Exporter les ressources sélectionnées (y compris les dépendences)."
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr "Exporter toutes les ressources dans le projet."
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr "Exporter tous les fichiers dans le répertoire du projet."
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr "Mode d'exportation :"
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr "Ressources à exporter :"
+
+#: tools/editor/project_export.cpp tools/editor/plugins/script_editor_plugin.cpp
+msgid "File"
+msgstr "Fichier"
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr "Action"
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+"Filtres à utiliser pour l'exportation des fichiers (séparés par des virgules, "
+"par exemple : *.json, *.txt) :"
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+"Filtres à utiliser pour exclure des fichiers (séparés par des virgules, par "
+"exemple: *.json, *.txt) :"
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr "Convertir les scènes en format texte au format binaire à l'exportation."
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr "Images"
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr "Garder les originaux"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr "Compression pour le disque (avec perte, WebP)"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr "Compression pour la RAM (BC/PVRTC/ETC)"
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr "Convertir les images (*.png) :"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr "Qualité de la compression pour le disque (avec perte) :"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr "Réduire toutes les images :"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr "Compresser les formats :"
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr "Groupes d'images"
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr "Groupes :"
+
+#: tools/editor/project_export.cpp tools/editor/editor_node.cpp
+msgid "Default"
+msgstr "Par défaut"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr "Compression pour le disque"
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr "Compression pour la RAM"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr "Mode de compression :"
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr "Qualité de compression avec perte :"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr "Atlas :"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr "Réduire de :"
+
+#: tools/editor/project_export.cpp tools/editor/plugins/camera_editor_plugin.cpp
+msgid "Preview Atlas"
+msgstr "Aperçu de l'atlas"
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr "Filtre d'image :"
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr "Images :"
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr "Ne rien sélectionner"
+
+#: tools/editor/project_export.cpp
+msgid "Group"
+msgstr "Groupe"
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr "Échantillons"
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr "Mode de conversion des échantillons (fichiers .wav) :"
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr "Conserver"
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr "Compresser (RAM - IMA-ADPCM)"
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr "Limite de taux d'échantillonage (Hz) :"
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr "Rogner"
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr "Silence de fin :"
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr "Mode d'exportation des scripts :"
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr "Texte"
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr "Compilé"
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr "Chiffré (insérez une clé ci-dessous)"
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr "Clé de chiffrement des scripts (256 bits en hexadécimal) :"
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr "Exporter le PCK/ZIP"
+
+#: tools/editor/project_export.cpp tools/editor/editor_node.cpp
+msgid "Export Project"
+msgstr "Exporter le projet"
+
+#: tools/editor/project_export.cpp tools/editor/editor_node.cpp
+msgid "Password:"
+msgstr "Mot de passe :"
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr "Exporter le PCK du projet"
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr "Exporter..."
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr "Exportation de projet"
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr "Pré-réglage d'exportation :"
+
+#: tools/editor/project_export.cpp
+msgid "Export"
+msgstr "Exporter"
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Aller à la ligne"
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Numéro de ligne :"
+
+#: tools/editor/code_editor.cpp tools/editor/project_settings.cpp
+#: tools/editor/addon_editor_plugin.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search"
+msgstr "Rechercher"
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
+msgstr "Trouver"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr "Remplacer"
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr "Suivant"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr "%d occurrence(s) remplacée(s)."
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr "Non trouvé !"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr "Remplacer par"
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "Mots entiers"
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr "Sensible à la casse"
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr "À l'envers"
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "Avertir lors du remplacement"
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "Sélection uniquement"
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr "Passer"
+
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "Ligne :"
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr "Colonne :"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "Connecter au nœud :"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Binds (Extra Params):"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Add"
+msgstr "Ajouter"
+
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/project_manager.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove"
+msgstr "Supprimer"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path To Node:"
+msgstr "Chemin vers le nœud :"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method In Node:"
+msgstr "Méthode dans le nœud :"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "Créer une fonction"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "Différé"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr "One-shot"
+
+#: tools/editor/connections_dialog.cpp tools/editor/settings_config_dialog.cpp
+#: tools/editor/import_settings.cpp tools/editor/run_settings_dialog.cpp
+#: tools/editor/project_settings.cpp tools/editor/groups_editor.cpp
+#: tools/editor/property_editor.cpp tools/editor/addon_editor_plugin.cpp
+#: tools/editor/call_dialog.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Close"
+msgstr "Fermer"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Connecter"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "Connecter « %s » à « %s »"
+
+#: tools/editor/connections_dialog.cpp tools/editor/animation_editor.cpp
+#: tools/editor/project_manager.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Subscription"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "Connecter..."
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Déconnecter..."
+
+#: tools/editor/connections_dialog.cpp
+msgid "Edit Connections.."
+msgstr "Modifier les connexions..."
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connections:"
+msgstr "Connexions :"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr "Sélectionner les nœuds à importer"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr "Chemin de la scène :"
+
+#: tools/editor/editor_sub_scene.cpp tools/editor/editor_node.cpp
+#: tools/editor/project_manager.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Import From Node:"
+msgstr "Importer à partir d'un nœud :"
+
+#: tools/editor/settings_config_dialog.cpp tools/editor/editor_node.cpp
+msgid "Editor Settings"
+msgstr "Paramètres de l'éditeur"
+
+#: tools/editor/settings_config_dialog.cpp tools/editor/project_settings.cpp
+msgid "General"
+msgstr "Général"
+
+#: tools/editor/settings_config_dialog.cpp tools/editor/quick_open.cpp
+#: tools/editor/addon_editor_plugin.cpp tools/editor/editor_node.cpp
+#: tools/editor/editor_help.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search:"
+msgstr "Rechercher :"
+
+#: tools/editor/settings_config_dialog.cpp tools/editor/project_settings.cpp
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Plugins"
+msgstr "Extensions"
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugin List:"
+msgstr "Liste d'extensions :"
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "Choisir un répertoire"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
+msgstr "Créer un dossier"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_plugin_settings.cpp
+#: tools/editor/editor_file_dialog.cpp tools/editor/project_manager.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Name:"
+msgstr "Nom :"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
+msgstr "Impossible de créer le dossier."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "Choisir"
+
+#: tools/editor/editor_file_system.cpp
+msgid "Cannot go into subdir:"
+msgstr "Impossible d'aller dans le sous-répertoire :"
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr "Scanner les sources"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Rechercher un remplacement pour :"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "Dépendances pour :"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"La scène « %s » est actuellement en cours de modification.\n"
+"Les changements n'auront pas d'effet avant un rechargement."
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"Le ressource « %s » est utilisée.\n"
+"Les changements n'auront pas d'effet avant un rechargement."
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "Dépendances"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "Dépendances :"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "Corriger les dép. cassées"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Éditeur de dépendances"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "Propriétaires de :"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp tools/editor/scenes_dock.cpp
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open Anyway"
+msgstr "Ouvrir quand même"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "Quelle action doit être prise ?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "Corriger les dépendances"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "Erreurs de chargement !"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr ""
+"Supprimer de manière permanente %d objet(s) ? (Impossible de revenir en "
+"arrière !)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "Possède"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "Ressources sans propriété explicite :"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr "Explorateur de ressources orphelines"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "Supprimer les fichiers sélectionnés ?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete"
+msgstr "Supprimer"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr "Changer le rayon d'une lumière"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr "Changer le champ de vision d'une caméra"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr "Changer la taille d'une caméra"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr "Changer le rayon d'une forme en sphère"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr "Changer les extents d'une forme en boîte"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr "Nom de classe parent invalide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr "Caractères valides :"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr "Nom de classe invalide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr "Nom valide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr "N/A"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr "Le nom de classe est invalide !"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr "Le nom de classe parent est invalide !"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr "Chemin invalide !"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr "Impossible de créer le script dans le système de fichiers."
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr "Le chemin est vide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr "Le chemin n'est pas local"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr "Chemin de base invalide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr "Le fichier existe"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr "Extension invalide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr "Chemin valide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr "Nom de classe :"
+
+#: tools/editor/script_create_dialog.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/editor_help.cpp
+msgid "Inherits:"
+msgstr "Hérite de :"
+
+#: tools/editor/script_create_dialog.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Language"
+msgstr "Langage"
+
+#: tools/editor/script_create_dialog.cpp tools/editor/property_editor.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Error!"
+msgstr "Erreur !"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr "Script intégré"
+
+#: tools/editor/script_create_dialog.cpp tools/editor/project_settings.cpp
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Path:"
+msgstr "Chemin :"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr "Créer le script de nœud"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Créer"
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "Désactivé"
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "Toute la sélection"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
+msgstr "Linéaire"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "Constante"
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr "In"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr "Out"
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr "In-out"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr "Out-in"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "Transitions"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "Optimiser l'animation"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "Nettoyer l'animation"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Créer une NOUVELLE piste pour %s et insérer une clé ?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Créer %d NOUVELLES pistes et insérer des clés ?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "Longueur (s) :"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "Longueur de l'animation (en secondes)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "Pas (s) :"
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "Optimiseur d'animation"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "Optimiser"
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr "Clé"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr "Transition"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "Ratio d'échelle :"
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "Appeler des fonctions dans quel nœud ?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "Supprimer les clés invalides"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "Supprimer les pistes vides et non résulues"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "Nettoyer toutes les animations"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "Nettoyer les animations (PAS DE RETOUR EN ARRIÈRE !)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "Nettoyer"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr "Octets :"
+
+#: tools/editor/script_editor_debugger.cpp tools/editor/project_settings.cpp
+#: tools/editor/scene_tree_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Type:"
+msgstr "Type :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr "Avertissement"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr "Erreur"
+
+#: tools/editor/script_editor_debugger.cpp tools/editor/editor_help.cpp
+msgid "Description:"
+msgstr "Description :"
+
+#: tools/editor/script_editor_debugger.cpp tools/editor/editor_profiler.cpp
+msgid "Time:"
+msgstr "Temps :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr "Erreur :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr "Source :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr "Fonction :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr "Erreurs"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debugger"
+msgstr "Débogueur"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr "Processus enfant connecté"
+
+#: tools/editor/script_editor_debugger.cpp tools/editor/editor_file_dialog.cpp
+msgid "File:"
+msgstr "Fichier :"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Step Into"
+msgstr "Rentrer"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Step Over"
+msgstr "Sortir"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Break"
+msgstr "Mettre en pause"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Continue"
+msgstr "Continuer"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr "Inspecter l'instance précédente"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr "Inspecter l'instance suivante"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr "Variable"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr "Erreurs :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr "Trace de pile (si applicable) :"
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote Inspector"
+msgstr "Inspecteur"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr "Moniteur"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr "Valeur"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr "Liste de l'utilisation de la mémoire vidéo par ressource :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr "Total :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr "Mémoire vidéo"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr "Chemin de la ressource"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr "Type"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Format"
+msgstr "Format"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr "Utilisation"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr "Control cliqué :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr "Type de Control cliqué :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr "Racine pour l'édition en direct :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr "Définir depuis l'arbre"
+
+#: tools/editor/import_settings.cpp
+msgid "Imported Resources"
+msgstr "Ressources importées"
+
+#: tools/editor/import_settings.cpp tools/editor/editor_reimport_dialog.cpp
+#: tools/editor/editor_node.cpp
+msgid "Re-Import"
+msgstr "Ré-importer"
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr "Mode d'exécution :"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr "Scène actuelle"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr "Scène principale"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr "Arguments de la scène principale :"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr "Action invalide (tout passe, sauf « / » ou « : »)."
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr "L'action « %s » existe déjà !"
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr "Renommer l'événement d'action d'entrée"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr "Ajouter un événement d'action d'entrée"
+
+#: tools/editor/project_settings.cpp
+msgid "Meta+"
+msgstr "Méta+"
+
+#: tools/editor/project_settings.cpp
+msgid "Shift+"
+msgstr "Maj+"
+
+#: tools/editor/project_settings.cpp
+msgid "Alt+"
+msgstr "Alt+"
+
+#: tools/editor/project_settings.cpp
+msgid "Control+"
+msgstr "Contrôle+"
+
+#: tools/editor/project_settings.cpp
+msgid "Press a Key.."
+msgstr "Appuyez sur une touche..."
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr "Index du bouton de la souris :"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr "Bouton gauche"
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr "Bouton droite"
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr "Bouton du milieu"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr "Molette vers le haut"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr "Molette vers le bas"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr "Bouton 6"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr "Bouton 7"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr "Bouton 8"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr "Bouton 9"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr "Index de l'axe du joystick :"
+
+#: tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr "Axe"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr "Index du bouton du joystick :"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr "Ajouter une action d'entrée"
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr "Effacer l'événement d'action d'entrée"
+
+#: tools/editor/project_settings.cpp
+msgid "Device"
+msgstr "Périphérique"
+
+#: tools/editor/project_settings.cpp
+msgid "Button"
+msgstr "Bouton"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr "Bouton gauche."
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr "Bouton droite."
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr "Bouton du milieu."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr "Molette vers le haut."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr "Molette vers le bas."
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr "Mode persistant"
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr "Erreur d'enregistrement des paramètres."
+
+#: tools/editor/project_settings.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings saved OK."
+msgstr "Paramètres enregistrés avec succès."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr "Ajouter une traduction"
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr "Activer les variables globales AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name."
+msgstr "Nom invalide."
+
+#: tools/editor/project_settings.cpp
+msgid "Valid characters:"
+msgstr "Caractères valides :"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+"Nom invalide. Le nom ne doit pas rentrer en conflit avec le nom d'une classe "
+"moteur existante."
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+"Nom invalide. Le nom ne doit pas rentrer en conflit avec le nom d'un type "
+"intégré au moteur."
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+"Nom invalide. Le nom ne doit pas rentrer en conflit avec le nom d'une "
+"constante globale."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Autoload"
+msgstr "Ajouter un AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Autoload"
+msgstr "Supprimer l'AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Move Autoload"
+msgstr "Déplacer l'AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr "Supprimer la traduction"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr "Ajouter un chemin remappé"
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Enable"
+msgstr "Activer"
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr "Paramètres du projet (engine.cfg)"
+
+#: tools/editor/project_settings.cpp tools/editor/addon_editor_plugin.cpp
+msgid "Category:"
+msgstr "Catégorie :"
+
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
+msgstr "Propriété :"
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr "Supprimer"
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr "Copier vers la plate-forme..."
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr "Carte d'entrée"
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr "Action :"
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr "Périphérique :"
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr "Index :"
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr "Localisation"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr "Traductions"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr "Traductions :"
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr "Ajouter..."
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr "Remaps"
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr "Ressources :"
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr "Remaps par langue :"
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr "Langue"
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr "AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Node Name:"
+msgstr "Nom de nœud :"
+
+#: tools/editor/project_settings.cpp
+msgid "List:"
+msgstr "Liste :"
+
+#: tools/editor/project_settings.cpp
+msgid "Name"
+msgstr "Nom"
+
+#: tools/editor/project_settings.cpp
+msgid "Singleton"
+msgstr "Singleton"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr ""
+"Cet objet ne peut être rendu visible car son parent est caché. Affichez le "
+"parent d'abord."
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr "Afficher/cacher le Spatial"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr "Afficher/cacher le CanvasItem"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr "Instance :"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr "Nom de nœud invalide, les caractères suivants ne sont pas autorisés :"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr "Renommer le nœud"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
+msgstr "Enfants modifiables"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr "Charger en tant que fictif"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr "Ouvrir dans l'éditeur"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr "Effacer l'héritage"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr "Effacer l'héritage ? (Pas de retour en arrière !)"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr "Effacer !"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr "Sélectionner un nœud"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+#, fuzzy
+msgid "Frame %"
+msgstr "Ajouter une image"
+
+#: tools/editor/editor_profiler.cpp
+#, fuzzy
+msgid "Fixed Frame %"
+msgstr "Ajouter une image"
+
+#: tools/editor/editor_profiler.cpp
+#, fuzzy
+msgid "Inclusive"
+msgstr "Inclure"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: tools/editor/quick_open.cpp tools/editor/editor_help.cpp
+#: tools/editor/create_dialog.cpp tools/editor/plugins/script_editor_plugin.cpp
+msgid "Matches:"
+msgstr "Correspondances :"
+
+#: tools/editor/quick_open.cpp
+msgid "Open"
+msgstr "Ouvrir"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr "Veuillez attendre la fin du scan."
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr "La scène actuelle doit être enregistrée afin de pouvoir ré-importer."
+
+#: tools/editor/editor_reimport_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save & Re-Import"
+msgstr "Enregistrer et ré-importer"
+
+#: tools/editor/editor_reimport_dialog.cpp tools/editor/editor_node.cpp
+msgid "Re-Importing"
+msgstr "Ré-importation"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr "Ré-importer les ressources modifiées"
+
+#: tools/editor/resources_dock.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Error saving resource!"
+msgstr "Erreur d'enregistrement de la ressource !"
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr "Créer une nouvelle ressource"
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr "Ouvrir la ressource"
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr "Enregistrer la ressource"
+
+#: tools/editor/resources_dock.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save Resource As.."
+msgstr "Enregistrer la ressource sous..."
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr "Outils des ressources"
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr "Rendre local"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr "Écrivez votre code dans la méthode _run()."
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr "Il y a déjà une scène éditée."
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr "Impossible d'instancier le script :"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr "Avez-vous oublié le mot-clé « tool » ?"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr "Impossible d'exécuter le script :"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr "Avez-vous oublié la méthode « _run » ?"
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr "Mise à jour de la scène"
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr "Stockage des modifications locales..."
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr "Mise à jour de la scène..."
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr "Re-parenter le nœud"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr "Localisation pour le re-parentage (sélectionnez le nouveau parent) :"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr "Conserver la transformation globale"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent"
+msgstr "Re-parenter"
+
+#: tools/editor/editor_plugin_settings.cpp tools/editor/editor_node.cpp
+msgid "Update"
+msgstr "Mettre à jour"
+
+#: tools/editor/scenes_dock.cpp tools/editor/editor_file_dialog.cpp
+msgid "Favorites:"
+msgstr "Favoris :"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr "Fichiers source et destination identiques, rien à faire."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr "Chemins source et destination identiques, rien à faire."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr "Impossible de déplacer des répertoires vers eux-mêmes."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't operate on '..'"
+msgstr "Impossible d'opérer sur « .. »"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr "Entrez un nouveau nom et chemin pour :"
+
+#: tools/editor/scenes_dock.cpp
+msgid "No files selected!"
+msgstr "Pas de fichiers sélectionnés !"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance"
+msgstr "Instance"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Edit Dependencies.."
+msgstr "Modifier les dépendances..."
+
+#: tools/editor/scenes_dock.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Owners.."
+msgstr "Voir les propriétaires..."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Rename or Move.."
+msgstr "Renommer ou déplacer..."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move To.."
+msgstr "Déplacer vers..."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Info"
+msgstr "Information"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Show In File Manager"
+msgstr "Montrer dans le gestionnaire de fichiers"
+
+#: tools/editor/scenes_dock.cpp tools/editor/editor_node.cpp
+msgid "Re-Import.."
+msgstr "Ré-importer..."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Previous Directory"
+msgstr "Répertoire précédent"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Next Directory"
+msgstr "Répertoire suivant"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr "Re-scanner le système de fichiers"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr "Basculer l'état favori du dossier"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr "Instancie la/les scènes sélectionnées en tant qu'enfant du nœud."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move"
+msgstr "Déplacer"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
+msgstr "Ajouté :"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
+msgstr "Supprimé :"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr "Stockage du fichier :"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr "Empaquetage"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr "Exportation pour %s"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr "Configuration..."
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr "Par défaut (même que l'éditeur)"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr "Le fichier existe, l'écraser ?"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr "Tous les fichiers reconnus"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr "Tous les fichiers (*)"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Save"
+msgstr "Enregistrer"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr "Enregistrer un fichier"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "Récents :"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "Répertoires et fichiers :"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "Aperçu :"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr "Filtre :"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "Utilisez une extension valide."
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr "Ajouter au groupe"
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr "Supprimer du groupe"
+
+#: tools/editor/groups_editor.cpp
+msgid "Group Editor"
+msgstr "Éditeur de groupes"
+
+#: tools/editor/groups_editor.cpp
+msgid "Node Group(s)"
+msgstr "Groupes de nœuds"
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr "Pré-réglage..."
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr "Ease in"
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr "Ease out"
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr "Zéro"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr "Ease in-out"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr "Ease out-in"
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr "Fichier..."
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr "Répertoire..."
+
+#: tools/editor/property_editor.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "New"
+msgstr "Nouveau"
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr "Charger"
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr "Assigner"
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr "Erreur de chargement du fichier : ce n'est pas une ressource !"
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr "Impossible de charger l'image"
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr "Bit %d, valeur %d."
+
+#: tools/editor/property_editor.cpp tools/editor/editor_help.cpp
+msgid "Class:"
+msgstr "Classe :"
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr "Activé"
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr "Définir"
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr "Propriétés :"
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr "Global"
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr "Sections :"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Import"
+msgstr "Importer"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Sort:"
+msgstr "Trier :"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Reverse"
+msgstr "Inverser"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "All"
+msgstr "Tout"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Site:"
+msgstr "Site :"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr "Fichier ZIP de données"
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr "Importation :"
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr "Nœud à partir d'une scène"
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr "Je vois..."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr "Impossible d'ouvrir le fichier pour écriture :"
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr "Format de fichier demandé inconnu :"
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "Erreur lors de l'enregistrement."
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "Enregistrement de la scène"
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "Analyse"
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr "Création de l'aperçu"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+"Impossible d'enregistrer la scène. Les dépendances (instances) n'ont sans "
+"doute pas pu être satisfaites."
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr "Impossible de charger la ressource."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr "Impossible de charger la MeshLibrary pour fusion !"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr "Erreur d'enregistrement de la MeshLibrary !"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr "Impossible de charger la TileSet pour fusion !"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr "Erreur d'enregistrement de la TileSet !"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr "Impossible d'ouvrir le ZIP de modèles d'exportation."
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr "Chargement des modèles d'exportation"
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr "Erreur d'enregistrement de la disposition !"
+
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr "Disposition de l'éditeur par défaut remplacée."
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr "Nom de la disposition non trouvé !"
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr "Disposition par défaut remise à zéro."
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr "Copier paramètres"
+
+#: tools/editor/editor_node.cpp
+msgid "Set Params"
+msgstr "Définir paramètres"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr "Coller la ressource"
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr "Copier la ressource"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr "Rendre intégré"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr "Rendre les sous-ressources uniques"
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr "Il n'y a pas de scène définie pour être lancée."
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+"La scène actuelle n'a jamais été sauvegardée, veuillez la sauvegarder avant "
+"de la lancer."
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr "Impossible de démarrer le sous-processus !"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr "Ouvrir une scène"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr "Ouvrir scène de base"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr "Ouvrir une scène rapidement..."
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr "Ouvrir un script rapidement..."
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr "Oui"
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr "Fermer la scène ? (les modifications non sauvegardées seront perdues)"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr "Enregistrer la scène sous..."
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr ""
+"Cette scène n'a jamais été enregistrée. L'enregistrer avant de la lancer ?"
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr "Veuillez enregistrer la scène d'abord."
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr "Enregistrer les chaînes traduisibles"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr "Exporter une bibliothèque de maillages"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr "Exporter un ensemble de tuiles"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr "Quitter"
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr "Quitter l'éditeur ?"
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr "La scène actuelle n'est pas enregistrée. Ouvrir quand même ?"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr "Impossible de recharger une scène qui n'a jamais été sauvegardée."
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr "Réinitialiser"
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr "Cette action ne peut être annulée. Réinitialiser quand même ?"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr "Lancer une scène rapidement..."
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr "Oups"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to open "
+"the scene, then save it inside the project path."
+msgstr ""
+"Erreur lors du chargement de la scène, elle doit être dans le chemin du "
+"projet. Utilisez « Importer » pour ouvrir la scène, puis enregistrez-la dans "
+"le répertoire du projet."
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr "Erreur lors du chargement de la scène."
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr "La scène « %s » a des dépendences cassées :"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr "Enregistrer la disposition"
+
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr "Supprimer la disposition"
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr "Basculer entre les onglets de scène"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr "%d fichier(s) supplémentaire(s)"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr "%s fichier(s) ou dossier(s) supplémentaire(s)"
+
+#: tools/editor/editor_node.cpp
+msgid "Scene"
+msgstr "Scène"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr "Aller à la scène ouverte précédemment."
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr "Opérations avec les fichiers de scène."
+
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
+msgstr "Nouvelle scène"
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr "Nouvelle scène héritée..."
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr "Ouvrir une scène..."
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr "Enregistrer la scène"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr "Fermer la scène"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr "Fermer, aller à la scène précédente"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr "Fichiers récents"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Search File.."
+msgstr "Recherche rapide d'un fichier..."
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr "Convertir vers..."
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr "Chaînes traduisibles..."
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr "MeshLibrary..."
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr "TileSet..."
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Redo"
+msgstr "Refaire"
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr "Lancer le script"
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr "Paramètres du projet"
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr "Réinitialiser la scène"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr "Quitter vers la liste des projets"
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr "Importer des ressources dans le projet."
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr "Outils divers liés au projet ou à la scène."
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr "Outils"
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr "Exporter le projet vers diverses plate-formes."
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project (F5)."
+msgstr "Jouer le projet (F5)."
+
+#: tools/editor/editor_node.cpp
+#, fuzzy
+msgid "Pause the scene"
+msgstr "Jouer une scène personnalisée"
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene (F8)."
+msgstr "Arrêter la scène (F8)."
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene (F6)."
+msgstr "Jouer la scène actuellement en cours d'édition (F6)."
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr "Jouer une scène personnalisée"
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr "Options de débogage"
+
+#: tools/editor/editor_node.cpp
+msgid "Live Editing"
+msgstr "Édition en direct"
+
+#: tools/editor/editor_node.cpp
+msgid "File Server"
+msgstr "Serveur de fichiers"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy Remote Debug"
+msgstr "Déployer le débogage à distance"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy File Server Clients"
+msgstr "Déployer des clients de serveur de fichiers"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr "Formes de collision visibles"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr "Navigation visible"
+
+#: tools/editor/editor_node.cpp
+msgid "Settings"
+msgstr "Paramètres"
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr "Disposition de l'éditeur"
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr "Installer les modèles d'exportation"
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr "À propos"
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr "Alerte lorsqu'une ressource externe a été modifiée."
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr "Tourne lorsque la fenêtre de l'éditeur est repainte !"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr "Toujours repeindre"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr "Repeindre quand modifié"
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr "Inspecteur"
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr "Créer une nouvelle ressource dans la mémoire et la modifier."
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr "Charger une ressource existante depuis la disque et la modifier."
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr "Enregistrer la ressource actuellement modifiée."
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr "Enregistrer sous..."
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr "Aller à l'objet modifié précédent dans l'historique."
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr "Aller à l'objet modifié suivant dans l'historique."
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr "Propriétés de l'objet."
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Système de fichiers"
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr "Sortie"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr "La communauté Godot vous dit merci !"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr "Merci !"
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr "Importer des modèles depuis un fichier ZIP"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr "Bibliothèque d'exportation"
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr "Fusionner avec l'existant"
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr "Ouvrir et exécuter un script"
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr "Erreurs de chargement"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr "Liste des méthodes pour « %s » :"
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr "Appel"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr "Liste des méthodes :"
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr "Paramètres :"
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr "Retourne :"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr "Impossible d'exécuter l'outil PVRTC :"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "Redimensionner le tableau"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr ""
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr "Chercher dans les classes"
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr "Liste des classes :"
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "Héritée par :"
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "Brève description :"
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr "Méthodes publiques :"
+
+#: tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr "Membres :"
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr "Items de thème GUI :"
+
+#: tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr "Signaux :"
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr "Constantes :"
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr "Description de la méthode :"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr "Chercher du texte"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr "Chemin de projet invalide, le chemin doit exister !"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr "Chemin de projet invalide, engine.cfg ne doit pas exister."
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr "Chemin de projet invalide, engine.cfg doit exister."
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr "Projet importé"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr "Impossible de créer le fichier engine.cfg dans le répertoire du projet."
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr "Importer un projet existant"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr "Chemin du projet (doit exister) :"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr "Nom du projet :"
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr "Créer un nouveau projet"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr "Chemin du projet"
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr "Parcourir"
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr "Nouveau projet de jeu"
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr "C'est un BINGO !"
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr "Projet sans titre"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one projects?"
+msgstr "Voulez-vous vraiment ouvrir plus d'un projet à la fois ?"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one projects?"
+msgstr "Voulez-vous vraiment lancer plus d'un projet à la fois ?"
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+"Supprimer le projet de la liste ? (Le contenu du dossier ne sera pas modifié)"
+
+#: tools/editor/project_manager.cpp
+msgid "Recent Projects:"
+msgstr "Projets récents :"
+
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr "Modifier"
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr "Lancer"
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr "Scanner"
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr "Nouveau projet"
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr "Quitter"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr "OK :("
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr "Erreur de chargement de la scène depuis %s"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr "Erreur d'instanciation de la scène depuis %s"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr "OK"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one of "
+"its nodes."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr "Instancier scène(s)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr "Cette opération ne peut être réalisée sur la racine de l'arbre."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr "Dupliquer le(s) nœud(s)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr "Supprimer le(s) nœud(s) ?"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr "Cette opération ne peut être réalisée sans une scène."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+"Cette opération ne peut être réalisée uniquement avec un seul nœud "
+"sélectionné."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr "Cette opération ne peut être réalisée sur des scènes instanciées."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr "Enregistrer la nouvelle scène sous..."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr "C'est sensé !"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr "Supprimer le(s) nœud(s)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr "Créer un nœud"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr "Erreur d'enregistrement de la scène."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "New Scene Root"
+msgstr "Nouvelle racine de la scène"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Inherit Scene"
+msgstr "Hériter la scène"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr "Ajouter un nœud enfant"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr "Instancier une scène enfant"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr "Changer le type"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr "Modifier les groupes"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr "Modifier les connexions"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr "Ajouter un script"
+
+#: tools/editor/scene_tree_dock.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Up"
+msgstr "Déplacer vers le haut"
+
+#: tools/editor/scene_tree_dock.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Down"
+msgstr "Déplacer vers le bas"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "Dupliquer"
+
+#: tools/editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Merge From Scene"
+msgstr "Fusionner depuis la scène"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr "Sauvegarder la branche comme scène"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr "Supprimer nœud(s)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr "Ajouter un nouveau nœud"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+"Instancie un fichier de scène comme nœud. Crée une scène héritée si aucun "
+"nœud racine n'existe."
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr "Créer un nouveau"
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr "Analyser le BBCode"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr "Ouvrir un ou des fichiers d'échantillons"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr "ERREUR : Impossible de charger l'échantillon !"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr "Ajouter un échantillon"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr "Arrêter"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr "Jouer"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr "Renommer l'échantillon"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr "Supprimer l'échantillon"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr "16 bits"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr "8 bits"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr "Stéréo"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr "Mono"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
+msgstr "Aperçu"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr "Hauteur"
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr "Créer un Poly3D"
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr "Modifier le polygone"
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr "Modifier le polygone (supprimer un point)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr "Activer/désactiver la lecture automatique"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr "Nom de la nouvelle animation :"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr "Nouvelle animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr "Modifier le nom de l'animation :"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr "Supprimer l'animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr "ERREUR : Nom de l'animation invalide !"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr "ERREUR : Le nom de l'animation existe déjà !"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Renommer l'animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr "Ajouter une animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr "Charger l'animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Dupliquer l'animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr "ERREUR : Aucune animation à copier !"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr "ERREUR : Pas de ressource de type animation dans le presse-papiers !"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr "Animation collée"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr "Coller l'animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr "ERREUR : Pas d'animation à modifier !"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr "Arrêter la lecture de l'animation. (S)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr "Position de l'animation (en secondes)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr "Enregistrer l'animation actuelle"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr "Afficher la liste des animations dans le lecteur."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr "Lecture automatique au chargement"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr "Créer un polygone"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr "Créer un polygone occulteur"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Créer un nouveau polygone à partir de rien."
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr "Modifier un polygone existant :"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr "Bouton gauche : déplacer un point."
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr "Contrôle + Bouton gauche : séparer le segment"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr "Bouton droit : effacer un point."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr "Configurer la grille"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr "Décalage de la grille :"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr "Pas de la grille :"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr "Décalage de la rotation :"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr "Pas de la rotation :"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr "Déplacer le pivot"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr "Modifier la chaîne IK"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr "Modifier le CanvasItem"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr "Zoom (%) :"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode (Q)"
+msgstr "Mode sélection (Q)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr "Glisser : tourner"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr "Alt + Glisser : déplacer"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr "Alt + Bouton droit : sélection détaillée par liste"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr "Move déplacement (W)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr "Mode rotation (E)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr "Mode navigation"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr "Aligner sur la grille"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Show Grid"
+msgstr "Afficher la grille"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr "Rotation alignée"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr "Alignement relatif"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr "Configurer la grille..."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr "Aligner au pixel près"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr "Étendre au parent"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr "Squelette..."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr "Créer les os"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr "Effacer les os"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr "Créer une chaîne IK"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr "Effacer la chaîne IK"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "View"
+msgstr "Affichage"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr "Zoomer"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr "Dézoomer"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr "Réinitialiser le zoom"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr "Définir le zoom"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr "Ancre"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys (Ins)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr "Seau"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr "Sélectionner une case"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr "Sélectionner"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr "Supprimer la sélection"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr "Transposer"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X (A)"
+msgstr "Miroir X (A)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y (S)"
+msgstr "Miroir Y (S)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr "Tourner de 0 degrés"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr "Tourner de 90 degrés"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr "Tourner de 180 degrés"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr "Tourner de 270 degrés"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr "Nouveau nom :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr "Échelle :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr "Fondu entrant (s) :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr "Fondu sortant (s) :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr "Mélanger"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr "Mixer"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr "Démarrer !"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr "Quantité :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr "Mélange :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr "Mélange 0 :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr "Mélange 1 :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr "Actuel :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr "Renommer"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr "L'arbre d'animations est valide."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr "L'arbre d'animations est invalide."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr "Importer des animations..."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr "Modifier les filtres de nœud"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr "Filtres..."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr "Axe X"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr "Axe Y"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr "Axe Z"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr "Axe vers le haut du maillage :"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr "Rotation aléatoire :"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr "Échelle aléatoire :"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr "Peupler"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Find.."
+msgstr "Trouver..."
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Find Next"
+msgstr "Trouver le suivant"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Replace.."
+msgstr "Remplacer..."
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr "Aller à la ligne..."
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr "Vertex"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr "Fragment"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr "Éclairage"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr "Impossible d'enregistrer le thème dans le fichier :"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr "Ajouter un item"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr "Ajouter tous les items"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr "Tout ajouter"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr "Supprimer l'item"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Template"
+msgstr "Créer un modèle"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr "Item"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr "Item à cocher"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr "Item coché"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr "Possède"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr "Plusieurs"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr "Ont,Plusieurs,Possibilités,D'options !"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr "Onglet 1"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr "Onglet 2"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr "Onglet 3"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr "Type de données :"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr "Icône"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr "Style"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr "Police"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr "Couleur"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr "La BakedLightInstance ne contient pas de ressource BakedLight."
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr "Calculer !"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr "Remettre le processus de calcul de l'éclairage à zéro (recommencer)."
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr "Analyse de %d triangles :"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr "Triangle #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr "Paramètres du calculateur d'éclairage :"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr "Analyse de la géométrie"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr "Correction des lumières"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr "Création du BVH"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr "Création de l'octree de lumière"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr "Création de la texture d'octree"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr "Transfert vers des lightmaps :"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr "Allocation de la texture #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr "Calcul de la texture #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr "Post-traitement de la texture #"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr "Orthogonale"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr "Perspective"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr "Transformation annulée."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr "Transformation sur l'axe X."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr "Transformation sur l'axe Y."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr "Transformation sur l'axe Z."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr "Mise à l'échelle %s%%."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr "Rotation de %s degrés."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr "Vue de dessous."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr "Dessous"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr "Vue de dessus."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr "Dessus"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr "Vue arrière"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr "Arrière"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr "Vue avant"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr "Avant"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr "Vue de gauche"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr "Gauche"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr "Vue de droite"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr "Droite"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr "L'insertion de clé est désactivée (pas de clé insérée)."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr "Clé d'animation insérée."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr "Aligner avec la vue"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top (Num7)"
+msgstr "Dessus (Pavé num. 7)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom (Shift+Num7)"
+msgstr "Dessous (Maj+Pavé num. 7)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left (Num3)"
+msgstr "Gauche (Pavé num. 3)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right (Shift+Num3)"
+msgstr "Droite (Maj+Pavé num. 3)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front (Num1)"
+msgstr "Devant (Pavé num. 1)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear (Shift+Num1)"
+msgstr "Arrière (Maj+Pavé num. 1)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective (Num5)"
+msgstr "Perspective (Pavé num. 5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal (Num5)"
+msgstr "Orthogonale (Pavé num. 5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr "Environnement"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr "Écouteur audio"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr "Gizmos"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Selection (F)"
+msgstr "Sélection (F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view (Ctrl+Shift+F)"
+msgstr "Aligner avec la vue (Ctrl+Maj+F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr "Dialogue XForm"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr "Pas de scène sélectionnée à instancier !"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr "Instancier sur le cursuer"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr "Impossible d'instancier la scène !"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr "Mode de mise à l'échelle (R)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr "Coordonnées locales"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr "Dialogue de transformation..."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr "Utiliser la lumière par défaut"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr "Utiliser sRGB par défaut"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr "Affichage normal"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr "Affichage en fil de fer"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr "Affichage des surimpressions"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr "Affichage sans ombrage"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr "Afficher l'origine"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr "Afficher la grille"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr "Paramètres d'alignement"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr "Alignement des translations :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr "Alignement des rotations (degrés) :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr "Alignement des mises à l'échelle (%) :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr "Paramètres de la vue"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr "Normale de l'éclairage par défaut :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr "Couleur de l'éclairage ambient :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr "Champ de vision de perspective (degrés) :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr "Z-Near de la vue :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr "Z-Far de la vue :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr "Modification de la transformation"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr "Translater :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr "Tourner (degrés) :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr "Échelle (ratio) :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr "Type de transformation"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr "Pré"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr "Post"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error while saving theme"
+msgstr "Erreur lors de l'enregistrement."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error saving"
+msgstr "Erreur de sauvegarde de l'atlas :"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error importing theme"
+msgstr "Erreur d'importation de la scène."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error importing"
+msgstr "Erreur d'importation :"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Import Theme"
+msgstr "Improter des textures"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Save Theme As.."
+msgstr "Enregistrer la scène sous..."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr "Tout enregistrer"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr "Précédent dans l'historique"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr "Suivant dans l'historique"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Reload Theme"
+msgstr "Recharger"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Save Theme"
+msgstr "Enregistrer la scène"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Save Theme As"
+msgstr "Enregistrer la scène sous..."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Left"
+msgstr "Indenter vers la gauche"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Right"
+msgstr "Indenter vers la droite"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Comment"
+msgstr "Commenter/décommenter"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Clone Down"
+msgstr "Cloner en dessous"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Complete Symbol"
+msgstr "Compléter le symbole"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Trim Trailing Whitespace"
+msgstr "Supprimer les espaces de fin de ligne"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Auto Indent"
+msgstr "Indentation automatique"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Function.."
+msgstr "Aller à la fonction…"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr "Débogage"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Breakpoint"
+msgstr "Placer un point d'arrêt"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr "Garder le débogueur ouvert"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr "Fenêtre"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr "Aller à gauche"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr "Aller à droite"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Help"
+msgstr "Aide"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Contextual"
+msgstr "Aide contextuelle"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr "Tutoriels"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr "Ouvre https://godotengine.org dans la section des tutoriels."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr "Classes"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr "Cherche dans la hiérarchie des classes."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "Chercher dans l'aide"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr "Cherche dans la documentation de référence."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr "Aller au document modifié précédent."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr "Aller au document modifié suivant."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr "Créer un script"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+"Les fichiers suivants sont plus récents sur le disque.\n"
+"Quelle action doit être prise ? :"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr "Recharger"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr "Ré-enregistrer"
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr "Aperçu de la StyleBox :"
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr "Longueur :"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr "Modifier une constante scalaire"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr "Modifier une constance vectorielle"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr "Modifier une constante RVB"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr "Modifier un opérateur scalaire"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr "Modifier un opérateur vectoriel"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr "Modifier un opérateur vectoriel scalaire"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr "Modifier un opérateur RVB"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr "Modifier un commentaire"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr "Ajouter/supprimer de la rampe de couleurs"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr "Modifier une rampe de couleurs"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr "Ajouter/supprimer de la carte de courbes"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr "Modifier la carte de courbes"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr "Changer le nom de l'entrée"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr "Le maillage est vide !"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr "Cela ne fonctionne pas sur la racine de la scène !"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr "Créer une forme Trimesh"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr "Créer une forme convexe"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr "Créer un maillage de navigation"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr "Le MeshInstance n'a pas de maillage !"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr "Impossible de créer le contour !"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr "Créer le contour"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr "Créer un corps statique Trimesh"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr "Créer un corps statique convexe"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr "Créer un maillage de contour..."
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr "Créer un maillage de contour"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr "Taille du contour :"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr "Créer une carte UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr "Transformer la carte UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr "Éditeur UV de polygones 2D"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr "Déplacer le point"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr "Contrôle: Tourner"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr "Maj. : Tout déplacer"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr "Maj.+Contrôle : Mettre à l'échelle"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr "Déplacer le polygone"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr "Tourner le polygone"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr "Mettre à l'échelle le polygone"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr "Polygone -> UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr "UV -> Polygone"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr "Effacer l'UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Snap"
+msgstr "Aligner"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr "Activer l'alignement"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr "Grille"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Set region_rect"
+msgstr ""
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Sprite Region Editor"
+msgstr "Éditeur de région de Sprite"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr "ERREUR : Impossible de charger la ressource !"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr "Ajouter une ressource"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr "Renommer une ressource"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr "Supprimer une ressource"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr "Le presse-papiers des ressources est vide !"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr "Charger une ressource"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr "ERREUR : Impossible de charger la resource de type trame !"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr "Ajouter une image"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr "Le presse-papiers des ressources est vide ou n'est pas une texture !"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr "Coller une image"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr "Ajouter vide"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr "(vide)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr "Animations"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr "Vitesse (FPS) :"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Loop"
+msgstr "Boucle"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr "Trames d'animation"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr "Haut"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr "Bas"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr "Créer un polygone de navigation"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr "Erreur de chargement de l'image :"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr "Pas de pixels avec une transparence > 128 dans l'image..."
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr "Aperçu..."
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr "Supprimer l'objet %d ?"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr "Les faces n'ont pas de surface !"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr "Pas de faces !"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr "Générer un AABB"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr "Surface"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr "Volume"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr "Objet %d"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr "Objets"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr "Éditeur de listes d'objets"
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr "Ajouter/supprimer un point de rampe de couleur"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr "Point de courbe #"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Sélectionner des points"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Maj. + Glisser : sélectionner des points de contrôle"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Clic : ajouter un point"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Clic droit : supprimer un point"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Ajouter un point (dans un espace vide)"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr "Impossible de trouver la tuile :"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr "Nom d'item ou ID :"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr "Créer depuis la scène ?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr "Fusionner depuis la scène ?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr "Créer depuis la scène"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr "Fusionner depuis la scène"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr "Supprimer le point d'une courbe"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr "Déplacer le point dans la courbe"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr "Sélectionner les points de contrôle (Maj. + glisser)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr "Non compressé"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr "Compression sans perte (PNG)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr "Compression avec perte (WebP)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr "Compression GPU (VRAM)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr "Format de texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr "Qualité de compression de la texture (WebP) :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr "Options de texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr "Veuillez spécifier des fichiers !"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Target path is empty."
+msgstr "Le chemin de destination est vide."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr ""
+"Le chemin de destination doit être un chemin complet vers une ressource."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Target path must exist."
+msgstr "Le chemin de destination doit exister."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr "Il faut au moins un fichier pour créer un atlas."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr "Erreur d'importation :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr "Un seul fichier est nécessaire pour créer une grande texture."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr "Taille de texture maximale :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr "Importer des textures pour un atlas (2D)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr "Taille des cellules :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr "Grande texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr "Importer des grandes textures (2D)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "Source Texture"
+msgstr "Texture source :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr "Texture d'atlas de base"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "Source Texture(s)"
+msgstr "Texture(s) source :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr "Importer des textures pour la 2D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr "Importer des textures pour la 3D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr "Improter des textures"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "2D Texture"
+msgstr "Grande texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "3D Texture"
+msgstr "Grande texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "Atlas Texture"
+msgstr "Texture d'atlas de base"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr "Texture(s) source :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr "Rogner l'espace vide."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Target Path:"
+msgstr "Chemin de destination :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Accept"
+msgstr "Accepter"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr "Importer une grande texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr "Charger une image source"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr "Découpage"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr "Insertion"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr "Enregistrement"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr "Impossible d'enregistrer la grande texture :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr "Construire l'atlas pour :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr "Chargement de l'image :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr "Impossible de charger l'image :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr "Conversion des images"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr "Rognage des images"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr "Découpage des images"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr "Impossible d'enregistrer l'image d'atlas :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr "Impossible d'enregistrer la texture convertie :"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr "Source invalide !"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr "Source de traduction invalide !"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr "Colonne"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr "Pas d'objets à importer !"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr "Pas de chemin de destination !"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr "Importer des traductions"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr "Impossible d'importer !"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr "Importer une traduction"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr "CSV source :"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr "Ignorer la première ligne"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr "Compresser"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr "Ajouter au projet (engine.cfg)"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr "Importer les langues :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr "Nouvelle séquence"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr "Options d'animation"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr "Drapeaux"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr "FPS de calcul :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr "Optimiseur"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr "Erreur linéaire maximale"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr "Erreur angulaire maximale"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr "Angle maximal"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr "Séquences"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr "Départ(s)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr "Fin(s)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr "Filtres"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr "Le chemin source est vide."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr "Impossible de charger le script de post-importation."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr "Script invalide ou cassé de post-importation."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr "Erreur d'importation de la scène."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr "Importer une scène 3D"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr "Scène source :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr "Le même que la scène de destination"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr "Partagé"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr "Dossier de destination des textures :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Options:"
+msgstr "Options :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr "Script de post-traitement :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Overwrite Existing Scene"
+msgstr "Écraser la scène existante"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Overwrite Existing, Keep Materials"
+msgstr "Écraser l'existant, conserver les matériaux"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Keep Existing, Merge with New"
+msgstr "Conserver l'existant, fusionner avec les nouveautés"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Keep Existing, Ignore New"
+msgstr "Conserver l'existant, ignorer les nouveautés"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "This Time:"
+msgstr "Cette fois :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Next Time:"
+msgstr "Les prochaines fois :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr "Les fichiers suivants sont manquants :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr "Importer quand même"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr "Importer et ouvrir"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr ""
+"La scène modifiée actuellement n'a pas été enregistrée, ouvrir la scène "
+"importée quand même ?"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr "Importation de la scène..."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr "Lancement du script personnalisé..."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr "Impossible de charger le script de post-importation :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import:"
+msgstr "Script de post-importation invalide ou cassé :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr "Erreur d'exécution du script de post-importation :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr "Importer une image :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr "Impossible d'importer un fichier par-dessus lui-même."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr "Impossible de rendre le chemin local : %s (déjà local)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr "Enregistrement..."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr "Pas de fichier de police source !"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr "Pas de ressource de police de destination !"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr "Impossible de charger ou traiter la police source."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr "Impossible d'enregistrer la police."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr "Police source :"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr "Taille de la police source :"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr "Ressource de destination :"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr "The quick brown fox jumps over the lazy dog."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr "Test :"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr "Importation d'une police"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr ""
+"Ce fichier est déjà un fichier de police Godot, veuillez fournir un fichier "
+"de type BMFont à la place."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr "Impossible d'ouvrir le fichier en tant que fichier BMFont."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr "Erreur d'initialisation de Freetype."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr "Format de police inconnu."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr "Erreur lors du chargement de la police."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr "Taille de police invalide."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr "Source personnalisée de police invalide."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr "Pas d'échantillons à importer !"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr "Le chemin de sauvegarde est vide !"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr "Importer des échantillons audio"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr "Échantillon(s) source :"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr "Pas de maillages à importer !"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr "Importer un maillage"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr "Maillage(s) source :"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr "Surface %d"
+
+#~ msgid "Scene Tree:"
+#~ msgstr "Arbre des scènes :"
+
+#~ msgid "Move Favorite Up"
+#~ msgstr "Déplacer le favori vers le haut"
+
+#~ msgid "Move Favorite Down"
+#~ msgstr "Déplacer le favori vers le bas"
+
+#~ msgid "%d frames"
+#~ msgstr "%d images"
+
+#~ msgid ""
+#~ "NOTICE: You are not forced to import textures for 2D projects. Just copy "
+#~ "your .jpg or .png files to your project, and change export options later. "
+#~ "Atlases can be generated on export too."
+#~ msgstr ""
+#~ "NOTICE : Vous n'êtes pas obligé d'importer des textures pour des projets "
+#~ "en 2D. Copiez simplement vos fichiers .jpg ou .png dans le projet, et "
+#~ "modifiez les options d'exportation par la suite. Vous pouvez également "
+#~ "générer des atlas à l'exportation."
+
+#~ msgid "Merging.."
+#~ msgstr "Fusion..."
diff --git a/tools/translations/tools.pot b/tools/translations/tools.pot
index 41aba64129..d4fca74677 100644
--- a/tools/translations/tools.pot
+++ b/tools/translations/tools.pot
@@ -648,9 +648,9 @@ msgstr ""
#: tools/editor/connections_dialog.cpp tools/editor/animation_editor.cpp
#: tools/editor/project_manager.cpp tools/editor/create_dialog.cpp
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
#: tools/editor/plugins/particles_editor_plugin.cpp
-#: tools/editor/plugins/mesh_editor_plugin.cpp
msgid "Create Subscription"
msgstr ""
@@ -1296,7 +1296,7 @@ msgstr ""
msgid "Description:"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/script_editor_debugger.cpp tools/editor/editor_profiler.cpp
msgid "Time:"
msgstr ""
@@ -1374,6 +1374,10 @@ msgid "Stack Trace (if applicable):"
msgstr ""
#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Inspector"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
msgid "Monitor"
msgstr ""
@@ -1410,10 +1414,6 @@ msgstr ""
msgid "Usage"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp tools/editor/scenes_dock.cpp
-msgid "Info"
-msgstr ""
-
#: tools/editor/script_editor_debugger.cpp
msgid "Clicked Control:"
msgstr ""
@@ -1430,10 +1430,6 @@ msgstr ""
msgid "Set From Tree"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp
-msgid "Scene Tree:"
-msgstr ""
-
#: tools/editor/import_settings.cpp
msgid "Imported Resources"
msgstr ""
@@ -1818,6 +1814,46 @@ msgstr ""
msgid "Select a Node"
msgstr ""
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Fixed Frame %"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
#: tools/editor/quick_open.cpp tools/editor/editor_help.cpp
#: tools/editor/create_dialog.cpp tools/editor/plugins/script_editor_plugin.cpp
msgid "Matches:"
@@ -1841,7 +1877,7 @@ msgstr ""
msgid "Save & Re-Import"
msgstr ""
-#: tools/editor/editor_reimport_dialog.cpp
+#: tools/editor/editor_reimport_dialog.cpp tools/editor/editor_node.cpp
msgid "Re-Importing"
msgstr ""
@@ -1988,27 +2024,27 @@ msgid "Move To.."
msgstr ""
#: tools/editor/scenes_dock.cpp
-msgid "Show In File Manager"
+msgid "Info"
msgstr ""
#: tools/editor/scenes_dock.cpp
-msgid "Previous Directory"
+msgid "Show In File Manager"
msgstr ""
-#: tools/editor/scenes_dock.cpp
-msgid "Next Directory"
+#: tools/editor/scenes_dock.cpp tools/editor/editor_node.cpp
+msgid "Re-Import.."
msgstr ""
#: tools/editor/scenes_dock.cpp
-msgid "Re-Scan Filesystem"
+msgid "Previous Directory"
msgstr ""
#: tools/editor/scenes_dock.cpp
-msgid "Move Favorite Up"
+msgid "Next Directory"
msgstr ""
#: tools/editor/scenes_dock.cpp
-msgid "Move Favorite Down"
+msgid "Re-Scan Filesystem"
msgstr ""
#: tools/editor/scenes_dock.cpp
@@ -2217,11 +2253,11 @@ msgid "Assets ZIP File"
msgstr ""
#: tools/editor/editor_node.cpp
-msgid "Node From Scene"
+msgid "Importing:"
msgstr ""
#: tools/editor/editor_node.cpp
-msgid "Re-Import.."
+msgid "Node From Scene"
msgstr ""
#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
@@ -2286,10 +2322,6 @@ msgid "Loading Export Templates"
msgstr ""
#: tools/editor/editor_node.cpp
-msgid "Importing:"
-msgstr ""
-
-#: tools/editor/editor_node.cpp
msgid "Error trying to save layout!"
msgstr ""
@@ -2558,6 +2590,10 @@ msgid "Play the project (F5)."
msgstr ""
#: tools/editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
msgid "Stop the scene (F8)."
msgstr ""
@@ -3030,6 +3066,10 @@ msgid "Duplicate"
msgstr ""
#: tools/editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
msgid "Save Branch as Scene"
msgstr ""
@@ -3084,22 +3124,18 @@ msgid "Delete Sample"
msgstr ""
#: tools/editor/plugins/sample_library_editor_plugin.cpp
-#: tools/editor/plugins/sample_editor_plugin.cpp
msgid "16 Bits"
msgstr ""
#: tools/editor/plugins/sample_library_editor_plugin.cpp
-#: tools/editor/plugins/sample_editor_plugin.cpp
msgid "8 Bits"
msgstr ""
#: tools/editor/plugins/sample_library_editor_plugin.cpp
-#: tools/editor/plugins/sample_editor_plugin.cpp
msgid "Stereo"
msgstr ""
#: tools/editor/plugins/sample_library_editor_plugin.cpp
-#: tools/editor/plugins/sample_editor_plugin.cpp
msgid "Mono"
msgstr ""
@@ -4312,6 +4348,30 @@ msgid "Post"
msgstr ""
#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Save All"
msgstr ""
@@ -4324,6 +4384,18 @@ msgid "History Next"
msgstr ""
#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Indent Left"
msgstr ""
@@ -4445,10 +4517,6 @@ msgstr ""
msgid "Length:"
msgstr ""
-#: tools/editor/plugins/sample_editor_plugin.cpp
-msgid "%d frames"
-msgstr ""
-
#: tools/editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Scalar Constant"
msgstr ""
@@ -4578,6 +4646,74 @@ msgstr ""
msgid "Add Shader Graph Node"
msgstr ""
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create UV Map"
msgstr ""
@@ -4944,74 +5080,6 @@ msgstr ""
msgid "Close Curve"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Mesh is empty!"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Create Static Trimesh Body"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Create Static Convex Body"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "This doesn't work on scene root!"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Create Trimesh Shape"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Create Convex Shape"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Create Navigation Mesh"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "MeshInstance lacks a Mesh!"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Could not create outline!"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Create Outline"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Create Trimesh Static Body"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Create Convex Static Body"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Create Trimesh Collision Sibling"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Create Convex Collision Sibling"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Create Outline Mesh.."
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Create Outline Mesh"
-msgstr ""
-
-#: tools/editor/plugins/mesh_editor_plugin.cpp
-msgid "Outline Size:"
-msgstr ""
-
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Could not find tile:"
msgstr ""
@@ -5085,13 +5153,6 @@ msgid "Texture Options"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid ""
-"NOTICE: You are not forced to import textures for 2D projects. Just copy "
-"your .jpg or .png files to your project, and change export options later. "
-"Atlases can be generated on export too."
-msgstr ""
-
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Please specify some files!"
msgstr ""
@@ -5126,67 +5187,89 @@ msgid "Only one file is required for large texture."
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid "Import Textures"
+msgid "Max Texture Size:"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid "Source Texture:"
+msgid "Import Textures for Atlas (2D)"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid "Source Texture(s):"
+msgid "Cell Size:"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid "Crop empty space."
+msgid "Large Texture"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
-#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
-#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
-msgid "Target Path:"
+msgid "Import Large Textures (2D)"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid "Max Texture Size:"
+msgid "Source Texture"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid "Cell Size:"
+msgid "Base Atlas Texture"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid "Large Texture"
+msgid "Source Texture(s)"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid "Base Atlas Texture"
+msgid "Import Textures for 2D"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp
-#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
-msgid "Accept"
+msgid "Import Textures for 3D"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid "Import Textures for Atlas (2D)"
+msgid "Import Textures"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid "Import Large Textures (2D)"
+msgid "2D Texture"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid "Import Textures for 2D"
+msgid "3D Texture"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-msgid "Import Textures for 3D"
+msgid "Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Target Path:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Accept"
msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
@@ -5393,6 +5476,10 @@ msgid "Post-Process Script:"
msgstr ""
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Overwrite Existing Scene"
msgstr ""
@@ -5469,10 +5556,6 @@ msgid "Couldn't localize path: %s (already local)"
msgstr ""
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
-msgid "Merging.."
-msgstr ""
-
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Saving.."
msgstr ""
diff --git a/tools/translations/zh_CN.po b/tools/translations/zh_CN.po
new file mode 100644
index 0000000000..3e3f8444cf
--- /dev/null
+++ b/tools/translations/zh_CN.po
@@ -0,0 +1,5781 @@
+# LANGUAGE translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# Geequlim <geequlim@gmail.com>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2016-05-30 00:04+0800\n"
+"Last-Translator: Geequlim <geequlim@gmail.com>\n"
+"Language-Team: 汉语 <geequlim@gmail.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Gtranslator 2.91.7\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr "此节点需要设置NavigationMesh资源才能工作。"
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+"NavigationMeshInstance类型节点必须作为Navigation节点的子孙才能提供导航数据。"
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr "每个场景中只允许有一个WorldEnvironment类型的节点。"
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon类型节点只能为CollisionObject的派生类提供碰撞形状数据,请将其"
+"放在Area、StaticBody、RigidBody或KinematicBody节点下。"
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr "空CollisionPolygon节点不起碰撞检测作用。"
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+"SampleLibrary类型的资源必须通过SpatialSamplePlayer节点的'samples'属性创建才能"
+"正常播放声音。"
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionShape类型节点只能为CollisionObject的派生类提供碰撞形状数据,请将其放"
+"在Area、StaticBody、RigidBody或KinematicBody节点下。"
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"CollisionShape节点必须拥有一个形状才能进行碰撞检测工作,请为它创建一个形状资"
+"源!"
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/gui/text_edit.cpp scene/gui/line_edit.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Cut"
+msgstr "剪切"
+
+#: scene/gui/text_edit.cpp scene/gui/line_edit.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Copy"
+msgstr "复制"
+
+#: scene/gui/text_edit.cpp scene/gui/line_edit.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste"
+msgstr "粘贴"
+
+#: scene/gui/text_edit.cpp scene/gui/line_edit.cpp
+#: tools/editor/project_export.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Select All"
+msgstr "全选"
+
+#: scene/gui/text_edit.cpp scene/gui/line_edit.cpp
+#: tools/editor/script_editor_debugger.cpp tools/editor/property_editor.cpp
+#: tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Clear"
+msgstr "清除"
+
+#: scene/gui/text_edit.cpp scene/gui/line_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Undo"
+msgstr "撤销"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will "
+"hide upon running."
+msgstr ""
+"Popup对象在你调用popup()方法之前将保持隐藏,这里设置为可见并不代表执行场景时"
+"它会出现。"
+
+#: scene/audio/sample_player.cpp scene/2d/sample_player_2d.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+"SampleLibrary类型的资源必须是通过SamplePlayer类型节点的samples属性创建的,这"
+"样的资源才能用于播放声音。"
+
+#: scene/2d/sprite.cpp tools/editor/project_settings.cpp
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport "
+"must be set to 'render target' mode."
+msgstr ""
+"Path属性必须指向一个合法的Viewport节点才能工作,同时此Viewport还需要启"
+"用'render target'。"
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in "
+"order for this sprite to work."
+msgstr ""
+"为了让此精灵正常工作,它的path属性所指向的Viewport需要开启'render target'。"
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr "VisibilityEnable2D类型的节点用于场景的根节点才能获得最好的效果。"
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+"SpriteFrames资源必须是通过AnimatedSprite节点的frames属性创建的,否则无法显示"
+"动画帧。"
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+"每个场景中只允许有一个CanvasModulate类型的节点,场景中的第一个CanvasModulate"
+"节点能正常工作,其余的将被忽略。"
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+"ParallaxLayer类型的节点必须作为ParallaxBackground的子节点才能正常工作。"
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+"请为此节点设置一个NavigationPolygon类型的资源作为形状,这样它才能正常工作。"
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+"NavigationPolygonInstance类型的节点必须作为Navigation2D的子孙才能为其提供导航"
+"数据。"
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr "此遮光体必须设置遮光形状才能起到遮光作用。"
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr "此遮光体的遮光形状为空,请为其绘制一个遮光形状!"
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon2D类型节点只能为CollisionObject2D的派生类提供碰撞形状数据,请"
+"将其放在Area2D、StaticBody2D、RigidBody2D或KinematicBody2D节点下。"
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr "空的CollisionPolygon2D不起任何碰撞检测作用。"
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr "path属性必须指向一个合法的Particles2D节点才能正常工作。"
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionShape2D类型节点只能为CollisionObject2D的派生类提供碰撞形状数据,请将"
+"其放在Area2D、StaticBody2D、RigidBody2D或者是KinematicBody2D节点下。"
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr "形状资源必须是通过CollisionShape2D节点的shape属性创建的!"
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr "PathFollow2D类型的节点只有放在Path2D节点下才能正常工作。"
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr "path属性必须指向一个合法的Node2D节点才能正常工作。"
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr "更新场景"
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr "保存修改中.."
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr "更新场景中.."
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "修改数组大小"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr "修改数组类型"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr "修改数组值"
+
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "File Exists, Overwrite?"
+msgstr "文件已存在,确定要覆盖它吗?"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr "所有可用类型"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr "所有文件(*)"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/quick_open.cpp tools/editor/editor_help.cpp
+#: tools/editor/scenes_dock.cpp tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open"
+msgstr "打开"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save"
+msgstr "保存"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr "保存文件"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/project_manager.cpp
+#: tools/editor/create_dialog.cpp tools/editor/animation_editor.cpp
+#: tools/editor/editor_dir_dialog.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Folder"
+msgstr "新建目录"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/script_create_dialog.cpp
+#: tools/editor/project_settings.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Path:"
+msgstr "路径:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp
+msgid "Favorites:"
+msgstr "收藏:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "最近文件:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "目录|文件:"
+
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview:"
+msgstr "预览"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/script_editor_debugger.cpp
+msgid "File:"
+msgstr "文件:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr "筛选:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp
+#: tools/editor/editor_dir_dialog.cpp tools/editor/project_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Name:"
+msgstr "名称"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_dir_dialog.cpp
+msgid "Could not create folder."
+msgstr "无法创建目录。"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "必须使用合法的拓展名。"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr "无法显示此节点,请先取消隐藏其父节点。"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr "切换Spatial可见"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr "切换CanvasItem可见"
+
+#: tools/editor/scene_tree_editor.cpp tools/editor/script_create_dialog.cpp
+#: tools/editor/editor_help.cpp
+msgid "Inherits:"
+msgstr "基类:"
+
+#: tools/editor/scene_tree_editor.cpp tools/editor/script_editor_debugger.cpp
+#: tools/editor/project_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Type:"
+msgstr "类型:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr "实例:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr "节点名称非法,不允许包含以下字符:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr "重命名节点"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr "场景树:"
+
+#: tools/editor/scene_tree_editor.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Editable Children"
+msgstr "允许编辑子孙节点"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr "加载为占位符"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr "在编辑器中打开"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr "清除继承"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr "确定要清除继承吗(无法撤销!)?"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr "清除!"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr "选择一个节点"
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr "无法以可写方式打开file_type_cache.cch!"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr "无法执行PVPTC工具:"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr "无法加载使用PVRTC工具转换的图片:"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr "选择要导入的节点"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr "场景路径:"
+
+#: tools/editor/editor_sub_scene.cpp tools/editor/editor_node.cpp
+#: tools/editor/project_manager.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Import From Node:"
+msgstr "从节点中导入:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr "字节:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr "警告:"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Error"
+msgstr "错误"
+
+#: tools/editor/script_editor_debugger.cpp tools/editor/editor_help.cpp
+msgid "Description:"
+msgstr "描述:"
+
+#: tools/editor/script_editor_debugger.cpp tools/editor/editor_profiler.cpp
+msgid "Time:"
+msgstr "时间:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr "错误:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr "源:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr "函数:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr "错误"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debugger"
+msgstr "调试器"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr "子进程已连接"
+
+#: tools/editor/script_editor_debugger.cpp tools/editor/code_editor.cpp
+msgid "Line:"
+msgstr "行:"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Step Into"
+msgstr "单步进入"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Step Over"
+msgstr "单步跳过"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Break"
+msgstr "跳过"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Continue"
+msgstr "继续"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr "编辑上一个实例"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr "编辑下一个实例"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr "变量"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr "错误:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr "调用堆栈:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Inspector"
+msgstr "远程属性面板"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr "键名"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr "值"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr "占用显存的资源列表:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr "合计:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr "显存"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr "资源路径"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr "类型"
+
+#: tools/editor/script_editor_debugger.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Format"
+msgstr "格式"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr "用量"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr "点击的控件:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr "点击的控件类型:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr "实时编辑根节点:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr "从场景树设置"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/import_settings.cpp
+#: tools/editor/property_editor.cpp tools/editor/call_dialog.cpp
+#: tools/editor/groups_editor.cpp tools/editor/connections_dialog.cpp
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+#: tools/editor/run_settings_dialog.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Close"
+msgstr "关闭"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/editor_node.cpp
+#: tools/editor/quick_open.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/project_settings.cpp
+#: tools/editor/code_editor.cpp tools/editor/settings_config_dialog.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search:"
+msgstr "搜索:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Search"
+msgstr "搜索"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Import"
+msgstr "导入"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugins"
+msgstr "插件"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Sort:"
+msgstr "排序:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Reverse"
+msgstr "反选"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+msgid "Category:"
+msgstr "分类:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "All"
+msgstr "全部"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Site:"
+msgstr "站点:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr "已安装插件:"
+
+#: tools/editor/editor_plugin_settings.cpp tools/editor/editor_node.cpp
+msgid "Update"
+msgstr "更新"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "版本"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr "作者"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr "状态"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr "基类名称非法"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr "合法的字符:"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr "类名非法"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr "名称可用"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr "N/A"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr "类名非法"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr "基类名称非法"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr "路径非法!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr "无法创建脚本。"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr "文件路径为空"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr "必须是项目路径"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr "文件已存在"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr "扩展名非法"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr "路径可用"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr "类名:"
+
+#: tools/editor/script_create_dialog.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Language"
+msgstr "语言:"
+
+#: tools/editor/script_create_dialog.cpp tools/editor/property_editor.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Error!"
+msgstr "错误!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr "内置脚本"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr "创建脚本"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "创建"
+
+#: tools/editor/editor_node.cpp tools/editor/import_settings.cpp
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
+msgstr "重新导入"
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr "导入:"
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/scenes_dock.cpp
+msgid "Re-Import.."
+msgstr "重新导入.."
+
+#: tools/editor/editor_node.cpp tools/editor/resources_dock.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Error saving resource!"
+msgstr "保存资源出错!"
+
+#: tools/editor/editor_node.cpp tools/editor/resources_dock.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save Resource As.."
+msgstr "资源另存为.."
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr "好吧.."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr "无法以可写模式打开文件:"
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr "未知的文件类型请求:"
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "保存出错。"
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "正在保存场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "正在分析"
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr "无法保存场景,依赖项(实例)验证失败。"
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr "加载资源失败。"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr "无法加载要合并的砖块集!"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr "保存砖块集失败!"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr "无法打开ZIP导出模板"
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr "正在加载导出模板"
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr "保存布局出错!"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default editor layout overridden."
+msgstr "覆盖编辑器默认布局。"
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr "布局名称未找到!"
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr "重置为默认布局设置。"
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr "拷贝参数"
+
+#: tools/editor/editor_node.cpp
+msgid "Set Params"
+msgstr "设置参数"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr "粘贴资源"
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr "拷贝资源"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr "没有设置要执行的场景。"
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr "当前场景尚未保存,请保存后再尝试执行。"
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr "无法启动子进程!"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr "打开场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr "快速打开场景.."
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr "快速打开脚本.."
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr "是"
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr "确定要关闭场景吗,未保存的修改将丢失?"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr "场景另存为"
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr "此场景尚未保存,要在运行之前保存它吗?"
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr "请先保存场景。"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr "保存可翻译字符串"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr "导出砖块集"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr "退出"
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr "确定要退出编辑器吗?"
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr "当前场景尚未保存,仍要打开?"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr "无法重新加载未保存的场景。"
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr "恢复"
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr "此操作无法撤销,确定要继续吗?"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr "快速运行场景"
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr "额"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+"加载场景出错,场景必须放在项目目录下。请尝试使用'导入'菜单导入此场景后再试。"
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr "加载场景出错。"
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr "场景%s的依赖已被破坏:"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr "保存布局"
+
+#: tools/editor/editor_node.cpp tools/editor/scenes_dock.cpp
+#: tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Delete Layout"
+msgstr "删除布局"
+
+#: tools/editor/editor_node.cpp
+msgid "Default"
+msgstr "默认"
+
+#: tools/editor/editor_node.cpp
+msgid "Delete"
+msgstr "删除"
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr "切换场景标签页"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr "更多的%d个文件"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr "更多的%d个文件或目录"
+
+#: tools/editor/editor_node.cpp
+msgid "Scene"
+msgstr "场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr "前往上一个打开的场景。"
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr "操作场景文件。"
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+msgid "New Scene"
+msgstr "新建场景"
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr "从现有场景中创建.."
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr "打开场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr "保存场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr "关闭场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr "关闭并前往上一个场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr "最近打开"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Search File.."
+msgstr "快速查找文件.."
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr "转换为.."
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr "可翻译字符串"
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr "砖块集.."
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Redo"
+msgstr "重做"
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr "运行脚本"
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr "项目设置"
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr "恢复场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr "退出到项目列表"
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr "导入资源"
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr "工具"
+
+#: tools/editor/editor_node.cpp tools/editor/dependency_editor.cpp
+msgid "Orphan Resource Explorer"
+msgstr "查看孤立资源"
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr "导出项目到多个平台。"
+
+#: tools/editor/editor_node.cpp
+msgid "Export"
+msgstr "导出"
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project (F5)."
+msgstr "运行此项目(F5)"
+
+#: tools/editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr "暂停运行场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene (F8)."
+msgstr "停止运行场景(F8)"
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene (F6)."
+msgstr "运行打开的场景(F6)"
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr "运行自定义场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr "调试选项"
+
+#: tools/editor/editor_node.cpp
+msgid "Live Editing"
+msgstr "实时编辑"
+
+#: tools/editor/editor_node.cpp
+msgid "File Server"
+msgstr "文件服务"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy Remote Debug"
+msgstr "部署远程调试"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy File Server Clients"
+msgstr "部署文件服务客户端"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr "碰撞区域可见"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr "Navigation可见"
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
+msgstr "设置"
+
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr "编辑器设置"
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr "编辑器布局"
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr "安装导出模板"
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr "关于"
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr "外部资源改变后弹出提示。"
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr "旋转时,重新绘制编辑器窗口!"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr "持续更新UI"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr "有更改时更新UI"
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr "属性面板"
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr "在内存中新建资源并编辑。"
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr "从磁盘中加载资源并编辑。"
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr "保存当前编辑的资源。"
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save As.."
+msgstr "另存为"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr "前往上一个编辑对象。"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr "前往下一个编辑对象。"
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr "最近编辑历史对象。"
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr "对象属性。"
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "文件系统"
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr "输出"
+
+#: tools/editor/editor_node.cpp
+msgid "Re-Import"
+msgstr "重新导入"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr "感谢Godot社区"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr "谢谢!"
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr "从ZIP文件中导入模板"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
+msgstr "导出项目"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr "导出库"
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr "与现有合并"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
+msgstr "密码"
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr "打开并运行脚本"
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr "加载错误"
+
+#: tools/editor/import_settings.cpp
+msgid "Imported Resources"
+msgstr "已导入的资源"
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr "预设.."
+
+#: tools/editor/property_editor.cpp tools/editor/animation_editor.cpp
+msgid "Linear"
+msgstr "线性"
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr "慢速开始"
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr "慢速结束"
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr "慢速开始和结束"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr "文件.."
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr "目录.."
+
+#: tools/editor/property_editor.cpp
+msgid "New"
+msgstr "新建"
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr "加载"
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr "加载文件出错:不是资源文件!"
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr "无法加载图片"
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: tools/editor/property_editor.cpp tools/editor/editor_help.cpp
+msgid "Class:"
+msgstr "类:"
+
+#: tools/editor/property_editor.cpp tools/editor/project_settings.cpp
+msgid "Property:"
+msgstr "属性:"
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr "启用"
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr "设置"
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr "属性:"
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr "全局"
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr "选项:"
+
+#: tools/editor/editor_import_export.cpp tools/editor/connections_dialog.cpp
+#: tools/editor/project_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Added:"
+msgstr "已添加:"
+
+#: tools/editor/editor_import_export.cpp tools/editor/connections_dialog.cpp
+#: tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Removed:"
+msgstr "已移除:"
+
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
+msgstr "保存贴图集出错:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr "无法保存精灵集子贴图:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr "文件排序:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr "打包中"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr "正在导出 %s"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr "配置.."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr "好吧"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr "没有选中节点来添加实例。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr "从%s加载场景出错!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr "从%s实例化场景出错!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr "好的"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr "无法实例化场景%s当前场景已存在于它的子节点中。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr "实例化场景"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr "此操作不能被用于根节点。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr "在父节点中移动"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr "在父节点中移动多个节点"
+
+#: tools/editor/scene_tree_dock.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Node(s)"
+msgstr "复制节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr "确定要删除节点吗?"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr "此操作必须在打开一个场景后才能执行。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr "此操作只能应用于单个选中节点。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr "此操作不能应用于实例化的场景。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr "将新场景另存为.."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr "有道理!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr "无法操作外部场景的节点!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr "无法操作此节点,因为当前场景继承自该节点!"
+
+#: tools/editor/scene_tree_dock.cpp tools/editor/reparent_dialog.cpp
+msgid "Reparent Node"
+msgstr "重设父节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr "移除节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr "新节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr "无法保存场景,场景或其实例的的依赖存在问题。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr "保存场景出错。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr "复制场景出错。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "New Scene Root"
+msgstr "创建场景根节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Inherit Scene"
+msgstr "继承场景"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr "添加子节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr "实例化子场景"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr "更改类型"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr "编辑分组"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr "编辑事件连接"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr "添加脚本"
+
+#: tools/editor/scene_tree_dock.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Up"
+msgstr "向上移动"
+
+#: tools/editor/scene_tree_dock.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Down"
+msgstr "向下移动"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "拷贝"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr "重设父节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr "从场景中合并"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr "将分支保存为场景"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr "删除节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr "添加/创建节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr "实例化场景文件为一个节点,如果没有根节点则创建一个继承自该文件的场景。"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr "在_run()方中填写您的逻辑代码。"
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr "已经存在一个正在编辑的场景。"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr "无法实例化脚本:"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr "您是否遗漏了tool关键字?"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr "无法执行脚本:"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr "您是否遗漏了_run()方法?"
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: tools/editor/quick_open.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+msgid "Matches:"
+msgstr "匹配项:"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr "项目目录不存在!"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr "项目目录下必须包含engin.cfg文件。"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr "项目目录下必须包含engin.cfg文件。"
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr "已导入的项目"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr "项目路径非法(被外部修改?)。"
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr "无法在项目目录下创建engine.cfg文件。"
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr "导入现有项目"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr "项目目录(必须存在)"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr "项目名称:"
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr "新建项目"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr "项目目录"
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr "浏览"
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr "新建游戏项目"
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr "碉堡了!"
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr "未命名项目"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one projects?"
+msgstr "您确定要打开多个项目吗?"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one projects?"
+msgstr "您确定要执行多个项目吗?"
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr "移除此项目(项目的文件不受影响)"
+
+#: tools/editor/project_manager.cpp
+msgid "Recent Projects:"
+msgstr "最近打开的项目:"
+
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr "编辑"
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr "运行"
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr "扫描"
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr "新建"
+
+#: tools/editor/project_manager.cpp
+msgid "Remove"
+msgstr "移除"
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr "退出"
+
+#: tools/editor/project_manager.cpp
+msgid "Name"
+msgstr "名称"
+
+#: tools/editor/project_manager.cpp
+msgid "Path"
+msgstr "路径"
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr "新建"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr "设置光照半径"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr "更改摄像机视角"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr "修改摄像机尺寸"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr "更改球体半径"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr "更改胶囊半径"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr "更改胶囊高度"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr "默认(与编辑器相同)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "已禁用"
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "所有选项"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr "修改过度效果"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr "修改变换"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "修改动画值"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr "修改回调"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "添加轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "上移轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "下移轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "移除轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "复制关键帧"
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "设置过渡效果:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "重命名轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "编辑节点曲线"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr "编辑选项曲线"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "删除关键帧"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr "添加关键帧"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr "移动关键帧"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr "缩放选中项"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr "通过光标缩放"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr "复制选中项"
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr "复制并转置"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "前往下一步"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "前往上一步"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "常量"
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "过渡"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "优化动画"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "清理动画"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "为%s创建新轨道并插入关键帧?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "创建%d个新轨道并插入关键帧?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "创建|插入动画"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "创建|插入 轨道和关键帧"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr "插入关键帧"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr "修改动画时长"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr "修改动画循环"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr "插入动画"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "缩放键"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr "添加回调轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr "动画时间缩放"
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "时长(秒):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "动画时长(秒)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "步长(秒)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr "启用/禁用循环"
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr "新建轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr "上移当前轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr "下移当前轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr "移除选中轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr "轨道工具"
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr "允许通过单击启用各个键的编辑。"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "优化动画"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr "最大角错误:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr "调整最大的角度:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "优化"
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr "键"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr "过渡"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "缩放比率"
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "在那个节点中调用函数?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "移除无效键"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "移除未分解的空轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "清除所有动画"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "清除所有动画吗(无法撤销)?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "清理"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr "搜索类型"
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr "类型列表"
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "派生类:"
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "简介:"
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr "公共方法:"
+
+#: tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr "成员:"
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr "GUI主题:"
+
+#: tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr "事件:"
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr "常量:"
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr "方法描述:"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr "搜索文本"
+
+#: tools/editor/editor_help.cpp tools/editor/code_editor.cpp
+msgid "Find"
+msgstr "查找"
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "选择目录"
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "选择"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr "扫描中,请稍后..."
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr "需要先保存当前场景才能重新导入。"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Save & Re-Import"
+msgstr "保存并重新导入"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr "重新导入改变的资源"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr "重设位置(选择父节点)"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr "保持全局变换"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr "%s的方法列表"
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr "调用"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr "方法列表:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr "参数:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr "返回:"
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr "添加到分组"
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr "从分组中移除"
+
+#: tools/editor/groups_editor.cpp tools/editor/project_export.cpp
+msgid "Group Editor"
+msgstr "分组编辑"
+
+#: tools/editor/groups_editor.cpp
+msgid "Group"
+msgstr "分组"
+
+#: tools/editor/groups_editor.cpp
+msgid "Add"
+msgstr "添加"
+
+#: tools/editor/groups_editor.cpp
+msgid "Node Group(s)"
+msgstr "节点分组"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr "必须设置方法的对象节点!"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "连接到节点:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Binds (Extra Params):"
+msgstr "绑定(附加参数):"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path To Node:"
+msgstr "节点路径:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method In Node:"
+msgstr "节点方法:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "创建方法"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "连接"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "连接'%s'到'%s'"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "连接事件"
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "删除事件连接"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Edit Connections.."
+msgstr "编辑事件连接"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connections:"
+msgstr "事件:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr "停止"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr "开始"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr "测量:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr "帧时间(秒)"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr "平均帧时间(秒)"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr "渲染速度"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Fixed Frame %"
+msgstr "物理速度"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr "帧序号:"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr "动作%s已存在!"
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr "重命名输入事件"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr "添加输入事件"
+
+#: tools/editor/project_settings.cpp
+msgid "Meta+"
+msgstr "Meta+"
+
+#: tools/editor/project_settings.cpp
+msgid "Shift+"
+msgstr "Shift+"
+
+#: tools/editor/project_settings.cpp
+msgid "Alt+"
+msgstr "Alt+"
+
+#: tools/editor/project_settings.cpp
+msgid "Control+"
+msgstr "Ctrl+"
+
+#: tools/editor/project_settings.cpp
+msgid "Press a Key.."
+msgstr "按下一个键.."
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr "鼠标按键:"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr "左键"
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr "右键"
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr "中键"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr "滚轮向上"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr "滚轮向下"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr "按键 6"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr "按键 7"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr "按键 8"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr "按键 9"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr "手柄摇杆"
+
+#: tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr "轴"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr "手柄按钮"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr "添加输入动作"
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr "移除输入事件"
+
+#: tools/editor/project_settings.cpp
+msgid "Device"
+msgstr "设备"
+
+#: tools/editor/project_settings.cpp
+msgid "Button"
+msgstr "按钮"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr "左键"
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr "右键"
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr "中键(滚轮)"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr "滚轮向上滚动"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr "滚轮向下滚动"
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr "保存设置出错。"
+
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
+msgstr "保存设置成功。"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr "添加语言"
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr "切换全局AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name."
+msgstr "名称非法:"
+
+#: tools/editor/project_settings.cpp
+msgid "Valid characters:"
+msgstr "字符合法:"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr "名称非法,与引擎内置类型名称冲突。"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr "名称非法,与引擎内置类型名称冲突。"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr "名称非法,与已存在的全局常量名称冲突。"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Autoload"
+msgstr "添加Autoload"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Autoload"
+msgstr "移除Autoload"
+
+#: tools/editor/project_settings.cpp
+msgid "Move Autoload"
+msgstr "移动Autoload"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr "移除语言"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr "添加重定向路径"
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr "添加资源重定向"
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr "修改语言资源重定向"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr "移除资源重定向"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr "移除资源重定向选项"
+
+#: tools/editor/project_settings.cpp
+msgid "Enable"
+msgstr "启用"
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr "项目设置(engine.cfg)"
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
+msgstr "一般"
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr "删除"
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr "事件表"
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr "动作:"
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr "设备:"
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr "序号:"
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr "本地化"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr "语言"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr "语言:"
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr "添加:"
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr "重定向"
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr "资源:"
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr "地区重定向:"
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr "地区"
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr "AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Node Name:"
+msgstr "节点名称:"
+
+#: tools/editor/project_settings.cpp
+msgid "List:"
+msgstr "列表:"
+
+#: tools/editor/project_settings.cpp
+msgid "Singleton"
+msgstr "单例"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr "源文件和目标文件相同,操作忽略。"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr "源路径和目标路径相同,操作忽略。"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr "无法将目录移动到自身下。"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't operate on '..'"
+msgstr "无法对'..'引用操作。"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr "选择新名称和路径:"
+
+#: tools/editor/scenes_dock.cpp
+msgid "No files selected!"
+msgstr "没有选中任何文件!"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance"
+msgstr "创建实例节点"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Edit Dependencies.."
+msgstr "编辑依赖.."
+
+#: tools/editor/scenes_dock.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Owners.."
+msgstr "查看所有者"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Rename or Move.."
+msgstr "移动或重命名"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move To.."
+msgstr "移动"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Info"
+msgstr "信息"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Show In File Manager"
+msgstr "在资源管理器中打开"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Previous Directory"
+msgstr "上一个目录:"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Next Directory"
+msgstr "下一个目录:"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr "重新扫描文件系统"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr "收藏目录"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr "将选中的场景实例为选中节点的子节点。"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move"
+msgstr "移动"
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "转到行"
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "行号:"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr "替换"
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr "下一项"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr "未找到!"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr "替换"
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr "区分大小写"
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr "向后"
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "更换时提示"
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "仅选中"
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr "跳过"
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr "列:"
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugin List:"
+msgstr "插件列表"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "搜索替换:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "依赖项:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr "场景%s已被修改,重新加载后生效。"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr "资源%s正在使用中,修改将在重新加载后生效。"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "依赖"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "资源"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "依赖:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "修复依赖"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "依赖编辑器"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "查找替换资源:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "拥有者:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr "要删除的文件被其他资源所依赖,仍然要删除吗(无法撤销)?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "确定从项目中删除文件(此操作无法撤销)?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "加载出错:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "加载场景失败,找不到以下依赖项目:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Open Anyway"
+msgstr "仍然打开"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "应采取哪项行动?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "修复依赖项"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "加载出错!"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr "永久删除选中的%d条项目吗(此操作无法撤销!)?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "拥有对象"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "没有指定所属关系的资源:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "删除选中的文件?"
+
+#: tools/editor/editor_file_system.cpp
+msgid "Cannot go into subdir:"
+msgstr "无法打开目录:"
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr "运行模式:"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr "当前场景"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr "主场景"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr "主场景参数:"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr "场景运行设置"
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr "创建资源"
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr "打开资源"
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr "保存资源"
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr "资源工具"
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
+msgstr "脚本编辑器选项"
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr "请导出到项目目录之外!"
+
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
+msgstr "导出项目出错!"
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr "写入项目PCK文件出错!"
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr "没有针对'%s'平台的导出模板。"
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr "包含"
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr "修改图片分组"
+
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
+msgstr "分组名称不能为空!"
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr "分组名称中包含非法字符!"
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr "分组名称已存在!"
+
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
+msgstr "添加图片分组"
+
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
+msgstr "删除图片分组"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr "预览精灵集"
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr "项目导出设置"
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr "平台"
+
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
+msgstr "导出到平台"
+
+#: tools/editor/project_export.cpp tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Options"
+msgstr "选项"
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr "资源"
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr "导出选中的资源(包括其依赖资源)"
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr "导出项目中的所有资源"
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr "导出项目目录下的所有文件"
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr "导出模式:"
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr "导出的资源:"
+
+#: tools/editor/project_export.cpp
+msgid "File"
+msgstr "文件"
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr "动作"
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr "导出非资源文件筛选(使用英文逗号分隔,如:*.json,*.txt):"
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr "排除导出的非资源文件筛选(使用英文逗号分隔,如:*.json,*.txt):"
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr "导出时将文本场景写入二进制文件。"
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr "图片"
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr "保持原样"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr "节省磁盘空间(有损压缩,WebP)"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr "节省内存(BC/PVRTC/ETC)"
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr "转换图片(*.png):"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr "高质量(有损)节省磁盘空间"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr "收缩所有图片:"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr "压缩格式:"
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr "图片分组"
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr "分组:"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr "节省磁盘空间"
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr "节省内存"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr "压缩方式:"
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr "图片质量:"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr "精灵集:"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr "收缩方式:"
+
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
+msgstr "精灵集预览:"
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr "纹理过滤:\t\t"
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr "图片"
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr "取消选择"
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr "音效"
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr "音效转换方式(.wav文件):"
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr "保持不变"
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr "压缩(RAM - IMA-ADPCM)"
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr "采样率(Hz):"
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr "修剪"
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script"
+msgstr "脚本"
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr "脚本导出方式:"
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr "文本"
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr "编译"
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr "使用下列密码加密"
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr "脚本密匙(256位16进制码)"
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr "导出 PCK/ZIP"
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr "导出项目PCK文件"
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr "导出.."
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr "项目导出"
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr "导出预设"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr "创建UV贴图"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr "创建多边形"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr "编辑多边形"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr "编辑多边形(移除顶点)"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr "变换UV贴图"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr "2D多边形UV编辑器"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr "移动点"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr "Ctrl:旋转"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr "Shift: 移动所有"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr "Shift+Ctrl: 缩放"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr "移动多边形"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr "旋转多边形"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr "缩放多边形"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr "多边形->UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr "UV->多边形"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr "清除UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid"
+msgstr "网格"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Show Grid"
+msgstr "显示网格"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr "网格偏移量:"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr "网格大小:"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr "创建导航多边形"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr "移除多边形及顶点"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr "编辑已存在的多边形:"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr "鼠标左键:移动点"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr "Ctrl+鼠标左键:分割视图块"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr "鼠标右键:移除点"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr "正在解析第%d个三角形:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr "三角形 #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr "建立烘培:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr "解析多边形中"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr "修正光照"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr "分配纹理 #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr "烘培三角形 #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr ""
+
+#: tools/editor/plugins/camera_editor_plugin.cpp
+msgid "Preview"
+msgstr "预览"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr "无法保存主题到文件:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Add Item"
+msgstr "添加项目"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr "添加所有项目"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr "添加所有"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr "移除项目"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr "添加类项目"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr "移除类项目"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Template"
+msgstr "创建模板"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr "分页1"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr "分页2"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr "分页3"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr "数据类型:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr "图标"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr "样式"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font"
+msgstr "字体"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr "颜色"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr "曲线定点 #"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr "设置曲线顶点坐标"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr "向曲线添加顶点"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr "移除路径顶点"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Points"
+msgstr "选择顶点"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+拖拽:选择控制点"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "鼠标左键:添加点"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "鼠标右键:删除点"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "删除顶点"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Close Curve"
+msgstr "关闭曲线"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr "第%d项"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr "项目"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr "列表编辑器"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr "此操作无法引用在根节点上!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr "绘制砖块地图"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr "擦除砖块地图"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr "选择砖块"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr "选择"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr "擦除选中"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr "转置"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X (A)"
+msgstr "沿X轴翻转(A)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y (S)"
+msgstr "沿Y轴翻转(S)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr "旋转0度"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr "旋转90度"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr "旋转180度"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr "旋转270度"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Find.."
+msgstr "查找.."
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Find Next"
+msgstr "查找下一项"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Replace.."
+msgstr "替换.."
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr "前往行.."
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr "顶点"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr "片段"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr "光照"
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr "StyleBox预览:"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr "保存主题出错。"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr "保存出错"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr "导入主题出错。"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr "导入出错"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr "导入主题"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr "主题另存为"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr "全部保存"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr "后退"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr "前进"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr "重新加载主题"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr "保存主题"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr "主题另存为"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Left"
+msgstr "向左缩进"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Right"
+msgstr "向右缩进"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Comment"
+msgstr "切换注释"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Clone Down"
+msgstr "拷贝到下一行"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Complete Symbol"
+msgstr "代码补全"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Trim Trailing Whitespace"
+msgstr "修剪行后空白"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Auto Indent"
+msgstr "自动缩进"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Function.."
+msgstr "前往函数.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr "调试"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Breakpoint"
+msgstr "切换断点"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr "保持调试器打开"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr "窗口"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr "向左移动"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr "向右移动"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Help"
+msgstr "帮助"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Contextual"
+msgstr "搜索光标位置"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr "教程"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr "打开 https://godotengine.org 中的教程."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr "类型"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr "搜索类"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "搜索帮助"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr "搜索文档"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr "前往上一个编辑文档"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr "前往下一个编辑文档"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr "创建脚本"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+"磁盘中的下列文件已更新。\n"
+"请选择执行那项操作?:"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr "重新加载"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr "重新保存"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr "找不到砖块:"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr "项目名称或ID"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr "从场景中创建?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr "确定要合并场景?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr "从场景中创建"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr "从场景中合并"
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr "旋转偏移量:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr "旋转步长:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr "移动旋转中心位置"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr "移动动作"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr "编辑IK链"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr "编辑CanvasItem"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr "编辑锚点"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr "缩放(%)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr "粘贴姿势"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode (Q)"
+msgstr "选择模式(Q)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr "拖动来旋转"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr "按住Alt拖动: 移动"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr "按下V键修改旋转中心,在移动时按下Shift+V来拖动它。"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr "Alt+鼠标右键:显示鼠标点击位置下的所有节点列表"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr "移动模式(W)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr "旋转模式(E)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr "显示鼠标点击位置的所有节点(同Alt+鼠标右键)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr "点击设置对象的旋转中心。"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr "移动画布"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr "锁定选中对象的位置。"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr "解锁选中对象的位置。"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr "确保节点的子孙无法被选中。"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr "恢复节点的子孙能够被选中。"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr "添加骨骼"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr "清除骨骼"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr "添加IK链"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr "清除IK链"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "View"
+msgstr "视图"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr "放大"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr "缩小"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr "重置缩放"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr "设置缩放.."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr "居中显示选中节点"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr "最大化显示选中节点"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr "锚点"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys (Ins)"
+msgstr "插入关键帧( 创建轨道)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr "插入关键帧"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr "插入关键帧(已有轨道)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr "拷贝姿势"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr "清除姿势"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr "设置值"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr "确定要移除项目%d吗?"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Scene"
+msgstr "导入场景"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr "移除选中项目"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr "从场景中导入"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr "切换旋转模式"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr "更改注释"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr "从曲线中移除顶点"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr "在曲线中移动顶点"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr "添加遮光多边形"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Set region_rect"
+msgstr "设置纹理区域"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Sprite Region Editor"
+msgstr "精灵纹理区域编辑"
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr "长度:"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr "错误:无法加载帧资源!"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr "添加帧"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr "删除资源"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr "资源剪切板中无内容,或内容不是纹理贴图!"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr "粘贴帧"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr "添加空白帧"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "重命名动画"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Add Animation"
+msgstr "添加动画"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr "移除动画"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr "修改循环"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr "修改FPS"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr "(空)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr "动画"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr "速度(FPS)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Loop"
+msgstr "循环"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr "动画帧"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Load Resource"
+msgstr "加载资源"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr "插入空白帧(之前)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr "插入空白帧(之后)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr "向上"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr "向下"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr "切换AutoPlay"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr "新动画名称:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr "新建动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr "重命名动画:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr "错误:动画名不合法!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr "错误:已存在同名动画!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr "更改混合时间"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr "加载动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "复制动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr "错误:没有拷贝的动画!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr "错误:剪切板中没有动画资源!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr "已粘贴的动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr "粘贴动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr "错误:没有选中要编辑的动画!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr "从当前位置倒放选中动画(A)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr "从结束时间倒放选中动画(Shift+A)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr "从头播放选中动画(Shift+D)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr "从当前位置播放选中动画(D)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr "动画位置(单位:秒)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr "在播放中创建动画。"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr "从磁盘中加载动画。"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr "保存当前动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr "在播放器中显示动画列表。"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr "加载后自动播放"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr "编辑目标混合时间"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr "动画工具"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr "拷贝动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "创建新动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "动画名称:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr "混合时间:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr "跨动画时间混合"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation"
+msgstr "动画"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr "加载图片出错:"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr "生成AABB"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr "选择源Mesh:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr "源Mesh:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr "X轴"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr "Y轴"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr "Z轴"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr "随机旋转:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr "随机砖块:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr "随机缩放:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Scale:"
+msgstr "缩放"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Amount:"
+msgstr "数量:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr "打开声音文件"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr "错误:无法加载音效!"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr "添加音效"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr "停止"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr "播放"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr "重命名音效"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr "删除音效"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr "16位"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr "8位"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr "立体声"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr "新名称:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr "重新开始(秒):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr "随机开始(秒):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr "开始!"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr "混合:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr "混合0:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr "混合1:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr "当前:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr "添加输入事件"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr "删除输入事件"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr "重命名"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr "动画树可用。"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr "动画树不可用。"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr "动画节点"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr "导入动画"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr "编辑节点筛选"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr "筛选.."
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr "解析BBCode"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr "正交"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr "透视"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr "已忽略变换。"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr "X轴变换。"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr "Y轴变换。"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr "Z轴变换。"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr "缩放到%s%%"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr "旋转%s度"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top (Num7)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom (Shift+Num7)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left (Num3)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right (Shift+Num3)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front (Num1)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear (Shift+Num1)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective (Num5)"
+msgstr "透视(Num5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal (Num5)"
+msgstr "正交(Num5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr "环境"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Selection (F)"
+msgstr "选中项(F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view (Ctrl+Shift+F)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr "XForm对话框"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr "没有选用要实例化的场景!"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr "无法实例化场景!"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr "缩放模式(R)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr "本地坐标"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr "变换对话框.."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr "使用默认光照"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr "使用默认sRGB"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr "显示法线"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr "显示线框"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr "显示原点"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr "显示网格"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr "Viewport设置"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr "默认光照法线:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr "环境光颜色:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr "透视视角(角度):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr "查看Z-Near"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr "查看Z-Far"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr "修改变换"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr "移动:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr "旋转(角度):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr "缩放(比率):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr "变换类型"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr "错误:无法加载资源!"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr "添加资源"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr "重命名资源"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr "资源剪切板中无内容!"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr "动画选项"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr "源路径为空。"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Target path is empty."
+msgstr "目标路径为空。"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr "目标路径必须是一个完整的资源文件路径。"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Target path must exist."
+msgstr "目标路径必须存在。"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr "导入场景出错。"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr "导入3D场景"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr "源场景:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Target Path:"
+msgstr "目标路径:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr "与目标场景相同"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr "共享的"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr "目标贴图目录:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Options:"
+msgstr "选项:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
+msgstr "接受"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Overwrite Existing Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Overwrite Existing, Keep Materials"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Keep Existing, Merge with New"
+msgstr "保留已有,与新的合并。"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Keep Existing, Ignore New"
+msgstr "保留已有,忽略新的。"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "This Time:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Next Time:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr "找不到下列文件:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr "仍然导入"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr "取消"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr "导入|打开"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr "正在编辑的场景尚未保存,仍然要打开导入的场景吗?"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr "导入场景"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr "执行自定义脚本.."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr "导入图片:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr "不允许导入文件本身:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr "保存中..."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "3D Scene Animation"
+msgstr "3D场景动画"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr "不压缩"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr "无损压缩(PNG)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr "有损压缩(WebP)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr "VRAM压缩"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr "纹理格式"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr "高质量(WebP)压缩方式:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr "纹理选项"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr "请添加文件!"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr "精灵集至少需要一个文件。"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr "导入出错:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr "大图导入仅支持一个输入文件。"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr "最大纹理尺寸:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr "导入2D精灵集"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr "大图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr "导入2D大图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture"
+msgstr "源贴图:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s)"
+msgstr "源贴图:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr "导入2D贴图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr "导入3D贴图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr "导入贴图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "2D Texture"
+msgstr "2D贴图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "3D Texture"
+msgstr "3D贴图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Atlas Texture"
+msgstr "精灵图集"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+"提示:大多数2D贴图并不需要导入操作,只要将png/jpg文件放到项目目录下即可。"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr "源贴图:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr "切除空白区域。"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture"
+msgstr "贴图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr "导入大图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr "加载源图片"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr "插入中"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr "正在保存文件"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr "无法保存大图:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr "使用以下图片生成精灵集:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr "加载图片中:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr "无法加载图片:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr "正在转换图片"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr "剪裁图片"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr "无法保存精灵集图片:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr "无法保存转换的贴图:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr "请设置源字体文件!"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr "请设置目标字体资源!"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr "无法加载/处理源字体。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr "无法保存字体。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr "源字体文件:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr "源字体大小:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr "目标资源:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr ""
+"The quick brown fox jumps over the lazy dog.\n"
+"我能吞下玻璃而不伤身体。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr "测试:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr "导入字体"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr "此文件已经是一个Godot的字体文件,请提供一个位图字体(BMFont)文件。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr "打开位图字体失败。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr "初始化FreeType出错。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr "未知的字体格式。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr "加载字体出错。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr "字体大小非法。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr "自定义字体文件非法。"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr "没有音效要导入!"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr "保存路径为空!"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr "导入声音文件"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr "源音效文件:"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Audio Sample"
+msgstr "音效"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr "输入源非法!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr "源语言文件非法!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr "列"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr "没有要导入的项目!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr "目标路径为空!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr "导入多种语言翻译"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr "无法导入!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr "导入语言翻译"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr "源CSV文件:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr "忽略第一行"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr "压缩"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr "添加到项目(engine.cfg)"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr "导入语言:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Translation"
+msgstr "语言"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr "没有要导入的Mesh"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr "导入单个Mesh"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr "源Mesh:"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Mesh"
+msgstr "Mesh"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr ""
+
+#~ msgid "Scene Tree:"
+#~ msgstr "场景树:"
+
+#~ msgid ""
+#~ "NOTICE: You are not forced to import textures for 2D projects. Just copy "
+#~ "your .jpg or .png files to your project, and change export options later. "
+#~ "Atlases can be generated on export too."
+#~ msgstr ""
+#~ "注意:对于大多数2D纹理图片,一般不需要导入操作。只需要将.jpg或.png文件放到"
+#~ "项目目录下,并存导出选项即可。精灵集也可以在导出时生成。"