2013-01-20 7 views
7

क्रॉस-प्लेटफ़ॉर्म टेक्स्ट एडिटर, सब्लिमे टेक्स्ट 2 के प्रशंसक के रूप में, मैं कुछ शोध कर रहा हूं कि यह कैसे विकसित किया गया था। डेवलपर ने नोट किया है कि यह लिनक्स के लिए कुछ जीटीके के साथ 99% सी ++ है और यह एक कस्टम यूआई टूलकिट का उपयोग करता है जिसे वह "सब्लिम जीयूआई" कहते हैं। यह देवसी ++ कस्टम यूआई टूलकिट - क्रॉस प्लेटफार्म एबस्ट्रक्शन लेयर के लिए विकल्प

सब्लिमे टेक्स्ट 2 स्वयं एक कस्टम यूआई टूलकिट का उपयोग करता है। ऐसे कई ऐप्स हैं जहां यह समझ में नहीं आता है, लेकिन यह सब्लिमे टेक्स्ट के लिए ऐसी कोई अनुचित पसंद नहीं है, जहां मैं हमेशा जानता था कि बहुत सारे यूआई नियंत्रण कस्टम होने होंगे, चाहे टूलकिट चाहे (उदाहरण के लिए, पाठ नियंत्रण और टैब नियंत्रण)। यूआई टूलकिट एक क्रॉस प्लेटफार्म एब्स्ट्रक्शन लेयर के शीर्ष पर बैठता है, जो सबसे कम आम संप्रदाय की बजाय मंच कार्यक्षमता का एक संघ है।

मेरा प्रश्न है, क्रॉस प्लेटफार्म अबास्ट्रक्शन परत के लिए कुछ विकल्प क्या हैं? मुझे लगता है कि यह जीटीके, क्यूटी, एसडीएल की तुलना में निचले स्तर पर है। मैं यह पता लगाने की कोशिश कर रहा हूं कि कोई कस्टम UI टूलकिट कैसे बनाएगा जो क्रॉस प्लेटफॉर्म होगा और केवल एक बार कोड लिखना होगा।

मैं यूआई टूलकिट के लाभों की सराहना करता हूं, लेकिन अगर मैं अपने हाथों को गंदा बनाना चाहता हूं और विंडोज, लिनक्स, मैक पर अपने आवेदन के लिए समर्थन प्राप्त करना चाहता हूं, तो मुझे यकीन नहीं है कि कहां से शुरू करना है।

उत्तर

4

मुझे लगता है कि सबसे महत्वपूर्ण सवाल यह है कि कीबोर्ड और माउस ईवेंट कैसे आकर्षित करें और प्राप्त करें।

  1. एक ओपन संदर्भ बनाएँ और ओपन के साथ अपने विजेट आकर्षित:

    मैं इसे देखना वहाँ के रूप में ड्राइंग के लिए दो दृष्टिकोण हैं। glui की तरह।

  2. मूल ड्राइंग बुनियादी ढांचे का उपयोग करें। विंडोज़ पर GDI+ की तरह, एक्स 11 पर XLib

बेशक आपको प्रत्येक प्लेटफॉर्म के लिए कुछ चीजों को लागू करने की आवश्यकता होगी। ओपनजीएल के साथ आपको प्रत्येक मंच के लिए संदर्भ (डब्लूजीएल, जीएलएक्स, ..) को संभालने की आवश्यकता है, जबकि मूल ड्राइंग बुनियादी ढांचे के साथ आपको अधिक काम की आवश्यकता है। चूंकि सभी ड्राइंग बुनियादी ढांचे अद्वितीय हैं, इसलिए आप शायद ड्राइंग के लिए एक अमूर्त लिखना चाहते हैं और फिर अपने ड्राइंग एबस्ट्रक्शन परत के साथ अपने विजेट को कार्यान्वित करना चाहते हैं।

ईवेंट हैंडलिंग के लिए, मुझे लगता है कि आपको अपना खुद का अमूर्त लिखना होगा क्योंकि ईवेंट प्लेटफ़ॉर्म प्रत्येक प्लेटफॉर्म के लिए अद्वितीय है।

आखिरकार, आपको मुख्य विंडो बनाने के लिए एक अमूर्त परत भी होनी चाहिए जिसमें आप अपने विजेट खींचते हैं और जिससे आप ईवेंट प्राप्त करते हैं।

ओपनजीएल के साथ जाने पर, आप glut से शुरू कर सकते हैं, जो पहले से ही विंडो निर्माण और ईवेंट हैंडलिंग को संभालता है।

ध्यान रखें, मैंने कभी ऐसा कुछ भी लागू नहीं किया है। हालांकि, मैं शायद ओपनजीएल दृष्टिकोण का प्रयास करूंगा क्योंकि मेरा मानना ​​है कि लक्ष्य तक पहुंचने के लिए यह कम काम है।

+0

जो मैं देख रहा हूं उसके आधार पर शायद यह जीडीआई और एक्सएलआईबी का उपयोग करता है। फ़्रेप्स जैसे कुछ का उपयोग करना, यदि GPU का उपयोग किया जा रहा था, तो आपको डीबग जानकारी दिखाई देगी, लेकिन कोई डीबग जानकारी मौजूद नहीं है। तो मेरा मानना ​​है कि यह सॉफ्टवेयर प्रतिपादन कर रहा है। जीडीईबगर चलाने के साथ 0 ओपनजीएल कॉल भी हैं। हालांकि मैं केवल विंडोज़ पर परीक्षण कर रहा हूं, इसलिए यह संभव है कि ओपनजीएल अन्य प्लेटफॉर्म पर उपयोग किया जाए, हालांकि मुझे शक है। – leetNightshade

1

कई जीयूआई उपकरणकिटें कि मंच में काम कर रहे हैं आप, हालांकि अपनी खुद लिखना चाहते थे, तो (टी, क्यूटी और जीटीके कुछ नाम हैं)

, यह जीटीके की तुलना में कम स्तर टूलकिट होना जरूरी नहीं होता , क्यूटी या इसी तरह के।(; यूनिक्स के लिए X11 यानी)

आप इस

void draw_window(mywindow *mw, char *name){ 
    non platform specific code goes here (maybe arg parsing, etc.) 

#IFDEF windows 
    windows specific code goes here 
#ENDIF 
#IFDEF macosx 
    mac specific code goes here 
#ENDIF 
#IFDEF linux 
    linux specific code goes here 
#ENDIF 

    non platform specific code goes here (tidying up, recording state, etc.) 
} 

मंच-विशिष्ट अनुभाग से हर एक के लिए इसी तरह की एक अंतरफलक आपको लगता है कि मंच या उपयोग के लिए एक जीयूआई टूलकिट करने के लिए प्रेषण सकता है बेनकाब कर सकता है जो कुछ भी इंटरफेस उपलब्ध है ।

आप कोड आप लक्ष्य मंच निर्दिष्ट संकलन, और इस निर्धारित करता है जो ifdef वर्गों में संकलित करने के है।

बेशक

इस बेहद सरल है, और बड़ी सावधानी ताकि इंटरफ़ेस आपको बेनकाब लिया जा करने के लिए होगा मूल समकक्षों पर नक्शा लगाने के लिए बहुत दर्दनाक नहीं है।

+0

कोई ट्यूटोरियल है जो कुछ घटकों के निर्माण के साथ एक मूल खिड़की बताता है। बस एक विचार पाने के लिए। – programmer

+0

कोड में #ifdefs रखने के लिए मुश्किल है, इसलिए कभी भी एक अच्छा विचार नहीं है। ड्राइंग के लिए एक अमूर्त होना बेहतर होगा, जिसका उपयोग यहां किया जाता है। बेशक, यह अमूर्त अभी भी ओएस निर्भर है, लेकिन आपकी लाइब्रेरी में एक छोटे और समर्पित हिस्से को कम किया गया है। वह बीटीडब्ल्यू है। वास्तव में क्यूटी क्या करता है। यदि आप मंच-निर्भर भागों को देखते हैं, तो आप देखेंगे कि> 98% क्यूटी प्लेटफॉर्म स्वतंत्र है। तो बस क्यूटी का उपयोग करें, यह सही विकल्प है। – dhaumann

संबंधित मुद्दे