I was working on the main window when I saw this annoying little problem. Instead of creating a single top-level window that I wanted, it created two.

For resolving this I had to re-write the code to create the window.

Earlier I was loading the ui(glade) file in main.cpp but now I have resorted to creating this window via constructor call from different .cpp file.

Also I am keeping a check that there should be no warnings during compile as well as during runtime.


I’ve begun working on the UI part of Dr. Geo.

I’m currently dealing with the widgets and windows. Right now I have a single window that is created when I run the application. This window has a Title Bar along with the File Menu Bar.

I am writing classes and function handlers that will be used by the main window and the menu bar.

Though the UI layout is yet to be discussed with my mentor in detail, I’ve created a minimal design that I think must be there.

GSoC Mid-Term

I’ve been selected in GSoC to work on GNU Dr. Geo. It is an interactive geometry software where you can create geometric figures and entities for visualization purpose.

My project is to upgrade Dr. Geo’s libraries to the latest stable versions to make it compatible with current distros so as to achieve a facile installation.

My milestones before the mid-term were:

  • Upgrade Guile library
  • Upgrade Glade library
  • Upgrade Gtk+ library

Upgrade Guile library
The Guile library is used for the scripting purpose in Dr. Geo to create your figures. Earlier the software was using Guile 1.6 version which has been long deprecated. My job was to upgrade the software to make it consistent with Guile 2.0.x versions.

I changed a lot of code at the back end for that. I submitted 6 commits that includes 353 lines added and 341 lines removed.

Technical: I shifted from the old Guile’s GH Interface to the newer SCM Interface. This meant changing the gh_interface syntaxes to the scm_interface ones.

Upgrade Glade library
The Glade is used for the Interface designing. Dr. Geo was using glade that was compatible with older versions of Gtk2 library. And it has been deprecated as well.

I submitted 14 commits for this that consists of 18392 lines added and 21521 lines removed.

Technical: I had to change from libglade format, that is longer supported, to the GtkBuilder format (the current format that Gtk+ library supports). This involved changing the entire structure of glade files.

And I had to split up the glade files into multiple top-level glade files, because GtkBuilder format doesn’t allow duplicate IDs unlike the former format.

Upgrade Gtk+ library
Dr. Geo is using Gtk2 where as the newer version Gtk+3 has been available for some time now. The support for Gtk2 is decreasing day by day and will soon be deprecated.

So in this milestone, I had to change the code to use Gtk3 library.
But alas, it had brought some serious issues to front that makes it a laborious task to shift to the newer version.

The drawings were drawn using GDK_drawables which are not supported in Gtk3. Therefore, it requires dropping gdk API to use Cairo instead. Gtk3 relies completely on Cairo for drawing purpose.

And to use cairo I had to re-write most of the structure, the ‘Kernel’ part of Dr. Geo.

After discussing with my mentor, we decided that I should re-write the structure with a modular approach.

Modular Approach
There will be two main components of the software.

  1. Kernel
  2. UI

Kernel will store the data and will manage addition or deletion of the geometric objects. All the processing and calculations will be performed in this part.

UI will manage windows and widgets for the software. The user input will be passed to kernel after it has been taken from the UI. It will also show/display the objects on the screen.

The following are the things that I’ll be using:

I have already started with the UI part and will be committing the changes soon.


Prepared the new milestones that I need to follow for the new code.

Basically what I have is to divide the software in two parts:

#1: Kernel (for processing and calculations)

#2: UI (for windows and widgets to deal with input and output)

I’ll start working on it as soon as I’m done configuring my system.


Today I posted my thoughts regarding the status of drgeo on the Mailing List.

Now I’m awaiting response from my mentor on how to progress.

I am planning to develop drgeo in a new fresh environment with current stable libraries and technologies, though these may be changed according to preferences and requirements of the software.

This whole change in plan is to make a solid foundation for our drgeo that can be feature rich in future.


The cairo drawing API that is needed to replace the older API for drawing (gdk) has sprung a lot of code webs. The whole back-end implementation is required to be changed, partially at some places and a complete re-write at rest.

Either Gtk2 must be retained to use older API to support the current logic/schema in the code of drawing.
Or to shift to cairo and use Gtk3, which is lot of work(re-write) and will take up most of my GSoC time.

This is the discussion that I need to have with my mentor. I’ve asked on the mail and now waiting for the response.

The decision will lie with the mentor as well as the maintainer.


Replaced old GtkTooltips API with newer GtkTooltip API.
Files: drgenius_mdi.h, drgenius_mdi.cc

Working on using cairo API to draw the primitives. It needs a lot of code change since the cairo API has a different concept to draw and store stuff.


Changed the make files in the glade directory to support newly splitted glade files.

Also I’ve specified the different instances of GtkBuilder to work out different glade files in a single function. It wasn’t a correct way to use the instances even if that single pointer has been de-referenced.

Currently I’m working on changing the drawing functions to make use of cairo since in new Gtk+3, the GDK drawing API has been removed.


Split the third glade file (drgeo2.glade) into several multiple files.

I had to change the code where these files are loaded using BUILDER.

The loading of these multiple files is not done properly because of old style of calling/loading of the glade files in the software. That has to be changed.