Skip to content

Latest commit

 

History

History
47 lines (43 loc) · 3.27 KB

CONTRIBUTING.md

File metadata and controls

47 lines (43 loc) · 3.27 KB

How to contribute to Gamma Text Editor

If you are interested in contributing to Gamma core development or in making plugins for Gamma, then this section is for you. Gamma is built on top of GTK3. GTK3 is a GUI library that works on Linux, Windows, and Mac. You have to read about GTK3 and you need to keep GTK3 documentations handy. GTK3's main language is C, but there are many wrappers for GTK3 in different languages such as C++, Python, javascript, Rust, and Vala. I decided to use the python wrapper which is called pygobject. Pygobject is simpler to write, even though I am kind of a C guy, but making GUI editor with C would be time consuming to me. That is not the only reason I chose python, the other yet very important reason is that python makes it easy to apply a plugin design where it can load modules at run time.

Anyway, you need first to understand the Gamma structure (which is not that complex), know some basic GTK3 techniques and terminologies, for example GTK3 allows you to style your widgets (GUI components) with CSS files. Also, the layout of GTK3 widgets can be designed in XML formats seperetly from the code and imported at run time. Instead of writing raw XML files to design your UI, you can use a tool called Glade which is a graphical tool that allows to drag/drop widgets and set widgets' properties graphically.

To sum up, here is the road map to start developing for Gamma:

  • Read about GTK3
  • Read about The Python GTK+ 3 Tutorial
  • Learn the structure of Gamma and how to write a plugin
    • Soon I will write a tutorial of making a plugin that deals with:
      • Getting input or information from Gamma editor
      • Getting input or information from other plugins
      • Designing UI layout using Glade
      • Writing css for plugin widgets
      • Output back to the editor
      • Changing the main layout of Gamma (example, inserting a bottom panel)
      • Using other plugins features
      • Listening to GTK signals
      • Creating signals to your plugin
      • Listening to other plugins signals
      • The idea of the plugin would be a logger which logs every action
        and outputs the log in bottom panel (the bottom panel would be a seperate plugin)