Using a drawing tablet with Synfig

Hi Guys,

I recently bought a Wacom Bamboo tablet, and I’ve been playing around a bit with it, 'though mostly with the GIMP. I was wondering if anyone of you is actively using a tablet with Synfig, and if so, how and for what purpose. I’m also interested in the configuration options/values used. It seems most actual sketching and drawing (character and scene development) is done outside Synfig, and is then turned into vector art in Synfig… I could be mistaken…

On a more general note, I’ve been looking for some tutorials on how to best use the tablet in general, such as exercises one can use to improve its use (for example, hand/eye coordination), but I have nothing really useful thusfar.

Any ideas?


I use a tablet with Synfig. For freehand drawing, and for tracing mainly.
The fact that Synfig allows the pressure sensitivity to map to line width is very cool, but needs quite a bit of coordination to use effectively.


I use too a tablet in synfig for tracing roughs done in raster drawing software.
I’ve to say that I’ve found the Windows version less responsive than the linux one for tablet use.
I’ve recently noted a setting I like (as Synfig doesn’t remember these settings when I restart it it’s better to get them noted somewhere!):
-create outline Checked
-create Region Unchecked
-Autoloop unchecked
-AutoExtend Checked (uncheck it when necessary)
-AutoLink unchecked
-AutoExport unchecked
-Pressure width checked
-Local Error unchecked
-Min pressure: 0,3
smooth 0,1
feather 0

and line width 0,10 pt

Also a good exercise for hand/eye coordinatioon is:
-display a grid on your screen and draw some cross in each case,
-same thing drawing some circles…
Simple but efficient exercise :wink:


I’m currently working on a patch to store the tablet configuration (i.e., disabled/screen mode/window mode, etc.). I hope to post it by next weekend. However, I was under the impression that the settings you mentioned (e.g., create outline checked, create Region unchecked) were already saved in the settings. Am I mistaken?


That will be awesome!. I tried to do it once and get lost on all the GTK code to access to the configuration variables. Consider to ask for help from other OS people to be sure that your patch works properly in all the OS versions (although I know you are already considering it).

Luckily, the Inkscape project provides ample opportunity for inspiration, even though they use GTK+ directly from their C++ code, instead of using GTKmm, like Synfig does.

However, I expect that Synfig too will need to call GTK+ code directly since it appears that the GTKmm wrapper Gdk::Device is incomplete.


I added the patch to store the tablet configuration (i.e., disabled/screen mode/window mode, etc.) in r2360. The other device settings (e.g., create outline checked, create Region unchecked) were already saved.


Nice thanks for adding this!
You’re right device settings are saved when you close the software… but they’re not saved when the soft crash while you draw (what happens often), that’s why I always had do set again my tool when restarting the soft (I didn’t think about doing those settings, close the software to save them and then restart it ^^ )

Cooolio! I can’t wait to test it!. Thank you very much Gerco for that contribution!. Great!

Hi Gerco,
This patch appears to be causing the windows compilation to choke. What was your reasoning for introducing the ‘studio’ namespace? Can we live without it?
Here’s the error messages I’m getting -

Creating library file: .libs/libsynfigapp.dll.a .libs/libsynfigapp_la-inputdevice.o:inputdevice.cpp:(.text$_ZN14DeviceSettings14set_keys_valueERKSs[DeviceSettings::set_keys_value(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x51e): undefined reference to `studio::DeviceTracker::set_device_keys(std::string const&, std::vector<synfigapp::InputDevice::DeviceKey, std::allocator<synfigapp::InputDevice::DeviceKey> >)' .libs/libsynfigapp_la-inputdevice.o:inputdevice.cpp:(.text$_ZN14DeviceSettings14set_axes_valueERKSs[DeviceSettings::set_axes_value(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x3fd): undefined reference to `studio::DeviceTracker::set_device_axes(std::string const&, std::vector<synfigapp::InputDevice::AxisUse, std::allocator<synfigapp::InputDevice::AxisUse> >)' .libs/libsynfigapp_la-inputdevice.o:inputdevice.cpp:(.text$_ZN14DeviceSettings14set_mode_valueERKSs[DeviceSettings::set_mode_value(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x5d): undefined reference to `studio::DeviceTracker::set_device_mode(std::string const&, synfigapp::InputDevice::Mode)' collect2: ld returned 1 exit status make[3]: *** [] Error 1 make[3]: Leaving directory `/home/Chris/synfig/build/synfig-studio/win32build/src/synfigapp' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/Chris/synfig/build/synfig-studio/win32build/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/Chris/synfig/build/synfig-studio/win32build' make: *** [all] Error 2 Thu Apr 30 18:39:35 PDT 2009


this is odd. I’m not sure what you mean with

The DeviceSettings code calls the DeviceTracker (in the pre-existing “studio” namespace) code to actually set the “pointer” configuration. I cannot really see why this would not be portable. Are you sure this is not a more basic problem, such as an old library (or object file) hanging around, partial svn update, an incorrect search path, or something like that?

Can you check that the DeviceTracker object file (src/gtkmmsynfigstudio-devicetracker.o) actually exports the referenced methods, i.e. on Linux

nm -C synfigstudio-devicetracker.o | grep set_device_

I get this:

000000b0 T studio::DeviceTracker::set_device_axes(std::string const&, std::vector<synfigapp::InputDevice::AxisUse, std::allocator<synfigapp::InputDevice::AxisUse> >) 00000020 T studio::DeviceTracker::set_device_keys(std::string const&, std::vector<synfigapp::InputDevice::DeviceKey, std::allocator<synfigapp::InputDevice::DeviceKey> >) 00000140 T studio::DeviceTracker::set_device_mode(std::string const&, synfigapp::InputDevice::Mode)


Ah… pieces start falling into place. I don’t know where my mind was at yesterday, probably half asleep. I think I was expecting those keys to be supplied by inputdevice, not devicetracker.

I found this problem as I was setting up the build environment on a new PC (so no problems with old library (or object file) hanging around, partial svn update). I confirmed that I was able to regress back to a working SVN. I double checked it on my old build environment on another PC, and confirmed the same behaviour, so I’m confident that the problem is related to changes in the SVN rather than the build environment being broken.

OK, having said that, I think I see where the problem is. I didn’t have a synfigstudio-devicetracker.o. When Synfig studio is compiled, the synfigapp dir is compiled before the gtkmm dir. With SVN 2360, synfigapp now has a dependency on gtkmm. This isn’t a problem if you’ve already got a compiled gtkmm dir from a previous build (as I suspect you may have when you do your build?), but when you do it from scratch, it chokes…

So… I tweaked in synfig-studio so that gtkmm subdir is built first. Now synfigstudio-devicetracker.o is built, but the compilation is not complete as make complains the is “No rule to make target `…/synfigapp/’”. Checking the synfig-studio-device tracker though, and it looks like it’s exporting the right things.

[code]Chris@DELLXPS ~/synfig/build/synfig-studio/win32build/src/gtkmm
$ nm -C synfigstudio-devicetracker.o | grep set_device_
00000da6 T studio::DeviceTracker::set_device_axes(std::string const&, std::vector<synfigapp::InputDevice::AxisUse, std::allocatorsynfigapp::InputDevice::AxisUse >)
00000e2e T studio::DeviceTracker::set_device_keys(std::string const&, std::vector<synfigapp::InputDevice::DeviceKey, std::allocatorsynfigapp::InputDevice::DeviceKey >)
00000d50 T studio::DeviceTracker::set_device_mode(std::string const&, synfigapp::InputDevice::Mode)

Switching the subdir directories order back in, deleting all the libsynfig object files and recompiling, but I’m still getting errors.

Can you try with a clean compile?
Thanks, Chris

synfigapp shouldn’t depend on the gtkmm subdir, if it does, thats a bug.

Do you consider that a bug in general, or is that the bug that causes Pixelgeek’s problem?

BTW, I was wondering about the relationship between the studio code and synfigapp code, but nobody seem to mind a call from synfigapp code. I have a new patch for the device tracking code that only calls from studio code to the synfigapp code that I’ll be uploading this weekend. The device initialization, however, will be a two step process then.


In general, I get the impression that was supposed to be a toolkit-agnostic library for building synfig GUIs with. It is implemented as a shared library too so it shouldn’t use any symbols from the main binary. I must have missed that while reading your patch, sorry. This is probably causing pixelgeek’s build issue. BTW, doing a make distcheck should find this kind of issue.

Unfortunately, on my system it does not… “make distcheck” executes correctly…


Well, whilst I never did figure out why 2360 broke under the Windows build environment, I’m very happy to report that 2375 builds perfectly!!!

Thanks Gerco.


I used Synfig exclusively for the graphics and animation and Ardour4 for looping the music at a certain point. The majority of this was drawn with a XP-Pen DECO 03 ( ) pad tablet on Linux.

Please avoid Necro posting. The context, os/software versions and available devices have changed A LOT since that time.

Closed to avoid further Necro posting