cadview – 2: Running on Windows

Here are two examples of cadview clients running on Windows. The first is simply the earlier gladeui sample built on Windows using MSVC. Headers and libraries for GTK+ ( need to be installed. A VC++ project [1] was created to refer to the gladeui source files. The project is located at /src/msvc/gladeui. No significant changes were made to the gladeui source.

The second example is called winui and talks directly to the Windows API and GDI+. When handling paint events we require an object using which to perform graphics output. In the GTK+ case, I could simply create the cairo_t object within the handler. In case of the Windows API, the output must be performed via an HDC which is passed as a parameter with the WM_PAINT event. In order to accommodate this, cad_gui_view::paint was modified to take a cad_gui_view::graphics_type& as a parameter. winui is located at /src/msvc/winui in the repo.

  1. ^ I had to fall back on a handcrafted MSVC build since CMake failed to find GTK+ and Boost on Windows. The MSVC solution can be found at /src/msvc/msvc.sln within the repository. boost::regex ( headers and libraries need to be installed for both examples.

cadview – 1: Introduction

cadview is a C++ library which provides a cross-platform GUI widget for 2D drafting. Presently, the following features are supported:

  • Zoom/Pan
  • Polyline tool
  • Entering x,y co-ordinates via mouse selection or text entry


No installation packages are available yet and the executable has to be built from source. cadview depends on the following tools and libraries:

On a Fedora 16/17 machine, you can install the above dependencies as follows:

Obtain the source using Mercurial as follows:

This should place the source in a directory named cadview in your current directory. To build the binaries:

gladeui is a test application that uses cadview on GTK+. You can run gladeui as follows:

Select File>Polyline to activate the polyline tool. The UI controls are as follows:

  • Click to add a point to the polyline
  • A point can also be added by entering an x,y co-ordinate pair in the textbox and hitting <Enter>
  • Pan by holding down the middle mouse button
  • Zoom by turning the mouse wheel
  • Right-click or hit <Esc> to end the polyline

Screenshot of cadview

Design Overview

The visible area of the widget – the view – is represented by the cad_gui_view class. cad_gui_view does not interact directly with the underlying GUI but instead depends on a pair of adaptor classes for GUI facilities.

The first adaptor class is the template parameter U of cad_gui_view and provides facilities like getting the position of the mouse cursor (get_mouse_position) and invalidating the view (invalidate). The second adaptor class is the U::graphics_type type. This type provides facilities to draw on screen (draw_polyline, move_to, line_to) and converting between screen and world co-ordinates (device_to_user).

The cad_gtk_adaptor is an implementation of the first adaptor class (the U parameter) using GTK+. cad_cairo_graphics implements the U::graphics_type using cairo. In a similar way, we can create adaptors for other GUI platforms (e.g. cad_windows_adaptor to wrap around Windows API and cad_windows_graphics to talk to an HDC).