النوافذ الصغيرة

في مجال الحوسبة ، يُعدّ Nano-X نظام نوافذ متكامل الميزات، ما يجعله مناسبًا للاستخدام على أجهزة الكمبيوتر الشخصية ، والأنظمة المدمجة [ 1 ] [ 2 ] ، وأجهزة المساعد الرقمي الشخصي [ 3 ] [ 4 ] . وهو مشروع مفتوح المصدر يهدف إلى توفير ميزات بيئات النوافذ الرسومية الحديثة للأجهزة والمنصات الأصغر حجمًا. وقد تم تغيير اسم المشروع من Microwindows بسبب تهديدات قانونية من مايكروسوفت تتعلق بعلامة ويندوز التجارية.

ملخص

نظام Nano-X Window System قابل للنقل بشكل كبير، ومكتوب بالكامل بلغة C. وقد تم نقله إلى وحدات المعالجة المركزية Intel 16 و32 و64 بت، و Broadcom BCM2837 ARM Cortex-A53 ، بالإضافة إلى رقائق MIPS R4000 (NEC Vr41xx) StrongARM و PowerPC الموجودة في أجهزة الكمبيوتر المحمولة وأجهزة الكمبيوتر الجيبية.

يعمل نظام Nano-X Window حاليًا على أنظمة Linux التي تدعم إطار العرض في النواة ، أو باستخدام برنامج تشغيل X11 الذي يسمح بتشغيل تطبيقات Microwindows فوق سطح مكتب X Window . يحاكي برنامج التشغيل هذا جميع أوضاع الألوان الحقيقية ولوحة الألوان في Microwindows ، بحيث يمكن معاينة التطبيق باستخدام خصائص عرض النظام المستهدف مباشرةً على شاشة سطح المكتب، بغض النظر عن خصائص شاشة سطح المكتب. بالإضافة إلى ذلك، تم نقله إلى Windows و Emscripten و Android (بالاعتماد على مكتبة Allegro ) و MS-DOS . كُتبت برامج تشغيل شاشة Microwindows بالاعتماد على مكتبتي SDL1 وSDL2 بالإضافة إلى مكتبتي Allegro و SVGAlib . كما يتوفر أيضًا برنامج تشغيل VESA وبرنامج تشغيل VGA بـ 16 لونًا و4 مستويات.

بنيان

بنية مايكرو ويندوز/نانو-إكس
تطبيق FLTKتطبيق X11تطبيق نانو-إكستطبيق ويندوز
مجموعة أدوات FLTK
واجهة برمجة التطبيقات المتوافقة مع X11 - NX11/PX11
واجهة برمجة تطبيقات نانو-إكسواجهة برمجة تطبيقات MWin
محرك نانو-إكس
منصةبرنامج تشغيل الشاشةبرنامج تشغيل الماوسبرنامج تشغيل لوحة المفاتيح

لينكس، راسبيري باي لينيرو، ويندوز، دوس، أندرويد، إمسكريبتن

Framebuffer، X11، SDL 1/2، Allegro، VESA، SVGAlib، VGA

gpm، حدث، تسلسلي، PS/2، BIOS، Allegro، SDL 1/2، شاشة لمس، TSLIB، X11، ويندوز، LIRC الأشعة تحت الحمراء، SUN

حدث، BIOS، PS/2، تسلسلي، SDL 1/2، أليجرو، X11، ويندوز

تصميم متعدد الطبقات

تعتمد مايكروويندز بشكل أساسي على تصميم متعدد الطبقات يسمح باستخدام طبقات مختلفة أو إعادة كتابتها لتناسب احتياجات التطبيق. [ 5 ] في المستوى الأدنى، توفر برامج تشغيل الشاشة والماوس / لوحة اللمس ولوحة المفاتيح إمكانية الوصول إلى الشاشة الفعلية وأجهزة إدخال المستخدم الأخرى. في المستوى المتوسط، يتم تنفيذ محرك رسومات محمول، يوفر دعمًا لرسم الخطوط، وتعبئة المساحات، والمضلعات، والقص، ونماذج الألوان. في المستوى الأعلى، يتم تنفيذ ثلاث واجهات برمجة تطبيقات (APIs) توفر إمكانية الوصول لمبرمج تطبيقات الرسومات. تدعم مايكروويندز حاليًا واجهات برمجة تطبيقات Xlib وNano-X وWindows Win32 / WinCE GDI . توفر هذه الواجهات توافقًا وثيقًا مع أنظمة Win32 و X Window ، ولكن بوظائف محدودة. تسمح هذه الواجهات بنقل البرامج بسهولة من أنظمة أخرى.

برامج تشغيل الأجهزة

تُعرَّف واجهات تعريف الأجهزة في الملف device.h. يربط أي تطبيق لنظام مايكرو ويندوز تعريفًا واحدًا على الأقل للشاشة والماوس ولوحة المفاتيح بالنظام. ثم تستدعي الإجراءات المتوسطة في نواة محرك الرسومات المستقلة عن الجهاز تعريف الجهاز مباشرةً لتنفيذ العمليات الخاصة بالأجهزة. يتيح هذا الإعداد إضافة أجهزة متنوعة إلى نظام مايكرو ويندوز دون التأثير على طريقة عمل النظام ككل.

واجهات برمجة التطبيقات

يدعم نظام التشغيل مايكرو ويندوز حاليًا ثلاث واجهات برمجة تطبيقات (APIs) مختلفة. تتولى هذه المجموعة من الإجراءات معالجة تفاعلات العميل والخادم ، وأنشطة مدير النوافذ مثل رسم أشرطة العناوين، ونوافذ الإغلاق، وما إلى ذلك، بالإضافة إلى معالجة طلبات المبرمج لإخراج الرسومات. تعمل واجهات برمجة التطبيقات هذه فوق إجراءات محرك الرسومات الأساسية وبرامج تشغيل الأجهزة.

واجهة برمجة تطبيقات NX11

تتوافق واجهة برمجة تطبيقات NX11 مع واجهة برمجة تطبيقات X Window . وهي مبنية على واجهة برمجة تطبيقات Nano-X، وتوفر وظائف Xlib باستخدام الوظائف المتاحة في واجهة برمجة تطبيقات Nano-X. يمكن تجميعها كمكتبة منفصلة أو مع مكتبة Nano-X في مكتبة واحدة تُسمى libPX11. إجمالاً، توفر 180 وظيفة Xlib، بالإضافة إلى نماذج أولية لوظائف إضافية غير مُنفذة.

بالاعتماد على واجهة برمجة التطبيقات NX11، يمكن استخدام مكتبة واجهة المستخدم الرسومية FLTK لتوفير واجهة رسومية لبرامج التطبيقات. يستخدم توزيع Nanolinux واجهة برمجة التطبيقات NX11 ومكتبة FLTK لتنفيذ نظام تشغيل Linux باستخدام 19 ميجابايت من مساحة القرص.

واجهة برمجة تطبيقات نانو-إكس

تم تصميم واجهة برمجة تطبيقات Nano-X على غرار خادم mini-x الذي كتبه ديفيد بيل في الأصل، والذي كان إعادة تنفيذ لنظام X على نظام التشغيل MINIX . وهي تتبع بشكل عام واجهة برمجة تطبيقات Xlib لنظام X Window، ولكن مع اختلاف الأسماء حيث تبدأ جميعها بـ GrXXX() بدلاً من X...(). يتمثل النموذج الأساسي لأي واجهة برمجة تطبيقات مبنية على نظام Microwindows في تهيئة برامج تشغيل الشاشة ولوحة المفاتيح والماوس، ثم الدخول في حلقة select() في انتظار حدث ما. عند وقوع حدث، إذا كان حدثًا نظاميًا مثل نشاط لوحة المفاتيح أو الماوس، فسيتم تمرير هذه المعلومات إلى برنامج المستخدم وتحويلها إلى حدث عرض، أو رسالة رسم، وما إلى ذلك. أما إذا كان طلبًا من المستخدم لعملية رسومية، فسيتم فك تشفير المعلمات وتمريرها إلى روتين محرك GdXXX المناسب. تجدر الإشارة إلى أن مفهوم النافذة مقابل عمليات الرسوميات الخام يتم التعامل معه على مستوى واجهة برمجة التطبيقات هذه. أي أن واجهة برمجة التطبيقات تُعرّف مفاهيم النافذة، وأنظمة الإحداثيات، وما إلى ذلك، ثم يتم تحويل جميع الإحداثيات إلى "إحداثيات الشاشة" وتمريرها إلى روتينات محرك GdXXX الأساسية لتنفيذ العمل الفعلي. يحدد هذا المستوى أيضًا سياقات الرسومات أو العرض ويمرر تلك المعلومات، بما في ذلك معلومات القص، إلى إجراءات المحرك الأساسية.

واجهة برمجة تطبيقات مايكرو ويندوز

واجهة برمجة التطبيقات (API) التي تسعى للتوافق مع معيار Microsoft Win32 وWinCE GDI هي واجهة برمجة تطبيقات النوافذ المصغرة (Microwindows API). [ 6 ] تدعم حاليًا معظم إجراءات رسم الرسومات وقصها، بالإضافة إلى الرسم التلقائي لشريط عنوان النافذة وسحب النوافذ لتحريكها. تعتمد واجهة برمجة تطبيقات النوافذ المصغرة على الرسائل، مما يسمح بكتابة البرامج دون التقيد بسياسات إدارة النوافذ التي يطبقها النظام. ولا تعمل واجهة برمجة تطبيقات النوافذ المصغرة حاليًا بنظام العميل/الخادم.

تُعدّ الرسائل آلية الاتصال الأساسية في واجهة برمجة تطبيقات النوافذ المصغرة. تتكون الرسالة من رقم رسالة معروف، ومعاملين يُعرفان باسم wParam و lParam. تُخزّن الرسائل في قائمة انتظار الرسائل الخاصة بالتطبيق، ويتم استرجاعها عبر الدالة GetMessage. يتوقف التطبيق مؤقتًا أثناء انتظار الرسالة. توجد رسائل تُقابل أحداثًا متعلقة بالأجهزة، مثل WM_CHAR لإدخال لوحة المفاتيح أو WM_LBUTTONDOWN للضغط على زر الفأرة. بالإضافة إلى ذلك، يتم إرسال أحداث تُشير إلى إنشاء النوافذ وتدميرها، وهما WM_CREATE و WM_DESTROY. في معظم الحالات، ترتبط الرسالة بنافذة، تُعرّف باسم HWND. بعد استرجاع الرسالة، يُرسل التطبيق الرسالة إلى إجراء معالجة النافذة المرتبطة باستخدام DispatchMessage. عند إنشاء فئة نافذة، يتم تحديد إجراء معالجة الرسائل المرتبط بها، لكي يعرف النظام إلى أين يُرسل الرسالة.

تتيح بنية تمرير الرسائل لواجهة برمجة التطبيقات الأساسية إدارة العديد من وظائف النظام عن طريق إرسال رسائل عند وقوع أحداث متنوعة، مثل إنشاء النوافذ، أو الحاجة إلى الرسم، أو النقل، وما إلى ذلك. بشكل افتراضي، تتلقى دالة معالجة النوافذ المرتبطة الرسالة "مرحلة أولية"، ثم تستدعي دالة DefWindowProc، التي تتولى معالجة الإجراءات الافتراضية لجميع الرسائل. وبهذه الطريقة، يمكن لجميع النوافذ أن تتصرف بنفس الطريقة عند سحبها، وما إلى ذلك، ما لم يقم المستخدم بتجاوز ذلك تحديدًا. يمكن إعادة تعريف سياسات إدارة النوافذ الرئيسية بمجرد إعادة تنفيذ دالة DefWindowProc، بدلاً من إجراء تغييرات في جميع أنحاء النظام.

تُعدّ النافذة الوحدة الأساسية لتنظيم الشاشة في واجهة برمجة تطبيقات النوافذ المصغرة. تُحدد النوافذ مساحةً على الشاشة للرسم عليها، بالإضافة إلى "إجراء نافذة" مُرتبط بها لمعالجة الرسائل المُوجّهة إليها. يستطيع مُبرمجو التطبيقات إنشاء نوافذ من فئات مُعرّفة مُسبقًا، مثل الأزرار ومربعات التحرير وما شابه، أو تعريف فئات نوافذ خاصة بهم. في كلتا الحالتين، تبقى طريقة إنشاء النوافذ والتواصل معها كما هي تمامًا.

تاريخ

يعود أصل Nano-X إلى NanoGUI. أنشأ أليكس هولدن NanoGUI بالاعتماد على خادم mini-X الخاص بديفيد بيل وتعديلات آلان كوكس، مع إضافة خاصية الشبكات بين العميل والخادم. ثم أبدى غريغوري هير اهتمامًا بمشروع NanoGUI وبدأ بإجراء تحسينات وتعديلات واسعة النطاق عليه. في الإصدار 0.5 تقريبًا، أضاف غريغوري هير دعمًا لواجهات برمجة تطبيقات متعددة، وبدأ بتوزيع Microwindows. في Microwindows 0.84، دُمجت جميع تغييرات NanoGUI السابقة، ومنذ ذلك الحين أصبح توزيعًا مُدمجًا يجمع بين NanoGUI وMicrowindows. في يناير 2005، غيّر النظام اسمه إلى نظام نوافذ Nano-X. ولأن Nano-X يتبع بشكل عام واجهة برمجة تطبيقات Xlib الخاصة بنظام نوافذ X، فقد طُوّرت واجهة إضافية باسم NXlib، توفر واجهة برمجة تطبيقات متوافقة مع Xlib مبنية على Nano-X.

مراجع