FLTK Meinungen



  • Da ich sehr viele Miniprogramme zum Lernen programmiere und keine Lust habe später die DLLs dafür zu suchen und auch nicht für jede Exe 10MB verschwenden will, suchte ich nach einem GUI-Framework was einfach zu lernen war und auch nur GUI-Elemente bereitstellt. Hätte ja sein können das gtkmm da für mich was ähnliches leistet wie FLTK.

    Auch in der heutigen Zeit ist es angenehm wenn kleine Programme auch wenig Platz verschwenden auch wenn es nicht mehr so wichtig ist wie früher. Ein Beispiel sind Javaprogramme die im Hintergrund laufen und gleich über 100MB verbraten. Hätte ich da ne Alternative mit nur 10MB würde ich sofort tauschen.



  • GT-Kamm schrieb:

    Abgesehen davon, dass deine Lib (kannte ich bisher noch gar nicht) noch nicht plattformunabhaengig ist (wann soll es denn soweit sein?), sieht sie wirklich schon recht gut aus und das Design gefaellt mir auch.

    Die Lib ist schon plattformunabhängig. Lediglich die Implementierung ist bisher nur für eine Plattform verfügbar. Wenn jemand die STL nur für Win32 implementiert, ist die STL trotzdem plattformunabhängig.

    Aber da es bisher nur ein Ein-Mann-Projekt ist, liegt die Prio zur Zeit beim Design (welches noch nicht endgültig ist und sich entwickelt) und Win32 dient als Beispiel-Implementierung. Eine weitere Plattform (Unix-artige Systeme) ist aber für Dezember vorgesehen.

    Das Algierlib nicht weiter bekannt ist, ist absicht. Da es noch nicht wirklich reif für die breite Masse ist. Aber man kann damit schon experimentieren und als Nutzer Kritik und Wünsche einbringen.



  • Artchi schrieb:

    Also mit Algierlib ist ein HelloWorld-Fenster, statisch gelinkt mit MSVC nur ca. 50 KByte klein (bei Mingw glaube ich nur 120 Kbyte). Und das ohne Lizenzbruch bei Closed Source! 😃 Sorry, mußte sein. 😉

    Ich komme da leider auf 240Kbyte mit FLTK und MinGW, aber auch alles statisch gelinkt also allinclusive 😃 und das mit Open Source GPL2. Weiß da wer ob ich da auch closed Source draus machen darf wenn ich drauf hinweise das ich FLTK nehme?



  • Hallo,
    on topic:
    Ich hatte FLTK vor einiger Zeit kurz angetestet da es ein vielverpsrechender Kandidat für mein Spiel-Projekt war. Ich wollte ebenfalls eine reine, schlanke GUI Lib mit OpenGL support. Leider erwies sich FLTK1 bei mir als sehr unstabil. Obwohl das Zusammenbauen der UI einfach war, kam ich schnell an Grenzen, wo meine App sich bezüglich UI komisch verhielt und auch regelmässig abstürzte. Debuggen ergab jeweils dass die Fehler tief im FLTK Code auftraten. Und das anschliessende Hilf-suchen im Netz ergab auch keinen Erfolg (wegen nur spärlicher FLTK Community). also hatte ich mir vorgenommen auf ein robusteres FLTK2 zu warten, welches aber leider wohl nie das Licht der Welt erblicken wird.

    zu den anderen GUI Libs:
    Die Kritik von Artchi gegenüber Qt und WxWidgets ist gerechtfertigt. Es gibt nunmal Bedarf für reine schlanke GUI libs, ohne Schnickschnack, und vor allem ohne sich ein Framework aufzwängen zu lassen. Ich war bei meiner Suche ebenfalls auch über Qt gegangen und hab das wegen dem unsäglichen MOC schnell wieder rausgeschmissen! Ich möcht mir nicht meinen Build-Prozess von einer GUI Lib bestimmen lassen!

    Zu Algier-lib: Nette Sache, stösst genau in die gesuchte Nische: Modernes C++=Ja, Native Widgets=Ja, Funktionsumfang=GUI (mit Artchis eigenen Worten gemäss http://kharchi.eu/wiki/doku.php?id=cpp:gui:libs 😉 ). Leider noch die Beschränkung auf Win32. Ich hoffe du findest n paar Mitstreiter, denn allein wird sowas schnell zu viel Arbeit. Aber ich wünsch Dir Durchhaltevermögen! 👍
    Ach, und der Name ist schei*e. 😃



  • @artchi: kann ich mit deiner lib auch closed source veröffentlichen? bin da jetzt etwas neugierig geworden 😃

    @scrontch: ich bin genau deiner meinung. ich suche schon lange noch einer native gui die so schlank wie nötiig ist da ich wirklich nur die guielemente brauche und statisch linken möchte. und denke das viele das auch suchen.



  • Also genaue Bedingungen für FLTK findest du hier. Ziemlich verständlich geschrieben.



  • freizeit_programmierer schrieb:

    @artchi: kann ich mit deiner lib auch closed source veröffentlichen?

    Ja, ist möglich.
    Die BSD Lizenz erlaubt dir mit der Lib anzustellen, was du möchtest, bis auf die drei Bedingungen aus dem Lizenztext.



  • Habe ich das richtig verstanden, ich darf deine lib nutzen und statisch linken ohne meinen quelltext offen zu legen wenn ich deine Erklärung und dein Copyright irgendwo in meiner Software mit angebe z.B. im Info Bereich oder bei der Installation?



  • scrontch schrieb:

    Zu Algier-lib: Nette Sache, stösst genau in die gesuchte Nische: Modernes C++=Ja, Native Widgets=Ja, Funktionsumfang=GUI (mit Artchis eigenen Worten gemäss http://kharchi.eu/wiki/doku.php?id=cpp:gui:libs 😉 ). Leider noch die Beschränkung auf Win32. Ich hoffe du findest n paar Mitstreiter, denn allein wird sowas schnell zu viel Arbeit. Aber ich wünsch Dir Durchhaltevermögen! 👍

    Es würde schon reichen, wenn jemand die Library versuchen würde zu nutzen, und mir Feedback gibt. So das ich weiß, wo außenstehende z.B. Verbesserungen sehen oder etwas unverständlich erscheint. Auch würden mehr Nutzer mehr Bugs finden.

    Klar, die Lib lebt sehr stark. Manschmal werden ganze Klassennamen geändert u.ä. Da müsste man als User dann beim nächsten Release mitziehen. Aber bei kleinen Projekten ist das weniger problematisch. Ab Version 1.0.0 wird dann natürlich alles fest gezurrt.

    Wer die Lib nutzen will und MinGW 4.4.1 einsetzt, sollte aber auf Version 0.6.0 warten, weil zur Zeit ist bzgl. MinGW etwas chaotisch (Lib selber bauen und GDI+ Zwang).

    scrontch schrieb:

    Ach, und der Name ist schei*e. 😃

    Danke, aber besseres ist mir nicht eingefallen. 😃



  • freizeit_programmierer schrieb:

    Habe ich das richtig verstanden, ich darf deine lib nutzen und statisch linken ohne meinen quelltext offen zu legen

    Richtig!

    freizeit_programmierer schrieb:

    wenn ich deine Erklärung und dein Copyright irgendwo in meiner Software mit angebe z.B. im Info Bereich oder bei der Installation?

    Richtig! Der Lizenztext muß für den User jeder Zeit einsehbar sein, z.B. im Handbuch. Nur bei der Installation wäre glaube ich etwas wenig, weil ihn der User nur einmalig lesen kann. Den Lizenztext muß jeder immer lesen können, damit er weiß, woran er ist: z.B. wenn die Lizenzdatei einfach in dem Verzeichnis deiner Anwendung liegt, im Infobereich, Hilfe oder Handbuch.

    Hier mal sinngemäß die Übersetzung der zweiten Bedingung:

    2. Weiterverbreitete kompilierte Exemplare müssen das obige Copyright, diese Liste der Bedingungen und den folgenden Haftungsausschluss in der Dokumentation und/oder anderen Materialien, die mit dem Exemplar verbreitet werden, enthalten.



  • @artchi: deine lib schaut schon ganz nett aus es fehlen aber auch einige GUI Elemente wie TreeViews, Grids, Toolsbars, Split- und TabbedWindows oder?

    @scrontch: hmm, bin jetzt etwas in grübeln geraten wegen fltk und denke ich werde auch mal wxwidgets ausprobieren. Bei qt darf ich nicht statisch linken und kann auch nicht ohne weiteres den Code einfach kompilieren. Ne IDE kommt mir nicht ins Haus sooo große Projekte will ich nicht machen als das ich ne IDE brauche. Is echt schwer was komplettes leichtgewichtiges nur für GUI zu finden.



  • freizeit_programmierer schrieb:

    @artchi: deine lib schaut schon ganz nett aus es fehlen aber auch einige GUI Elemente wie TreeViews, Grids, Toolsbars, Split- und TabbedWindows oder?

    @scrontch: hmm, bin jetzt etwas in grübeln geraten wegen fltk und denke ich werde auch mal wxwidgets ausprobieren. Bei qt darf ich nicht statisch linken und kann auch nicht ohne weiteres den Code einfach kompilieren. Ne IDE kommt mir nicht ins Haus sooo große Projekte will ich nicht machen als das ich ne IDE brauche. Is echt schwer was komplettes leichtgewichtiges nur für GUI zu finden.

    Einer der großen Vorteile an wxWidgets ist die Lizenz. Du darfst damit quasi fast alles machen was Du willst. Ein einfaches Beispiel mal, wie verdammt einfach wxWidgets ist und doch so mächtig:

    //////////////////////////////////////////////////////////////////////////
    // Event Table
    BEGIN_EVENT_TABLE(Mainframe, wxFrame)
    	EVT_MENU(idMENU_RELOAD_HTML, Mainframe::OnReloadHtml)
    	EVT_MENU(idMENU_SHOW_STARTUP, Mainframe::OnShowStartup)
    	EVT_MENU(idMENU_ABOUT, Mainframe::OnAbout)
    	EVT_MENU(idMENU_EXIT, Mainframe::OnExit)
    END_EVENT_TABLE()
    //////////////////////////////////////////////////////////////////////////
    
    //////////////////////////////////////////////////////////////////////////
    // Constructor and Deconstructor
    //////////////////////////////////////////////////////////////////////////
    Mainframe::Mainframe(long style)
    : wxFrame(NULL, -1, "AweSomeScript", wxDefaultPosition, wxSize(800,600), style),
      m_currentPage(ASS_STARTUP_FILE)
    {
    	// Create Menu
    
    	wxMenu* mnuPreview = new wxMenu;
    	mnuPreview->Append(idMENU_RELOAD_HTML, _("Reload\tF5"));
    
    	wxMenuBar* bar = new wxMenuBar();
    	bar->Append(mnuPreview, _("Preview"));
    	this->SetMenuBar(bar);
    
    	// Create Notebook
    	m_notebook = new wxNotebook(this, idNOTEBOOK);
    	CreateTextPage(m_notebook);
    	CreateHtmlPage(m_notebook);
    	m_notebook->ChangeSelection(1);
    }
    
    Mainframe::~Mainframe()
    {
    }
    
    //////////////////////////////////////////////////////////////////////////
    // Creating Notebook Pages
    //////////////////////////////////////////////////////////////////////////
    
    void Mainframe::CreateHtmlPage( wxBookCtrlBase* parent )
    {	
    	m_winHtml  = new wxHtmlWindow(parent, idPAGE_HTML);
    	m_winHtml->LoadFile(wxFileName(m_currentPage));
    	parent->AddPage(m_winHtml, _("Preview"));
    }
    
    void Mainframe::CreateTextPage( wxBookCtrlBase* parent )
    {
    	m_txtSource = new wxTextCtrl(parent, idPAGE_SOURCE);
    	parent->AddPage(m_txtSource, _("Source") );
    }
    
    //////////////////////////////////////////////////////////////////////////
    // Events
    //////////////////////////////////////////////////////////////////////////
    
    void Mainframe::OnExit( wxCommandEvent& )
    {
    	this->Close(true);
    }
    
    void Mainframe::OnAbout( wxCommandEvent& )
    {
    }
    
    void Mainframe::OnReloadHtml( wxCommandEvent& )
    {
    	m_winHtml->LoadFile(wxFileName(m_currentPage));
    }
    
    void Mainframe::OnShowStartup( wxCommandEvent& )
    {
    	m_currentPage = ASS_STARTUP_FILE;
    	m_winHtml->LoadFile(wxFileName(m_currentPage));
    }
    

    http://img687.imageshack.us/img687/7918/97340824.jpg
    Daran arbyte ich grade :P. Was da angezeigt wird, ist HTML. wx kann derzeit zwar nur HTML 1, also nur basics, aber wxWebKit ist in der mache und wird hoffentlich bald erscheinen.
    Am Ende musst Du es wissen, was Du willst...
    rya.



  • Is sehr nett, ich habe auch schon mal mit rumgespielt. Mir gefallen die dynamsichen Eventhanlding besser als die Eventmakros, aber das kann ja jeder machen wie er will.

    Das mit HTML 1 is völlig egal, da ich nur GUI brauche und den Rest selbst mache zu Lernzwecken oder halt noch andere libs bei bedarf dazuhole.

    Kann ich eigentlich bei wxWidgets wenn ich das für statisch kompiliere auch nur die libs reinhauen die ich brauche also z.B html draussen lassen?



  • freizeit_programmierer schrieb:

    Is sehr nett, ich habe auch schon mal mit rumgespielt. Mir gefallen die dynamsichen Eventhanlding besser als die Eventmakros, aber das kann ja jeder machen wie er will.

    Das mit HTML 1 is völlig egal, da ich nur GUI brauche und den Rest selbst mache zu Lernzwecken oder halt noch andere libs bei bedarf dazuhole.

    Kann ich eigentlich bei wxWidgets wenn ich das für statisch kompiliere auch nur die libs reinhauen die ich brauche also z.B html draussen lassen?

    Das macht der Compiler automatisch. Der linkt nur, was wirklich gebraucht wird.
    Das Framework ist allerdings in mehrere kleine libs unterteilt. So musst Du nur gegen das linken, was du brauchst. Auch bei den .dll ist das so. Es gibt viele kleine dll, die für einen bestimmten Bereich zuständig sind. Man kann aber auch alles in eine große packen. Wie man das möchte.
    rya.



  • freizeit_programmierer schrieb:

    @artchi: deine lib schaut schon ganz nett aus es fehlen aber auch einige GUI Elemente wie TreeViews, Grids, Toolsbars, Split- und TabbedWindows oder?

    Verständlich das da noch so viel fehlt, da es ja nicht mal eine Version 1.0 gibt. Es ist ganz klar noch in Entwicklung und es lebt auch sehr stark. Deshalb gibt es auch keine "Werbung" dafür.
    Die anderen GUI-Libs wie FLTK oder wx sind dagegen schon viel länger auf dem Markt. Wenn Du JETZT was produktives brauchst, sind die anderen Libs besser für dich geeignet.



  • Ja stimmt du bist ja noch nicht bei der Version 1 angelangt und leider brauche ich schon jetzt was komplettes. Das soll aber nicht heißen das ich deine Lib nicht mal ausprobieren werden, auf jedenfall bleibt der Link zu deiner Seite erhalten. Es macht alles einen sehr seriösen Eindruck, ist irgendwie schade das nur du dran arbeitest, was passiert wenn du keine Lust mehr drauf hast oder dir was passiert?



  • freizeit_programmierer schrieb:

    Is echt schwer was komplettes leichtgewichtiges nur für GUI zu finden.

    wieso?
    so wie ich das sehe kommt eigentlich nur fltk fuer dich in Frage - da warst du eigentlich schon auf dem richtigen Weg. fltk-programme duerfen statisch gelinkt werden und erreichen eine unschlagbare Exe-Groesse - wenns dir darum geht wirst du was besseres (im Moment) nicht finden. Mit Hilfe von Schemes kannst du auch den "altmodischen" Look aufpeppen.
    wxWidgets ist keine reine GUIlib sondern ein Framework mit allem moeglichem SchnickSchnack und meiner Meinung nach zu ueberladen fuer einen, der "nur" eine "leichtgewichtige GUIlib" sucht.



  • Hast ja recht, aber nachdem ich gelesen habe das fltk doch ziemlich instabil werden kann werde ich jetzt mal wxwidgets probieren, da sind die exe dann ca 3MB was zwar 10x mehr als bei fltk ist aber noch hart an der grenze liegt was ich mir so vorstellen kann. Vorteil sind natürlich die nativen Widgets. Das mit den Schemes kling aber auch interessant.



  • freizeit_programmierer schrieb:

    ist irgendwie schade das nur du dran arbeitest, was passiert wenn du keine Lust mehr drauf hast oder dir was passiert?

    Das ein Proejkt eingestellt wird, kann jedem Projekt passieren. Bei MySQL hat man auch das Zittern bekommen, als Oracle Sun aufkaufte.

    Das Argument für OpenSource ist aber meistens, das falls es sterben sollte, man es wenigstens selber weiter entwickeln oder zumindest pflegen kann (z.B. an neue Betriebssystem-Versionen anpassen). Von Algierlib ist jedenfalls der gesamte Sourcecode und Dokumentation bei Tigris verfügbar! Falls ich morgen weg sein sollte, kann jeder weiter machen... ob für sich privat oder öffentlich ist egal.

    Ich selber bastel jetzt über drei Jahre daran. Habe damals nach dem ersten Jahr alles über den Haufen geworfen und neu angefangen. Dann später wieder das Design geändert (speziell die Smartpointer-Geschichte). Dann ist noch das MVC dazu gekommen. Die Doku/Manual wird von mir meiner Meinung nach recht gut gepflegt, was mir auch wichtig ist.
    Zur Zeit werden fünf Compiler von mir unterstützt, d.h. ich teste jedes Release mit diesen Compilern.
    Auch sind jetzt Unittests für TDD dazu gekommen, auch wenn noch nicht alles abgedeckt wird.

    Also, das macht schon alles Arbeit, und bisher habe ich noch nicht aufgegeben. 😃 Vieles geht auf Design und wie du sagst "seriösität" drauf, so das die Widget-Anzahl leider leiden muß. Aber ich finde, es bringt nichts, wenn ich alles mit Widgets voll stopfe, aber die "seriösität" leiden muß. 😉

    Vor sechs Monaten hatte ich die Lib hier vorgestellt, und es gab überwiegend gute Kritik. Ein paar Änderungswünsche sind auch schon eingeflossen. Es geht also immer weiter. Ich weiß aber auch in etwa, was noch alles an Features fehlt, um eine breitere Anwendermasse zu erreichen. Deshalb habe ich auch eine Roadmap, in der ich das geplant habe. Wenn diese Anwendermasse erreicht wird, wird auch das Risiko kleiner, das das Projekt stirbt. 🙂



  • Vielleicht haste auch die Chance, nach Fertigstellung der V1.0, dass du noch mehr Unterstürzung von guten Entwicklern erhälst. Ich gebe dir recht das die Qualität nicht zugrunde der Quantität aufgegeben werden sollte. Ich drücke dir das auf jeden Fall feste die Daumen 👍


Anmelden zum Antworten