The idea now is that a scroll group item can be added to the canvas which will causes its children to scroll in either or both directions (horizontal or vertical). There are few complications: the position() of the ScrollGroup is ambiguous depending on whether you want it with scroll taken into account or not, so Item::canvas_position() was added, which defaults to the same value as Item::position() but is overridden by ScrollGroup to return the position independent of scrolling. This method is used when translating between item/canvas/window coordinate systems. Note that the basic idea is that we MOVE the scroll group when a scroll happens. This mirrors what happens in the GnomeCanvas, where Nick Mainsbridge came up with a great idea that allowed unification of the time bar and track canvases.
163 lines
6.0 KiB
Python
163 lines
6.0 KiB
Python
#!/usr/bin/env python
|
|
from waflib.extras import autowaf as autowaf
|
|
from waflib import Options
|
|
from waflib import TaskGen
|
|
import os
|
|
|
|
# Version of this package (even if built as a child)
|
|
MAJOR = '0'
|
|
MINOR = '0'
|
|
MICRO = '0'
|
|
CANVAS_VERSION = "%s.%s.%s" % (MAJOR, MINOR, MICRO)
|
|
|
|
# Library version (UNIX style major, minor, micro)
|
|
# major increment <=> incompatible changes
|
|
# minor increment <=> compatible changes (additions)
|
|
# micro increment <=> no interface changes
|
|
CANVAS_LIB_VERSION = '0.0.0'
|
|
|
|
# Variables for 'waf dist'
|
|
APPNAME = 'canvas'
|
|
VERSION = CANVAS_VERSION
|
|
I18N_PACKAGE = 'libcanvas'
|
|
|
|
# Mandatory variables
|
|
top = '.'
|
|
out = 'build'
|
|
|
|
path_prefix = 'libs/canvas/'
|
|
|
|
canvas_sources = [
|
|
'arc.cc',
|
|
'arrow.cc',
|
|
'canvas.cc',
|
|
'circle.cc',
|
|
'curve.cc',
|
|
'debug.cc',
|
|
'drag_handle.cc',
|
|
'item.cc',
|
|
'fill.cc',
|
|
'flag.cc',
|
|
'group.cc',
|
|
'image.cc',
|
|
'line.cc',
|
|
'line_set.cc',
|
|
'lookup_table.cc',
|
|
'outline.cc',
|
|
'pixbuf.cc',
|
|
'poly_item.cc',
|
|
'poly_line.cc',
|
|
'polygon.cc',
|
|
'rectangle.cc',
|
|
'root_group.cc',
|
|
'scroll_group.cc',
|
|
'stateful_image.cc',
|
|
'text.cc',
|
|
'types.cc',
|
|
'utils.cc',
|
|
'wave_view.cc',
|
|
'xfade_curve.cc',
|
|
]
|
|
|
|
def options(opt):
|
|
autowaf.set_options(opt)
|
|
|
|
def configure(conf):
|
|
conf.load ('compiler_cxx')
|
|
autowaf.configure(conf)
|
|
autowaf.build_version_files(path_prefix+'canvas/version.h', path_prefix+'version.cc',
|
|
'libcanvas', conf.env['MAJOR'], conf.env['MINOR'], 0,
|
|
'LIBCANVAS_API', 'canvas/visibility.h')
|
|
autowaf.check_pkg(conf, 'cairomm-1.0', uselib_store='CAIROMM', atleast_version='1.8.4')
|
|
|
|
def build(bld):
|
|
# Library
|
|
if bld.is_defined ('INTERNAL_SHARED_LIBS'):
|
|
obj = bld.shlib(features = 'cxx cxxshlib', source=canvas_sources)
|
|
obj.defines = [ 'LIBCANVAS_DLL_EXPORTS=1' ]
|
|
else:
|
|
obj = bld.stlib(features = 'cxx cxxstlib', source=canvas_sources)
|
|
obj.cxxflags = [ '-fPIC' ]
|
|
obj.cflags = [ '-fPIC' ]
|
|
|
|
obj.export_includes = ['.']
|
|
obj.includes = ['.']
|
|
obj.uselib = 'SIGCPP CAIROMM GTKMM BOOST'
|
|
obj.use = [ 'libpbd', 'libevoral', 'libardour', 'libgtkmm2ext' ]
|
|
obj.name = 'libcanvas'
|
|
obj.target = 'canvas'
|
|
obj.vnum = CANVAS_LIB_VERSION
|
|
obj.install_path = bld.env['LIBDIR']
|
|
obj.defines += [ 'PACKAGE="' + I18N_PACKAGE + '"' ]
|
|
|
|
if bld.env['BUILD_TESTS'] and bld.env['HAVE_CPPUNIT']:
|
|
|
|
manual_tests = '''
|
|
test/hello_world.cc
|
|
test/gtk_many.cc
|
|
test/gtk_scene.cc
|
|
test/gtk_movement.cc
|
|
test/gtk_viewport.cc
|
|
test/gtk_drag.cc
|
|
'''.split()
|
|
|
|
for t in manual_tests:
|
|
target = t[:-3]
|
|
name = t[t.find('/')+1:-3]
|
|
manual_testobj = bld.new_task_gen('cxx', 'program')
|
|
manual_testobj.source = t
|
|
manual_testobj.includes = obj.includes + ['test', '../pbd']
|
|
manual_testobj.uselib = 'CPPUNIT SIGCPP CAIROMM GTKMM'
|
|
manual_testobj.uselib_local = 'libcanvas libevoral libardour libgtkmm2ext'
|
|
manual_testobj.name = 'libcanvas-manual-test-%s' % name
|
|
manual_testobj.target = target
|
|
manual_testobj.install_path = ''
|
|
|
|
unit_testobj = bld.new_task_gen('cxx', 'program')
|
|
unit_testobj.source = '''
|
|
test/group.cc
|
|
test/arrow.cc
|
|
test/optimizing_lookup_table.cc
|
|
test/polygon.cc
|
|
test/types.cc
|
|
test/render.cc
|
|
test/xml.cc
|
|
test/wave_view.cc
|
|
test/item.cc
|
|
test/testrunner.cpp
|
|
'''.split()
|
|
|
|
unit_testobj.includes = obj.includes + ['test', '../pbd']
|
|
unit_testobj.uselib = 'CPPUNIT SIGCPP CAIROMM GTKMM'
|
|
unit_testobj.uselib_local = 'libcanvas libevoral libardour libgtkmm2ext'
|
|
unit_testobj.name = 'libcanvas-unit-tests'
|
|
unit_testobj.target = 'run-tests'
|
|
unit_testobj.install_path = ''
|
|
unit_testobj.cxxflags = ['-DPACKAGE="libcanvastest"']
|
|
unit_testobj.cxxflags += ['-DDATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"']
|
|
unit_testobj.cxxflags += ['-DCONFIG_DIR="' + os.path.normpath(bld.env['CONFIGDIR']) + '"']
|
|
unit_testobj.cxxflags += ['-DMODULE_DIR="' + os.path.normpath(bld.env['LIBDIR']) + '"']
|
|
|
|
benchmarks = '''
|
|
benchmark/items_at_point.cc
|
|
benchmark/render_parts.cc
|
|
benchmark/render_from_log.cc
|
|
benchmark/render_whole.cc
|
|
'''.split()
|
|
|
|
for t in benchmarks:
|
|
target = t[:-3]
|
|
name = t[t.find('/')+1:-3]
|
|
manual_testobj = bld.new_task_gen('cxx', 'program')
|
|
manual_testobj.source = [ t, 'benchmark/benchmark.cc' ]
|
|
manual_testobj.includes = obj.includes + ['test', '../pbd']
|
|
manual_testobj.uselib = 'CPPUNIT SIGCPP CAIROMM GTKMM'
|
|
manual_testobj.uselib_local = 'libcanvas libevoral libardour libgtkmm2ext'
|
|
manual_testobj.name = 'libcanvas-benchmark-%s' % name
|
|
manual_testobj.target = target
|
|
manual_testobj.install_path = ''
|
|
|
|
def shutdown():
|
|
autowaf.shutdown()
|
|
|