
泚é
ãã®èšäºã§ã¯ãJavaã§èšè¿°ãããã°ã©ãã£ã«ã«ãªã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã±ãŒã·ã§ã³ãäœæã§ãããã¬ãŒã ã¯ãŒã¯ã«ã€ããŠèª¬æããŸãããåæã«Oracle JREãŸãã¯OpenJDKããå®å šã«ç¬ç«ããŠããŸãã ãã¬ãŒã ã¯ãŒã¯ã®äž»ãªã€ããªãã®ãŒã¯ãå¯èœã§ããã°ãåãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ã¢ããªã±ãŒã·ã§ã³ã«ããã€ãã£ãããªã«ãã¯ã¢ã³ããã£ãŒã«ãæäŸããããšã«ã€ããŠã®éçºè ã®å¿é ãåãé€ãããšã§ãã
å®éãåºåã§ã¯ãã·ã¹ãã APIã®ã¿ã«äŸåããå®è¡å¯èœãã¡ã€ã«ãååŸããŸãããã®APIã«ã¯ããJavaã§èšè¿°ããããã¹ã¿ã³ãã¯ãããŸããã
ãã¬ãŒã ã¯ãŒã¯ã®ãã¹ãŠã®ã³ã³ããŒãã³ãã«ã¯ããªãã©ã«ã©ã€ã»ã³ã¹ïŒBSDãŸãã¯ApacheïŒããããŸããããã«ãããïŒåçšãå«ãïŒéçºã§ãããã䜿çšã§ããŸãã
ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ãããªãã¯ã¢ã«ãã¡çã®æ®µéã«ãããŸããããã¯ããã®ããã©ãŒãã³ã¹ã®äžéšãæå³ããŸãããå®èšŒãããŠããŸããã 䜿çšããå§ãããŸãïŒåé¡ã«ã€ããŠã®èŠæ ã«è³ãåŸãã解決ã«åªããŸãïŒããããã©ãŒãã³ã¹ã¯ä¿èšŒãããŸããã
ãã¹ãŠã®ãã©ãããã©ãŒã ã§ã®ãã¬ãŒã ã¯ãŒã¯ã®åäœã瀺ããæ¢è£œã®çµã¿ç«ãŠæžã¿ããŒãžã§ã³ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã¡ãã§ãã
ç«ã®äžã§ã®å¥œæã®è©³çŽ°ã«èå³ããããã¹ãŠã®äººã«ãé¡ãããŸãã
1.ã¯ããã«
å°ããªåæ çãªçŽ¹ä»ããããŸãã ãã®ãããžã§ã¯ãã®ç±æ¥ãšéçºæ¹æ³ã«èå³ããªãå Žåã¯ããã®ã»ã¯ã·ã§ã³ãå®å šã«ã¹ãããã§ããŸãã åé¡ã®æè¡é¢ã¯ã»ã¯ã·ã§ã³2ããå§ãŸããŸãã
1.1ã ã¿ã€ãã«ã«ã€ããŠ
ZetesïŒãã·ã¢èªèš³-ZetïŒã¯ããç®ç«ããªãããªãªã³ããã¯ã®ç¥ã®1人ã§ãããã¢ã«ãŽããŒãã®ãã£ã³ããŒã³ã«åå ããBoreadå åŒã§ãã 圌女ã®è¶³ãšé ã«ç¿Œãæã€ããªãã«ãªã¹ãçãªãã£ã©ã¯ã¿ãŒã
1.2ã æåã®ã¹ããã
1幎ã¡ãã£ãšåã«ãHabrã«ã€ããŠã®æåã®èšäºãæžããŸãã ã ãã®çŽ æã¯ç§ã«ãšã£ãŠææ°ã®ãã®ã§ããããããã«éåžžã«èå³æ·±ããã®ã«ãªããŸããã ããã¯ã AvianãšããJavaä»®æ³ãã·ã³ã®ä»£æ¿å®è£ ã§ããã ãã®ãããžã§ã¯ãã䜿çšãããšãä»®æ³ãã·ã³ãå®è¡å¯èœãã¡ã€ã«ã«çŽæ¥åã蟌ãããšãã§ããBSDã©ã€ã»ã³ã¹ã®äžã§é åžãããŸããããã«ããããŠãŒã¶ãŒã¯çµæã®ãœãªã¥ãŒã·ã§ã³ãããããç®çã§å 責ããŠäœ¿çšã§ããŸãã æåŸã«ãJavaéçºè ãšããŠãç§ã¯å®å šãªèªç±ãæããŸããã ãããŠã圌ã¯ãã®åã³ãåãã¡åããæè¬ãšæåŸ ãåããŸããã ã³ã¡ã³ãã«ã¯ãã¯ãã¹ãã©ãããã©ãŒã ã®GUIãããã«æã£ãŠæ¥ãã®ãããã ãããšãã倢ã®äžã§è©±ãã人ãããŸããããç§ã¯èªããªããã°ãªããŸããããç§èªèº«ãé³¥ã®éçºè ãšåæ§ã®èããæã£ãŠããŸãã...
çµæã®å質ãæãªãããšãªããGUIã¢ããªã±ãŒã·ã§ã³ã®éçºããã»ã¹ãå¯èœãªéãç°¡çŽ åãããã£ãã®ã§ãã ç§ã¯èãå§ããŸããã ç§ã®åã«ã¯ãJavaã§èšè¿°ãããWindowsãLinuxãããã³OS Xã§å®è¡ããããããžã§ã¯ãã®äŸããããŸãããããšãã°ãEclipseã ãŸãã¯SmartGITã ãããã¯ãã¹ãŠïŒå®ç§ã§ã¯ãããŸãããïŒåªããUIãåããŠããããã¹ãŠSWTã°ã©ãã£ãã¯ã©ã€ãã©ãªã䜿çšããŠããŸããã ãã®ã©ã€ãã©ãªã¯Avianã«ãã£ãŠå®å šã«ãµããŒããããŠããŸããã å šäœããŸãšããããã«æ®ã£ãŠããã ãã§ã现éšã®äžéšããããã«ãæãªããã ãã§ãå°èŠæš¡ãªããæ欲çãªãããžã§ã¯ãã«äœ¿çšã§ããŸãã
æ²ããããªãä»äºã®éçšã§é¿ããããªãå°é£ãçŸããŸããã ãããã®ã»ãšãã©ã¯ãé³¥é¡ã®äžéšã§ããæšæºã¯ã©ã¹ã©ã€ãã©ãªã®æ¬ é¥ã«ãããã®ã§ããã å°æ°ã®äººã ã«ãã£ãŠéçºãããŠãããããžã§ã¯ãã¯ããŸã å®å šãªäºææ§ãèªã£ãŠããŸããã æã ãæãåºæ¬çãªãã®ãæ¬ ããŠããŸã...äŸãã°ãç§ã¯å人çã«ãœã±ãããè¿œå ããŸããã ããã€ãã£ããã¯ã©ã¹ãã¹ã§å€å°è€éãªããã°ã©ã ããã¬ãŒã ã¯ãŒã¯ãååŸããããšããŠå€±æãããããæšæºã©ã€ãã©ãªãžã®ã¯ã©ã¹ã®è¿œå ãããã«é²ãããJavaéçºè ã¯ã»ãšãã©ããªãããšã«æ°ä»ããç§ã®ç±æã¯ã»ãšãã©ãªããªããŸããã
ãã®ãããã¯ã«æ»ãã®ã¯ããªãåã®ããšã§ãã ãã®åé¡ã®è§£æ±ºçã¯ãããçš®ã®ä»£æ¿Java Coreã¯ã©ã¹ã©ã€ãã©ãªãèŠã€ããããšã§ããã æ®å¿µãªãããåœæç§ãç¥ã£ãŠããå¯äžã®ã©ã€ãã©ãªã¯GNUã¯ã©ã¹ãã¹ã§ããã ãããã圌女ã®å èš±ã¯ç§ã«åã£ãŠããŸããã§ããã ãããããç§ã®ç 究ã¯ã人ã ã®çŽ æŽãªçµæã«ç²ŸéããŠããããã§ãã ããããæ²ããããªãçŽ æŽã«ãªããŸãããããã¯ãçŸåšæ»ãã ãããžã§ã¯ãã§ããApache HarmonyãèŠã€ããã®ã«çŽ1ãæïŒã¢ã¯ãã£ãã§ã¯ãªããå®æçãªæ€çŽ¢ïŒããã£ãããã§ãã ãã®ãããžã§ã¯ãã«ã¯å¿ èŠãªãã¹ãŠã®ã¯ã©ã¹ãå«ãŸããŠãããç§ãèå³ãæã£ãŠãããã¹ãŠã®OSã§åäœããã¯ãã§ããããæ®å¿µãªããæ»ãã§ããŸããŸããã ãããAvianã«è¿œå ããããšã¯ã1人ã«ãšã£ãŠéåžžã«æéã®ãããäœæ¥ã§ããã ç§ã¯Avianã®éçºè ã«ã¢ã€ãã¢ãæ±ããŸãããBSDã©ã€ã»ã³ã¹ã¯Apacheãããç·©åãããŠãããããããããçŽæ¥Avianã«ã¯ã©ã¹ãè¿œå ããªãããšãææããŸããã ãã ãã Android Classpathããå¿ èŠãªã³ã³ããŒãã³ãã䜿çšããŠAvianããã«ãããããšã¯å¯èœã§ãã ãã®ç¥èã¯éãããã«ãã®ããã«æãããã ãã¡ããã§ãïŒ Androidã«ã¯Javaã¯ã©ã¹ãã¹ã®å®è£ ãå«ãŸããŠãããOracleã®ã©ã€ã»ã³ã¹ãäžèŠã§ããã ãã§ãªããäŒæ¥éã®èšŽèšã«ãèŠããã§ããŸãïŒæè¿ã®åºæ¥äºãèæ ®ãããšããã®ãããªå£°æã«ã¯ãã£ãšæ³šæããå¿ èŠããããŸãïŒã ãŸããApacheã©ã€ã»ã³ã¹ã«ããããã®ã©ã€ãã©ãªã䜿çšã§ããŸãã ããã«ãAndroidã¯ã©ã¹ãã¹ãåãApache Harmonyã®åå«ã§ããããšãè¿œå ãã䟡å€ããããŸãã ãã®ããããªãã·ã§ã³ã¯æ®ã£ãŠããŸããã
幞çŠæã®ç¶æ ã§ãç§ã¯å¿ èŠãªãã®ããã¹ãŠåãåºããŠãèªå® ã®Appleãã·ã³ã«ãŸãšããŸããã ããã€ãã®æåŸã®ä»äžãã®åŸãããã¯åããã å®è¡å¯èœãã¡ã€ã«ã¯å€§å¹ ã«è¥å€§åããŠãããã¢ã»ã³ããªã«ã¯15åããããŸãããããã®çµæãæ¬æ Œçãªã¹ã¿ã³ãã¢ãã³Javaãåäœããããã«ãªããŸããã ãã®ç¬éãç§ã¯ãã§ã«ãã®èšäºã粟ç¥çã«æžãå§ããŸããããWindowsã§ããããã¹ãŠãåéããããšãããšããã«åã³ã解決ããŸããã æ²ããããª...
1.3ã Androidã¯ã©ã¹ãã¹ã®ããŒãã³ã°
ãã¡ãããAndroidã¯Linuxäžã«æ§ç¯ãããŠããŸãã ãããŠãã¡ãããClasspathã®ãã€ãã£ãéšåå šäœãPosixã«æ ¹ãããŠããŸãã ç§ã¯ãAndroidã¯ã©ã¹ãã¹ãWin32ã«ç§»æ€ãããšããé倧ãªèª²é¡ã«çŽé¢ããŸããã ããã¯çŽ3ã¶æåã§ããã ã¢ã»ã³ããªå šäœãMinGWã«åºã¥ããŠãããããããã€ãã®åºæ¬çãªPosixé¢æ°ïŒWindowsã§æ£ç¢ºã«ç¹°ãè¿ããããã®ïŒãååšããŠããŸããã ããããæ®å¿µãªããããããã®äžéšã¯ãããã«ç°ãªãæ¹æ³ã§åäœããŸãïŒããšãã°ãWinSockã¯ãBSDãœã±ãããšäžèŽããããã«åªããŠããŸãããæ²ããããšã«ãããã€ãã®å Žæãç¹ã«I / Oã«é¢é£ããéšåã§ããªãç°ãªããŸãïŒã ä»ã®éšåã¯ãå¿ èŠã«å¿ããŠWindowsã«å®å šã«ååšããŸããã ããšãã°ãWindowsã®ååã®ãªããã€ãã¯éåžžã«å¶éãããŠãããäžéšã®Java APIé¢æ°ã§å¿ èŠãªéããããã³ã°I / Oã®äœ¿çšãèš±å¯ããŠããŸããã
幞ããªããšã«ãåå¿JustAManã¯ç§ã®ç 究ãå©ããŠãããŸããã圌ãããªããŠããããããPosixã®ããã¯ã®åšããããŸãããŸããã ç§ãã¡ã¯èªåã§äœããæžããŠãç°¡åãªã¢ããªã±ãŒã·ã§ã³ãšå°ããªSimple Frameworkã䜿ã£ãŠãã¹ãããŸããã GPLã³ãŒããæ éã«é¿ããŠããªãŒãã³ãœãŒã¹ããå¥ã®ãã®ãåããŸããã ç§ãã¡ã¯ãã®ãããªããšãããŠããäžçã§äžäººã§ã¯ãããŸããç¥ã«æè¬ããŸã...
ãã¡ãããç§ãã¡ã®ç®æšã¯ãPosix APIã®ãšãã¥ã¬ãŒã·ã§ã³ãåçŸããããšã§ã¯ãããŸããã§ããïŒCygwinã¯ãããçŽ æŽãããä»äºãããŸãããæãèªç±ãªã©ã€ã»ã³ã¹ãæã£ãŠããŸããïŒã LUNIïŒAndroidã®ç¥èªãLangUtils Net IOã¯ãJavaã³ã¢ãæ§æãã4ã€ã®äž»èŠãªããã±ãŒãžã®ç¥ã§ãïŒã欲ããã£ãã®ã§ãã
çŸåšãäž»èŠéšåã®ãã®äœæ¥ã¯å®äºããŠããããã°ä¿®æ£æ®µéã«ãããŸãã ãã¹ã«ã¯ãŸã ããã€ãã®åé¡ããããŸãããããã¯ãã¹ãŠå°ããªããšã§ãã
çµæãšããŠç§ãã¡ãåŸããã®ã¯ãããªãã®æ³šæãåŒãä»ããŸãã
2.ãªãããããã¹ãŠå¿ èŠãªã®ã§ããïŒ
ç§ãæããæãæãã質åã æ£çŽãªçãã¯ããã§ãïŒç§ã¯èå³ãããã®ã§ãããããŸãã ãããŠããããä»ã®èª°ãã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã ãããããã®ãŠãŒã¶ãŒïŒãŸã éåžžã«å°æ°ïŒã ããã©ã€ãã©ãªã®æçšæ§ãæ£åœåã§ãããšããäºå®ã«ãããããããå°ãªããšããã®äž»ãªã€ããªãã®ãŒã説æããããšããŸãã
Zetesã®ç®æšã¯ãJavaããã¹ã¯ãããéçºã«åããŠç¶ç¶ããããšã§ãã èšèªèªäœãã¯ãã¹ãã©ãããã©ãŒã ã§ãããšããäºå®ïŒããã«ãäœããã®åœ¢ã§ã³ã³ãã€ã«ããã圢åŒã§ç§»æ€å¯èœïŒã«ããããããããã®äžã§ãã«ãã·ã¹ãã ã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåãéçºè ãã¢ããªã±ãŒã·ã§ã³ãå°ãªããšãããçšåºŠããã€ãã£ããã«èŠãããå Žåã ãæåã®éãããèæ ®ããŠãã ããã æéã®äŸã WindowsïŒããã³Linux + X + GTKïŒã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ã¡ãã¥ãŒããŒã衚瀺ããããã«å°ãªããšã1ã€ã®ãŠã£ã³ããŠãäœæããå¿ èŠããããŸãã OS Xã§ã¯ãã¡ãã¥ãŒã¯ãŠã£ã³ããŠãšã¯å¥ã®ãã®ã§ããããŠã£ã³ããŠããªãå Žåã§ãå®å šã«ååšããŸãã Windowsã§ã¯ãéåžžãExitã¢ã€ãã ã¯Fileã«ãAboutã¢ã€ãã ã¯Helpã«é 眮ãããŸãã OS Xã§ã¯ãäž¡æ¹ãšãã·ã¹ãã ã¡ãã¥ãŒã«ãããŸãã ãããããããã¯äºçŽ°ãªããšã§ãã éãããããããæ·±å»ã§ãã ããšãã°ãOS Xã§ã¯ãGUIã¢ããªã±ãŒã·ã§ã³ãéè€ããŠå®è¡ããããšã¯ã§ããŸãããåããã°ã©ã 㯠ããã«ãããã¥ã¡ã³ãã€ã³ã¿ãŒãã§ã€ã¹ãŸãã¯ã·ã³ã°ã«ããã¥ã¡ã³ãã€ã³ã¿ãŒãã§ã€ã¹ã®ããããããµããŒãããå¿ èŠããããŸãã ã€ãŸããæ°ããããã¥ã¡ã³ããéããšãã·ã§ã«ã¯ãã®ååãæ¢ã«å®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã«æž¡ãã ãã§ãã ãã®åäœã¯äŸ¿å©ã§ãïŒå®è£ ãããŠããå ŽåïŒããWindowsããã³Linuxã§ã¯ãä»ã®ã·ã¹ãã ã¡ã«ããºã ã䜿çšããŠã·ãã¥ã¬ãŒãããå¿ èŠããããŸãã
ãããïŒãããŠãå°æ¥ããã®ãããªãã¹ãŠã®ççŸïŒã¯ããŒãŒã¿ã«ãã£ãŠåãããã¹ãã§ãã ããšãã°ã次ã®ã¹ãããã¯ãã¢ããªã±ãŒã·ã§ã³ãWindowsã¬ãžã¹ããªãOS Xã®å¯Ÿå¿ããã©ã€ãã©ãªãã©ã«ããŒãããã³Linuxã®GConfã®äž¡æ¹ã«èšå®ãä¿åã§ãããŠãããŒãµã«ã¯ãã¹ãã©ãããã©ãŒã APIã®éçºã§ãã
èšãæããã°ããã¬ãŒã ã¯ãŒã¯ã®ã¿ã¹ã¯ã¯ã人æ°ã®ããã·ã¹ãã ã®APIããå ±éã®èŠçŽ ãã«ããäžéšã®æçšãªæ©èœãä»ã®æçšãªæ©èœã§è£å®ããããšã§ãã
ãããŠãå¿ ç¶çã«çãã質åãäºæ³ããŠãç§ã¯èšãã§ãããïŒãããããã®ã©ã€ãã©ãªã¯å°ãªããšãä»ã®ãšããã¢ãã€ã«OSã«ã¯é åžãããŸããã 圌ãã¯ãã€ããªãã®ãŒãšããã°ã©ãã³ã°ã®ã¢ãããŒãã®äž¡æ¹ã§ãã¹ã¯ãããã®ãã®ãšã¯å€§ããç°ãªããŸã ã
3.ããã§ããŒãŒã¿ã¯äœã§ããïŒ
ãã¬ãŒã ã¯ãŒã¯ã䜿çšãããšãäœæãããJavaã¢ããªã±ãŒã·ã§ã³ãååŸããã·ã¹ãã ã©ã€ãã©ãªã®ã¿ã«äŸåãããã€ãã£ãå®è¡å¯èœãã¡ã€ã«ã«ã¢ã»ã³ãã«/ããã¯ã§ããŸãïŒSWTã䜿çšããå Žåãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ãããSWTã©ã€ãã©ãªã¯ãããã§ãïŒã å¿ èŠãªã®ã¯ã¢ã»ã³ããªãŠãŒãã£ãªãã£ã®ã¿ã§ãã ããã°ã©ã èªäœã«å ããŠèšè¿°ããå¿ èŠãããã®ã¯ãæçµçãªå®è¡å¯èœãã¡ã€ã«ã®ååããšã³ããªãã€ã³ãïŒã¡ã€ã³é¢æ°ïŒãå«ãJavaã¯ã©ã¹ã®ååãªã©ãå®çŸ©ããæãåçŽãªã¡ã€ã¯ãã¡ã€ã«ã ãã§ãã
ããé«åºŠãªäœ¿çšã«ãããã¢ã»ã³ããªã·ã¹ãã ã§ã¯ããœãŒã¹ãã¡ã€ã«ãC ++ã§è¿œå ããããå€éšã©ã€ãã©ãªïŒåçããã³éçã®äž¡æ¹ïŒãæ¥ç¶ãããã§ããŸãã ãããã£ãŠãæçµçã«ã¯ãJNIãäœã§ãããããç¥ããªããçŽç²ãªãJavaã®éçºè ãšãJNIãããããå Žæã§äœ¿çšãããã·ãŒãºã³ããªãªã«ããã®äž¡æ¹ã®ã¢ã€ãã¢ã«æºè¶³ããã¯ãã§ãã
4. Zetesã¯äœã§æ§æãããŠããŸããïŒ
ã¿ã¹ã¯ã®å¯èœãªéãæ倧ã®ã¯ã©ã¹ãã«ããŒããããã«ããã¬ãŒã ã¯ãŒã¯ã¯3ã€ã®éšåã«åå²ãããŸããã
4.1ã ãŒãŒãã¹ãã£ãŒã
æ žãšãªãã®ã¯ZetesFeetã©ã€ãã©ãªã§ãã ããã«ã¯ãAvianãšãã¯ã©ã¹ã©ã€ãã©ãªã®2ã€ã®ããªã¢ã³ãã®1ã€ã§ããAvian ClasspathãŸãã¯Android Classpathãå«ãŸããŠããŸãã
åã©ã€ãã©ãªã®é·æãšçæãè¡šã«ç€ºããŸãã
æ¯èŒåºæº | é³¥é¡ã®ã¯ã©ã¹ãã¹ | Androidã¯ã©ã¹ãã¹ |
å®å šæ§ãšã³ã³ãã©ã€ã¢ã³ã¹ | æ¡åŒµãããŸãããæå°éã®ãã®ã®ã¿ãå«ãŸããŠããŸãã ãã ãããã®ãã©ãããã©ãŒã ã§å°ãªããšãæ·±å»ãªå®æãããããžã§ã¯ããèµ·åããããšã¯ã§ããŸãã | ãã¹ãŠã®äž»èŠãªJava Coreã¯ã©ã¹ã®å®è£ ãå«ãŸããŠããŸãã çè«çã«ã¯ãæ··ä¹±ããããªãã¢ããªã±ãŒã·ã§ã³ããµããŒãããå¿ èŠããããŸãã å®éã«ã¯ãã©ã€ãã©ãªãWin32ã«ç§»æ€ããéã«è€éãªåé¡ãçºçããå ŽåããããŸãã ãã¡ããããã®ãããªãšã©ãŒã¯ãã¹ãŠã§ããã ãæ©ãä¿®æ£ãããŸãã |
å®è¡å¯èœãã¡ã€ã«ãµã€ãº | SWTã¯ã©ã¹ãå«ãŸãªãå®è¡å¯èœãã¡ã€ã«ã®ãµã€ãºã¯ã¡ã¬ãã€ãããããã«è¶ ããŠããŸã | å®è¡å¯èœãã¡ã€ã«ã®ãµã€ãºã¯æ倧25ã¡ã¬ãã€ãã§ãã ããã¯äž»ã«ãAndroidã¯ã©ã¹èªäœïŒçŽ5MBãå ããïŒãåå ã§ã¯ãªããAndroidã¯ã©ã¹ãã¹ã«å«ãŸããèšèªãµããŒãã©ã€ãã©ãªã§ããICU4Cã«å«ãŸãããšã³ã³ãŒãããŒãã«ãåå ã§ãã |
å èš± | BSDïŒGPLäºæïŒ | ApacheïŒããããªãŒãã³ã§ãããGPLãšäºææ§ããããŸããïŒ |
ã€ãŸããJavaãåé¡ãªãåäœãããç¬èªã®ããã€ã¯ããäœæãããå Žåã¯ãAndroidã¯ã©ã¹ãã¹ã䜿çšããŸãã
ããã«ãZetesFeetã«ã¯ãã©ã®ã¿ã€ãã®ã¢ããªã±ãŒã·ã§ã³ã«ãåºæã§ã¯ãªããããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã®äœæã«åœ¹ç«ã€ãã¹ãŠã®Zetesã¯ã©ã¹ãå«ãŸããŠããå¿ èŠããããŸãã
ZetesFeetã®äžã«ã2ã€ã®ä»£æ¿ã©ã€ãã©ãªãæ§ç¯ãããŸããã
4.2ã ãŒãã·ã£ã³ã
ãããã®æåã®-ZetesHands-ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã æ°ããã·ã¹ãã ãŠãŒãã£ãªãã£ããããšãã°DSLã€ã³ã¿ãŒããªã¿ãŒãäœæããå Žåã¯ãããã«ãããŸãã éã°ã©ãã£ã«ã«ã¢ããªã±ãŒã·ã§ã³ã¯ZetesHandsã䜿çšããŸãã Windowsã§ã¯ããã®ãããªã¢ããªã±ãŒã·ã§ã³ã¯ã³ã³ãœãŒã«ãŠã£ã³ããŠãåãåããŸãã OS Xã§ã¯ãå®è¡å¯èœãã¡ã€ã«ã«ã³ã³ãã€ã«ãããŸããããã³ãã«ã¯äœæãããŸããã
4.3ã Zeteswings
2çªç®ã®ã©ã€ãã©ãªã§ããZetesWingsã¯ãGUIã¢ããªã±ãŒã·ã§ã³ã®äœæã«äœ¿çšãããŸãã ã¢ã»ã³ããªããã»ã¹ã«ã¯ã¢ã€ã³ã³ã®è¿œå ãå«ãŸãããã¬ãŒã ã¯ãŒã¯èªäœã®äžéšã«ã¯ãéçºè ãã¢ããªã±ãŒã·ã§ã³ãäœæããããã«åå®çŸ©ããå¿ èŠãããåºæ¬ã¯ã©ã¹ãå«ãŸããŠããŸãã Windowsã§ã¯ãã³ã³ãœãŒã«ã¯ãã®ãããªã¢ããªã±ãŒã·ã§ã³ãå²ãåœãŠãŸãã; OS Xã§ã¯ãã¢ã»ã³ããªäžã«ãã³ãã«ã§ã¢ã»ã³ãã«ãããŸãã ããã§ã¯ãGUIã䜿çšããéã®ãæåã®éããïŒãã®äŸã¯äžèšã§ç€ºããŸããïŒãèæ ®ãããŸãã APIã®äž»ãªã€ããªãã®ãŒã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¿ã¹ã¯ã«å ±éã§ãã ããã¯ããã¥ã¡ã³ããã¬ãŒã³ããŒã·ã§ã³ã¢ãŒããã¯ãã£ã§ãã
Zetesã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ããã«ãããã«ã¯ãéžæããã¢ããªã³ã«å¿ããŠãMakefileã§ZetesHands.mkãŸãã¯ZetesWings.mkã®ããããã«ãªã³ã¯ãè¿œå ããå¿ èŠããããŸãã
5.䜿çšæ¹æ³ äŸãèŠãŠã¿ãŸããã-Tiny Viewerç»åãã¥ãŒã¢ãŒ

ããã§ã¯ãæãåçŽãªäœ¿çšäŸã«ã€ããŠèª¬æããŸãã ãŸã第äžã«ãã¢ã»ã³ãã«ãããããŒãžã§ã³ã®Zetesãå¿ èŠã§ãã GitHubã®ãªãªãŒã¹ããŒãžããå ¥æã§ããŸã ã Zetesã§ã®å®éšçšã®ãã©ã«ããŒãäœæããŸãã 圌女ã
zetes-works
ãšåŒã³ãŸãããã
zetes
ããŠã
zetes
ãã©ã«ããŒãã«äœæããããŠã³ããŒãããã¢ãŒã«ã€ããã
target-**
ãã©ã«ããŒã解åããŸãã
zetes-works
ã«æ»ãã
zetes-works
ãšãããã©ã«ããŒãäœæããŸãã äœæããã¢ããªã±ãŒã·ã§ã³ã¯ãTinyViewerãšåŒã°ããŸãã ZetesWingsã®ã³ã¢æ©èœã瀺ããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãã·ã³ãã«ãªç»åãã¥ãŒã¢ã§ãã è€æ°ã®ãã¡ã€ã«ãäžåºŠã«ããŠã³ããŒãããŠããããããåå¥ã®ãŠã£ã³ããŠã«è¡šç€ºã§ããŸãã ãã®ããã°ã©ã ã®å®æçã¯ã zetes-examplesãªããžããªã§çŽ¹ä»ããäŸã®1 ã€ã§ãã ãã£ãã¡ãªäººã®ããã«ãèšäºã®æåŸã«ããµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãã€ã«æžã¿ãªãªãŒã¹ããŒãžã§ã³ãžã®ãªã³ã¯ããããŸãã
5.1ã ã¡ã€ã¯ãã¡ã€ã«
ã¡ã€ã¯ãã¡ã€ã«ããå§ããŸãããã ç§ãçŽæããããã«ãããã¯ã·ã³ãã«ã§çããã®ã«ãªããŸãã
ZETES_PATH = ../zetes APPLICATION_NAME = Tiny\ Viewer BINARY_NAME = tinyview ENTRY_CLASS = tinyviewer/TinyViewerApplication include $(ZETES_PATH)/common-scripts/globals.mk include $(ZETES_WINGS_PATH)/ZetesWings.mk all: package
è¡ããšã«åæããŸãã æåã®ã¹ãããã¯ããããžã§ã¯ããã£ã¬ã¯ããªã«é¢é£ãã
Zetes
ã©ã€ãã©ãªãžã®ãã¹ãèšå®ãã
ZETES_PATH
å€æ°ãå®çŸ©ããããš
ZETES_PATH
ã 次ã¯
APPLICATION_NAME
ã§ã人éãèªããã¢ããªã±ãŒã·ã§ã³ã®ååã§ãã 次ã«
BINARY_NAME
å®è¡å¯èœãã¡ã€ã«ã®ååãš
ENTRY_CLASS
ããšã³ããªãã€ã³ãããå«ãã¯ã©ã¹ã®åå-é¢æ°
public static void main(String... args);
ã ã¯ã©ã¹åã¯ãJavaéçºè ã«ããããããã«ãããªãªãã§ã¯ãªãã¹ã©ãã·ã¥ïŒ/ïŒã§æå®ãããŸãã ã€ãŸããå®éã«ã¯ãã¯ã©ã¹ã¯
tinyviewer.TinyViewerApplication
ãšåŒã°ã
tinyviewer.TinyViewerApplication
ã
次ã®2è¡-å®éã«ã¯ãèãã®æ¥ç¶-Zetesã«å«ãŸããçãã¡ã€ã¯ãã¡ã€ã«ãäœæã§ããã¢ã»ã³ããªãšã³ãžã³ã å«ãŸããŠããæåã®ãã¡ã€ã«
ZetesWings.mk
ã«ã¯ãäžè¬çãªå®çŸ©ãå®æ°ãããã³ã«ãŒã«ãå«ãŸããŠããŸã
ZetesWings.mk
ãã¡ã€ã«ã¯ã
ZetesWings.mk
åºæã®ãã®ã§ãã ZetesHandsã䜿çšããå Žåã¯ããããããã®ã¡ã€ã¯ãã¡ã€ã«ãå«ããŸãã
次ã¯åºæ¬ã«ãŒã«ã®å®çŸ©ã§ãã è€éãªãŠãŒã¶ãŒãããžã§ã¯ãã®æ§ç¯ã«ã¯é«åºŠãªæé ãå«ãŸããå Žåãããããããã¹ãŠã®åºæ¬çãªã«ãŒã«ãå®çŸ©ããå¿ èŠããããŸãã ãã®å Žåãåã«ããã±ãŒãžãå®è¡ããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠã¢ãŒã«ã€ãïŒãŸãã¯OS Xã§ã¯dmgã€ã¡ãŒãžïŒã«ããã¯ããã«ãŒã«ã§ãã ããã¯ããããªãããåäœããã¢ããªã±ãŒã·ã§ã³ã®ã¿ãååŸãããå Žåã¯ã
all: app
æžã
all: app
ã
5.2ã äž»ãªã¯ã©ã¹
ZetesWingsã¯ã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã±ãŒã·ã§ã³ã®äœæãç®çãšããŠãããããã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã®äžéšãåŠçããŸãã ç¹ã«ãããã¥ã¡ã³ããã¥ãŒã¢ãã«ã¯ããã«ãã£ãŠå®çŸ©ãããŸãã ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ãäœæããã«ã¯ã次ã®æœè±¡åããç¶æ¿ãããã¯ã©ã¹ã«åŸã£ãŠäœæããå¿ èŠããããŸãã
-
ApplicationBase
ã¯ããã®åäœã®ã°ããŒãã«ãã©ã¡ãŒã¿ãå®çŸ©ããã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ã¯ã©ã¹ã§ãã å®éã1ã€ã®ã³ããŒã§äœæãããŸãïŒå³å¯ãªæå³ã§ã¯ãã·ã³ã°ã«ãã³ã§ã¯ãããŸããïŒã ãŸãããšã³ããªãã€ã³ããé 眮ããããšããå§ãããŸãïŒmain
é¢æ°ïŒ -
ViewWindowsManagerBase
ã¯ããŠã£ã³ããŠãã¥ãŒç®¡çã¯ã©ã¹ã§ãã ããã¥ã¡ã³ãã®ãŠã£ã³ããŠãäœæããããããžã®ãªã³ã¯ãä¿åããŸãã ãŠã£ã³ããŠéã®éä¿¡ã¯ãããä»ããŠè¡ãããŸãã -
MenuConstructorBase
ã¡ãã¥ãŒãå¶åŸ¡ããã¯ã©ã¹-ã°ããŒãã«ïŒOS XïŒãšãŠã£ã³ããŠã¡ãã¥ãŒã®äž¡æ¹ã ãããããŒã®æ£ããå®çŸ©ã®ããã«ãã¡ãã¥ãŒé ç®ã®åºçŸ/æ¶æ» /ç¡å¹åãæ åœããŸãã ãã®ã¯ã©ã¹ããã€ãã¹ããŠã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã¡ãã¥ãŒãæäœããããšã¯éåžžã«æãŸãããããŸããã æ¹åã®èŠæ±ã¯ãã¹ãŠåãå ¥ããããŸãã äž»ãªã¿ã¹ã¯ã¯ããã©ãããã©ãŒã ããã®ã¡ãã¥ãŒã®ãæåçç¬ç«æ§ãã確ä¿ããããšã§ã -
ViewWindowBase
ããã¥ã¡ã³ãã®å 容ã衚瀺ãããŠã£ã³ããŠã ãã®å®è£ ã§ã¯ãSWTã®Shell
ã®æŠå¿µãšå¯æ¥ã«é¢é£ããŠããŸãã -
Document
-ããã¥ã¡ã³ãã 説æãããŠãããã¹ãŠã®ãšã³ãã£ãã£ã®äžã§æãæœè±¡çãªãã®ãgetTitle()
é¢æ°ã䜿çšããŠdispose()
ãŠã£ã³ããŠã¿ã€ãã«ãšã¡ãã¥ãŒé ç®ã圢æããããã«ïŒã¿ã€ãã«ãå ±åã§ããdispose()
é¢æ°ã䜿çšããŠãªãœãŒã¹ã匷å¶çã«ã¯ãªãŒã³ã¢ããã§ããå¿ èŠããããŸãã
ãªã¹ããããŠãããã¹ãŠã®ã¯ã©ã¹ïŒåçŽãª
Document
ã€ã³ã¿ãŒãã§ãŒã¹ãé€ãïŒã¯ãçžäºã«æ¥ç¶ãããŠãããã³ãã¬ãŒãã§ãã ãããŠä»ãç§ãã¡ã¯ããããããçžç¶äººãäœãããããã®çžç¶äººãçµã³ã€ããå¿ èŠããããŸãã

é¢é£ä»ãããããã³ãã¬ãŒãã¯éåžžã«äŸ¿å©ã§ããã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ã«ãã³ãå®çŸ©ããŸããã€ãŸããæ¢è£œã®ã¯ã©ã¹ãå解ã§ããããã©ãŒã ãã§ãããé£æºããŠæ©èœããŸãã ç§ãšåãããã«ãã®ã¢ãããŒãã楜ããã§ãã ããã
5.2.1ã ç»åããã¥ã¡ã³ã

ããã ã¢ããã®äŸåé¢ä¿ã«åŸã£ãŠæ§ç¯ããªãŒãããŸãã ããã¥ã¡ã³ãã¯ã©ã¹ããå§ããŸãããã ç§ãã¡ã®å Žåãããã¯SWTã䜿çšããŠããŒãããã¡ã¢ãªã«ä¿åããå¿ èŠãããã€ã¡ãŒãžã§ãã ã¯ã©ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
ImageDocument.java
package tinyviewer; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.widgets.Display; import zetes.wings.abstracts.Document; public class ImageDocument implements Document { private Image image; private String fileName; private static Image loadImage(InputStream stream) throws IOException { try { Display display = Display.getDefault(); ImageData data = new ImageData(stream); if (data.transparentPixel > 0) { return new Image(display, data, data.getTransparencyMask()); } return new Image(display, data); } finally { stream.close(); } } private static Image loadImage(String fileName) throws IOException { return loadImage(new FileInputStream(fileName)); } public ImageDocument(String fileName) throws IOException { this.fileName = fileName; this.image = loadImage(fileName); } public String getTitle() { return fileName; } public Image getImage() { return image; } public void dispose() { if (image != null && !image.isDisposed()) image.dispose(); } @Override protected void finalize() throws Throwable { dispose(); super.finalize(); } }
ããã§ã¯ã»ãšãã©ãã¹ãŠãæããã§ãã
loadImage
é¢æ°
loadImage
ãã€ã¡ãŒãžã®ããŒããæ åœããã³ã³ã¹ãã©ã¯ã¿ãŒã§åŒã³åºãããŸãã
getTitle()
é¢æ°ã¯ãã¡ã€ã«åãè¿ãã
dispose()
ã¯ãã¯ãã£ãªãœãŒã¹ã解æŸããŸãã 念ã®ããã
dispose()
åŒã³åºãããããã«
finalize()
ããªãŒããŒã©ã€ããããŸãã
ç»åã®è¡šç€ºã®ã¿ãæ±ã£ãŠãããããå€æŽã¡ãœããã¯äœæããŸããã
5.2.2ã Imageview
ãã®ã¯ã©ã¹ã¯Zetesã«çŽæ¥é¢é£ããŠããŸããããããã§ãã¢ããªã±ãŒã·ã§ã³ã¯ãããªãã§ã¯å®è¡ã§ããŸããã ããã¯ãç»é¢ã«ç»åã衚瀺ããç¹å¥ã«äœæãããSWTã³ã³ããŒãã³ãã§ãã
ImageView.java
package tinyviewer; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; public class ImageView extends Canvas { Image image = null; Image zoomedImage = null; double zoom = 1.0; public ImageView(Composite arg0, int arg1) { super(arg0, arg1); addPaintListener(new PaintListener() { @Override public void paintControl(PaintEvent e) { draw(e.gc); } }); } protected void draw(GC gc) { if (image != null) { checkZoomedImage(); Point viewSize = getSize(); Point imageSize = new Point(zoomedImage.getBounds().width, zoomedImage.getBounds().height); int xpos = viewSize.x > imageSize.x ? viewSize.x / 2 - imageSize.x / 2 : 0; int ypos = viewSize.y > imageSize.y ? viewSize.y / 2 - imageSize.y / 2 : 0; gc.drawImage(zoomedImage, xpos, ypos); } } public Point desiredSize() { if (image == null) return new Point(1, 1); else return new Point((int)(image.getImageData().width * zoom), (int)(image.getImageData().height * zoom)); } protected void checkZoomedImage() { if (zoomedImage == null || zoomedImage.isDisposed()) { Rectangle bounds = image.getBounds(); zoomedImage = new Image(image.getDevice(), (int)(bounds.width * zoom), (int)(bounds.height * zoom)); GC gc = new GC(zoomedImage); gc.drawImage(image, 0, 0, bounds.width, bounds.height, 0, 0, (int)(bounds.width * zoom), (int)(bounds.height * zoom)); gc.dispose(); } } public void setImage(Image image) { this.image = image; if (zoomedImage != null) zoomedImage.dispose(); this.redraw(); } public Image getImage() { return image; } public void setZoom(double zoom) { this.zoom = zoom; if (zoomedImage != null) zoomedImage.dispose(); this.redraw(); } public double getZoom() { return zoom; } }
ãã®è€éãã¯ãã¹ãŠããã®ãŠã£ã³ããŠãããå°ããå Žåã«ãŠã£ã³ããŠã®äžå€®ã«ç»åãé 眮ããããã€ãã®ç·åœ¢åŒã«ãããŸãã çŸåšããºãŒã ã«é¢é£ãããã¹ãŠã®æ©èœãã€ãŸãç»åããºãŒã ã€ã³/ãºãŒã ã¢ãŠãããæ©èœã¯äœ¿çšãããŠããŸããã 芪æãªãèªè ããã®ã¯ã©ã¹ã§ãã³ã»ã³ã¹ãèŠã€ããå Žåãç§ãééã£ãŠããã³ã¡ã³ãã§è©³çŽ°ã«èª¬æããŠã»ããã æ®å¿µãªãããSWTã®ææžåã¯éåžžã«äžååã§ããããããç§åŠçãªçªã£èŸŒã¿ãã«ãã£ãŠæåéãå€ãã®ããšãçºèŠããå¿ èŠããããŸããã
5.2.3ã ImageViewWindow
次ã®ã¯ã©ã¹ãã€ãŸãç»åã衚瀺ããView-windowã¯ã©ã¹ã«é²ã¿ãŸãããã ãã®ã¯ã©ã¹ã¯
ImageView
ã¯ã©ã¹ã䜿çšã
ImageView
ã æ¬è³ªçã«ããŠã£ã³ããŠã¯ãã®
ImageView
èªäœã®åšãã®ãã¬ãŒã ã«ãªããŸãã
ImageViewWindow.java
package tinyviewer; import java.util.HashSet; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DropTarget; import org.eclipse.swt.dnd.DropTargetAdapter; import org.eclipse.swt.dnd.FileTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Shell; import org.eclipse.wb.swt.SWTResourceManager; import zetes.wings.base.ViewWindowBase; public class ImageViewWindow extends ViewWindowBase<ImageDocument> { private ScrolledComposite scrolledComposite; private DropTarget scrolledCompositeDropTarget, imageViewDropTarget; private ImageView imageView; private HashSet<DropTargetAdapter> dropTargetAdapters = new HashSet<DropTargetAdapter>(); public void addDropTargetListener(DropTargetAdapter dropTargetAdapter) { dropTargetAdapters.add(dropTargetAdapter); if (imageViewDropTarget != null && !imageViewDropTarget.isDisposed()) { scrolledCompositeDropTarget.addDropListener(dropTargetAdapter); imageViewDropTarget.addDropListener(dropTargetAdapter); } } public void removeDropTargetListener(DropTargetAdapter dropTargetAdapter) { dropTargetAdapters.remove(dropTargetAdapter); if (imageViewDropTarget != null && !imageViewDropTarget.isDisposed()) { scrolledCompositeDropTarget.removeDropListener(dropTargetAdapter); imageViewDropTarget.removeDropListener(dropTargetAdapter); } } /** * Create contents of the window. * * @wbp.parser.entryPoint */ @Override protected Shell constructShell() { Shell shell = new Shell(SWT.TITLE | SWT.CLOSE | SWT.MIN | SWT.MAX | SWT.RESIZE | SWT.BORDER | SWT.DOUBLE_BUFFERED); shell.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLACK)); shell.setMinimumSize(new Point(150, 200)); shell.setImages(new Image[] { SWTResourceManager.getImage(ImageViewWindow.class, "/tinyviewer/wingphotos16.png"), // Necessary in Windows (for taskbar) SWTResourceManager.getImage(ImageViewWindow.class, "/tinyviewer/wingphotos64.png"), // Necessary in Windows (for Alt-Tab) SWTResourceManager.getImage(ImageViewWindow.class, "/tinyviewer/wingphotos512.png") // Necessary in OS X }); shell.setLayout(new FillLayout(SWT.HORIZONTAL)); scrolledComposite = new ScrolledComposite(shell, SWT.H_SCROLL | SWT.V_SCROLL | SWT.NO_BACKGROUND); scrolledComposite.setExpandHorizontal(true); scrolledComposite.setExpandVertical(true); imageView = new ImageView(scrolledComposite, SWT.NONE); imageView.setBounds(0, 0, 200, 127); imageView.setVisible(false); imageView.setBackground(shell.getDisplay().getSystemColor(SWT.COLOR_BLACK)); // Drop targets scrolledCompositeDropTarget = new DropTarget(scrolledComposite, DND.DROP_MOVE); scrolledCompositeDropTarget.setTransfer(new Transfer[] { FileTransfer.getInstance() }); imageViewDropTarget = new DropTarget(imageView, DND.DROP_MOVE); imageViewDropTarget.setTransfer(new Transfer[] { FileTransfer.getInstance() }); for (DropTargetAdapter adapter : dropTargetAdapters) { scrolledCompositeDropTarget.addDropListener(adapter); imageViewDropTarget.addDropListener(adapter); } scrolledComposite.setContent(imageView); scrolledComposite.setMinSize(imageView.desiredSize()); scrolledComposite.setBackground(shell.getDisplay().getSystemColor(SWT.COLOR_BLACK)); scrolledComposite.addControlListener(new ControlListener() { @Override public void controlResized(ControlEvent arg0) { updateImageViewSize(); } @Override public void controlMoved(ControlEvent arg0) { } }); return shell; } private void updateImageViewSize() { Point desired = imageView.desiredSize(); Point clientAreaSize = new Point(scrolledComposite.getClientArea().width, scrolledComposite.getClientArea().height); int width = Math.max(clientAreaSize.x, desired.x); int height = Math.max(clientAreaSize.y, desired.y); Point newSize = new Point(width, height); Point oldSize = imageView.getSize(); if (!oldSize.equals(newSize)) { imageView.setSize(newSize); } } @Override public void setDocument(ImageDocument document) { super.setDocument(document); imageView.setImage(getDocument().getImage()); scrolledComposite.setMinSize(imageView.desiredSize()); updateImageViewSize(); imageView.setVisible(true); getShell().forceActive(); } @Override public boolean supportsFullscreen() { return true; } @Override public boolean supportsMaximizing() { return true; } }
ãŸããã¯ã©ã¹ã
ViewWindowBase
ãã³ãã¬ãŒãããç¶æ¿ãããŠããããšã«æ³šæããŠãã ãã
ViewWindowBase
ãã³ãã¬ãŒãã«ã¯ãããã¥ã¡ã³ãã¯ã©ã¹ããã©ã¡ãŒã¿ãŒãšããŠæž¡ãããŸãã ã€ãŸãããŠã£ã³ããŠã¯ãã®ã¿ã€ãã®ããã¥ã¡ã³ãã«é¢é£ä»ããããŠããŸãã ã¯ã©ã¹éã®é¢ä¿ã¯æ瀺çã«ç€ºãããŠããŸãã
ãŠã£ã³ããŠã®ã¿ã¹ã¯ã¯éåžžã«ç°¡åã§ããããŒããããã€ã¡ãŒãžã衚瀺ããŸãïŒããã¯ããªãŒããŒããŒãããã
setDocument
é¢æ°ã§è¡ãããŸãïŒã 次ã«ããŠãŒã¶ãŒãéãããŸã§ãŠãŒã¶ãŒã®å€èŠ³ãåã°ããŸãã ããã«ã
DropTarget
ãªããžã§ã¯ã
DropTarget
ã«ããŠã£ã³ããŠã¯æå®ãããã¿ã€ãã®ãã¡ã€ã«ãããã«ãæãããã€ãã³ãã«å¿çããŸãã ãã¡ã€ã«ã¯åããŠã£ã³ããŠã§éããïŒåã«é¢çœããªãïŒãæ°ããããã¥ã¡ã³ããšããŠããŠã³ããŒããããå¥ã®ãŠã£ã³ããŠãäœæãããŸãã ãã®ã¯ã©ã¹ã¯æ°ãããŠã£ã³ããŠãéã圹å²ãæ ããªãããã
removeDropTargetListener
ãš
removeDropTargetListener
ãªã¹ããŒã衚瀺ããããšã«æ³šæããŠãã ããã ãããã®ã¡ãœããã®äœ¿çšã«ã€ããŠã¯ãåŸã§èª¬æããŸãã
ç¹ã«å®å šãšã¯ã»ã©é ããããç¹å®ã®å®è£ ã«æ³šæãéäžããŸããã åºæ¬çãªãªãŒããŒã©ã€ããããã¡ãœãããäœã®ããã«ããã®ãã ãèšãããšãã§ããŸãïŒ
constructShell()
ã¯ãSWTãã
Shell
ãªããžã§ã¯ãã圢æããããã®ãŠã£ã³ããŠãäœæããããšãã«åŒã³åºãããŸãã ãã®ãªããžã§ã¯ãã¯ãŠã£ã³ããŠã§ãã ã¡ãœããã®ã¢ãããŒã·ã§ã³
@wbp.parser.entryPoint
ãã¶ã€ã³ã¿ã€ã ã§ã°ã©ãã£ã«ã«è¡šçŸã䜿çšããŠãŠã£ã³ããŠãå€æŽãããšãã«ãEclipseã®SWFãŠã£ã³ããŠã®ããžã¥ã¢ã«ãã©ãããã³ããã®ã¡ãœãããç·šéããããã®æ瀺 ãããã£ãŠãçè«çã«ã¯ãããŠã¹ã§ãŠã£ã³ããŠãšãã¿ã³ãæç»ã§ããŸã;ïŒïŒç§èªèº«ã¯ã³ãŒããæžãããšã奜ã¿ãŸãããããè¯ãã§ãïŒã å éšã€ãã³ããå²ãåœãŠãããã®ã¯ããã§ãã
setDocument()
ã«ã€ããŠç§ã¯ãã§ã«èšã£ãã ãŸãã
supportsFullscreen()
ããã³
supportsMaximizing()
ã¡ãœããã¯ãZetesã®å¯Ÿå¿ããæ©èœãå¶åŸ¡ããŸãã ããšãã°ã
supportsFullscreen()
false
ãè¿ããŠã£ã³ããŠã«ã¯ãOS Xã«ç¢å°ã®ããå±éãã¿ã³ããããŸããããŸããã©ã®ãã©ãããã©ãŒã ã§ãããã«ã¹ã¯ãªãŒã³ãã¡ãã¥ãŒé ç®ã¯äœæãããŸããã
5.2.4ã ImageViewWindowsManager

ãã®ã¯ã©ã¹ã¯ãŠã£ã³ããŠç®¡çãæ±ããŸãã 圌ã¯ããããäœæããç Žå£ããŸãã
ImageViewWindowsManager.java
package tinyviewer; import java.io.IOException; import org.eclipse.swt.dnd.DropTargetAdapter; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.dnd.FileTransfer; import zetes.wings.base.ViewWindowsManagerBase; public class ImageViewWindowsManager extends ViewWindowsManagerBase<ImageDocument, ImageViewWindow> { private DropTargetAdapter viewWindowDropTargetAdapter = new DropTargetAdapter() { public void drop(DropTargetEvent event) { String fileList[] = null; FileTransfer ft = FileTransfer.getInstance(); if (ft.isSupportedType(event.currentDataType)) { fileList = (String[]) event.data; for (int i = 0; i < fileList.length; i++) { ImageDocument document; try { document = new ImageDocument(fileList[i]); openWindowForDocument(document); } catch (IOException e) { e.printStackTrace(); } } } } }; @Override protected ImageViewWindow createViewWindow() { ImageViewWindow vw = new ImageViewWindow(); vw.addDropTargetListener(viewWindowDropTargetAdapter); return vw; } public DropTargetAdapter getViewWindowDropTargetAdapter() { return viewWindowDropTargetAdapter; } }
ImageViewWindow
ãŠã£ã³ããŠã¯ã©ã¹ãš
ImageDocument
ããã¥ã¡ã³ã
ImageDocument
äž¡æ¹ã«é¢é£ä»ãããããžã§ããªãã¯ã¯ã©ã¹
ViewWindowsManagerBase
ããç¶æ¿ãããŸãã
ãã®å ŽåããŠã£ã³ããŠã¯å®å šã«æšæºçãªæ¹æ³ã§ç®¡çãããŸãã è¿œå ããã®ã¯ãç»åãŠã£ã³ããŠã§
DropTarget
ãªã¹ããŒãæå®ããããšã ãã§ããïŒåã®ã»ã¯ã·ã§ã³ã§ãããã»ã®ããããŸãããïŒïŒã ããã§ã¯ã
createViewWindow()
ãã¡ã¯ããª
createViewWindow()
ãå®çŸ©ããŠãæ°ãããŠã£ã³ããŠãäœæãããšãã«ããã©ãã°ã¢ã³ããããããã³ãã©ãŒãããã«ãããçµåããããã«ããŸããã
5.2.5ã TinyViewerMenuConstructor
ãã®ã¯ã©ã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ã¡ãã¥ãŒã管çããŸãã ã¡ãã¥ãŒã®ãã¹ãŠã®è²¬ä»»ïŒOS Xã§ã¯ã°ããŒãã«ãä»ã®ãã©ãããã©ãŒã ã§ã¯ãŠã£ã³ããŠã®äž¡æ¹ïŒã¯ãã®äžã«ãããŸãã ãããã£ãŠãZetesã䜿çšããå ŽåãSWTãä»ããã¡ãã¥ãŒã¯ã©ã¹ã®çŽæ¥ç®¡çã¯éåžžã«æãŸãããããŸãã ã ãã¡ãããããã§ã¯æ²ããããšã«ãç©Žã®ãããæœè±¡åããããŸãããå€ãã®æçœãªçç±ã§ãå°ãªããšãã©ã€ãã©ãªã®éçºã®ãã®æ®µéã§ã¯ãSWTãå®å šã«ã«ãã»ã«åããããšã¯äžå¯èœãªã®ã§ãææ ¢ããªããã°ãªããŸããã
TinyViewerMenuConstructor.java
package tinyviewer; import zetes.wings.HotKey; import zetes.wings.base.MenuConstructorBase; import zetes.wings.actions.Action; import zetes.wings.actions.Handler; public class TinyViewerMenuConstructor extends MenuConstructorBase<ImageViewWindow> { private Handler<ImageViewWindow> fileOpenHandler; private Action<ImageViewWindow> openAction; public TinyViewerMenuConstructor(ImageViewWindowsManager viewWindowsManager) { super(viewWindowsManager); openAction = new Action<>("&Open"); openAction.setHotKey(new HotKey(HotKey.MOD1, 'O')); getFileActionCategory().addFirstItem(openAction); } public Handler<ImageViewWindow> getFileOpenHandler() { return fileOpenHandler; } public void setFileOpenHandler(Handler<ImageViewWindow> fileOpenHandler) { this.fileOpenHandler = fileOpenHandler; if (openAction.getHandlers().get(null) == null) { openAction.getHandlers().put(null, fileOpenHandler); } } }
ãã®ã¯ã©ã¹ã¯ããŠã£ã³ããŠãšãŠã£ã³ããŠãããŒãžã£ãŒã®ã¿ã«é¢é£ä»ããããŸãïŒ2çªç®ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãéããŠïŒã å®éãç§ãã¡ã®ã€ããªãã®ãŒã®ãã¥ãŒã¯ãŠã£ã³ããŠãã®ãã®ã§ãããã¡ãã¥ãŒã¯ã¢ã¯ãã£ããªãã¥ãŒã«ãã£ãŠå®å šã«å¶åŸ¡ãããè£å©çãªã€ã³ã¿ãŒãã§ãŒã¹èŠçŽ ã«ãããªããããããŒã¿ïŒã€ãŸãããã¥ã¡ã³ãïŒã«å¯Ÿããæäœãå®è¡ããå¿ èŠããããã¥ãŒã§ãã ã€ãŸããããšãã°ã³ããŒã³ãã³ããè¿œå ããå¿ èŠãããå ŽåããŠã£ã³ããŠã«ã¯ãããšãã°
actionCopy
é¢æ°ããããã¡ãã¥ãŒãã³ãã©ãŒããããåŒã³åºãå¿ èŠããããŸãã ã€ãŸãã ã¡ãã¥ãŒèªäœã¯äœããããåžžã«ãŠã£ã³ããŠãŸãã¯ãŠã£ã³ããŠãããŒãžã£ãŒïŒãã®å Žåã¯
ImageViewWindowsManager
ïŒãèŠæ±ããŸã ã
ZetesWingsã®ã¡ãã¥ãŒããã€ã¹ã®è©³çŽ°ã
ããã§ãã¡ãã¥ãŒãZetesWingsã§ã©ã®ããã«æ§æãããŠãããã«ã€ããŠããã€ãã®èšèãèšãå¿
èŠããããŸãã äž»ãªæ±ã¯
ã¯ã©ã¹ã§ãã ãã®ã¯ã©ã¹ã¯ã¡ãã¥ãŒé ç®ãå®è£ ããŸãã ã¿ã€ãã«ïŒ "title"ïŒããããããŒã®çµã¿åããïŒ "hotKey"ïŒããã³ãã©ãŒïŒ "handlers"ïŒã§æ§æãããåŸè ã¯
ãšããŠå²ãåœãŠãããããŒã¯
ã§ãã ãã€ã³ãã¯ç°¡åã§ãã ãã®ãŠã£ã³ããŠãŸãã¯ãã®ãŠã£ã³ããŠãäœæããããšãé¢å¿ã®ããã¢ã¯ã·ã§ã³ã«ãã³ãã©ãŒãè¿œå ãããŸãã ããã«ãã©ã®ãŠã£ã³ããŠã«ãé¢é£ä»ããããŠããªãïŒ
ããŒãæã€ïŒãã³ãã©ãŒã1ã€ãã
ã ãã®ãã³ãã©ã¯ãã¢ã¯ãã£ããªãŠã£ã³ããŠããªããšãã«åŒã³åºãããŸãïŒOS Xã§ã¯ãã¡ãã¥ãŒã¯ããããŠã£ã³ããŠã¯ãªãå¯èœæ§ããããŸãïŒã
åªå é äœã¯ããã§ãã ãŠãŒã¶ãŒãã¡ãã¥ãŒé ç®ãéžæãããšãæå®ããããŠã£ã³ããŠã®ãã³ãã©ãŒãæåã«æ€çŽ¢ãããŸãã ããã§ãªãå Žåã¯ãã°ããŒãã«ãã³ãã©ãŒãæ€çŽ¢ãããŸãã
äž¡æ¹ã®ãã³ãã©ãŒãååšããªãå Žåãã¡ãã¥ãŒé ç®ã¯åã«é衚瀺ã«ãªããŸãïŒããšãã°ãç·šéèŠçŽ ãå«ãŸãªããŠã£ã³ããŠã§ã¯ããã³ããŒãã³ãã³ãã¯ããéãããšã¯ç°ãªãããŠã£ã³ããŠããªãå Žåã¯ç¡æå³ã§ãïŒã ããã«ãããã³ãã©ãŒãïŒã€ãŸãã
ã¯ã©ã¹ã®ãªããžã§ã¯ãïŒã¯åãªããªã¹ããŒã§ã¯ãããŸããã
ã
ã
ãªã©ã®ãªãã·ã§ã³ãå«ãŸããŠããŸãã ããã«ãã¢ã¯ã·ã§ã³ããããŒãç¬èªã®ããããŒãšéè€ãããããšãã§ããŸãïŒç¶æ³äŸåããããŒã®å ŽåïŒã ãã®å Žåãç¬èªã®
ãŸãã
Action
ã¯ã©ã¹ã§ãã ãã®ã¯ã©ã¹ã¯ã¡ãã¥ãŒé ç®ãå®è£ ããŸãã ã¿ã€ãã«ïŒ "title"ïŒããããããŒã®çµã¿åããïŒ "hotKey"ïŒããã³ãã©ãŒïŒ "handlers"ïŒã§æ§æãããåŸè ã¯
Map
ãšããŠå²ãåœãŠãããããŒã¯
ViewWindow
ã§ãã ãã€ã³ãã¯ç°¡åã§ãã ãã®ãŠã£ã³ããŠãŸãã¯ãã®ãŠã£ã³ããŠãäœæããããšãé¢å¿ã®ããã¢ã¯ã·ã§ã³ã«ãã³ãã©ãŒãè¿œå ãããŸãã ããã«ãã©ã®ãŠã£ã³ããŠã«ãé¢é£ä»ããããŠããªãïŒ
null
ããŒãæã€ïŒãã³ãã©ãŒã1ã€ãã
null
ã ãã®ãã³ãã©ã¯ãã¢ã¯ãã£ããªãŠã£ã³ããŠããªããšãã«åŒã³åºãããŸãïŒOS Xã§ã¯ãã¡ãã¥ãŒã¯ããããŠã£ã³ããŠã¯ãªãå¯èœæ§ããããŸãïŒã
åªå é äœã¯ããã§ãã ãŠãŒã¶ãŒãã¡ãã¥ãŒé ç®ãéžæãããšãæå®ããããŠã£ã³ããŠã®ãã³ãã©ãŒãæåã«æ€çŽ¢ãããŸãã ããã§ãªãå Žåã¯ãã°ããŒãã«ãã³ãã©ãŒãæ€çŽ¢ãããŸãã
äž¡æ¹ã®ãã³ãã©ãŒãååšããªãå Žåãã¡ãã¥ãŒé ç®ã¯åã«é衚瀺ã«ãªããŸãïŒããšãã°ãç·šéèŠçŽ ãå«ãŸãªããŠã£ã³ããŠã§ã¯ããã³ããŒãã³ãã³ãã¯ããéãããšã¯ç°ãªãããŠã£ã³ããŠããªãå Žåã¯ç¡æå³ã§ãïŒã ããã«ãããã³ãã©ãŒãïŒã€ãŸãã
Handler
ã¯ã©ã¹ã®ãªããžã§ã¯ãïŒã¯åãªããªã¹ããŒã§ã¯ãããŸããã
isEnabled()
ã
isVisible()
ã
isChecked()
ãªã©ã®ãªãã·ã§ã³ãå«ãŸããŠããŸãã ããã«ãã¢ã¯ã·ã§ã³ããããŒãç¬èªã®ããããŒãšéè€ãããããšãã§ããŸãïŒç¶æ³äŸåããããŒã®å ŽåïŒã ãã®å Žåãç¬èªã®
getTitle()
ãŸãã
TinyViewerMenuConstructor
äœæãããšãã¡ã€ã³ã¡ãã¥ãŒã®
Action
ãªããžã§ã¯ããäœæãããŸãã ç§ãã¡ã®å ŽåãéæšæºèŠçŽ ã¯1ã€ã ãã§ã-ãéããã äœæããŠã
HotKey(HotKey.MOD1, 'O')
ãå²ãåœãŠãŸãã
MOD1
ã¯ãOS Xã§ã¯CommandããŒã«ãä»ã®ãã©ãããã©ãŒã ã§ã¯Controlã«å¯Ÿå¿ãã修食åã§ãã äž¡æ¹ã®äŒçµ±ã®ãŠãŒã¶ãŒã¯ãWindowsã§Ctrlã䜿çšããã»ãšãã©ã®ããŒããŒãã·ã§ãŒãã«ãããCmdã䜿çšããŠOS Xã§æŒãããããšãç¥ã£ãŠããŸãã
5.2.6ã TinyViewerApplication

éå±€ã®æåŸã®ïŒãããŠã¡ã€ã³ã®ïŒã¯
TinyViewerApplication
ã¢ããªã±ãŒã·ã§ã³
TinyViewerApplication
ã§ãã äžèšã®ãã¹ãŠã®ã¯ã©ã¹ã«é¢é£ä»ããããŠããŸãã ããã«ããAbout the applicationããŠã£ã³ããŠãå®è£ ãã
AboutBox
åŸç¶ïŒãã®å Žåã¯
DefaultAboutBox
ïŒã«é¢é£ä»ããããŠããŸãã
TinyViewerApplication.java
package tinyviewer; import java.io.IOException; import java.util.ArrayList; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import zetes.wings.base.ApplicationBase; import zetes.wings.DefaultAboutBox; import zetes.wings.actions.Handler; public class TinyViewerApplication extends ApplicationBase<DefaultAboutBox, ImageDocument, ImageViewWindow, TinyViewerMenuConstructor, ImageViewWindowsManager> { @Override public String getTitle() { return "Tiny Viewer"; } @Override public DefaultAboutBox createAboutBox(ImageViewWindow window) { DefaultAboutBox res = new DefaultAboutBox(window); res.setApplicationName(getTitle()); res.setIconResourceName("/tinyviewer/wingphotos64.png"); res.setDescriptionText("A simple image file viewer.\nThis application shows the power of Avian + SWT"); res.setCopyrightText("Copyright \u00a9 2013, Ilya Mizus"); res.setWindowSize(new Point(370, 180)); return res; } @Override public ImageDocument loadFromFile(String fileName) { try { return new ImageDocument(fileName); } catch (IOException e) { e.printStackTrace(); return null; } } private Handler<ImageViewWindow> fileOpenHandler = new Handler<ImageViewWindow>() { @Override public void execute(ImageViewWindow window) { Shell dummyShell = new Shell(Display.getDefault()); FileDialog fileDialog = new FileDialog(dummyShell, SWT.OPEN | SWT.MULTI); fileDialog.setText("Open image"); fileDialog.setFilterNames(new String[] { "Image (*.png; *.bmp; *.jpg; *.jpeg)", "All files" }); fileDialog.setFilterExtensions(new String[] { "*.png; *.bmp; *.jpg; *.jpeg", "*.*" }); String firstFile = fileDialog.open(); if (firstFile != null) { String[] names = fileDialog.getFileNames(); ArrayList<ImageDocument> documents = new ArrayList<ImageDocument>(); // Creating documents for files for (int i = 0; i < names.length; i++) { String fileName = fileDialog.getFilterPath() + "/" + names[i]; try { documents.add(new ImageDocument(fileName)); } catch (IOException e) { // TODO Show a message box here e.printStackTrace(); } } getViewWindowsManager().openWindowsForDocuments(documents.toArray(new ImageDocument[] {})); } dummyShell.dispose(); } }; public TinyViewerApplication() { } @Override public ImageViewWindowsManager createViewWindowsManager() { return new ImageViewWindowsManager(); } @Override public TinyViewerMenuConstructor createMenuConstructor(ImageViewWindowsManager viewWindowsManager) { TinyViewerMenuConstructor menuConstructor = new TinyViewerMenuConstructor(viewWindowsManager); menuConstructor.setFileOpenHandler(fileOpenHandler); return menuConstructor; } @Override public boolean needsAtLeastOneView() { return false; } public static void main(String... args) { new TinyViewerApplication().run(args); } }
ãã®ã¯ã©ã¹ã¯ããã¥ã¡ã³ãã®èªã¿èŸŒã¿ãæ åœããŸãããã®ã¢ããªã±ãŒã·ã§ã³ã§
fileOpenHandler
ã¯ããéããã¡ãã¥ãŒé ç®ã®ã°ããŒãã«ãã³ãã©ã§ãããªããžã§ã¯ããå«ãã®ã¯åœŒã§ããããã«ããã°ããŒãã«ããªããžã§ã¯ãïŒã¡ãã¥ãŒãã¶ã€ããŒããŠã£ã³ããŠãããŒãžã£ãŒããããã°ã©ã ã«ã€ããŠããŠã£ã³ããŠïŒã®ãã¡ã¯ããªã¡ãœãããããã€ãå«ãŸããŠããŸãããŸã
needsAtLeastOneView()
ãå°ãå ·äœçã«èšãããšãã§ããé¢çœãã¡ãœããã宣èšããŸããã
needsAtLeastOneViewã®è©³çŽ°ïŒïŒ
, Windows Linux . â , , . OS X â , . â . , .
ZetesWings.
, OS X .
OS X , / (, ).
,
. , . , OS X , .
ZetesWings.
needsAtLeastOneView()
false
, OS X .
OS X , / (, ).
needsAtLeastOneView()
,
true
. , . , OS X , .
ããã«ããããã®ãããžã§ã¯ãã®ãœãŒã¹ã³ãŒãã®ã¬ãã¥ãŒã¯å®äºãããšèŠãªãããšãã§ããŸãã
5.3ããµããŒããã¡ã€ã«ãšãªãœãŒã¹
ããã€ãã®è¿œå ãã¡ã€ã«ã ããæ®ã£ãŠããŸãããããããªãã§ã¯ãããžã§ã¯ãã¯ã§ããŸããããããã®ãã¡ã€ã«ïŒãªãœãŒã¹ãã¡ã€ã«ïŒã¯4ã€ã®ãã©ã«ããŒã«ãããŸãã
-
src/res
âsrc/java
â Java Java-. 3 SWT :
shell.setImages(new Image[] { SWTResourceManager.getImage(ImageViewWindow.class, "/tinyviewer/wingphotos16.png"), SWTResourceManager.getImage(ImageViewWindow.class, "/tinyviewer/wingphotos64.png"), SWTResourceManager.getImage(ImageViewWindow.class, "/tinyviewer/wingphotos512.png") });
-
win-res
â , Windows EXE. , ,win.rc
win.rcMainIcon ICON "win-res/wingphotos.ico" 1 VERSIONINFO FILEVERSION 0,1,0,0 PRODUCTVERSION 0,1,0,0 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "CompanyName", "bigfatbrowncat\0" VALUE "FileDescription", "A tiny multi document photo viewer app" VALUE "FileVersion", "0.1\0" VALUE "InternalName", "TinyViewer\0" VALUE "LegalCopyright", "Ilya Mizus\0" VALUE "OriginalFilename", "tinyviewer.exe\0" VALUE "ProductName", "TinyViewer\0" VALUE "ProductVersion", "0.1\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1251 END END
-
osx-bundle
â .app, OS X «application bundle» . bundle -
resources
-OS Xãé€ããã¹ãŠã®ã·ã¹ãã ã®ãã®ãã©ã«ããŒã«é 眮ããããã¡ã€ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãã©ã«ããŒã«ã³ããŒãããŸããOS Xã§ã¯ããã³ãã«å ã®Resourcesãã©ã«ããŒã«é 眮ãããŸãããããã®ãã¡ã€ã«ã¯ãã¯ã©ã¹ãéããŠãªãœãŒã¹ãšããŠã¢ããªã±ãŒã·ã§ã³ããã¢ã¯ã»ã¹ã§ããŸãWinLinMacApi
ããã®ãããžã§ã¯ãã«ã¯ãã®ãã©ã«ããŒã¯ãããŸããããä»ã®zetes-examplesãããžã§ã¯ãã«ã¯ãããŸãã
5.4ãçµã¿ç«ãŠãšæã¡äžã
ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ãAndroidã¯ã©ã¹ãã¹ãšAvianã¯ã©ã¹ãã¹ã®äž¡æ¹ã§æ§ç¯ã§ããŸããã¢ã»ã³ããªåœä»€ã¯ãzetes-examplesãããžã§ã¯ãã®ãœãŒã¹ã³ãŒããšåãå Žæã«ãããŸãã誰ãã«åé¡ãããå Žåã¯ã質åããŠãã ãããç§ã¯åãã§çããŸãã
6.çµè«
ãŸã第äžã«ããã®å Žæãèªãã®ã«å¿èåã®ããïŒãããŠååãªé¢å¿ãæã£ãŠããïŒãã¹ãŠã®äººã«å¿ããæè¬ãããããã®ãããã¯ãç§ã ãã§ãªãèå³æ·±ããã®ã§ããããšãéåžžã«å¬ããæããŸããããªããå€ããã°å€ãã»ã©ãç§ã¯ãã£ãšç±æãæã£ãŠããŸãã
ããã«ããã®ããŒãžã§ã³ã®ãã¬ãŒã ã¯ãŒã¯ã¯éåžžã«å®å®ããŠãããããããæ éã«äœ¿çšããŠåçŽãªã¢ããªã±ãŒã·ã§ã³ãäœæããããšãã§ããŸããããã®å€ãã¯åŠçããã³å€æŽãããããšã«æ³šæããŠãã ãããç§èªèº«ããè¿ãå°æ¥ãããã€ãã®ãããžã§ã¯ãäŸãããæçšãªãã®ãäœæããããšããŠããŸãã
ãã¹ãŠã®ææ¡/ã¢ããã€ã¹/æ¹å€ã¯åãå ¥ãããã確ãã«èæ ®ãããŸãã
7.åç §
- githubã®Zetesã©ã€ãã©ãªããŒãž
- ããŒãžã¢ã»ã³ãã«ããããªãªãŒã¹ã®ãŒãŒã¿0.1
- githubã®Zetes-examplesãã¢ãããžã§ã¯ãããŒãž
- ã¢ã»ã³ãã«ããããªãªãŒã¹ããŒãžzetes-examples 0.1
çµè«ãšããŠãç§ã¯å人ãšååã®JustAManã«ããäžåºŠæè¬ããããšæããŸãããã®å©ããšç²Ÿç¥çãªãµããŒãããªããã°ããã®ä»äºããã®èšäºãçµãããŸããã§ãããããã«ãææã®åŠ»ã«å¿ããæè¬ããŸãã奥ããã¯ãå€æ¹ã«ã³ã³ãã¥ãŒã¿ãŒã§ããããçš®é¡ã®ãã³ã»ã³ã¹ãããããšãã§ããŠå¬ããã ãã§ãªããç§ã®èšäºããã§ãã¯ããŠãå¿ããŠããŸã£ãã³ã³ãã眮ããŠãããŸãã
ãã®ãããã¯ã«ç¡é¢å¿ã§ã¯ãªãããã®éçºã«èå³ããã人ã¯ãç§ã®github-projects zetesãšzetes-examplesã«æãå ¥ããŠãã ããã³ãã¥ããã£ã®é¢å¿ãèŠããããã«ããã®ãããžã§ã¯ãã¯éå¶å©ã§ãããç§ã®ç±æã ãã§çºå±ãããããå¿ãåãããã人ã ã¯ç§ã«ãšã£ãŠäžå¯æ¬ ã§ãããã¡ããã誰ããã³ãŒãã«è²¢ç®ããããšããé¡æãæã£ãŠãããªããç§ã¯å¹žãã«ãªããŸãïŒ
ãæž èŽããããšãããããŸããïŒ