summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKrzysztof Kosi??ski <tweenk.pl@gmail.com>2011-06-19 10:00:24 +0000
committerKrzysztof KosiƄski <tweenk.pl@gmail.com>2011-06-19 10:00:24 +0000
commit06dfaa02d7a80bcdff717d579a48f81643f53f31 (patch)
tree49b8e67ad9051f1507b0959cac986383ab4001e2 /src
parentFix rendering of control points (diff)
parentfix bug 796451: Measure tools should support rotation constraint (diff)
downloadinkscape-06dfaa02d7a80bcdff717d579a48f81643f53f31.tar.gz
inkscape-06dfaa02d7a80bcdff717d579a48f81643f53f31.zip
Merge from trunk
(bzr r9508.1.89)
Diffstat (limited to 'src')
-rw-r--r--src/2geom/CMakeLists.txt246
-rw-r--r--src/2geom/transforms.h2
-rw-r--r--src/2geom/utils.h1
-rw-r--r--src/CMakeLists.txt838
-rw-r--r--src/Makefile_insert5
-rw-r--r--src/arc-context.h8
-rw-r--r--src/bind/CMakeLists.txt23
-rw-r--r--src/box3d-context.cpp2
-rw-r--r--src/box3d-context.h8
-rw-r--r--src/box3d-side.cpp2
-rw-r--r--src/color-profile.cpp2
-rw-r--r--src/color.h2
-rw-r--r--src/common-context.h8
-rw-r--r--src/connector-context.cpp8
-rw-r--r--src/context-fns.h2
-rw-r--r--src/debug/CMakeLists.txt38
-rw-r--r--src/debug/gdk-event-latency-tracker.h2
-rw-r--r--src/debug/log-display-config.cpp3
-rw-r--r--src/desktop-events.cpp37
-rw-r--r--src/desktop-events.h4
-rw-r--r--src/desktop.cpp11
-rw-r--r--src/desktop.h5
-rw-r--r--src/device-manager.cpp2
-rw-r--r--src/dialogs/CMakeLists.txt51
-rw-r--r--src/dialogs/clonetiler.cpp481
-rw-r--r--src/dialogs/clonetiler.h2
-rw-r--r--src/dialogs/dialog-events.h3
-rw-r--r--src/dialogs/export.cpp33
-rw-r--r--src/dialogs/find.cpp73
-rw-r--r--src/dialogs/find.h2
-rw-r--r--src/dialogs/item-properties.cpp41
-rw-r--r--src/dialogs/item-properties.h2
-rw-r--r--src/dialogs/object-attributes.h2
-rw-r--r--src/dialogs/spellcheck.cpp25
-rw-r--r--src/dialogs/spellcheck.h2
-rw-r--r--src/dialogs/text-edit.cpp34
-rw-r--r--src/dialogs/xml-tree.cpp67
-rw-r--r--src/dir-util-test.h14
-rw-r--r--src/dir-util.cpp218
-rw-r--r--src/dir-util.h37
-rw-r--r--src/display/CMakeLists.txt187
-rw-r--r--src/display/canvas-arena.cpp11
-rw-r--r--src/display/canvas-arena.h8
-rw-r--r--src/display/canvas-bpath.h8
-rw-r--r--src/display/canvas-grid.h8
-rw-r--r--src/display/canvas-temporary-item.cpp2
-rw-r--r--src/display/canvas-text.h4
-rw-r--r--src/display/curve-test.h2
-rw-r--r--src/display/gnome-canvas-acetate.h8
-rw-r--r--src/display/grayscale.cpp14
-rw-r--r--src/display/grayscale.h6
-rw-r--r--src/display/guideline.cpp37
-rw-r--r--src/display/guideline.h8
-rw-r--r--src/display/nr-3dutils.h2
-rw-r--r--src/display/nr-arena-glyphs.cpp2
-rw-r--r--src/display/nr-arena-glyphs.h2
-rw-r--r--src/display/nr-arena.h3
-rw-r--r--src/display/nr-filter-diffuselighting.h2
-rw-r--r--src/display/nr-filter-specularlighting.h2
-rw-r--r--src/display/nr-light.h2
-rw-r--r--src/display/nr-svgfonts.cpp103
-rw-r--r--src/display/nr-svgfonts.h6
-rw-r--r--src/display/sodipodi-ctrl.h10
-rw-r--r--src/display/sodipodi-ctrlrect.h8
-rw-r--r--src/display/sp-canvas-group.h4
-rw-r--r--src/display/sp-canvas-item.h10
-rw-r--r--src/display/sp-canvas.cpp40
-rw-r--r--src/display/sp-canvas.h10
-rw-r--r--src/display/sp-ctrlline.h4
-rw-r--r--src/display/sp-ctrlpoint.h4
-rw-r--r--src/display/sp-ctrlquadr.h4
-rw-r--r--src/document-private.h2
-rw-r--r--src/document-undo.h7
-rw-r--r--src/document.cpp64
-rw-r--r--src/document.h16
-rw-r--r--src/dom/CMakeLists.txt133
-rw-r--r--src/dom/io/CMakeLists.txt11
-rw-r--r--src/dom/odf/CMakeLists.txt5
-rw-r--r--src/dom/util/CMakeLists.txt6
-rw-r--r--src/dom/work/CMakeLists.txt12
-rw-r--r--src/draw-context.h8
-rw-r--r--src/dropper-context.h4
-rw-r--r--src/dyna-draw-context.h8
-rw-r--r--src/ege-adjustment-action.cpp71
-rw-r--r--src/ege-adjustment-action.h20
-rw-r--r--src/ege-color-prof-tracker.cpp6
-rw-r--r--src/ege-output-action.cpp4
-rw-r--r--src/ege-output-action.h2
-rw-r--r--src/ege-select-one-action.cpp16
-rw-r--r--src/ege-select-one-action.h3
-rw-r--r--src/eraser-context.h8
-rw-r--r--src/event-context.cpp3
-rw-r--r--src/event-context.h3
-rw-r--r--src/extension/CMakeLists.txt288
-rw-r--r--src/extension/dbus/document-interface.cpp172
-rw-r--r--src/extension/dxf2svg/CMakeLists.txt11
-rw-r--r--src/extension/effect.h2
-rw-r--r--src/extension/execution-env.cpp7
-rw-r--r--src/extension/extension.cpp14
-rw-r--r--src/extension/extension.h2
-rw-r--r--src/extension/implementation/CMakeLists.txt5
-rw-r--r--src/extension/implementation/implementation.h2
-rw-r--r--src/extension/input.h2
-rw-r--r--src/extension/internal/CMakeLists.txt31
-rw-r--r--src/extension/internal/bitmap/CMakeLists.txt37
-rw-r--r--src/extension/internal/bluredge.cpp8
-rw-r--r--src/extension/internal/cairo-render-context.cpp6
-rw-r--r--src/extension/internal/cairo-renderer.cpp29
-rw-r--r--src/extension/internal/emf-win32-inout.cpp71
-rw-r--r--src/extension/internal/emf-win32-print.cpp7
-rw-r--r--src/extension/internal/filter/CMakeLists.txt8
-rwxr-xr-xsrc/extension/internal/filter/experimental.h2
-rw-r--r--src/extension/internal/filter/filter.cpp2
-rw-r--r--src/extension/internal/javafx-out.cpp6
-rw-r--r--src/extension/internal/latex-text-renderer.cpp128
-rw-r--r--src/extension/internal/latex-text-renderer.h3
-rw-r--r--src/extension/internal/pdf-input-cairo.cpp4
-rw-r--r--src/extension/internal/pdf-input-cairo.h10
-rw-r--r--src/extension/internal/pdfinput/CMakeLists.txt5
-rw-r--r--src/extension/internal/pdfinput/pdf-input.cpp5
-rw-r--r--src/extension/internal/pdfinput/pdf-input.h10
-rw-r--r--src/extension/internal/pdfinput/svg-builder.cpp10
-rw-r--r--src/extension/internal/pov-out.cpp3
-rw-r--r--src/extension/internal/svg.cpp1
-rw-r--r--src/extension/internal/wpg-input.cpp22
-rw-r--r--src/extension/output.h2
-rw-r--r--src/extension/param/CMakeLists.txt14
-rw-r--r--src/extension/param/float.cpp4
-rw-r--r--src/extension/param/int.cpp4
-rw-r--r--src/extension/param/parameter.cpp6
-rw-r--r--src/extension/patheffect.cpp2
-rw-r--r--src/extension/script/CMakeLists.txt3
-rw-r--r--src/extension/system.cpp28
-rw-r--r--src/file.cpp34
-rw-r--r--src/file.h2
-rw-r--r--src/filter-chemistry.cpp8
-rw-r--r--src/filters/CMakeLists.txt87
-rw-r--r--src/flood-context.h8
-rw-r--r--src/forward.h9
-rw-r--r--src/gradient-chemistry.cpp8
-rw-r--r--src/gradient-context.cpp2
-rw-r--r--src/gradient-context.h8
-rw-r--r--src/help.h2
-rw-r--r--src/helper/CMakeLists.txt67
-rw-r--r--src/helper/stock-items.cpp8
-rw-r--r--src/helper/unit-menu.cpp9
-rw-r--r--src/helper/unit-menu.h10
-rw-r--r--src/helper/unit-tracker.cpp2
-rw-r--r--src/helper/unit-tracker.h3
-rw-r--r--src/helper/window.cpp2
-rw-r--r--src/helper/window.h2
-rw-r--r--src/icon-size.h2
-rw-r--r--src/id-clash.cpp2
-rw-r--r--src/ige-mac-menu.c4
-rw-r--r--src/ink-action.cpp9
-rw-r--r--src/ink-action.h4
-rw-r--r--src/ink-comboboxentry-action.cpp30
-rw-r--r--src/ink-comboboxentry-action.h5
-rw-r--r--src/inkscape-private.h8
-rw-r--r--src/inkscape.cpp11
-rw-r--r--src/inkview.cpp6
-rw-r--r--src/interface.cpp6
-rw-r--r--src/interface.h2
-rw-r--r--src/io/CMakeLists.txt46
-rw-r--r--src/io/sys.cpp6
-rw-r--r--src/jabber_whiteboard/CMakeLists.txt63
-rw-r--r--src/jabber_whiteboard/dialog/CMakeLists.txt3
-rw-r--r--src/jabber_whiteboard/pedrogui.h3
-rw-r--r--src/knot.cpp4
-rw-r--r--src/knot.h2
-rw-r--r--src/libavoid/CMakeLists.txt54
-rw-r--r--src/libavoid/orthogonal.cpp2
-rw-r--r--src/libcola/CMakeLists.txt33
-rw-r--r--src/libcroco/CMakeLists.txt92
-rw-r--r--src/libgdl/CMakeLists.txt73
-rw-r--r--src/libgdl/gdl-dock-bar.c27
-rw-r--r--src/libgdl/gdl-dock-bar.h12
-rw-r--r--src/libgdl/gdl-dock-item-grip.c31
-rw-r--r--src/libgdl/gdl-dock-item-grip.h12
-rw-r--r--src/libgdl/gdl-dock-item.c46
-rw-r--r--src/libgdl/gdl-dock-item.h10
-rw-r--r--src/libgdl/gdl-dock-master.h12
-rw-r--r--src/libgdl/gdl-dock-notebook.h10
-rw-r--r--src/libgdl/gdl-dock-object.h12
-rw-r--r--src/libgdl/gdl-dock-paned.c3
-rw-r--r--src/libgdl/gdl-dock-paned.h10
-rw-r--r--src/libgdl/gdl-dock-placeholder.c5
-rw-r--r--src/libgdl/gdl-dock-placeholder.h10
-rw-r--r--src/libgdl/gdl-dock-tablabel.c8
-rw-r--r--src/libgdl/gdl-dock-tablabel.h10
-rw-r--r--src/libgdl/gdl-dock.c28
-rw-r--r--src/libgdl/gdl-dock.h10
-rw-r--r--src/libgdl/gdl-stock.c1
-rw-r--r--src/libgdl/gdl-switcher.c25
-rw-r--r--src/libgdl/gdl-switcher.h2
-rw-r--r--src/libgdl/gdl-tools.h2
-rw-r--r--src/libnr/CMakeLists.txt135
-rw-r--r--src/libnrtype/CMakeLists.txt57
-rw-r--r--src/libnrtype/Layout-TNG-Input.cpp2
-rw-r--r--src/libvpsc/CMakeLists.txt40
-rw-r--r--src/livarot/CMakeLists.txt64
-rw-r--r--src/live_effects/CMakeLists.txt148
-rw-r--r--src/live_effects/effect.cpp2
-rw-r--r--src/live_effects/effect.h2
-rw-r--r--src/live_effects/lpeobject.cpp2
-rw-r--r--src/live_effects/parameter/CMakeLists.txt13
-rw-r--r--src/live_effects/parameter/path.cpp2
-rw-r--r--src/lpe-tool-context.h8
-rw-r--r--src/main.cpp8
-rw-r--r--src/marker.cpp2
-rw-r--r--src/measure-context.cpp382
-rw-r--r--src/measure-context.h35
-rw-r--r--src/menus-skeleton.h2
-rw-r--r--src/modifier-fns.h2
-rw-r--r--src/object-snapper.cpp1
-rw-r--r--src/pedro/CMakeLists.txt25
-rw-r--r--src/pedro/pedrogui.h3
-rw-r--r--src/pen-context.cpp2
-rw-r--r--src/persp3d.cpp6
-rw-r--r--src/pixmaps/cursor-measure.xpm38
-rw-r--r--src/preferences-skeleton.h6
-rw-r--r--src/preferences.cpp44
-rw-r--r--src/preferences.h62
-rw-r--r--src/rdf.cpp7
-rw-r--r--src/rect-context.h8
-rw-r--r--src/resource-manager.cpp399
-rw-r--r--src/resource-manager.h49
-rw-r--r--src/select-context.cpp4
-rw-r--r--src/select-context.h10
-rw-r--r--src/selection-chemistry.cpp2
-rw-r--r--src/seltrans-handles.h2
-rw-r--r--src/shortcuts.cpp2
-rw-r--r--src/sp-clippath.cpp2
-rw-r--r--src/sp-gradient.h4
-rw-r--r--src/sp-guide.cpp42
-rw-r--r--src/sp-guide.h3
-rw-r--r--src/sp-image.cpp71
-rw-r--r--src/sp-item-group.cpp5
-rw-r--r--src/sp-mask.cpp2
-rw-r--r--src/sp-metadata.cpp3
-rw-r--r--src/sp-namedview.cpp5
-rw-r--r--src/sp-object-repr.cpp8
-rw-r--r--src/sp-object-repr.h5
-rw-r--r--src/sp-object.cpp5
-rw-r--r--src/sp-paint-server-reference.h43
-rw-r--r--src/sp-paint-server.cpp11
-rw-r--r--src/sp-paint-server.h13
-rw-r--r--src/sp-pattern.cpp4
-rw-r--r--src/sp-pattern.h10
-rw-r--r--src/sp-root.h2
-rw-r--r--src/sp-shape.cpp12
-rw-r--r--src/spiral-context.h10
-rw-r--r--src/splivarot.cpp13
-rw-r--r--src/spray-context.h8
-rw-r--r--src/star-context.h8
-rw-r--r--src/style.h2
-rw-r--r--src/svg-view-widget.cpp2
-rw-r--r--src/svg-view-widget.h8
-rw-r--r--src/svg/CMakeLists.txt52
-rw-r--r--src/text-context.cpp5
-rw-r--r--src/text-context.h10
-rw-r--r--src/tools-switch.cpp8
-rw-r--r--src/tools-switch.h1
-rw-r--r--src/trace/CMakeLists.txt54
-rw-r--r--src/trace/potrace/CMakeLists.txt9
-rw-r--r--src/trace/potrace/auxiliary.h29
-rw-r--r--src/trace/potrace/bitmap.h6
-rw-r--r--src/trace/potrace/curve.cpp4
-rw-r--r--src/trace/potrace/curve.h2
-rw-r--r--src/trace/potrace/decompose.cpp50
-rw-r--r--src/trace/potrace/decompose.h5
-rw-r--r--src/trace/potrace/greymap.cpp52
-rw-r--r--src/trace/potrace/greymap.h10
-rw-r--r--src/trace/potrace/lists.h4
-rw-r--r--src/trace/potrace/potracelib.cpp9
-rw-r--r--src/trace/potrace/potracelib.h12
-rw-r--r--src/trace/potrace/progress.h8
-rw-r--r--src/trace/potrace/render.cpp4
-rw-r--r--src/trace/potrace/render.h4
-rw-r--r--src/trace/potrace/trace.cpp90
-rw-r--r--src/trace/potrace/trace.h5
-rw-r--r--src/tweak-context.h8
-rw-r--r--src/ui/CMakeLists.txt269
-rw-r--r--src/ui/cache/CMakeLists.txt3
-rw-r--r--src/ui/clipboard.cpp6
-rw-r--r--src/ui/context-menu.cpp36
-rw-r--r--src/ui/context-menu.h2
-rw-r--r--src/ui/dialog/CMakeLists.txt45
-rw-r--r--src/ui/dialog/align-and-distribute.cpp9
-rw-r--r--src/ui/dialog/color-item.cpp2
-rw-r--r--src/ui/dialog/document-properties.cpp284
-rw-r--r--src/ui/dialog/document-properties.h32
-rw-r--r--src/ui/dialog/extensions.cpp2
-rw-r--r--src/ui/dialog/filedialogimpl-gtkmm.h6
-rw-r--r--src/ui/dialog/filedialogimpl-win32.cpp37
-rw-r--r--src/ui/dialog/fill-and-stroke.h2
-rw-r--r--src/ui/dialog/filter-effects-dialog.cpp12
-rw-r--r--src/ui/dialog/find.cpp1
-rw-r--r--src/ui/dialog/glyphs.cpp24
-rw-r--r--src/ui/dialog/glyphs.h2
-rw-r--r--src/ui/dialog/guides.cpp155
-rw-r--r--src/ui/dialog/guides.h33
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp61
-rw-r--r--src/ui/dialog/inkscape-preferences.h12
-rw-r--r--src/ui/dialog/layers.cpp10
-rw-r--r--src/ui/dialog/layers.h4
-rw-r--r--src/ui/dialog/ocaldialogs.h4
-rw-r--r--src/ui/dialog/print.h2
-rw-r--r--src/ui/dialog/session-player.cpp2
-rw-r--r--src/ui/dialog/session-player.h2
-rw-r--r--src/ui/dialog/svg-fonts-dialog.cpp52
-rw-r--r--src/ui/dialog/svg-fonts-dialog.h5
-rw-r--r--src/ui/dialog/swatches.cpp99
-rw-r--r--src/ui/dialog/swatches.h3
-rw-r--r--src/ui/dialog/tile.cpp77
-rw-r--r--src/ui/dialog/tile.h24
-rw-r--r--src/ui/dialog/tracedialog.cpp20
-rw-r--r--src/ui/dialog/undo-history.cpp2
-rw-r--r--src/ui/dialog/whiteboard-connect.cpp2
-rw-r--r--src/ui/dialog/whiteboard-sharewithchat.cpp2
-rw-r--r--src/ui/dialog/whiteboard-sharewithuser.cpp2
-rw-r--r--src/ui/icon-names.h2
-rw-r--r--src/ui/tool/control-point-selection.cpp4
-rw-r--r--src/ui/tool/node-tool.h8
-rw-r--r--src/ui/tool/path-manipulator.cpp2
-rw-r--r--src/ui/view/CMakeLists.txt10
-rw-r--r--src/ui/view/edit-widget-interface.h4
-rw-r--r--src/ui/view/view-widget.h10
-rw-r--r--src/ui/view/view.h2
-rw-r--r--src/ui/widget/CMakeLists.txt40
-rw-r--r--src/ui/widget/Makefile_insert2
-rw-r--r--src/ui/widget/combo-text.cpp2
-rw-r--r--src/ui/widget/dock-item.cpp2
-rw-r--r--src/ui/widget/entity-entry.cpp9
-rw-r--r--src/ui/widget/object-composite-settings.h4
-rw-r--r--src/ui/widget/page-sizer.cpp2
-rw-r--r--src/ui/widget/panel.cpp2
-rw-r--r--src/ui/widget/preferences-widget.cpp40
-rw-r--r--src/ui/widget/preferences-widget.h25
-rw-r--r--src/ui/widget/random.cpp2
-rw-r--r--src/ui/widget/ruler.cpp2
-rw-r--r--src/ui/widget/scalar-unit.cpp75
-rw-r--r--src/ui/widget/scalar-unit.h10
-rw-r--r--src/ui/widget/scalar.cpp36
-rw-r--r--src/ui/widget/scalar.h3
-rw-r--r--src/ui/widget/selected-style.cpp2
-rw-r--r--src/ui/widget/selected-style.h4
-rw-r--r--src/ui/widget/spin-slider.cpp4
-rw-r--r--src/ui/widget/spin-slider.h8
-rw-r--r--src/ui/widget/spinbutton.cpp129
-rw-r--r--src/ui/widget/spinbutton.h81
-rw-r--r--src/ui/widget/toolbox.cpp2
-rw-r--r--src/ui/widget/unit-menu.cpp21
-rw-r--r--src/ui/widget/unit-menu.h2
-rw-r--r--src/ui/widget/zoom-status.h4
-rw-r--r--src/util/CMakeLists.txt46
-rw-r--r--src/util/Makefile_insert2
-rw-r--r--src/util/expression-evaluator.cpp569
-rw-r--r--src/util/expression-evaluator.h80
-rw-r--r--src/verbs.cpp23
-rw-r--r--src/verbs.h5
-rw-r--r--src/widgets/CMakeLists.txt111
-rw-r--r--src/widgets/button.cpp38
-rw-r--r--src/widgets/button.h14
-rw-r--r--src/widgets/dash-selector.cpp4
-rw-r--r--src/widgets/desktop-widget.cpp74
-rw-r--r--src/widgets/desktop-widget.h20
-rw-r--r--src/widgets/eek-preview.cpp14
-rw-r--r--src/widgets/eek-preview.h4
-rw-r--r--src/widgets/ege-paint-def.cpp1
-rw-r--r--src/widgets/fill-style.cpp2
-rw-r--r--src/widgets/gradient-image.h13
-rw-r--r--src/widgets/gradient-selector.cpp57
-rw-r--r--src/widgets/gradient-selector.h10
-rw-r--r--src/widgets/gradient-toolbar.cpp24
-rw-r--r--src/widgets/gradient-toolbar.h2
-rw-r--r--src/widgets/gradient-vector.cpp42
-rw-r--r--src/widgets/gradient-vector.h10
-rw-r--r--src/widgets/icon.cpp10
-rw-r--r--src/widgets/icon.h6
-rw-r--r--src/widgets/paint-selector.cpp149
-rw-r--r--src/widgets/paint-selector.h10
-rw-r--r--src/widgets/ruler.cpp4
-rw-r--r--src/widgets/ruler.h14
-rw-r--r--src/widgets/select-toolbar.cpp26
-rw-r--r--src/widgets/select-toolbar.h3
-rw-r--r--src/widgets/shrink-wrap-button.cpp2
-rw-r--r--src/widgets/sp-attribute-widget.cpp3
-rw-r--r--src/widgets/sp-attribute-widget.h19
-rw-r--r--src/widgets/sp-color-gtkselector.h10
-rw-r--r--src/widgets/sp-color-icc-selector.cpp57
-rw-r--r--src/widgets/sp-color-icc-selector.h13
-rw-r--r--src/widgets/sp-color-notebook.cpp29
-rw-r--r--src/widgets/sp-color-notebook.h12
-rw-r--r--src/widgets/sp-color-scales.cpp70
-rw-r--r--src/widgets/sp-color-scales.h13
-rw-r--r--src/widgets/sp-color-selector.cpp54
-rw-r--r--src/widgets/sp-color-selector.h10
-rw-r--r--src/widgets/sp-color-slider.cpp95
-rw-r--r--src/widgets/sp-color-slider.h10
-rw-r--r--src/widgets/sp-color-wheel-selector.cpp43
-rw-r--r--src/widgets/sp-color-wheel-selector.h13
-rw-r--r--src/widgets/sp-widget.cpp48
-rw-r--r--src/widgets/sp-widget.h10
-rw-r--r--src/widgets/sp-xmlview-attr-list.h7
-rw-r--r--src/widgets/sp-xmlview-content.h8
-rw-r--r--src/widgets/sp-xmlview-tree.h8
-rw-r--r--src/widgets/spinbutton-events.h3
-rw-r--r--src/widgets/spw-utilities.cpp4
-rw-r--r--src/widgets/spw-utilities.h2
-rw-r--r--src/widgets/stroke-style.cpp13
-rw-r--r--src/widgets/toolbox.cpp115
-rw-r--r--src/widgets/toolbox.h3
-rw-r--r--src/xml/CMakeLists.txt72
-rw-r--r--src/xml/Makefile_insert1
-rw-r--r--src/xml/rebase-hrefs-test.h126
-rw-r--r--src/xml/rebase-hrefs.cpp236
-rw-r--r--src/xml/rebase-hrefs.h27
-rw-r--r--src/xml/repr-action-test.h1
-rw-r--r--src/xml/repr-io.cpp47
-rw-r--r--src/xml/repr.h3
-rw-r--r--src/zoom-context.h4
422 files changed, 8022 insertions, 4058 deletions
diff --git a/src/2geom/CMakeLists.txt b/src/2geom/CMakeLists.txt
index 3c8669a9d..c04718e79 100644
--- a/src/2geom/CMakeLists.txt
+++ b/src/2geom/CMakeLists.txt
@@ -1,127 +1,125 @@
-SET(2GEOM_SRC
-svg-path.h
-svg-path.cpp
-svg-path-parser.h
-svg-path-parser.cpp
-
-ord.h
-
-#nearestpoint.cpp
-nearest-point.cpp
-nearest-point.h
-
-bezier-curve.h
-circle.cpp
-circle.h
-curve.h
-curves.h
-curve-helpers.cpp
-ellipse.cpp
-ellipse.h
-elliptical-arc.cpp
-elliptical-arc.h
-hvlinesegment.h
-sbasis-curve.h
-path.cpp
-path.h
-path-intersection.cpp
-path-intersection.h
-pathvector.cpp
-pathvector.h
-
-forward.h
-
-shape.cpp
-shape.h
-region.cpp
-region.h
-crossing.h
-crossing.cpp
-sweep.cpp
-sweep.h
-
-poly.cpp
-poly.h
-poly-dk-solve.cpp
-poly-dk-solve.h
-poly-laguerre-solve.cpp
-poly-laguerre-solve.h
-
-quadtree.cpp
-quadtree.h
-
-matrix.cpp
-matrix.h
-transforms.cpp
-transforms.h
-
-point.h
-point.cpp
-point-l.h
-
-coord.h
-
-d2.h
-d2-sbasis.h
-d2-sbasis.cpp
-rect.h
-
-piecewise.h
-piecewise.cpp
-
-sbasis.cpp
-sbasis.h
-sbasis-2d.h
-sbasis-2d.cpp
-sbasis-geometric.cpp
-sbasis-geometric.h
-sbasis-math.h
-sbasis-math.cpp
-sbasis-poly.cpp
-sbasis-poly.h
-#chebyshev.cpp # requires gsl, not useful, I think
-#chebyshev.h
-sbasis-roots.cpp
-sbasis-to-bezier.cpp
-sbasis-to-bezier.h
-
-bezier-to-sbasis.h
-
-basic-intersection.h
-basic-intersection.cpp
-recursive-bezier-intersection.cpp
-
-geom.cpp
-geom.h
-
-#utils.cpp
-utils.h
-exception.h
-angle.h
-
-bezier-utils.cpp
-bezier-utils.h
-choose.h
-circulator.h
-conjugate_gradient.cpp
-conjugate_gradient.h
-convex-cover.cpp
-convex-cover.h
-solve-bezier-one-d.cpp
-solve-bezier-parametric.cpp
-solver.h
-sturm.h
-svg-elliptical-arc.cpp
-svg-elliptical-arc.h
-
-#arc-length.cpp
-#arc-length.h
-
-numeric/matrix.cpp
+set(2geom_SRC
+ affine.cpp
+ basic-intersection.cpp
+ bezier-clipping.cpp
+ bezier-curve.cpp
+ bezier-utils.cpp
+ circle-circle.cpp
+ circle.cpp
+ # conic_section_clipper_impl.cpp
+ # conicsec.cpp
+ conjugate_gradient.cpp
+ convex-cover.cpp
+ crossing.cpp
+ curve.cpp
+ d2-sbasis.cpp
+ ellipse.cpp
+ elliptical-arc.cpp
+ geom.cpp
+ line.cpp
+ nearest-point.cpp
+ numeric/matrix.cpp
+ path-intersection.cpp
+ path.cpp
+ pathvector.cpp
+ piecewise.cpp
+ point.cpp
+ poly.cpp
+ quadtree.cpp
+ # recursive-bezier-intersection.cpp
+ region.cpp
+ sbasis-2d.cpp
+ sbasis-geometric.cpp
+ sbasis-math.cpp
+ sbasis-poly.cpp
+ sbasis-roots.cpp
+ sbasis-to-bezier.cpp
+ sbasis.cpp
+ shape.cpp
+ solve-bezier-one-d.cpp
+ solve-bezier-parametric.cpp
+ svg-elliptical-arc.cpp
+ svg-path-parser.cpp
+ svg-path.cpp
+ sweep.cpp
+ transforms.cpp
+ utils.cpp
+
+ affine.h
+ angle.h
+ basic-intersection.h
+ bezier-curve.h
+ bezier-to-sbasis.h
+ bezier-utils.h
+ bezier.h
+ choose.h
+ circle.h
+ circulator.h
+ concepts.h
+ conic_section_clipper.h
+ conic_section_clipper_cr.h
+ conic_section_clipper_impl.h
+ conicsec.h
+ conjugate_gradient.h
+ convex-cover.h
+ coord.h
+ crossing.h
+ curve.h
+ curves.h
+ d2-sbasis.h
+ d2.h
+ ellipse.h
+ elliptical-arc.h
+ exception.h
+ forward.h
+ geom.h
+ hvlinesegment.h
+ interval.h
+ isnan.h
+ line.h
+ linear.h
+ math-utils.h
+ nearest-point.h
+ ord.h
+ path-intersection.h
+ path.h
+ pathvector.h
+ piecewise.h
+ point-l.h
+ point-ops.h
+ point.h
+ poly.h
+ quadtree.h
+ ray.h
+ rect.h
+ region.h
+ sbasis-2d.h
+ sbasis-curve.h
+ sbasis-geometric.h
+ sbasis-math.h
+ sbasis-poly.h
+ sbasis-to-bezier.h
+ sbasis.h
+ shape.h
+ solver.h
+ sturm.h
+ svg-elliptical-arc.h
+ svg-path-parser.h
+ svg-path.h
+ sweep.h
+ transforms.h
+ utils.h
+
+ numeric/fitting-model.h
+ numeric/fitting-tool.h
+ numeric/linear_system.h
+ numeric/matrix.h
+ numeric/symmetric-matrix-fs-operation.h
+ numeric/symmetric-matrix-fs-trace.h
+ numeric/symmetric-matrix-fs.h
+ numeric/vector.h
)
-# make lib for 2geom
-ADD_LIBRARY(2geom STATIC ${2GEOM_SRC})
-#TARGET_LINK_LIBRARIES(2geom blas gsl)
-TARGET_LINK_LIBRARIES(2geom ${INKSCAPE_LIBS})
+# make lib for 2geom_LIB
+add_inkscape_lib(2geom_LIB "${2geom_SRC}")
diff --git a/src/2geom/transforms.h b/src/2geom/transforms.h
index 1c965eb9f..48d4b1dba 100644
--- a/src/2geom/transforms.h
+++ b/src/2geom/transforms.h
@@ -209,7 +209,7 @@ protected:
public:
Coord factor() const { return f; }
void setFactor(Coord nf) { f = nf; }
- S &operator*=(S const &s) { f += s.f; return *static_cast<S const*>(this); }
+ S &operator*=(S const &s) { f += s.f; return static_cast<S &>(*this); }
bool operator==(S const &s) const { return f == s.f; }
S inverse() const { return S(-f); }
static S identity() { return S(0); }
diff --git a/src/2geom/utils.h b/src/2geom/utils.h
index ecd1b7283..e90a4623b 100644
--- a/src/2geom/utils.h
+++ b/src/2geom/utils.h
@@ -33,6 +33,7 @@
*
*/
+#include <cstddef>
#include <vector>
namespace Geom {
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index f03f22c80..d048eaa87 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,269 +1,601 @@
-IF(WIN32)
- SET(ONLY_WIN
- registrytool.cpp
- #deptool.cpp
- winmain.cpp)
-ELSEIF(WIN32)
- SET(ONLY_WIN)
-ENDIF(WIN32)
-SET(SP_SRC
-sp-anchor.cpp
-sp-animation.cpp
-sp-clippath.cpp
-sp-conn-end.cpp
-sp-conn-end-pair.cpp
-sp-cursor.cpp
-sp-defs.cpp
-sp-ellipse.cpp
-sp-filter.cpp
-sp-filter-primitive.cpp
-sp-filter-reference.cpp
-sp-flowdiv.cpp
-sp-flowregion.cpp
-sp-flowtext.cpp
-sp-font.cpp
-sp-font-face.cpp
-sp-gaussian-blur.cpp
-sp-glyph.cpp
-sp-gradient.cpp
-sp-gradient-reference.cpp
-sp-guide.cpp
-sp-glyph-kerning.cpp
-sp-image.cpp
-spiral-context.cpp
-sp-item.cpp
-sp-item-group.cpp
-sp-item-notify-moveto.cpp
-sp-item-rm-unsatisfied-cns.cpp
-sp-item-transform.cpp
-sp-item-update-cns.cpp
-sp-line.cpp
-splivarot.cpp
-sp-lpe-item.cpp
-sp-mask.cpp
-sp-metadata.cpp
-sp-metrics.cpp
-sp-missing-glyph.cpp
-sp-namedview.cpp
-sp-object.cpp
-sp-object-group.cpp
-sp-object-repr.cpp
-sp-offset.cpp
-sp-paint-server.cpp
-sp-path.cpp
-sp-pattern.cpp
-sp-polygon.cpp
-sp-polyline.cpp
-sp-rect.cpp
-sp-root.cpp
-sp-shape.cpp
-sp-skeleton.cpp
-sp-spiral.cpp
-sp-star.cpp
-sp-stop.cpp
-sp-string.cpp
-sp-style-elem.cpp
-sp-switch.cpp
-sp-symbol.cpp
-sp-text.cpp
-sp-tref.cpp
-sp-tref-reference.cpp
-sp-tspan.cpp
-sp-use.cpp
-sp-use-reference.cpp
-)
+# -----------------------------------------------------------------------------
+# Define the main source
+# -----------------------------------------------------------------------------
-SET(INKSCAPE_SRC
-arc-context.cpp
-attributes.cpp
-axis-manip.cpp
-box3d-context.cpp
-box3d.cpp
-box3d-side.cpp
-color.cpp
-color-profile.cpp
-composite-undo-stack-observer.cpp
-common-context.cpp
-conditions.cpp
-conn-avoid-ref.cpp
-connection-points.cpp
-connector-context.cpp
-console-output-undo-observer.cpp
-context-fns.cpp
-#deptool.cpp
-desktop.cpp
-desktop-events.cpp
-desktop-handles.cpp
-desktop-style.cpp
-device-manager.cpp
-dir-util.cpp
-document.cpp
-document-subset.cpp
-document-undo.cpp
-doxygen-main.cpp
-draw-anchor.cpp
-draw-context.cpp
-dropper-context.cpp
-dyna-draw-context.cpp
-ege-adjustment-action.cpp
-ege-color-prof-tracker.cpp
-ege-output-action.cpp
-ege-select-one-action.cpp
-eraser-context.cpp
-event-context.cpp
-event-log.cpp
-extension
-extract-uri.cpp
-file.cpp
-filter-chemistry.cpp
-filter-enums.cpp
-fixes.cpp
-flood-context.cpp
-gc-anchored.cpp
-gc.cpp
-gc-finalized.cpp
-gradient-chemistry.cpp
-gradient-context.cpp
-gradient-drag.cpp
-guide-snapper.cpp
-help.cpp
-id-clash.cpp
-ige-mac-menu.c
-ink-action.cpp
-inkscape.cpp
-inkscape.rc
-inkscape-stock.cpp
-interface.cpp
-knot.cpp
-knotholder.cpp
-knot-holder-entity.cpp
-layer-fns.cpp
-layer-manager.cpp
-line-geometry.cpp
-line-snapper.cpp
-main-cmdlineact.cpp
-main.cpp
-marker.cpp
-media.cpp
-message-context.cpp
-message-stack.cpp
-mod360.cpp
-node-context.cpp
-nodepath.cpp
-object-edit.cpp
-object-hierarchy.cpp
-object-snapper.cpp
-path-chemistry.cpp
-pencil-context.cpp
-pen-context.cpp
-persp3d.cpp
-persp3d-reference.cpp
-perspective-line.cpp
-plugin.def
-preferences.cpp
-prefix.cpp
-print.cpp
-profile-manager.cpp
-proj_pt.cpp
-rect-context.cpp
-rubberband.cpp
-satisfied-guide-cns.cpp
-selcue.cpp
-select-context.cpp
-selection-chemistry.cpp
-selection.cpp
-selection-describer.cpp
-#selfname.tpl
-seltrans.cpp
-seltrans-handles.cpp
-shape-editor.cpp
-shortcuts.cpp
-snap.cpp
-snapped-line.cpp
-snapped-point.cpp
-snapper.cpp
-star-context.cpp
-style.cpp
-#style-test.cpp
-svg-view.cpp
-svg-view-widget.cpp
-text-chemistry.cpp
-text-context.cpp
-text-editing.cpp
-tools-switch.cpp
-transf_mat_3x4.cpp
-tweak-context.cpp
-uri.cpp
-uri-references.cpp
-vanishing-point.cpp
-verbs.cpp
-version.cpp
-zoom-context.cpp
-${ONLY_WIN}
+set(main_SRC
+ main.cpp
)
-# All folders for internal inkscape
-SET(internalfolders
-#algorithms
-#api
-bind
-debug
-dialogs
-display
-dom
-extension
-filters
-graphlayout
-helper
-inkjar
-io
-jabber_whiteboard
-live_effects
-pedro
-removeoverlap
-svg
-trace
-#traits
-ui
-util
-widgets
-xml
-2geom
+
+set(sp_SRC
+ sp-anchor.cpp
+ # sp-animation.cpp
+ sp-clippath.cpp
+ sp-conn-end-pair.cpp
+ sp-conn-end.cpp
+ sp-cursor.cpp
+ sp-defs.cpp
+ sp-desc.cpp
+ sp-ellipse.cpp
+ sp-filter-primitive.cpp
+ sp-filter-reference.cpp
+ sp-filter.cpp
+ sp-flowdiv.cpp
+ sp-flowregion.cpp
+ sp-flowtext.cpp
+ sp-font-face.cpp
+ sp-font.cpp
+ sp-gaussian-blur.cpp
+ sp-glyph-kerning.cpp
+ sp-glyph.cpp
+ sp-gradient-reference.cpp
+ sp-gradient.cpp
+ sp-guide.cpp
+ sp-image.cpp
+ sp-item-group.cpp
+ sp-item-notify-moveto.cpp
+ sp-item-rm-unsatisfied-cns.cpp
+ sp-item-transform.cpp
+ sp-item-update-cns.cpp
+ sp-item.cpp
+ sp-line.cpp
+ sp-lpe-item.cpp
+ sp-mask.cpp
+ sp-metadata.cpp
+ sp-metrics.cpp
+ sp-missing-glyph.cpp
+ sp-namedview.cpp
+ sp-object-group.cpp
+ sp-object-repr.cpp
+ sp-object.cpp
+ sp-offset.cpp
+ sp-paint-server.cpp
+ sp-path.cpp
+ sp-pattern.cpp
+ sp-polygon.cpp
+ sp-polyline.cpp
+ sp-rect.cpp
+ sp-root.cpp
+ sp-script.cpp
+ sp-shape.cpp
+ # sp-skeleton.cpp
+ sp-spiral.cpp
+ sp-star.cpp
+ sp-stop.cpp
+ sp-string.cpp
+ sp-style-elem.cpp
+ sp-switch.cpp
+ sp-symbol.cpp
+ sp-text.cpp
+ sp-title.cpp
+ sp-tref-reference.cpp
+ sp-tref.cpp
+ sp-tspan.cpp
+ sp-use-reference.cpp
+ sp-use.cpp
+ spiral-context.cpp
+ splivarot.cpp
+
+ sp-anchor.h
+ sp-animation.h
+ sp-clippath.h
+ sp-conn-end-pair.h
+ sp-conn-end.h
+ sp-cursor.h
+ sp-defs.h
+ sp-desc.h
+ sp-ellipse.h
+ sp-filter-fns.h
+ sp-filter-primitive.h
+ sp-filter-reference.h
+ sp-filter-units.h
+ sp-filter.h
+ sp-flowdiv.h
+ sp-flowregion.h
+ sp-flowtext.h
+ sp-font-face.h
+ sp-font.h
+ sp-gaussian-blur-fns.h
+ sp-gaussian-blur.h
+ sp-glyph-kerning.h
+ sp-glyph.h
+ sp-gradient-fns.h
+ sp-gradient-reference.h
+ sp-gradient-spread.h
+ sp-gradient-test.h
+ sp-gradient-units.h
+ sp-gradient-vector.h
+ sp-gradient.h
+ sp-guide-attachment.h
+ sp-guide-constraint.h
+ sp-guide.h
+ sp-image.h
+ sp-item-group.h
+ sp-item-notify-moveto.h
+ sp-item-rm-unsatisfied-cns.h
+ sp-item-transform.h
+ sp-item-update-cns.h
+ sp-item.h
+ sp-line.h
+ sp-linear-gradient-fns.h
+ sp-linear-gradient.h
+ sp-lpe-item.h
+ sp-marker-loc.h
+ sp-mask.h
+ sp-metadata.h
+ sp-metric.h
+ sp-metrics.h
+ sp-missing-glyph.h
+ sp-namedview.h
+ sp-object-group.h
+ sp-object-repr.h
+ sp-object.h
+ sp-offset.h
+ sp-paint-server-reference.h
+ sp-paint-server.h
+ sp-path.h
+ sp-pattern.h
+ sp-polygon.h
+ sp-polyline.h
+ sp-radial-gradient-fns.h
+ sp-radial-gradient.h
+ sp-rect.h
+ sp-root.h
+ sp-script.h
+ sp-shape.h
+ # sp-skeleton.h
+ sp-spiral.h
+ sp-star.h
+ sp-stop.h
+ sp-string.h
+ sp-style-elem-test.h
+ sp-style-elem.h
+ sp-switch.h
+ sp-symbol.h
+ sp-text.h
+ sp-textpath.h
+ sp-title.h
+ sp-tref-reference.h
+ sp-tref.h
+ sp-tspan.h
+ sp-use-reference.h
+ sp-use.h
)
-SET(libfolders
-# Directories containing lists files that describe building internal libraries
-libavoid
-libcola
-libcroco
-libgdl
-libnr
-libnrtype
-libvpsc
-livarot
+
+set(inkscape_SRC
+ arc-context.cpp
+ attributes.cpp
+ axis-manip.cpp
+ box3d-context.cpp
+ box3d-side.cpp
+ box3d.cpp
+ color-profile.cpp
+ color.cpp
+ common-context.cpp
+ composite-undo-stack-observer.cpp
+ conditions.cpp
+ conn-avoid-ref.cpp
+ connection-points.cpp
+ connector-context.cpp
+ console-output-undo-observer.cpp
+ context-fns.cpp
+ desktop-events.cpp
+ desktop-handles.cpp
+ desktop-style.cpp
+ desktop.cpp
+ device-manager.cpp
+ dir-util.cpp
+ document-subset.cpp
+ document-undo.cpp
+ document.cpp
+ doxygen-main.cpp
+ draw-anchor.cpp
+ draw-context.cpp
+ dropper-context.cpp
+ dyna-draw-context.cpp
+ ege-adjustment-action.cpp
+ ege-color-prof-tracker.cpp
+ ege-output-action.cpp
+ ege-select-one-action.cpp
+ eraser-context.cpp
+ event-context.cpp
+ event-log.cpp
+ extract-uri.cpp
+ file.cpp
+ filter-chemistry.cpp
+ filter-enums.cpp
+ fixes.cpp
+ flood-context.cpp
+ gc-anchored.cpp
+ gc-finalized.cpp
+ gc.cpp
+ gradient-chemistry.cpp
+ gradient-context.cpp
+ gradient-drag.cpp
+ graphlayout.cpp
+ guide-snapper.cpp
+ help.cpp
+ id-clash.cpp
+ ige-mac-menu.c
+ ink-action.cpp
+ ink-comboboxentry-action.cpp
+ inkscape.cpp
+ inkscape.rc
+ interface.cpp
+ knot-holder-entity.cpp
+ knot.cpp
+ knotholder.cpp
+ layer-fns.cpp
+ layer-manager.cpp
+ line-geometry.cpp
+ line-snapper.cpp
+ lpe-tool-context.cpp
+ main-cmdlineact.cpp
+ marker.cpp
+ measure-context.cpp
+ media.cpp
+ message-context.cpp
+ message-stack.cpp
+ mod360.cpp
+ object-edit.cpp
+ object-hierarchy.cpp
+ object-snapper.cpp
+ path-chemistry.cpp
+ pen-context.cpp
+ pencil-context.cpp
+ persp3d-reference.cpp
+ persp3d.cpp
+ perspective-line.cpp
+ preferences.cpp
+ prefix.cpp
+ print.cpp
+ profile-manager.cpp
+ proj_pt.cpp
+ rdf.cpp
+ rect-context.cpp
+ removeoverlap.cpp
+ resource-manager.cpp
+ rubberband.cpp
+ satisfied-guide-cns.cpp
+ selcue.cpp
+ select-context.cpp
+ selection-chemistry.cpp
+ selection-describer.cpp
+ selection.cpp
+ seltrans-handles.cpp
+ seltrans.cpp
+ shape-editor.cpp
+ shortcuts.cpp
+ snap-preferences.cpp
+ snap.cpp
+ snapped-curve.cpp
+ snapped-line.cpp
+ snapped-point.cpp
+ snapper.cpp
+ spray-context.cpp
+ star-context.cpp
+ style.cpp
+ svg-view-widget.cpp
+ svg-view.cpp
+ text-chemistry.cpp
+ text-context.cpp
+ text-editing.cpp
+ tools-switch.cpp
+ transf_mat_3x4.cpp
+ tweak-context.cpp
+ unclump.cpp
+ unicoderange.cpp
+ uri-references.cpp
+ uri.cpp
+ vanishing-point.cpp
+ verbs.cpp
+ version.cpp
+ zoom-context.cpp
+
+
+ # -------
+ # Headers
+ MultiPrinter.h
+ PylogFormatter.h
+ TRPIFormatter.h
+ approx-equal.h
+ arc-context.h
+ attributes-test.h
+ attributes.h
+ axis-manip.h
+ bad-uri-exception.h
+ box3d-context.h
+ box3d-side.h
+ box3d.h
+ color-profile-fns.h
+ color-profile-test.h
+ color-profile.h
+ color-rgba.h
+ color.h
+ common-context.h
+ composite-undo-stack-observer.h
+ conditions.h
+ conn-avoid-ref.h
+ connection-points.h
+ connection-pool.h
+ connector-context.h
+ console-output-undo-observer.h
+ context-fns.h
+ decimal-round.h
+ desktop-events.h
+ desktop-handles.h
+ desktop-style.h
+ desktop.h
+ device-manager.h
+ dir-util-test.h
+ dir-util.h
+ document-private.h
+ document-subset.h
+ document-undo.h
+ document.h
+ draw-anchor.h
+ draw-context.h
+ dropper-context.h
+ dyna-draw-context.h
+ ege-adjustment-action.h
+ ege-color-prof-tracker.h
+ ege-output-action.h
+ ege-select-one-action.h
+ enums.h
+ eraser-context.h
+ event-context.h
+ event-log.h
+ event.h
+ extract-uri-test.h
+ extract-uri.h
+ file.h
+ fill-or-stroke.h
+ filter-chemistry.h
+ filter-enums.h
+ flood-context.h
+ forward.h
+ gc-alloc.h
+ gc-allocator.h
+ gc-anchored.h
+ gc-core.h
+ gc-finalized.h
+ gc-managed.h
+ gc-soft-ptr.h
+ gradient-chemistry.h
+ gradient-context.h
+ gradient-drag.h
+ graphlayout.h
+ guide-snapper.h
+ help.h
+ helper-fns.h
+ icon-size.h
+ id-clash.h
+ ige-mac-menu.h
+ ink-action.h
+ ink-comboboxentry-action.h
+ inkscape-private.h
+ inkscape-version.h
+ inkscape.h
+ interface.h
+ isinf.h
+ isnormal.h
+ knot-enums.h
+ knot-holder-entity.h
+ knot.h
+ knotholder.h
+ layer-fns.h
+ layer-manager.h
+ line-geometry.h
+ line-snapper.h
+ lpe-tool-context.h
+ macros.h
+ main-cmdlineact.h
+ marker-test.h
+ marker.h
+ measure-context.h
+ media.h
+ memeq.h
+ menus-skeleton.h
+ message-context.h
+ message-stack.h
+ message.h
+ mod360-test.h
+ mod360.h
+ modifier-fns.h
+ number-opt-number.h
+ object-edit.h
+ object-hierarchy.h
+ object-snapper.h
+ path-chemistry.h
+ path-prefix.h
+ pen-context.h
+ pencil-context.h
+ persp3d-reference.h
+ persp3d.h
+ perspective-line.h
+ preferences-skeleton.h
+ preferences-test.h
+ preferences.h
+ prefix.h
+ print.h
+ profile-manager.h
+ proj_pt.h
+ rdf.h
+ rect-context.h
+ registrytool.h
+ remove-last.h
+ removeoverlap.h
+ require-config.h
+ resource-manager.h
+ round-test.h
+ round.h
+ rubberband.h
+ satisfied-guide-cns.h
+ selcue.h
+ select-context.h
+ selection-chemistry.h
+ selection-describer.h
+ selection.h
+ seltrans-handles.h
+ seltrans.h
+ shape-editor.h
+ shortcuts.h
+ snap-candidate.h
+ snap-enums.h
+ snap-preferences.h
+ snap.h
+ snapped-curve.h
+ snapped-line.h
+ snapped-point.h
+ snapper.h
+ spiral-context.h
+ splivarot.h
+ spray-context.h
+ star-context.h
+ streq.h
+ strneq.h
+ style-test.h
+ style.h
+ svg-profile.h
+ svg-view-widget.h
+ svg-view.h
+ syseq.h
+ test-helpers.h
+ text-chemistry.h
+ text-context.h
+ text-editing.h
+ text-tag-attributes.h
+ tools-switch.h
+ transf_mat_3x4.h
+ tweak-context.h
+ unclump.h
+ undo-stack-observer.h
+ unicoderange.h
+ unit-constants.h
+ uri-references.h
+ uri.h
+ vanishing-point.h
+ verbs-test.h
+ verbs.h
+ version.h
+ zoom-context.h
)
-SET(dirs ${internalfolders} ${libfolders}
+if(WIN32)
+ list(APPEND inkscape_SRC
+ registrytool.cpp
+ #deptool.cpp
+ winmain.cpp
+ )
+endif()
+
+
+# -----------------------------------------------------------------------------
+# Generate version file
+# -----------------------------------------------------------------------------
+
+# a custom target that is always built
+add_custom_target(
+ inkscape_version ALL
+ DEPENDS ${CMAKE_BINARY_DIR}/src/inkscape-version.cpp)
+
+# creates inkscape-version.cpp using cmake script
+add_custom_command(
+ OUTPUT ${CMAKE_BINARY_DIR}/src/inkscape-version.cpp
+ COMMAND ${CMAKE_COMMAND}
+ -DINKSCAPE_SOURCE_DIR=${CMAKE_SOURCE_DIR}
+ -DINKSCAPE_BINARY_DIR=${CMAKE_BINARY_DIR}
+ -P ${CMAKE_SOURCE_DIR}/CMakeScripts/inkscape-version.cmake)
+
+# buildinfo.h is a generated file
+set_source_files_properties(
+ ${CMAKE_BINARY_DIR}/src/inkscape-version.cpp
+ PROPERTIES GENERATED TRUE)
+
+list(APPEND inkscape_SRC
+ ${CMAKE_BINARY_DIR}/src/inkscape-version.cpp
)
-FOREACH(srclistsrc ${dirs})
- ADD_SUBDIRECTORY(${srclistsrc})
-ENDFOREACH(srclistsrc)
-SET(INKSCAPE_SRC ${INKSCAPE_SRC} ${GlibOutput})
+# -----------------------------------------------------------------------------
+# Load in subdirectories
+# -----------------------------------------------------------------------------
-ADD_LIBRARY(sp STATIC ${SP_SRC})
-TARGET_LINK_LIBRARIES(sp
-nr nrtype avoid cola croco gdl vpsc livarot ${internalfolders} ${INKSCAPE_LIBS}
+# All folders for internal inkscape
+# these call add_inkscape_source
+add_subdirectory(bind)
+add_subdirectory(debug)
+add_subdirectory(dialogs)
+add_subdirectory(display)
+add_subdirectory(dom)
+add_subdirectory(extension)
+add_subdirectory(filters)
+add_subdirectory(helper)
+add_subdirectory(io)
+# add_subdirectory(jabber_whiteboard)
+add_subdirectory(live_effects)
+# add_subdirectory(pedro)
+add_subdirectory(svg)
+add_subdirectory(trace)
+add_subdirectory(ui)
+add_subdirectory(util)
+add_subdirectory(widgets)
+add_subdirectory(xml)
+add_subdirectory(2geom)
+
+
+# Directories containing lists files that describe building internal libraries
+add_subdirectory(libavoid)
+add_subdirectory(libcola)
+add_subdirectory(libcroco)
+add_subdirectory(libgdl)
+add_subdirectory(libvpsc)
+add_subdirectory(livarot)
+add_subdirectory(libnr)
+add_subdirectory(libnrtype)
+
+
+get_property(inkscape_global_SRC GLOBAL PROPERTY inkscape_global_SRC)
+
+set(inkscape_SRC
+ ${inkscape_global_SRC}
+ ${inkscape_SRC}
)
+
+# -----------------------------------------------------------------------------
+# Setup the executable
+# -----------------------------------------------------------------------------
+add_inkscape_lib(sp_LIB "${sp_SRC}")
+add_inkscape_lib(inkscape_LIB "${inkscape_SRC}")
+
# make executable for INKSCAPE
-ADD_EXECUTABLE(inkscape ${INKSCAPE_SRC})
-TARGET_LINK_LIBRARIES(inkscape
-nr nrtype sp avoid cola croco gdl vpsc livarot ${internalfolders} ${INKSCAPE_LIBS}
+add_executable(inkscape ${main_SRC})
+
+add_dependencies(inkscape inkscape_version)
+
+target_link_libraries(inkscape
+ # order from automake
+ sp_LIB
+ inkscape_LIB
+ sp_LIB # annoying, we need both!
+
+ nr_LIB
+ nrtype_LIB
+
+ dom_LIB
+ croco_LIB
+ avoid_LIB
+ gdl_LIB
+ cola_LIB
+ vpsc_LIB
+ livarot_LIB
+ 2geom_LIB
+
+ ${INKSCAPE_LIBS}
)
+# TODO
# make executable for INKVIEW
-#ADD_EXECUTABLE(inkview inkview.cpp)
-#TARGET_LINK_LIBRARIES(inkview
-# 2geom avoid cola croco gdl nr nrtype vpsc livarot sp ${internalfolders}
-#)
+#add_executable(inkview inkview.cpp)
+# ...
diff --git a/src/Makefile_insert b/src/Makefile_insert
index 2298ddb42..7d48dba93 100644
--- a/src/Makefile_insert
+++ b/src/Makefile_insert
@@ -123,6 +123,7 @@ ink_common_sources += \
removeoverlap.cpp removeoverlap.h \
rdf.cpp rdf.h \
rect-context.cpp rect-context.h \
+ resource-manager.cpp resource-manager.h \
require-config.h \
round.h \
rubberband.cpp rubberband.h \
@@ -196,6 +197,7 @@ ink_common_sources += \
sp-object-repr.cpp sp-object-repr.h \
sp-offset.cpp sp-offset.h \
sp-paint-server.cpp sp-paint-server.h \
+ sp-paint-server-reference.h \
sp-path.cpp sp-path.h \
sp-pattern.cpp sp-pattern.h \
sp-polygon.cpp sp-polygon.h \
@@ -246,7 +248,8 @@ ink_common_sources += \
vanishing-point.cpp vanishing-point.h \
verbs.cpp verbs.h \
version.cpp version.h \
- zoom-context.cpp zoom-context.h
+ zoom-context.cpp zoom-context.h \
+ measure-context.cpp measure-context.h
# Additional dependencies
diff --git a/src/arc-context.h b/src/arc-context.h
index 3ed4478ba..ddce10801 100644
--- a/src/arc-context.h
+++ b/src/arc-context.h
@@ -22,10 +22,10 @@
#include "event-context.h"
#define SP_TYPE_ARC_CONTEXT (sp_arc_context_get_type())
-#define SP_ARC_CONTEXT(obj) (GTK_CHECK_CAST((obj), SP_TYPE_ARC_CONTEXT, SPArcContext))
-#define SP_ARC_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST((klass), SP_TYPE_ARC_CONTEXT, SPArcContextClass))
-#define SP_IS_ARC_CONTEXT(obj) (GTK_CHECK_TYPE((obj), SP_TYPE_ARC_CONTEXT))
-#define SP_IS_ARC_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE((klass), SP_TYPE_ARC_CONTEXT))
+#define SP_ARC_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_ARC_CONTEXT, SPArcContext))
+#define SP_ARC_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_ARC_CONTEXT, SPArcContextClass))
+#define SP_IS_ARC_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_ARC_CONTEXT))
+#define SP_IS_ARC_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_ARC_CONTEXT))
class SPArcContext;
class SPArcContextClass;
diff --git a/src/bind/CMakeLists.txt b/src/bind/CMakeLists.txt
index a6b5b6883..9b6abad4f 100644
--- a/src/bind/CMakeLists.txt
+++ b/src/bind/CMakeLists.txt
@@ -1,7 +1,18 @@
-SET(bind_SRC
-dobinding.cpp
-javabind.cpp
+
+set(bind_SRC
+ dobinding.cpp
+ javabind.cpp
+
+
+ # -------
+ # Headers
+ javabind-private.h
+ javabind.h
+ javainc/jni.h
+ javainc/linux/jni_md.h
+ javainc/solaris/jni_md.h
+ javainc/win32/jni_md.h
)
-ADD_LIBRARY(bind STATIC ${bind_SRC})
-TARGET_LINK_LIBRARIES(bind
-${INKSCAPE_LIBS}) \ No newline at end of file
+
+# add_inkscape_lib(bind_LIB "${bind_SRC}")
+add_inkscape_source("${bind_SRC}")
diff --git a/src/box3d-context.cpp b/src/box3d-context.cpp
index f23e4d883..90f1707b9 100644
--- a/src/box3d-context.cpp
+++ b/src/box3d-context.cpp
@@ -190,7 +190,7 @@ static void sp_box3d_context_selection_changed(Inkscape::Selection *selection, g
* circumstances, after 'vacuum defs' or when a pre-0.46 file is opened).
*/
static void sp_box3d_context_ensure_persp_in_defs(SPDocument *document) {
- SPDefs *defs = reinterpret_cast<SPDefs *>(SP_DOCUMENT_DEFS(document));
+ SPDefs *defs = document->getDefs();
bool has_persp = false;
for ( SPObject *child = defs->firstChild(); child; child = child->getNext() ) {
diff --git a/src/box3d-context.h b/src/box3d-context.h
index 4b8435d74..74d244423 100644
--- a/src/box3d-context.h
+++ b/src/box3d-context.h
@@ -22,10 +22,10 @@
#include "vanishing-point.h"
#define SP_TYPE_BOX3D_CONTEXT (sp_box3d_context_get_type ())
-#define SP_BOX3D_CONTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_BOX3D_CONTEXT, Box3DContext))
-#define SP_BOX3D_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_BOX3D_CONTEXT, Box3DContextClass))
-#define SP_IS_BOX3D_CONTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_BOX3D_CONTEXT))
-#define SP_IS_BOX3D_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_BOX3D_CONTEXT))
+#define SP_BOX3D_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_BOX3D_CONTEXT, Box3DContext))
+#define SP_BOX3D_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_BOX3D_CONTEXT, Box3DContextClass))
+#define SP_IS_BOX3D_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_BOX3D_CONTEXT))
+#define SP_IS_BOX3D_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_BOX3D_CONTEXT))
class Box3DContext;
class Box3DContextClass;
diff --git a/src/box3d-side.cpp b/src/box3d-side.cpp
index 0c74a8f7e..fdbe33222 100644
--- a/src/box3d-side.cpp
+++ b/src/box3d-side.cpp
@@ -217,7 +217,7 @@ void
box3d_side_set_shape (SPShape *shape)
{
Box3DSide *side = SP_BOX3D_SIDE (shape);
- if (!side->document->root) {
+ if (!side->document->getRoot()) {
// avoid a warning caused by sp_document_height() (which is called from sp_item_i2d_affine() below)
// when reading a file containing 3D boxes
return;
diff --git a/src/color-profile.cpp b/src/color-profile.cpp
index d1897ab19..4dc4d5bd8 100644
--- a/src/color-profile.cpp
+++ b/src/color-profile.cpp
@@ -10,7 +10,7 @@
#include <glib/gi18n.h>
#ifdef DEBUG_LCMS
-#include <gtk/gtkmessagedialog.h>
+#include <gtk.h>
#endif // DEBUG_LCMS
#include <cstring>
diff --git a/src/color.h b/src/color.h
index bebeaec60..8e6b54dd1 100644
--- a/src/color.h
+++ b/src/color.h
@@ -15,7 +15,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gdk/gdktypes.h>
+#include <gdk/gdk.h>
#include <string>
/* Useful composition macros */
diff --git a/src/common-context.h b/src/common-context.h
index 74b6bbaef..ae0f398b2 100644
--- a/src/common-context.h
+++ b/src/common-context.h
@@ -24,10 +24,10 @@
#include <2geom/point.h>
#define SP_TYPE_COMMON_CONTEXT (sp_common_context_get_type())
-#define SP_COMMON_CONTEXT(o) (GTK_CHECK_CAST((o), SP_TYPE_COMMON_CONTEXT, SPCommonContext))
-#define SP_COMMON_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_CAST((k), SP_TYPE_COMMON_CONTEXT, SPCommonContextClass))
-#define SP_IS_COMMON_CONTEXT(o) (GTK_CHECK_TYPE((o), SP_TYPE_COMMON_CONTEXT))
-#define SP_IS_COMMON_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_TYPE((k), SP_TYPE_COMMON_CONTEXT))
+#define SP_COMMON_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_COMMON_CONTEXT, SPCommonContext))
+#define SP_COMMON_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_COMMON_CONTEXT, SPCommonContextClass))
+#define SP_IS_COMMON_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_COMMON_CONTEXT))
+#define SP_IS_COMMON_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_COMMON_CONTEXT))
class SPCommonContext;
class SPCommonContextClass;
diff --git a/src/connector-context.cpp b/src/connector-context.cpp
index 27e052499..251b41066 100644
--- a/src/connector-context.cpp
+++ b/src/connector-context.cpp
@@ -1640,8 +1640,8 @@ static void cc_active_shape_add_knot(SPDesktop* desktop, SPItem* item, Connectio
knot->_event_handler_id);
knot->_event_handler_id = 0;
- gtk_signal_connect(GTK_OBJECT(knot->item), "event",
- GTK_SIGNAL_FUNC(cc_generic_knot_handler), knot);
+ g_signal_connect(G_OBJECT(knot->item), "event",
+ G_CALLBACK(cc_generic_knot_handler), knot);
sp_knot_set_position(knot, item->avoidRef->getConnectionPointPos(cp.type, cp.id) * desktop->doc2dt(), 0);
sp_knot_show(knot);
cphandles[knot] = cp;
@@ -1826,8 +1826,8 @@ cc_set_active_conn(SPConnectorContext *cc, SPItem *item)
knot->_event_handler_id);
knot->_event_handler_id = 0;
- gtk_signal_connect(GTK_OBJECT(knot->item), "event",
- GTK_SIGNAL_FUNC(cc_generic_knot_handler), knot);
+ g_signal_connect(G_OBJECT(knot->item), "event",
+ G_CALLBACK(cc_generic_knot_handler), knot);
cc->endpt_handle[i] = knot;
}
diff --git a/src/context-fns.h b/src/context-fns.h
index be8b4dfd5..c86640aba 100644
--- a/src/context-fns.h
+++ b/src/context-fns.h
@@ -11,7 +11,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gdk/gdkevents.h>
+#include <gdk/gdk.h>
#include <2geom/forward.h>
struct SPDesktop;
diff --git a/src/debug/CMakeLists.txt b/src/debug/CMakeLists.txt
index 26c4e6934..5c0354fce 100644
--- a/src/debug/CMakeLists.txt
+++ b/src/debug/CMakeLists.txt
@@ -1,12 +1,28 @@
-SET(debug_SRC
-demangle.cpp
-heap.cpp
-log-display-config.cpp
-logger.cpp
-sysv-heap.cpp
-timestamp.cpp
-gdk-event-latency-tracker.cpp
+
+set(debug_SRC
+ demangle.cpp
+ heap.cpp
+ log-display-config.cpp
+ logger.cpp
+ sysv-heap.cpp
+ timestamp.cpp
+ gdk-event-latency-tracker.cpp
+
+
+ # ------
+ # Header
+ demangle.h
+ event-tracker.h
+ event.h
+ gc-heap.h
+ gdk-event-latency-tracker.h
+ heap.h
+ log-display-config.h
+ logger.h
+ simple-event.h
+ sysv-heap.h
+ timestamp.h
)
-ADD_LIBRARY(debug STATIC ${debug_SRC})
-TARGET_LINK_LIBRARIES(debug
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+# add_inkscape_lib(debug_LIB "${debug_SRC}")
+add_inkscape_source("${debug_SRC}")
diff --git a/src/debug/gdk-event-latency-tracker.h b/src/debug/gdk-event-latency-tracker.h
index 12ebb6570..c3624e74f 100644
--- a/src/debug/gdk-event-latency-tracker.h
+++ b/src/debug/gdk-event-latency-tracker.h
@@ -12,7 +12,7 @@
#ifndef SEEN_INKSCAPE_DEBUG_GDK_EVENT_LATENCY_TRACKER_H
#define SEEN_INKSCAPE_DEBUG_GDK_EVENT_LATENCY_TRACKER_H
-#include <gdk/gdkevents.h>
+#include <gdk/gdk.h>
#include <glibmm/timer.h>
#include <boost/optional.hpp>
diff --git a/src/debug/log-display-config.cpp b/src/debug/log-display-config.cpp
index d2821cc53..07380b3ad 100644
--- a/src/debug/log-display-config.cpp
+++ b/src/debug/log-display-config.cpp
@@ -10,8 +10,7 @@
*/
#include <iostream>
-#include <gdk/gdkdisplay.h>
-#include <gdk/gdkscreen.h>
+#include <gdk/gdk.h>
#include "debug/event-tracker.h"
#include "debug/logger.h"
#include "debug/simple-event.h"
diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp
index b458827f0..eb2b3a093 100644
--- a/src/desktop-events.cpp
+++ b/src/desktop-events.cpp
@@ -17,6 +17,7 @@
#include <map>
#include <string>
#include <2geom/line.h>
+#include <2geom/angle.h>
#include <glibmm/i18n.h>
#include "desktop.h"
@@ -131,7 +132,7 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
}
}
- guide = sp_guideline_new(desktop->guides, event_dt, normal);
+ guide = sp_guideline_new(desktop->guides, NULL, event_dt, normal);
sp_guideline_set_color(SP_GUIDELINE(guide), desktop->namedview->guidehicolor);
gdk_pointer_grab(widget->window, FALSE,
(GdkEventMask)(GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK ),
@@ -314,16 +315,24 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
case SP_DRAG_ROTATE:
{
Geom::Point pt = motion_dt - guide->point_on_line;
- double angle = std::atan2(pt[Geom::Y], pt[Geom::X]);
+ Geom::Angle angle(pt);
if (event->motion.state & GDK_CONTROL_MASK) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
unsigned const snaps = abs(prefs->getInt("/options/rotationsnapsperpi/value", 12));
+ bool const relative_snaps = abs(prefs->getBool("/options/relativeguiderotationsnap/value", false));
if (snaps) {
- double sections = floor(angle * snaps / M_PI + .5);
- angle = (M_PI / snaps) * sections;
+ if (relative_snaps) {
+ Geom::Angle orig_angle(guide->normal_to_line);
+ Geom::Angle snap_angle = angle - orig_angle;
+ double sections = floor(snap_angle.radians0() * snaps / M_PI + .5);
+ angle = (M_PI / snaps) * sections + orig_angle.radians0();
+ } else {
+ double sections = floor(angle.radians0() * snaps / M_PI + .5);
+ angle = (M_PI / snaps) * sections;
+ }
}
}
- sp_guide_set_normal(*guide, Geom::Point(1,0) * Geom::Rotate(angle + M_PI_2), false);
+ sp_guide_set_normal(*guide, Geom::Point::polar(angle).cw(), false);
break;
}
case SP_DRAG_MOVE_ORIGIN:
@@ -380,16 +389,24 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
case SP_DRAG_ROTATE:
{
Geom::Point pt = event_dt - guide->point_on_line;
- double angle = std::atan2(pt[Geom::Y], pt[Geom::X]);
- if (event->motion.state & GDK_CONTROL_MASK) {
+ Geom::Angle angle(pt);
+ if (event->motion.state & GDK_CONTROL_MASK) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
unsigned const snaps = abs(prefs->getInt("/options/rotationsnapsperpi/value", 12));
+ bool const relative_snaps = abs(prefs->getBool("/options/relativeguiderotationsnap/value", false));
if (snaps) {
- double sections = floor(angle * snaps / M_PI + .5);
- angle = (M_PI / snaps) * sections;
+ if (relative_snaps) {
+ Geom::Angle orig_angle(guide->normal_to_line);
+ Geom::Angle snap_angle = angle - orig_angle;
+ double sections = floor(snap_angle.radians0() * snaps / M_PI + .5);
+ angle = (M_PI / snaps) * sections + orig_angle.radians0();
+ } else {
+ double sections = floor(angle.radians0() * snaps / M_PI + .5);
+ angle = (M_PI / snaps) * sections;
+ }
}
}
- sp_guide_set_normal(*guide, Geom::Point(1,0) * Geom::Rotate(angle + M_PI_2), true);
+ sp_guide_set_normal(*guide, Geom::Point::polar(angle).cw(), true);
break;
}
case SP_DRAG_MOVE_ORIGIN:
diff --git a/src/desktop-events.h b/src/desktop-events.h
index e720cf7a0..e573fc878 100644
--- a/src/desktop-events.h
+++ b/src/desktop-events.h
@@ -13,8 +13,8 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gdk/gdkevents.h>
-#include <gtk/gtkwidget.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
class SPDesktop;
class SPDesktopWidget;
diff --git a/src/desktop.cpp b/src/desktop.cpp
index 418809aca..f12f83ca6 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -87,11 +87,14 @@
#include "device-manager.h"
#include "layer-fns.h"
#include "layer-manager.h"
+#include "resource-manager.h"
#include "event-log.h"
#include "display/canvas-grid.h"
#include "widgets/desktop-widget.h"
#include "box3d-context.h"
#include "desktop-style.h"
+#include "sp-item-group.h"
+#include "sp-root.h"
// TODO those includes are only for node tool quick zoom. Remove them after fixing it.
#include "ui/tool/node-tool.h"
@@ -177,6 +180,7 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid
// Temporary workaround for link order issues:
Inkscape::DeviceManager::getManager().getDevices();
+ Inkscape::ResourceManager::getManager();
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
_guides_message_context = new Inkscape::MessageContext(const_cast<Inkscape::MessageStack*>(messageStack()));
@@ -711,7 +715,7 @@ SPDesktop::set_coordinate_status (Geom::Point p) {
SPItem *SPDesktop::getItemFromListAtPointBottom(const GSList *list, Geom::Point const p) const
{
g_return_val_if_fail (doc() != NULL, NULL);
- return SPDocument::getItemFromListAtPointBottom(dkey, SP_GROUP (doc()->root), list, p);
+ return SPDocument::getItemFromListAtPointBottom(dkey, doc()->getRoot(), list, p);
}
/**
@@ -1320,6 +1324,11 @@ SPDesktop::presentWindow()
_widget->present();
}
+bool SPDesktop::showInfoDialog( Glib::ustring const & message )
+{
+ return _widget->showInfoDialog( message );
+}
+
bool
SPDesktop::warnDialog (gchar *text)
{
diff --git a/src/desktop.h b/src/desktop.h
index 947e92fe7..2581f2859 100644
--- a/src/desktop.h
+++ b/src/desktop.h
@@ -27,8 +27,8 @@
#include "config.h"
#endif
-#include <gdk/gdkevents.h>
-#include <gtk/gtktypeutils.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
#include <stddef.h>
#include <sigc++/sigc++.h>
@@ -288,6 +288,7 @@ public:
void setWindowTransient (void* p, int transient_policy=1);
Gtk::Window* getToplevel();
void presentWindow();
+ bool showInfoDialog( Glib::ustring const &message );
bool warnDialog (gchar *text);
void toggleRulers();
void toggleScrollbars();
diff --git a/src/device-manager.cpp b/src/device-manager.cpp
index 2b44a8d51..5cf376cc4 100644
--- a/src/device-manager.cpp
+++ b/src/device-manager.cpp
@@ -10,7 +10,7 @@
#include <glib.h>
#include <map>
#include <set>
-#include <gtk/gtkaccelgroup.h>
+#include <gtk/gtk.h>
#include "device-manager.h"
#include "preferences.h"
diff --git a/src/dialogs/CMakeLists.txt b/src/dialogs/CMakeLists.txt
index 9bcb1cd5a..6586b78af 100644
--- a/src/dialogs/CMakeLists.txt
+++ b/src/dialogs/CMakeLists.txt
@@ -1,25 +1,28 @@
-SET(dialogs_SRC
-clonetiler.cpp
-dialog-events.cpp
-export.cpp
-extensions.cpp
-fill-style.cpp
-find.cpp
-guidelinedialog.cpp
-iconpreview.cpp
-in-dt-coordsys.cpp
-item-properties.cpp
-layer-properties.cpp
-layers-panel.cpp
-object-attributes.cpp
-rdf.cpp
-sp-attribute-widget.cpp
-stroke-style.cpp
-swatches.cpp
-text-edit.cpp
-unclump.cpp
-xml-tree.cpp
+
+set(dialogs_SRC
+ clonetiler.cpp
+ dialog-events.cpp
+ export.cpp
+ find.cpp
+ item-properties.cpp
+ object-attributes.cpp
+ spellcheck.cpp
+ text-edit.cpp
+ xml-tree.cpp
+
+
+ # -------
+ # Headers
+ clonetiler.h
+ dialog-events.h
+ export.h
+ find.h
+ item-properties.h
+ object-attributes.h
+ spellcheck.h
+ text-edit.h
+ xml-tree.h
)
-ADD_LIBRARY(dialogs STATIC ${dialogs_SRC})
-TARGET_LINK_LIBRARIES(dialogs
-2geom ${INKSCAPE_LIBS})
+
+# add_inkscape_lib(dialogs_LIB "${dialogs_SRC}")
+add_inkscape_source("${dialogs_SRC}")
diff --git a/src/dialogs/clonetiler.cpp b/src/dialogs/clonetiler.cpp
index 81204f27b..60ec4f9f7 100644
--- a/src/dialogs/clonetiler.cpp
+++ b/src/dialogs/clonetiler.cpp
@@ -47,6 +47,7 @@
#include "verbs.h"
#include "widgets/icon.h"
#include "xml/repr.h"
+#include "sp-root.h"
using Inkscape::DocumentUndo;
@@ -83,8 +84,7 @@ static sigc::connection _color_changed_connection;
static Inkscape::UI::Widget::ColorPicker *color_picker;
-static void
-clonetiler_dialog_destroy( GtkObject */*object*/, gpointer /*data*/ )
+static void clonetiler_dialog_destroy(GtkObject */*object*/, gpointer /*data*/)
{
sp_signal_disconnect_by_data (INKSCAPE, dlg);
_color_changed_connection.disconnect();
@@ -96,14 +96,17 @@ clonetiler_dialog_destroy( GtkObject */*object*/, gpointer /*data*/ )
}
-static gboolean
-clonetiler_dialog_delete (GtkObject */*object*/, GdkEvent * /*event*/, gpointer /*data*/)
+static gboolean clonetiler_dialog_delete(GtkObject */*object*/, GdkEvent * /*event*/, gpointer /*data*/)
{
gtk_window_get_position ((GtkWindow *) dlg, &x, &y);
gtk_window_get_size ((GtkWindow *) dlg, &w, &h);
- if (x<0) x=0;
- if (y<0) y=0;
+ if (x < 0) {
+ x = 0;
+ }
+ if (y < 0) {
+ y = 0;
+ }
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setInt(prefs_path + "x", x);
@@ -115,8 +118,7 @@ clonetiler_dialog_delete (GtkObject */*object*/, GdkEvent * /*event*/, gpointer
}
-static void
-on_picker_color_changed (guint rgba)
+static void on_picker_color_changed(guint rgba)
{
static bool is_updating = false;
if (is_updating || !SP_ACTIVE_DESKTOP)
@@ -132,10 +134,9 @@ on_picker_color_changed (guint rgba)
is_updating = false;
}
-static guint clonetiler_number_of_clones (SPObject *obj);
+static guint clonetiler_number_of_clones(SPObject *obj);
-static void
-clonetiler_change_selection (Inkscape::Application * /*inkscape*/, Inkscape::Selection *selection, GtkWidget *dlg)
+static void clonetiler_change_selection(Inkscape::Application * /*inkscape*/, Inkscape::Selection *selection, GtkWidget *dlg)
{
GtkWidget *buttons = (GtkWidget *) g_object_get_data (G_OBJECT(dlg), "buttons_on_tiles");
GtkWidget *status = (GtkWidget *) g_object_get_data (G_OBJECT(dlg), "status");
@@ -164,15 +165,16 @@ clonetiler_change_selection (Inkscape::Application * /*inkscape*/, Inkscape::Sel
}
}
-static void
-clonetiler_external_change (Inkscape::Application * /*inkscape*/, GtkWidget *dlg)
+static void clonetiler_external_change(Inkscape::Application * /*inkscape*/, GtkWidget *dlg)
{
clonetiler_change_selection (NULL, sp_desktop_selection(SP_ACTIVE_DESKTOP), dlg);
}
-static void clonetiler_disconnect_gsignal (GObject *widget, gpointer source) {
- if (source && G_IS_OBJECT(source))
+static void clonetiler_disconnect_gsignal(GObject *widget, gpointer source)
+{
+ if (source && G_IS_OBJECT(source)) {
sp_signal_disconnect_by_data (source, widget);
+ }
}
@@ -197,9 +199,7 @@ enum {
};
-static Geom::Affine
-clonetiler_get_transform (
-
+static Geom::Affine clonetiler_get_transform(
// symmetry group
int type,
@@ -801,8 +801,7 @@ clonetiler_get_transform (
return Geom::identity();
}
-static bool
-clonetiler_is_a_clone_of (SPObject *tile, SPObject *obj)
+static bool clonetiler_is_a_clone_of(SPObject *tile, SPObject *obj)
{
bool result = false;
char *id_href = NULL;
@@ -835,8 +834,7 @@ static NRArenaItem *trace_root;
static gdouble trace_zoom;
static SPDocument *trace_doc;
-static void
-clonetiler_trace_hide_tiled_clones_recursively (SPObject *from)
+static void clonetiler_trace_hide_tiled_clones_recursively(SPObject *from)
{
if (!trace_arena)
return;
@@ -848,8 +846,7 @@ clonetiler_trace_hide_tiled_clones_recursively (SPObject *from)
}
}
-static void
-clonetiler_trace_setup (SPDocument *doc, gdouble zoom, SPItem *original)
+static void clonetiler_trace_setup(SPDocument *doc, gdouble zoom, SPItem *original)
{
trace_arena = NRArena::create();
/* Create ArenaItem and set transform */
@@ -867,11 +864,11 @@ clonetiler_trace_setup (SPDocument *doc, gdouble zoom, SPItem *original)
trace_zoom = zoom;
}
-static guint32
-clonetiler_trace_pick (Geom::Rect box)
+static guint32 clonetiler_trace_pick(Geom::Rect box)
{
- if (!trace_arena)
+ if (!trace_arena) {
return 0;
+ }
Geom::Affine t(Geom::Scale(trace_zoom, trace_zoom));
nr_arena_item_set_transform(trace_root, &t);
@@ -906,8 +903,7 @@ clonetiler_trace_pick (Geom::Rect box)
return SP_RGBA32_F_COMPOSE (R, G, B, A);
}
-static void
-clonetiler_trace_finish ()
+static void clonetiler_trace_finish()
{
if (trace_doc) {
SP_ITEM(trace_doc->getRoot())->invoke_hide(trace_visionkey);
@@ -918,12 +914,12 @@ clonetiler_trace_finish ()
}
}
-static void
-clonetiler_unclump( GtkWidget */*widget*/, void * )
+static void clonetiler_unclump(GtkWidget */*widget*/, void *)
{
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- if (desktop == NULL)
+ if (desktop == NULL) {
return;
+ }
Inkscape::Selection *selection = sp_desktop_selection(desktop);
@@ -954,8 +950,7 @@ clonetiler_unclump( GtkWidget */*widget*/, void * )
_("Unclump tiled clones"));
}
-static guint
-clonetiler_number_of_clones (SPObject *obj)
+static guint clonetiler_number_of_clones(SPObject *obj)
{
SPObject *parent = obj->parent;
@@ -970,12 +965,12 @@ clonetiler_number_of_clones (SPObject *obj)
return n;
}
-static void
-clonetiler_remove( GtkWidget */*widget*/, void *, bool do_undo = true )
+static void clonetiler_remove(GtkWidget */*widget*/, void *, bool do_undo = true)
{
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- if (desktop == NULL)
+ if (desktop == NULL) {
return;
+ }
Inkscape::Selection *selection = sp_desktop_selection(desktop);
@@ -1008,8 +1003,7 @@ clonetiler_remove( GtkWidget */*widget*/, void *, bool do_undo = true )
}
}
-static Geom::Rect
-transform_rect( Geom::Rect const &r, Geom::Affine const &m)
+static Geom::Rect transform_rect(Geom::Rect const &r, Geom::Affine const &m)
{
using Geom::X;
using Geom::Y;
@@ -1030,22 +1024,23 @@ transform_rect( Geom::Rect const &r, Geom::Affine const &m)
Randomizes \a val by \a rand, with 0 < val < 1 and all values (including 0, 1) having the same
probability of being displaced.
*/
-static double
-randomize01 (double val, double rand)
+static double randomize01(double val, double rand)
{
double base = MIN (val - rand, 1 - 2*rand);
- if (base < 0) base = 0;
+ if (base < 0) {
+ base = 0;
+ }
val = base + g_random_double_range (0, MIN (2 * rand, 1 - base));
return CLAMP(val, 0, 1); // this should be unnecessary with the above provisions, but just in case...
}
-static void
-clonetiler_apply( GtkWidget */*widget*/, void * )
+static void clonetiler_apply(GtkWidget */*widget*/, void *)
{
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- if (desktop == NULL)
+ if (desktop == NULL) {
return;
+ }
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
Inkscape::Selection *selection = sp_desktop_selection(desktop);
@@ -1395,11 +1390,11 @@ clonetiler_apply( GtkWidget */*widget*/, void * )
}
if (opacity < 1e-6) { // invisibly transparent, skip
- continue;
+ continue;
}
if (fabs(t[0]) + fabs (t[1]) + fabs(t[2]) + fabs(t[3]) < 1e-6) { // too small, skip
- continue;
+ continue;
}
// Create the clone
@@ -1472,8 +1467,7 @@ clonetiler_apply( GtkWidget */*widget*/, void * )
_("Create tiled clones"));
}
-static GtkWidget *
-clonetiler_new_tab (GtkWidget *nb, const gchar *label)
+static GtkWidget * clonetiler_new_tab(GtkWidget *nb, const gchar *label)
{
GtkWidget *l = gtk_label_new_with_mnemonic (label);
GtkWidget *vb = gtk_vbox_new (FALSE, VB_MARGIN);
@@ -1482,76 +1476,74 @@ clonetiler_new_tab (GtkWidget *nb, const gchar *label)
return vb;
}
-static void
-clonetiler_checkbox_toggled (GtkToggleButton *tb, gpointer *data)
+static void clonetiler_checkbox_toggled(GtkToggleButton *tb, gpointer *data)
{
const gchar *attr = (const gchar *) data;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setBool(prefs_path + attr, gtk_toggle_button_get_active(tb));
}
-static GtkWidget *
-clonetiler_checkbox (GtkTooltips *tt, const char *tip, const char *attr)
+static GtkWidget * clonetiler_checkbox(const char *tip, const char *attr)
{
GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN);
GtkWidget *b = gtk_check_button_new ();
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, tip, NULL);
+ gtk_widget_set_tooltip_text (b, tip);
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
bool value = prefs->getBool(prefs_path + attr);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(b), value);
gtk_box_pack_end (GTK_BOX (hb), b, FALSE, TRUE, 0);
- gtk_signal_connect ( GTK_OBJECT (b), "clicked",
- GTK_SIGNAL_FUNC (clonetiler_checkbox_toggled), (gpointer) attr);
+ g_signal_connect ( G_OBJECT (b), "clicked",
+ G_CALLBACK (clonetiler_checkbox_toggled), (gpointer) attr);
g_object_set_data (G_OBJECT(b), "uncheckable", GINT_TO_POINTER(TRUE));
return hb;
}
-
-static void
-clonetiler_value_changed (GtkAdjustment *adj, gpointer data)
+static void clonetiler_value_changed(GtkAdjustment *adj, gpointer data)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
const gchar *pref = (const gchar *) data;
prefs->setDouble(prefs_path + pref, adj->value);
}
-static GtkWidget *
-clonetiler_spinbox (GtkTooltips *tt, const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent = false)
+static GtkWidget * clonetiler_spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent = false)
{
GtkWidget *hb = gtk_hbox_new(FALSE, 0);
{
GtkObject *a;
- if (exponent)
- a = gtk_adjustment_new(1.0, lower, upper, 0.01, 0.05, 0.1);
- else
- a = gtk_adjustment_new(0.0, lower, upper, 0.1, 0.5, 2);
+ if (exponent) {
+ a = gtk_adjustment_new(1.0, lower, upper, 0.01, 0.05, 0);
+ } else {
+ a = gtk_adjustment_new(0.0, lower, upper, 0.1, 0.5, 0);
+ }
GtkWidget *sb;
- if (exponent)
+ if (exponent) {
sb = gtk_spin_button_new (GTK_ADJUSTMENT (a), 0.01, 2);
- else
+ } else {
sb = gtk_spin_button_new (GTK_ADJUSTMENT (a), 0.1, 1);
+ }
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), sb, tip, NULL);
+ gtk_widget_set_tooltip_text (sb, tip);
gtk_entry_set_width_chars (GTK_ENTRY (sb), 4);
gtk_box_pack_start (GTK_BOX (hb), sb, FALSE, FALSE, SB_MARGIN);
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
double value = prefs->getDoubleLimited(prefs_path + attr, exponent? 1.0 : 0.0, lower, upper);
gtk_adjustment_set_value (GTK_ADJUSTMENT (a), value);
- gtk_signal_connect(GTK_OBJECT(a), "value_changed",
- GTK_SIGNAL_FUNC(clonetiler_value_changed), (gpointer) attr);
+ g_signal_connect(G_OBJECT(a), "value_changed",
+ G_CALLBACK(clonetiler_value_changed), (gpointer) attr);
- if (exponent)
+ if (exponent) {
g_object_set_data (G_OBJECT(sb), "oneable", GINT_TO_POINTER(TRUE));
- else
+ } else {
g_object_set_data (G_OBJECT(sb), "zeroable", GINT_TO_POINTER(TRUE));
+ }
}
{
@@ -1564,31 +1556,27 @@ clonetiler_spinbox (GtkTooltips *tt, const char *tip, const char *attr, double l
return hb;
}
-static void
-clonetiler_symgroup_changed( GtkMenuItem */*item*/, gpointer data )
+static void clonetiler_symgroup_changed(GtkMenuItem */*item*/, gpointer data)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gint group_new = GPOINTER_TO_INT (data);
prefs->setInt(prefs_path + "symmetrygroup", group_new);
}
-static void
-clonetiler_xy_changed (GtkAdjustment *adj, gpointer data)
+static void clonetiler_xy_changed(GtkAdjustment *adj, gpointer data)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
const gchar *pref = (const gchar *) data;
prefs->setInt(prefs_path + pref, (int) floor(adj->value + 0.5));
}
-static void
-clonetiler_keep_bbox_toggled( GtkToggleButton *tb, gpointer /*data*/ )
+static void clonetiler_keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setBool(prefs_path + "keepbbox", gtk_toggle_button_get_active(tb));
}
-static void
-clonetiler_pick_to (GtkToggleButton *tb, gpointer data)
+static void clonetiler_pick_to(GtkToggleButton *tb, gpointer data)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
const gchar *pref = (const gchar *) data;
@@ -1596,8 +1584,7 @@ clonetiler_pick_to (GtkToggleButton *tb, gpointer data)
}
-static void
-clonetiler_reset_recursive (GtkWidget *w)
+static void clonetiler_reset_recursive(GtkWidget *w)
{
if (w && GTK_IS_OBJECT(w)) {
{
@@ -1631,22 +1618,19 @@ clonetiler_reset_recursive (GtkWidget *w)
}
}
-static void
-clonetiler_reset( GtkWidget */*widget*/, void * )
+static void clonetiler_reset(GtkWidget */*widget*/, void *)
{
clonetiler_reset_recursive (dlg);
}
-static void
-clonetiler_table_attach (GtkWidget *table, GtkWidget *widget, float align, int row, int col)
+static void clonetiler_table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col)
{
GtkWidget *a = gtk_alignment_new (align, 0, 0, 0);
gtk_container_add(GTK_CONTAINER(a), widget);
gtk_table_attach ( GTK_TABLE (table), a, col, col + 1, row, row + 1, (GtkAttachOptions)4, (GtkAttachOptions)0, 0, 0 );
}
-static GtkWidget *
-clonetiler_table_x_y_rand (int values)
+static GtkWidget * clonetiler_table_x_y_rand(int values)
{
GtkWidget *table = gtk_table_new (values + 2, 5, FALSE);
gtk_container_set_border_width (GTK_CONTAINER (table), VB_MARGIN);
@@ -1688,8 +1672,7 @@ clonetiler_table_x_y_rand (int values)
return table;
}
-static void
-clonetiler_pick_switched( GtkToggleButton */*tb*/, gpointer data )
+static void clonetiler_pick_switched(GtkToggleButton */*tb*/, gpointer data)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
guint v = GPOINTER_TO_INT (data);
@@ -1697,8 +1680,7 @@ clonetiler_pick_switched( GtkToggleButton */*tb*/, gpointer data )
}
-static void
-clonetiler_switch_to_create( GtkToggleButton */*tb*/, GtkWidget *dlg )
+static void clonetiler_switch_to_create(GtkToggleButton */*tb*/, GtkWidget *dlg)
{
GtkWidget *rowscols = (GtkWidget *) g_object_get_data (G_OBJECT(dlg), "rowscols");
GtkWidget *widthheight = (GtkWidget *) g_object_get_data (G_OBJECT(dlg), "widthheight");
@@ -1715,8 +1697,7 @@ clonetiler_switch_to_create( GtkToggleButton */*tb*/, GtkWidget *dlg )
}
-static void
-clonetiler_switch_to_fill( GtkToggleButton */*tb*/, GtkWidget *dlg )
+static void clonetiler_switch_to_fill(GtkToggleButton */*tb*/, GtkWidget *dlg)
{
GtkWidget *rowscols = (GtkWidget *) g_object_get_data (G_OBJECT(dlg), "rowscols");
GtkWidget *widthheight = (GtkWidget *) g_object_get_data (G_OBJECT(dlg), "widthheight");
@@ -1735,8 +1716,7 @@ clonetiler_switch_to_fill( GtkToggleButton */*tb*/, GtkWidget *dlg )
-static void
-clonetiler_fill_width_changed (GtkAdjustment *adj, GtkWidget *u)
+static void clonetiler_fill_width_changed(GtkAdjustment *adj, GtkWidget *u)
{
gdouble const raw_dist = adj->value;
SPUnit const &unit = *sp_unit_selector_get_unit(SP_UNIT_SELECTOR(u));
@@ -1746,8 +1726,7 @@ clonetiler_fill_width_changed (GtkAdjustment *adj, GtkWidget *u)
prefs->setDouble(prefs_path + "fillwidth", pixels);
}
-static void
-clonetiler_fill_height_changed (GtkAdjustment *adj, GtkWidget *u)
+static void clonetiler_fill_height_changed(GtkAdjustment *adj, GtkWidget *u)
{
gdouble const raw_dist = adj->value;
SPUnit const &unit = *sp_unit_selector_get_unit(SP_UNIT_SELECTOR(u));
@@ -1758,23 +1737,22 @@ clonetiler_fill_height_changed (GtkAdjustment *adj, GtkWidget *u)
}
-static void
-clonetiler_do_pick_toggled( GtkToggleButton *tb, gpointer /*data*/ )
+static void clonetiler_do_pick_toggled(GtkToggleButton *tb, gpointer /*data*/)
{
GtkWidget *vvb = (GtkWidget *) g_object_get_data (G_OBJECT(dlg), "dotrace");
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setBool(prefs_path + "dotrace", gtk_toggle_button_get_active (tb));
- if (vvb)
+ if (vvb) {
gtk_widget_set_sensitive (vvb, gtk_toggle_button_get_active (tb));
+ }
}
-void
-clonetiler_dialog (void)
+void clonetiler_dialog(void)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (!dlg)
@@ -1812,18 +1790,16 @@ clonetiler_dialog (void)
wd.stop = 0;
- gtk_signal_connect ( GTK_OBJECT (dlg), "event", GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg);
+ g_signal_connect ( G_OBJECT (dlg), "event", G_CALLBACK (sp_dialog_event_handler), dlg);
- gtk_signal_connect ( GTK_OBJECT (dlg), "destroy", G_CALLBACK (clonetiler_dialog_destroy), dlg);
- gtk_signal_connect ( GTK_OBJECT (dlg), "delete_event", G_CALLBACK (clonetiler_dialog_delete), dlg);
+ g_signal_connect ( G_OBJECT (dlg), "destroy", G_CALLBACK (clonetiler_dialog_destroy), dlg);
+ g_signal_connect ( G_OBJECT (dlg), "delete_event", G_CALLBACK (clonetiler_dialog_delete), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (clonetiler_dialog_delete), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide", G_CALLBACK (sp_dialog_hide), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide", G_CALLBACK (sp_dialog_unhide), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd);
- GtkTooltips *tt = gtk_tooltips_new();
-
GtkWidget *mainbox = gtk_vbox_new(FALSE, 4);
gtk_container_set_border_width (GTK_CONTAINER (mainbox), 6);
gtk_container_add (GTK_CONTAINER (dlg), mainbox);
@@ -1842,7 +1818,7 @@ clonetiler_dialog (void)
* http://www.clarku.edu/~djoyce/wallpaper/seventeen.html (English vocabulary); or
* http://membres.lycos.fr/villemingerard/Geometri/Sym1D.htm (French vocabulary).
*/
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), om, _("Select one of the 17 symmetry groups for the tiling"), NULL);
+ gtk_widget_set_tooltip_text (om, _("Select one of the 17 symmetry groups for the tiling"));
gtk_box_pack_start (GTK_BOX (vb), om, FALSE, FALSE, SB_MARGIN);
GtkWidget *m = gtk_menu_new ();
@@ -1884,8 +1860,8 @@ clonetiler_dialog (void)
GtkWidget *item = gtk_menu_item_new ();
gtk_container_add (GTK_CONTAINER (item), l);
- gtk_signal_connect ( GTK_OBJECT (item), "activate",
- GTK_SIGNAL_FUNC (clonetiler_symgroup_changed),
+ g_signal_connect ( G_OBJECT (item), "activate",
+ G_CALLBACK (clonetiler_symgroup_changed),
GINT_TO_POINTER (sg.group) );
gtk_menu_append (GTK_MENU (m), item);
@@ -1915,7 +1891,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
// xgettext:no-c-format
_("Horizontal shift per row (in % of tile width)"), "shiftx_per_j",
-10000, 10000, "%");
@@ -1923,7 +1899,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
// xgettext:no-c-format
_("Horizontal shift per column (in % of tile width)"), "shiftx_per_i",
-10000, 10000, "%");
@@ -1931,8 +1907,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Randomize the horizontal shift by this percentage"), "shiftx_rand",
+ GtkWidget *l = clonetiler_spinbox (_("Randomize the horizontal shift by this percentage"), "shiftx_rand",
0, 1000, "%");
clonetiler_table_attach (table, l, 0, 2, 4);
}
@@ -1948,7 +1923,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
// xgettext:no-c-format
_("Vertical shift per row (in % of tile height)"), "shifty_per_j",
-10000, 10000, "%");
@@ -1956,7 +1931,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
// xgettext:no-c-format
_("Vertical shift per column (in % of tile height)"), "shifty_per_i",
-10000, 10000, "%");
@@ -1964,7 +1939,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
_("Randomize the vertical shift by this percentage"), "shifty_rand",
0, 1000, "%");
clonetiler_table_attach (table, l, 0, 3, 4);
@@ -1979,14 +1954,14 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
_("Whether rows are spaced evenly (1), converge (<1) or diverge (>1)"), "shifty_exp",
0, 10, "", true);
clonetiler_table_attach (table, l, 0, 4, 2);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
_("Whether columns are spaced evenly (1), converge (<1) or diverge (>1)"), "shiftx_exp",
0, 10, "", true);
clonetiler_table_attach (table, l, 0, 4, 3);
@@ -2001,12 +1976,12 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Alternate the sign of shifts for each row"), "shifty_alternate");
+ GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of shifts for each row"), "shifty_alternate");
clonetiler_table_attach (table, l, 0, 5, 2);
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Alternate the sign of shifts for each column"), "shiftx_alternate");
+ GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of shifts for each column"), "shiftx_alternate");
clonetiler_table_attach (table, l, 0, 5, 3);
}
@@ -2019,12 +1994,12 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Cumulate the shifts for each row"), "shifty_cumulate");
+ GtkWidget *l = clonetiler_checkbox (_("Cumulate the shifts for each row"), "shifty_cumulate");
clonetiler_table_attach (table, l, 0, 6, 2);
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Cumulate the shifts for each column"), "shiftx_cumulate");
+ GtkWidget *l = clonetiler_checkbox (_("Cumulate the shifts for each column"), "shiftx_cumulate");
clonetiler_table_attach (table, l, 0, 6, 3);
}
@@ -2037,12 +2012,12 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Exclude tile height in shift"), "shifty_excludeh");
+ GtkWidget *l = clonetiler_checkbox (_("Exclude tile height in shift"), "shifty_excludeh");
clonetiler_table_attach (table, l, 0, 7, 2);
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Exclude tile width in shift"), "shiftx_excludew");
+ GtkWidget *l = clonetiler_checkbox (_("Exclude tile width in shift"), "shiftx_excludew");
clonetiler_table_attach (table, l, 0, 7, 3);
}
@@ -2065,7 +2040,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
// xgettext:no-c-format
_("Horizontal scale per row (in % of tile width)"), "scalex_per_j",
-100, 1000, "%");
@@ -2073,7 +2048,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
// xgettext:no-c-format
_("Horizontal scale per column (in % of tile width)"), "scalex_per_i",
-100, 1000, "%");
@@ -2081,8 +2056,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Randomize the horizontal scale by this percentage"), "scalex_rand",
+ GtkWidget *l = clonetiler_spinbox (_("Randomize the horizontal scale by this percentage"), "scalex_rand",
0, 1000, "%");
clonetiler_table_attach (table, l, 0, 2, 4);
}
@@ -2096,7 +2070,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
// xgettext:no-c-format
_("Vertical scale per row (in % of tile height)"), "scaley_per_j",
-100, 1000, "%");
@@ -2104,7 +2078,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
// xgettext:no-c-format
_("Vertical scale per column (in % of tile height)"), "scaley_per_i",
-100, 1000, "%");
@@ -2112,8 +2086,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Randomize the vertical scale by this percentage"), "scaley_rand",
+ GtkWidget *l = clonetiler_spinbox (_("Randomize the vertical scale by this percentage"), "scaley_rand",
0, 1000, "%");
clonetiler_table_attach (table, l, 0, 3, 4);
}
@@ -2127,15 +2100,13 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Whether row scaling is uniform (1), converge (<1) or diverge (>1)"), "scaley_exp",
+ GtkWidget *l = clonetiler_spinbox (_("Whether row scaling is uniform (1), converge (<1) or diverge (>1)"), "scaley_exp",
0, 10, "", true);
clonetiler_table_attach (table, l, 0, 4, 2);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Whether column scaling is uniform (1), converge (<1) or diverge (>1)"), "scalex_exp",
+ GtkWidget *l = clonetiler_spinbox (_("Whether column scaling is uniform (1), converge (<1) or diverge (>1)"), "scalex_exp",
0, 10, "", true);
clonetiler_table_attach (table, l, 0, 4, 3);
}
@@ -2149,15 +2120,13 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scaley_log",
+ GtkWidget *l = clonetiler_spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scaley_log",
0, 10, "", false);
clonetiler_table_attach (table, l, 0, 5, 2);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scalex_log",
+ GtkWidget *l = clonetiler_spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scalex_log",
0, 10, "", false);
clonetiler_table_attach (table, l, 0, 5, 3);
}
@@ -2171,12 +2140,12 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Alternate the sign of scales for each row"), "scaley_alternate");
+ GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of scales for each row"), "scaley_alternate");
clonetiler_table_attach (table, l, 0, 6, 2);
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Alternate the sign of scales for each column"), "scalex_alternate");
+ GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of scales for each column"), "scalex_alternate");
clonetiler_table_attach (table, l, 0, 6, 3);
}
@@ -2189,12 +2158,12 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Cumulate the scales for each row"), "scaley_cumulate");
+ GtkWidget *l = clonetiler_checkbox (_("Cumulate the scales for each row"), "scaley_cumulate");
clonetiler_table_attach (table, l, 0, 7, 2);
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Cumulate the scales for each column"), "scalex_cumulate");
+ GtkWidget *l = clonetiler_checkbox (_("Cumulate the scales for each column"), "scalex_cumulate");
clonetiler_table_attach (table, l, 0, 7, 3);
}
@@ -2217,7 +2186,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
// xgettext:no-c-format
_("Rotate tiles by this angle for each row"), "rotate_per_j",
-180, 180, "&#176;");
@@ -2225,7 +2194,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
+ GtkWidget *l = clonetiler_spinbox (
// xgettext:no-c-format
_("Rotate tiles by this angle for each column"), "rotate_per_i",
-180, 180, "&#176;");
@@ -2233,8 +2202,7 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Randomize the rotation angle by this percentage"), "rotate_rand",
+ GtkWidget *l = clonetiler_spinbox (_("Randomize the rotation angle by this percentage"), "rotate_rand",
0, 100, "%");
clonetiler_table_attach (table, l, 0, 2, 4);
}
@@ -2248,12 +2216,12 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Alternate the rotation direction for each row"), "rotate_alternatej");
+ GtkWidget *l = clonetiler_checkbox (_("Alternate the rotation direction for each row"), "rotate_alternatej");
clonetiler_table_attach (table, l, 0, 3, 2);
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Alternate the rotation direction for each column"), "rotate_alternatei");
+ GtkWidget *l = clonetiler_checkbox (_("Alternate the rotation direction for each column"), "rotate_alternatei");
clonetiler_table_attach (table, l, 0, 3, 3);
}
@@ -2266,12 +2234,12 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Cumulate the rotation for each row"), "rotate_cumulatej");
+ GtkWidget *l = clonetiler_checkbox (_("Cumulate the rotation for each row"), "rotate_cumulatej");
clonetiler_table_attach (table, l, 0, 4, 2);
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Cumulate the rotation for each column"), "rotate_cumulatei");
+ GtkWidget *l = clonetiler_checkbox (_("Cumulate the rotation for each column"), "rotate_cumulatei");
clonetiler_table_attach (table, l, 0, 4, 3);
}
@@ -2295,22 +2263,19 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Blur tiles by this percentage for each row"), "blur_per_j",
+ GtkWidget *l = clonetiler_spinbox (_("Blur tiles by this percentage for each row"), "blur_per_j",
0, 100, "%");
clonetiler_table_attach (table, l, 0, 2, 2);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Blur tiles by this percentage for each column"), "blur_per_i",
+ GtkWidget *l = clonetiler_spinbox (_("Blur tiles by this percentage for each column"), "blur_per_i",
0, 100, "%");
clonetiler_table_attach (table, l, 0, 2, 3);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Randomize the tile blur by this percentage"), "blur_rand",
+ GtkWidget *l = clonetiler_spinbox (_("Randomize the tile blur by this percentage"), "blur_rand",
0, 100, "%");
clonetiler_table_attach (table, l, 0, 2, 4);
}
@@ -2324,12 +2289,12 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Alternate the sign of blur change for each row"), "blur_alternatej");
+ GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of blur change for each row"), "blur_alternatej");
clonetiler_table_attach (table, l, 0, 3, 2);
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Alternate the sign of blur change for each column"), "blur_alternatei");
+ GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of blur change for each column"), "blur_alternatei");
clonetiler_table_attach (table, l, 0, 3, 3);
}
@@ -2344,22 +2309,19 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Decrease tile opacity by this percentage for each row"), "opacity_per_j",
+ GtkWidget *l = clonetiler_spinbox (_("Decrease tile opacity by this percentage for each row"), "opacity_per_j",
0, 100, "%");
clonetiler_table_attach (table, l, 0, 4, 2);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Decrease tile opacity by this percentage for each column"), "opacity_per_i",
+ GtkWidget *l = clonetiler_spinbox (_("Decrease tile opacity by this percentage for each column"), "opacity_per_i",
0, 100, "%");
clonetiler_table_attach (table, l, 0, 4, 3);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Randomize the tile opacity by this percentage"), "opacity_rand",
+ GtkWidget *l = clonetiler_spinbox (_("Randomize the tile opacity by this percentage"), "opacity_rand",
0, 100, "%");
clonetiler_table_attach (table, l, 0, 4, 4);
}
@@ -2373,12 +2335,12 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Alternate the sign of opacity change for each row"), "opacity_alternatej");
+ GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of opacity change for each row"), "opacity_alternatej");
clonetiler_table_attach (table, l, 0, 5, 2);
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Alternate the sign of opacity change for each column"), "opacity_alternatei");
+ GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of opacity change for each column"), "opacity_alternatei");
clonetiler_table_attach (table, l, 0, 5, 3);
}
}
@@ -2416,22 +2378,19 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Change the tile hue by this percentage for each row"), "hue_per_j",
+ GtkWidget *l = clonetiler_spinbox (_("Change the tile hue by this percentage for each row"), "hue_per_j",
-100, 100, "%");
clonetiler_table_attach (table, l, 0, 2, 2);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Change the tile hue by this percentage for each column"), "hue_per_i",
+ GtkWidget *l = clonetiler_spinbox (_("Change the tile hue by this percentage for each column"), "hue_per_i",
-100, 100, "%");
clonetiler_table_attach (table, l, 0, 2, 3);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Randomize the tile hue by this percentage"), "hue_rand",
+ GtkWidget *l = clonetiler_spinbox (_("Randomize the tile hue by this percentage"), "hue_rand",
0, 100, "%");
clonetiler_table_attach (table, l, 0, 2, 4);
}
@@ -2446,22 +2405,19 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Change the color saturation by this percentage for each row"), "saturation_per_j",
+ GtkWidget *l = clonetiler_spinbox (_("Change the color saturation by this percentage for each row"), "saturation_per_j",
-100, 100, "%");
clonetiler_table_attach (table, l, 0, 3, 2);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Change the color saturation by this percentage for each column"), "saturation_per_i",
+ GtkWidget *l = clonetiler_spinbox (_("Change the color saturation by this percentage for each column"), "saturation_per_i",
-100, 100, "%");
clonetiler_table_attach (table, l, 0, 3, 3);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Randomize the color saturation by this percentage"), "saturation_rand",
+ GtkWidget *l = clonetiler_spinbox (_("Randomize the color saturation by this percentage"), "saturation_rand",
0, 100, "%");
clonetiler_table_attach (table, l, 0, 3, 4);
}
@@ -2475,22 +2431,19 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Change the color lightness by this percentage for each row"), "lightness_per_j",
+ GtkWidget *l = clonetiler_spinbox (_("Change the color lightness by this percentage for each row"), "lightness_per_j",
-100, 100, "%");
clonetiler_table_attach (table, l, 0, 4, 2);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Change the color lightness by this percentage for each column"), "lightness_per_i",
+ GtkWidget *l = clonetiler_spinbox (_("Change the color lightness by this percentage for each column"), "lightness_per_i",
-100, 100, "%");
clonetiler_table_attach (table, l, 0, 4, 3);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Randomize the color lightness by this percentage"), "lightness_rand",
+ GtkWidget *l = clonetiler_spinbox (_("Randomize the color lightness by this percentage"), "lightness_rand",
0, 100, "%");
clonetiler_table_attach (table, l, 0, 4, 4);
}
@@ -2504,12 +2457,12 @@ clonetiler_dialog (void)
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Alternate the sign of color changes for each row"), "color_alternatej");
+ GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of color changes for each row"), "color_alternatej");
clonetiler_table_attach (table, l, 0, 5, 2);
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Alternate the sign of color changes for each column"), "color_alternatei");
+ GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of color changes for each column"), "color_alternatei");
clonetiler_table_attach (table, l, 0, 5, 3);
}
@@ -2528,11 +2481,11 @@ clonetiler_dialog (void)
g_object_set_data (G_OBJECT(b), "uncheckable", GINT_TO_POINTER(TRUE));
bool old = prefs->getBool(prefs_path + "dotrace");
gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("For each clone, pick a value from the drawing in that clone's location and apply it to the clone"), NULL);
+ gtk_widget_set_tooltip_text (b, _("For each clone, pick a value from the drawing in that clone's location and apply it to the clone"));
gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(b), "toggled",
- GTK_SIGNAL_FUNC(clonetiler_do_pick_toggled), dlg);
+ g_signal_connect(G_OBJECT(b), "toggled",
+ G_CALLBACK(clonetiler_do_pick_toggled), dlg);
}
{
@@ -2554,66 +2507,66 @@ clonetiler_dialog (void)
GtkWidget* radio;
{
radio = gtk_radio_button_new_with_label (NULL, _("Color"));
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), radio, _("Pick the visible color and opacity"), NULL);
+ gtk_widget_set_tooltip_text (radio, _("Pick the visible color and opacity"));
clonetiler_table_attach (table, radio, 0.0, 1, 1);
- gtk_signal_connect (GTK_OBJECT (radio), "toggled",
- GTK_SIGNAL_FUNC (clonetiler_pick_switched), GINT_TO_POINTER(PICK_COLOR));
+ g_signal_connect (G_OBJECT (radio), "toggled",
+ G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_COLOR));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_COLOR);
}
{
radio = gtk_radio_button_new_with_label (gtk_radio_button_group (GTK_RADIO_BUTTON (radio)), _("Opacity"));
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), radio, _("Pick the total accumulated opacity"), NULL);
+ gtk_widget_set_tooltip_text (radio, _("Pick the total accumulated opacity"));
clonetiler_table_attach (table, radio, 0.0, 2, 1);
- gtk_signal_connect (GTK_OBJECT (radio), "toggled",
- GTK_SIGNAL_FUNC (clonetiler_pick_switched), GINT_TO_POINTER(PICK_OPACITY));
+ g_signal_connect (G_OBJECT (radio), "toggled",
+ G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_OPACITY));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_OPACITY);
}
{
radio = gtk_radio_button_new_with_label (gtk_radio_button_group (GTK_RADIO_BUTTON (radio)), _("R"));
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), radio, _("Pick the Red component of the color"), NULL);
+ gtk_widget_set_tooltip_text (radio, _("Pick the Red component of the color"));
clonetiler_table_attach (table, radio, 0.0, 1, 2);
- gtk_signal_connect (GTK_OBJECT (radio), "toggled",
- GTK_SIGNAL_FUNC (clonetiler_pick_switched), GINT_TO_POINTER(PICK_R));
+ g_signal_connect (G_OBJECT (radio), "toggled",
+ G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_R));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_R);
}
{
radio = gtk_radio_button_new_with_label (gtk_radio_button_group (GTK_RADIO_BUTTON (radio)), _("G"));
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), radio, _("Pick the Green component of the color"), NULL);
+ gtk_widget_set_tooltip_text (radio, _("Pick the Green component of the color"));
clonetiler_table_attach (table, radio, 0.0, 2, 2);
- gtk_signal_connect (GTK_OBJECT (radio), "toggled",
- GTK_SIGNAL_FUNC (clonetiler_pick_switched), GINT_TO_POINTER(PICK_G));
+ g_signal_connect (G_OBJECT (radio), "toggled",
+ G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_G));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_G);
}
{
radio = gtk_radio_button_new_with_label (gtk_radio_button_group (GTK_RADIO_BUTTON (radio)), _("B"));
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), radio, _("Pick the Blue component of the color"), NULL);
+ gtk_widget_set_tooltip_text (radio, _("Pick the Blue component of the color"));
clonetiler_table_attach (table, radio, 0.0, 3, 2);
- gtk_signal_connect (GTK_OBJECT (radio), "toggled",
- GTK_SIGNAL_FUNC (clonetiler_pick_switched), GINT_TO_POINTER(PICK_B));
+ g_signal_connect (G_OBJECT (radio), "toggled",
+ G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_B));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_B);
}
{
radio = gtk_radio_button_new_with_label (gtk_radio_button_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color hue", "H"));
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), radio, _("Pick the hue of the color"), NULL);
+ gtk_widget_set_tooltip_text (radio, _("Pick the hue of the color"));
clonetiler_table_attach (table, radio, 0.0, 1, 3);
- gtk_signal_connect (GTK_OBJECT (radio), "toggled",
- GTK_SIGNAL_FUNC (clonetiler_pick_switched), GINT_TO_POINTER(PICK_H));
+ g_signal_connect (G_OBJECT (radio), "toggled",
+ G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_H));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_H);
}
{
radio = gtk_radio_button_new_with_label (gtk_radio_button_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color saturation", "S"));
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), radio, _("Pick the saturation of the color"), NULL);
+ gtk_widget_set_tooltip_text (radio, _("Pick the saturation of the color"));
clonetiler_table_attach (table, radio, 0.0, 2, 3);
- gtk_signal_connect (GTK_OBJECT (radio), "toggled",
- GTK_SIGNAL_FUNC (clonetiler_pick_switched), GINT_TO_POINTER(PICK_S));
+ g_signal_connect (G_OBJECT (radio), "toggled",
+ G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_S));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_S);
}
{
radio = gtk_radio_button_new_with_label (gtk_radio_button_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color lightness", "L"));
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), radio, _("Pick the lightness of the color"), NULL);
+ gtk_widget_set_tooltip_text (radio, _("Pick the lightness of the color"));
clonetiler_table_attach (table, radio, 0.0, 3, 3);
- gtk_signal_connect (GTK_OBJECT (radio), "toggled",
- GTK_SIGNAL_FUNC (clonetiler_pick_switched), GINT_TO_POINTER(PICK_L));
+ g_signal_connect (G_OBJECT (radio), "toggled",
+ G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_L));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_L);
}
@@ -2634,8 +2587,7 @@ clonetiler_dialog (void)
clonetiler_table_attach (table, l, 1.0, 1, 1);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Shift the mid-range of the picked value upwards (>0) or downwards (<0)"), "gamma_picked",
+ GtkWidget *l = clonetiler_spinbox (_("Shift the mid-range of the picked value upwards (>0) or downwards (<0)"), "gamma_picked",
-10, 10, "");
clonetiler_table_attach (table, l, 0.0, 1, 2);
}
@@ -2646,8 +2598,7 @@ clonetiler_dialog (void)
clonetiler_table_attach (table, l, 1.0, 1, 3);
}
{
- GtkWidget *l = clonetiler_spinbox (tt,
- _("Randomize the picked value by this percentage"), "rand_picked",
+ GtkWidget *l = clonetiler_spinbox (_("Randomize the picked value by this percentage"), "rand_picked",
0, 100, "%");
clonetiler_table_attach (table, l, 0.0, 1, 4);
}
@@ -2658,7 +2609,7 @@ clonetiler_dialog (void)
clonetiler_table_attach (table, l, 1.0, 2, 1);
}
{
- GtkWidget *l = clonetiler_checkbox (tt, _("Invert the picked value"), "invert_picked");
+ GtkWidget *l = clonetiler_checkbox (_("Invert the picked value"), "invert_picked");
clonetiler_table_attach (table, l, 0.0, 2, 2);
}
}
@@ -2677,40 +2628,40 @@ clonetiler_dialog (void)
GtkWidget *b = gtk_check_button_new_with_label (_("Presence"));
bool old = prefs->getBool(prefs_path + "pick_to_presence", true);
gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Each clone is created with the probability determined by the picked value in that point"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Each clone is created with the probability determined by the picked value in that point"));
clonetiler_table_attach (table, b, 0.0, 1, 1);
- gtk_signal_connect(GTK_OBJECT(b), "toggled",
- GTK_SIGNAL_FUNC(clonetiler_pick_to), (gpointer) "pick_to_presence");
+ g_signal_connect(G_OBJECT(b), "toggled",
+ G_CALLBACK(clonetiler_pick_to), (gpointer) "pick_to_presence");
}
{
GtkWidget *b = gtk_check_button_new_with_label (_("Size"));
bool old = prefs->getBool(prefs_path + "pick_to_size");
gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Each clone's size is determined by the picked value in that point"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Each clone's size is determined by the picked value in that point"));
clonetiler_table_attach (table, b, 0.0, 2, 1);
- gtk_signal_connect(GTK_OBJECT(b), "toggled",
- GTK_SIGNAL_FUNC(clonetiler_pick_to), (gpointer) "pick_to_size");
+ g_signal_connect(G_OBJECT(b), "toggled",
+ G_CALLBACK(clonetiler_pick_to), (gpointer) "pick_to_size");
}
{
GtkWidget *b = gtk_check_button_new_with_label (_("Color"));
bool old = prefs->getBool(prefs_path + "pick_to_color", 0);
gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Each clone is painted by the picked color (the original must have unset fill or stroke)"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Each clone is painted by the picked color (the original must have unset fill or stroke)"));
clonetiler_table_attach (table, b, 0.0, 1, 2);
- gtk_signal_connect(GTK_OBJECT(b), "toggled",
- GTK_SIGNAL_FUNC(clonetiler_pick_to), (gpointer) "pick_to_color");
+ g_signal_connect(G_OBJECT(b), "toggled",
+ G_CALLBACK(clonetiler_pick_to), (gpointer) "pick_to_color");
}
{
GtkWidget *b = gtk_check_button_new_with_label (_("Opacity"));
bool old = prefs->getBool(prefs_path + "pick_to_opacity", 0);
gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Each clone's opacity is determined by the picked value in that point"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Each clone's opacity is determined by the picked value in that point"));
clonetiler_table_attach (table, b, 0.0, 2, 2);
- gtk_signal_connect(GTK_OBJECT(b), "toggled",
- GTK_SIGNAL_FUNC(clonetiler_pick_to), (gpointer) "pick_to_opacity");
+ g_signal_connect(G_OBJECT(b), "toggled",
+ G_CALLBACK(clonetiler_pick_to), (gpointer) "pick_to_opacity");
}
}
gtk_widget_set_sensitive (vvb, prefs->getBool(prefs_path + "dotrace"));
@@ -2730,16 +2681,16 @@ clonetiler_dialog (void)
g_object_set_data (G_OBJECT(dlg), "rowscols", (gpointer) hb);
{
- GtkObject *a = gtk_adjustment_new(0.0, 1, 500, 1, 10, 10);
+ GtkObject *a = gtk_adjustment_new(0.0, 1, 500, 1, 10, 0);
int value = prefs->getInt(prefs_path + "jmax", 2);
gtk_adjustment_set_value (GTK_ADJUSTMENT (a), value);
GtkWidget *sb = gtk_spin_button_new (GTK_ADJUSTMENT (a), 1.0, 0);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), sb, _("How many rows in the tiling"), NULL);
+ gtk_widget_set_tooltip_text (sb, _("How many rows in the tiling"));
gtk_entry_set_width_chars (GTK_ENTRY (sb), 5);
gtk_box_pack_start (GTK_BOX (hb), sb, TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(a), "value_changed",
- GTK_SIGNAL_FUNC(clonetiler_xy_changed), (gpointer) "jmax");
+ g_signal_connect(G_OBJECT(a), "value_changed",
+ G_CALLBACK(clonetiler_xy_changed), (gpointer) "jmax");
}
{
@@ -2750,16 +2701,16 @@ clonetiler_dialog (void)
}
{
- GtkObject *a = gtk_adjustment_new(0.0, 1, 500, 1, 10, 10);
+ GtkObject *a = gtk_adjustment_new(0.0, 1, 500, 1, 10, 0);
int value = prefs->getInt(prefs_path + "imax", 2);
gtk_adjustment_set_value (GTK_ADJUSTMENT (a), value);
GtkWidget *sb = gtk_spin_button_new (GTK_ADJUSTMENT (a), 1.0, 0);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), sb, _("How many columns in the tiling"), NULL);
+ gtk_widget_set_tooltip_text (sb, _("How many columns in the tiling"));
gtk_entry_set_width_chars (GTK_ENTRY (sb), 5);
gtk_box_pack_start (GTK_BOX (hb), sb, TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(a), "value_changed",
- GTK_SIGNAL_FUNC(clonetiler_xy_changed), (gpointer) "imax");
+ g_signal_connect(G_OBJECT(a), "value_changed",
+ G_CALLBACK(clonetiler_xy_changed), (gpointer) "imax");
}
clonetiler_table_attach (table, hb, 0.0, 1, 2);
@@ -2775,7 +2726,7 @@ clonetiler_dialog (void)
{
// Width spinbutton
- GtkObject *a = gtk_adjustment_new (0.0, -1e6, 1e6, 1.0, 10.0, 10.0);
+ GtkObject *a = gtk_adjustment_new (0.0, -1e6, 1e6, 1.0, 10.0, 0);
sp_unit_selector_add_adjustment (SP_UNIT_SELECTOR (u), GTK_ADJUSTMENT (a));
double value = prefs->getDouble(prefs_path + "fillwidth", 50.0);
@@ -2784,11 +2735,11 @@ clonetiler_dialog (void)
gtk_adjustment_set_value (GTK_ADJUSTMENT (a), units);
GtkWidget *e = gtk_spin_button_new (GTK_ADJUSTMENT (a), 1.0 , 2);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), e, _("Width of the rectangle to be filled"), NULL);
+ gtk_widget_set_tooltip_text (e, _("Width of the rectangle to be filled"));
gtk_entry_set_width_chars (GTK_ENTRY (e), 5);
gtk_box_pack_start (GTK_BOX (hb), e, TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(a), "value_changed",
- GTK_SIGNAL_FUNC(clonetiler_fill_width_changed), u);
+ g_signal_connect(G_OBJECT(a), "value_changed",
+ G_CALLBACK(clonetiler_fill_width_changed), u);
}
{
GtkWidget *l = gtk_label_new ("");
@@ -2799,7 +2750,7 @@ clonetiler_dialog (void)
{
// Height spinbutton
- GtkObject *a = gtk_adjustment_new (0.0, -1e6, 1e6, 1.0, 10.0, 10.0);
+ GtkObject *a = gtk_adjustment_new (0.0, -1e6, 1e6, 1.0, 10.0, 0);
sp_unit_selector_add_adjustment (SP_UNIT_SELECTOR (u), GTK_ADJUSTMENT (a));
double value = prefs->getDouble(prefs_path + "fillheight", 50.0);
@@ -2809,11 +2760,11 @@ clonetiler_dialog (void)
GtkWidget *e = gtk_spin_button_new (GTK_ADJUSTMENT (a), 1.0 , 2);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), e, _("Height of the rectangle to be filled"), NULL);
+ gtk_widget_set_tooltip_text (e, _("Height of the rectangle to be filled"));
gtk_entry_set_width_chars (GTK_ENTRY (e), 5);
gtk_box_pack_start (GTK_BOX (hb), e, TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(a), "value_changed",
- GTK_SIGNAL_FUNC(clonetiler_fill_height_changed), u);
+ g_signal_connect(G_OBJECT(a), "value_changed",
+ G_CALLBACK(clonetiler_fill_height_changed), u);
}
gtk_box_pack_start (GTK_BOX (hb), u, TRUE, TRUE, 0);
@@ -2825,9 +2776,9 @@ clonetiler_dialog (void)
GtkWidget* radio;
{
radio = gtk_radio_button_new_with_label (NULL, _("Rows, columns: "));
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), radio, _("Create the specified number of rows and columns"), NULL);
+ gtk_widget_set_tooltip_text (radio, _("Create the specified number of rows and columns"));
clonetiler_table_attach (table, radio, 0.0, 1, 1);
- gtk_signal_connect (GTK_OBJECT (radio), "toggled", GTK_SIGNAL_FUNC (clonetiler_switch_to_create), (gpointer) dlg);
+ g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_create), (gpointer) dlg);
}
if (!prefs->getBool(prefs_path + "fillrect")) {
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE);
@@ -2835,9 +2786,9 @@ clonetiler_dialog (void)
}
{
radio = gtk_radio_button_new_with_label (gtk_radio_button_group (GTK_RADIO_BUTTON (radio)), _("Width, height: "));
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), radio, _("Fill the specified width and height with the tiling"), NULL);
+ gtk_widget_set_tooltip_text (radio, _("Fill the specified width and height with the tiling"));
clonetiler_table_attach (table, radio, 0.0, 2, 1);
- gtk_signal_connect (GTK_OBJECT (radio), "toggled", GTK_SIGNAL_FUNC (clonetiler_switch_to_fill), (gpointer) dlg);
+ g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_fill), (gpointer) dlg);
}
if (prefs->getBool(prefs_path + "fillrect")) {
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE);
@@ -2854,11 +2805,11 @@ clonetiler_dialog (void)
GtkWidget *b = gtk_check_button_new_with_label (_("Use saved size and position of the tile"));
bool keepbbox = prefs->getBool(prefs_path + "keepbbox", true);
gtk_toggle_button_set_active ((GtkToggleButton *) b, keepbbox);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Pretend that the size and position of the tile are the same as the last time you tiled it (if any), instead of using the current size"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Pretend that the size and position of the tile are the same as the last time you tiled it (if any), instead of using the current size"));
gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(b), "toggled",
- GTK_SIGNAL_FUNC(clonetiler_keep_bbox_toggled), NULL);
+ g_signal_connect(G_OBJECT(b), "toggled",
+ G_CALLBACK(clonetiler_keep_bbox_toggled), NULL);
}
// Statusbar
@@ -2880,8 +2831,8 @@ clonetiler_dialog (void)
GtkWidget *l = gtk_label_new ("");
gtk_label_set_markup_with_mnemonic (GTK_LABEL(l), _(" <b>_Create</b> "));
gtk_container_add (GTK_CONTAINER(b), l);
- gtk_tooltips_set_tip (tt, b, _("Create and tile the clones of the selection"), NULL);
- gtk_signal_connect (GTK_OBJECT (b), "clicked", GTK_SIGNAL_FUNC (clonetiler_apply), NULL);
+ gtk_widget_set_tooltip_text (b, _("Create and tile the clones of the selection"));
+ g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_apply), NULL);
gtk_box_pack_end (GTK_BOX (hb), b, FALSE, FALSE, 0);
}
@@ -2896,15 +2847,15 @@ clonetiler_dialog (void)
// http://www.inkscape.org/screenshots/gallery/inkscape-0.42-CVS-tiles-unclump.png
// So unclumping is the process of spreading a number of objects out more evenly.
GtkWidget *b = gtk_button_new_with_mnemonic (_(" _Unclump "));
- gtk_tooltips_set_tip (tt, b, _("Spread out clones to reduce clumping; can be applied repeatedly"), NULL);
- gtk_signal_connect (GTK_OBJECT (b), "clicked", GTK_SIGNAL_FUNC (clonetiler_unclump), NULL);
+ gtk_widget_set_tooltip_text (b, _("Spread out clones to reduce clumping; can be applied repeatedly"));
+ g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_unclump), NULL);
gtk_box_pack_end (GTK_BOX (sb), b, FALSE, FALSE, 0);
}
{
GtkWidget *b = gtk_button_new_with_mnemonic (_(" Re_move "));
- gtk_tooltips_set_tip (tt, b, _("Remove existing tiled clones of the selected object (siblings only)"), NULL);
- gtk_signal_connect (GTK_OBJECT (b), "clicked", GTK_SIGNAL_FUNC (clonetiler_remove), NULL);
+ gtk_widget_set_tooltip_text (b, _("Remove existing tiled clones of the selected object (siblings only)"));
+ g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_remove), NULL);
gtk_box_pack_end (GTK_BOX (sb), b, FALSE, FALSE, 0);
}
@@ -2921,8 +2872,8 @@ clonetiler_dialog (void)
{
GtkWidget *b = gtk_button_new_with_mnemonic (_(" R_eset "));
// TRANSLATORS: "change" is a noun here
- gtk_tooltips_set_tip (tt, b, _("Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero"), NULL);
- gtk_signal_connect (GTK_OBJECT (b), "clicked", GTK_SIGNAL_FUNC (clonetiler_reset), NULL);
+ gtk_widget_set_tooltip_text (b, _("Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero"));
+ g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_reset), NULL);
gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0);
}
}
diff --git a/src/dialogs/clonetiler.h b/src/dialogs/clonetiler.h
index bfb35cd96..899181346 100644
--- a/src/dialogs/clonetiler.h
+++ b/src/dialogs/clonetiler.h
@@ -12,7 +12,7 @@
#include <glib.h>
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
void clonetiler_dialog ( void );
diff --git a/src/dialogs/dialog-events.h b/src/dialogs/dialog-events.h
index 7b04d0f69..9c0a82f23 100644
--- a/src/dialogs/dialog-events.h
+++ b/src/dialogs/dialog-events.h
@@ -12,8 +12,7 @@
#ifndef __DIALOG_EVENTS_H__
#define __DIALOG_EVENTS_H__
-#include <gtk/gtkstyle.h>
-#include <gtk/gtkwindow.h>
+#include <gtk/gtk.h>
#include <forward.h>
/*
diff --git a/src/dialogs/export.cpp b/src/dialogs/export.cpp
index b05f6589a..b076c0f96 100644
--- a/src/dialogs/export.cpp
+++ b/src/dialogs/export.cpp
@@ -54,6 +54,7 @@
#include "preferences.h"
#include "verbs.h"
#include "interface.h"
+#include "sp-root.h"
#include "extension/output.h"
#include "extension/db.h"
@@ -261,7 +262,7 @@ sp_export_spinbutton_new ( gchar const *key, float val, float min, float max,
}
if (cb)
- gtk_signal_connect (adj, "value_changed", cb, dlg);
+ g_signal_connect (adj, "value_changed", cb, dlg);
return;
} // end of sp_export_spinbutton_new()
@@ -298,8 +299,8 @@ sp_export_dialog_area_box (GtkWidget * dlg)
b->set_data("key", GINT_TO_POINTER(i));
gtk_object_set_data (GTK_OBJECT (dlg), selection_names[i], b->gobj());
togglebox->pack_start(*b, false, true, 0);
- gtk_signal_connect ( GTK_OBJECT (b->gobj()), "clicked",
- GTK_SIGNAL_FUNC (sp_export_area_toggled), dlg );
+ g_signal_connect ( G_OBJECT (b->gobj()), "clicked",
+ G_CALLBACK (sp_export_area_toggled), dlg );
}
g_signal_connect ( G_OBJECT (INKSCAPE), "change_selection",
@@ -431,13 +432,13 @@ sp_export_dialog (void)
g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop",
G_CALLBACK (sp_transientize_callback), &wd);
- gtk_signal_connect ( GTK_OBJECT (dlg), "event",
- GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg);
+ g_signal_connect ( G_OBJECT (dlg), "event",
+ G_CALLBACK (sp_dialog_event_handler), dlg);
- gtk_signal_connect ( GTK_OBJECT (dlg), "destroy",
+ g_signal_connect ( G_OBJECT (dlg), "destroy",
G_CALLBACK (sp_export_dialog_destroy), dlg);
- gtk_signal_connect ( GTK_OBJECT (dlg), "delete_event",
+ g_signal_connect ( G_OBJECT (dlg), "delete_event",
G_CALLBACK (sp_export_dialog_delete), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down",
@@ -449,8 +450,6 @@ sp_export_dialog (void)
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide",
G_CALLBACK (sp_dialog_unhide), dlg);
- GtkTooltips *tt = gtk_tooltips_new();
-
Gtk::VBox *vb = new Gtk::VBox(false, 3);
vb->set_border_width(3);
gtk_container_add (GTK_CONTAINER (dlg), GTK_WIDGET(vb->gobj()));
@@ -624,7 +623,7 @@ sp_export_dialog (void)
gtk_widget_set_sensitive(GTK_WIDGET(be), TRUE);
gtk_object_set_data(GTK_OBJECT(dlg), "batch_checkbox", be);
batch_box->pack_start(*Glib::wrap(be), false, false);
- gtk_tooltips_set_tip(tt, be, _("Export each selected object into its own PNG file, using export hints if any (caution, overwrites without asking!)"), NULL);
+ gtk_widget_set_tooltip_text(be, _("Export each selected object into its own PNG file, using export hints if any (caution, overwrites without asking!)"));
batch_box->show_all();
g_signal_connect(G_OBJECT(be), "toggled", GTK_SIGNAL_FUNC(batch_export_clicked), dlg);
vb->pack_start(*batch_box);
@@ -636,7 +635,7 @@ sp_export_dialog (void)
gtk_widget_set_sensitive(GTK_WIDGET(he), TRUE);
gtk_object_set_data(GTK_OBJECT(dlg), "hide_checkbox", he);
hide_box->pack_start(*Glib::wrap(he), false, false);
- gtk_tooltips_set_tip(tt, he, _("In the exported image, hide all objects except those that are selected"), NULL);
+ gtk_widget_set_tooltip_text(he, _("In the exported image, hide all objects except those that are selected"));
hide_box->show_all();
vb->pack_start(*hide_box);
}
@@ -657,9 +656,9 @@ sp_export_dialog (void)
image_label->pack_start(*l);
b->add(*image_label);
- gtk_tooltips_set_tip (tt, GTK_WIDGET(b->gobj()), _("Export the bitmap file with these settings"), NULL);
- gtk_signal_connect ( GTK_OBJECT (b->gobj()), "clicked",
- GTK_SIGNAL_FUNC (sp_export_export_clicked), dlg );
+ gtk_widget_set_tooltip_text (GTK_WIDGET(b->gobj()), _("Export the bitmap file with these settings"));
+ g_signal_connect ( G_OBJECT (b->gobj()), "clicked",
+ G_CALLBACK (sp_export_export_clicked), dlg );
bb->pack_end(*b, false, false, 0);
}
@@ -784,7 +783,7 @@ sp_export_selection_modified ( Inkscape::Application */*inkscape*/,
if ( SP_ACTIVE_DESKTOP ) {
SPDocument *doc;
doc = sp_desktop_document (SP_ACTIVE_DESKTOP);
- Geom::OptRect bbox = SP_ITEM(doc->root)->getBboxDesktop(SPItem::RENDERING_BBOX);
+ Geom::OptRect bbox = doc->getRoot()->getBboxDesktop(SPItem::RENDERING_BBOX);
if (bbox) {
sp_export_set_area (base, bbox->min()[Geom::X],
bbox->min()[Geom::Y],
@@ -865,7 +864,7 @@ sp_export_area_toggled (GtkToggleButton *tb, GtkObject *base)
/** \todo
* This returns wrong values if the document has a viewBox.
*/
- bbox = SP_ITEM(doc->root)->getBboxDesktop(SPItem::RENDERING_BBOX);
+ bbox = doc->getRoot()->getBboxDesktop(SPItem::RENDERING_BBOX);
/* If the drawing is valid, then we'll use it and break
otherwise we drop through to the page settings */
if (bbox) {
@@ -1501,7 +1500,7 @@ sp_export_detect_size(GtkObject * base) {
case SELECTION_DRAWING: {
SPDocument *doc = sp_desktop_document (SP_ACTIVE_DESKTOP);
- Geom::OptRect bbox = SP_ITEM(doc->root)->getBboxDesktop(SPItem::RENDERING_BBOX);
+ Geom::OptRect bbox = doc->getRoot()->getBboxDesktop(SPItem::RENDERING_BBOX);
// std::cout << "Drawing " << bbox2;
if ( bbox && sp_export_bbox_equal(*bbox,current_bbox) ) {
diff --git a/src/dialogs/find.cpp b/src/dialogs/find.cpp
index c112b3531..62c551523 100644
--- a/src/dialogs/find.cpp
+++ b/src/dialogs/find.cpp
@@ -60,6 +60,7 @@ sp_find_dialog(){
#include "../sp-image.h"
#include "../sp-offset.h"
#include <xml/repr.h>
+#include "sp-root.h"
#define MIN_ONSCREEN_DISTANCE 50
@@ -411,7 +412,7 @@ sp_find_dialog_reset (GObject *, GObject *dlg)
#define FIND_LABELWIDTH 80
void
-sp_find_new_searchfield (GtkWidget *dlg, GtkWidget *vb, const gchar *label, const gchar *id, GtkTooltips *tt, const gchar *tip)
+sp_find_new_searchfield (GtkWidget *dlg, GtkWidget *vb, const gchar *label, const gchar *id, const gchar *tip)
{
GtkWidget *hb = gtk_hbox_new (FALSE, 0);
GtkWidget *l = gtk_label_new_with_mnemonic (label);
@@ -423,7 +424,7 @@ sp_find_new_searchfield (GtkWidget *dlg, GtkWidget *vb, const gchar *label, cons
gtk_entry_set_max_length (GTK_ENTRY (tf), 64);
gtk_box_pack_start (GTK_BOX (hb), tf, TRUE, TRUE, 0);
gtk_object_set_data (GTK_OBJECT (dlg), id, tf);
- gtk_tooltips_set_tip (tt, tf, tip, NULL);
+ gtk_widget_set_tooltip_text (tf, tip);
g_signal_connect ( G_OBJECT (tf), "activate", G_CALLBACK (sp_find_dialog_find), dlg );
gtk_label_set_mnemonic_widget (GTK_LABEL(l), tf);
@@ -431,10 +432,10 @@ sp_find_new_searchfield (GtkWidget *dlg, GtkWidget *vb, const gchar *label, cons
}
void
-sp_find_new_button (GtkWidget *dlg, GtkWidget *hb, const gchar *label, GtkTooltips *tt, const gchar *tip, void (*function) (GObject *, GObject *))
+sp_find_new_button (GtkWidget *dlg, GtkWidget *hb, const gchar *label, const gchar *tip, void (*function) (GObject *, GObject *))
{
GtkWidget *b = gtk_button_new_with_mnemonic (label);
- gtk_tooltips_set_tip (tt, b, tip, NULL);
+ gtk_widget_set_tooltip_text (b, tip);
gtk_box_pack_start (GTK_BOX (hb), b, TRUE, TRUE, 0);
g_signal_connect ( G_OBJECT (b), "clicked", G_CALLBACK (function), dlg );
gtk_widget_show (b);
@@ -482,7 +483,7 @@ toggle_shapes (GtkToggleButton *tb, gpointer data)
GtkWidget *
sp_find_types_checkbox (GtkWidget *w, const gchar *data, gboolean active,
- GtkTooltips *tt, const gchar *tip,
+ const gchar *tip,
const gchar *label,
void (*toggled)(GtkToggleButton *, gpointer))
{
@@ -494,9 +495,9 @@ sp_find_types_checkbox (GtkWidget *w, const gchar *data, gboolean active,
gtk_widget_show (b);
gtk_toggle_button_set_active ((GtkToggleButton *) b, active);
gtk_object_set_data (GTK_OBJECT (w), data, b);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, tip, NULL);
+ gtk_widget_set_tooltip_text (b, tip);
if (toggled)
- gtk_signal_connect (GTK_OBJECT (b), "toggled", GTK_SIGNAL_FUNC (toggled), w);
+ g_signal_connect (G_OBJECT (b), "toggled", G_CALLBACK (toggled), w);
gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0);
}
@@ -505,7 +506,7 @@ sp_find_types_checkbox (GtkWidget *w, const gchar *data, gboolean active,
GtkWidget *
sp_find_types_checkbox_indented (GtkWidget *w, const gchar *data, gboolean active,
- GtkTooltips *tt, const gchar *tip,
+ const gchar *tip,
const gchar *label,
void (*toggled)(GtkToggleButton *, gpointer), guint indent)
{
@@ -519,7 +520,7 @@ sp_find_types_checkbox_indented (GtkWidget *w, const gchar *data, gboolean activ
gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0);
}
- GtkWidget *c = sp_find_types_checkbox (w, data, active, tt, tip, label, toggled);
+ GtkWidget *c = sp_find_types_checkbox (w, data, active, tip, label, toggled);
gtk_box_pack_start (GTK_BOX (hb), c, FALSE, FALSE, 0);
return hb;
@@ -529,8 +530,6 @@ sp_find_types_checkbox_indented (GtkWidget *w, const gchar *data, gboolean activ
GtkWidget *
sp_find_types ()
{
- GtkTooltips *tt = gtk_tooltips_new ();
-
GtkWidget *vb = gtk_vbox_new (FALSE, 4);
gtk_widget_show (vb);
@@ -546,7 +545,7 @@ sp_find_types ()
gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0);
}
- GtkWidget *alltypes = sp_find_types_checkbox (vb, "all", TRUE, tt, _("Search in all object types"), _("All types"), toggle_alltypes);
+ GtkWidget *alltypes = sp_find_types_checkbox (vb, "all", TRUE, _("Search in all object types"), _("All types"), toggle_alltypes);
gtk_box_pack_start (GTK_BOX (hb), alltypes, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, 0);
@@ -557,7 +556,7 @@ sp_find_types ()
gtk_widget_show (vb_all);
{
- GtkWidget *c = sp_find_types_checkbox_indented (vb, "shapes", FALSE, tt, _("Search all shapes"), _("All shapes"), toggle_shapes, 10);
+ GtkWidget *c = sp_find_types_checkbox_indented (vb, "shapes", FALSE, _("Search all shapes"), _("All shapes"), toggle_shapes, 10);
gtk_box_pack_start (GTK_BOX (vb_all), c, FALSE, FALSE, 0);
}
@@ -574,22 +573,22 @@ sp_find_types ()
}
{
- GtkWidget *c = sp_find_types_checkbox (vb, "rects", FALSE, tt, _("Search rectangles"), _("Rectangles"), NULL);
+ GtkWidget *c = sp_find_types_checkbox (vb, "rects", FALSE, _("Search rectangles"), _("Rectangles"), NULL);
gtk_box_pack_start (GTK_BOX (hb), c, FALSE, FALSE, 0);
}
{
- GtkWidget *c = sp_find_types_checkbox (vb, "ellipses", FALSE, tt, _("Search ellipses, arcs, circles"), _("Ellipses"), NULL);
+ GtkWidget *c = sp_find_types_checkbox (vb, "ellipses", FALSE, _("Search ellipses, arcs, circles"), _("Ellipses"), NULL);
gtk_box_pack_start (GTK_BOX (hb), c, FALSE, FALSE, 0);
}
{
- GtkWidget *c = sp_find_types_checkbox (vb, "stars", FALSE, tt, _("Search stars and polygons"), _("Stars"), NULL);
+ GtkWidget *c = sp_find_types_checkbox (vb, "stars", FALSE, _("Search stars and polygons"), _("Stars"), NULL);
gtk_box_pack_start (GTK_BOX (hb), c, FALSE, FALSE, 0);
}
{
- GtkWidget *c = sp_find_types_checkbox (vb, "spirals", FALSE, tt, _("Search spirals"), _("Spirals"), NULL);
+ GtkWidget *c = sp_find_types_checkbox (vb, "spirals", FALSE, _("Search spirals"), _("Spirals"), NULL);
gtk_box_pack_start (GTK_BOX (hb), c, FALSE, FALSE, 0);
}
@@ -602,34 +601,34 @@ sp_find_types ()
{
// TRANSLATORS: polyline is a set of connected straight line segments
// http://www.w3.org/TR/SVG11/shapes.html#PolylineElement
- GtkWidget *c = sp_find_types_checkbox_indented (vb, "paths", TRUE, tt, _("Search paths, lines, polylines"), _("Paths"), NULL, 10);
+ GtkWidget *c = sp_find_types_checkbox_indented (vb, "paths", TRUE, _("Search paths, lines, polylines"), _("Paths"), NULL, 10);
gtk_box_pack_start (GTK_BOX (vb_all), c, FALSE, FALSE, 0);
}
{
- GtkWidget *c = sp_find_types_checkbox_indented (vb, "texts", TRUE, tt, _("Search text objects"), _("Texts"), NULL, 10);
+ GtkWidget *c = sp_find_types_checkbox_indented (vb, "texts", TRUE, _("Search text objects"), _("Texts"), NULL, 10);
gtk_box_pack_start (GTK_BOX (vb_all), c, FALSE, FALSE, 0);
}
{
- GtkWidget *c = sp_find_types_checkbox_indented (vb, "groups", TRUE, tt, _("Search groups"), _("Groups"), NULL, 10);
+ GtkWidget *c = sp_find_types_checkbox_indented (vb, "groups", TRUE, _("Search groups"), _("Groups"), NULL, 10);
gtk_box_pack_start (GTK_BOX (vb_all), c, FALSE, FALSE, 0);
}
{
- GtkWidget *c = sp_find_types_checkbox_indented (vb, "clones", TRUE, tt, _("Search clones"),
+ GtkWidget *c = sp_find_types_checkbox_indented (vb, "clones", TRUE, _("Search clones"),
//TRANSLATORS: "Clones" is a noun indicating type of object to find
C_("Find dialog","Clones"), NULL, 10);
gtk_box_pack_start (GTK_BOX (vb_all), c, FALSE, FALSE, 0);
}
{
- GtkWidget *c = sp_find_types_checkbox_indented (vb, "images", TRUE, tt, _("Search images"), _("Images"), NULL, 10);
+ GtkWidget *c = sp_find_types_checkbox_indented (vb, "images", TRUE, _("Search images"), _("Images"), NULL, 10);
gtk_box_pack_start (GTK_BOX (vb_all), c, FALSE, FALSE, 0);
}
{
- GtkWidget *c = sp_find_types_checkbox_indented (vb, "offsets", TRUE, tt, _("Search offset objects"), _("Offsets"), NULL, 10);
+ GtkWidget *c = sp_find_types_checkbox_indented (vb, "offsets", TRUE, _("Search offset objects"), _("Offsets"), NULL, 10);
gtk_box_pack_start (GTK_BOX (vb_all), c, FALSE, FALSE, 0);
}
@@ -677,27 +676,25 @@ sp_find_dialog_old (void)
wd.stop = 0;
g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd );
- gtk_signal_connect ( GTK_OBJECT (dlg), "event", GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg);
+ g_signal_connect ( G_OBJECT (dlg), "event", G_CALLBACK (sp_dialog_event_handler), dlg);
- gtk_signal_connect ( GTK_OBJECT (dlg), "destroy", G_CALLBACK (sp_find_dialog_destroy), NULL );
- gtk_signal_connect ( GTK_OBJECT (dlg), "delete_event", G_CALLBACK (sp_find_dialog_delete), dlg);
+ g_signal_connect ( G_OBJECT (dlg), "destroy", G_CALLBACK (sp_find_dialog_destroy), NULL );
+ g_signal_connect ( G_OBJECT (dlg), "delete_event", G_CALLBACK (sp_find_dialog_delete), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_find_dialog_delete), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide", G_CALLBACK (sp_dialog_hide), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide", G_CALLBACK (sp_dialog_unhide), dlg);
- GtkTooltips *tt = gtk_tooltips_new ();
-
gtk_container_set_border_width (GTK_CONTAINER (dlg), 4);
/* Toplevel vbox */
GtkWidget *vb = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (dlg), vb);
- sp_find_new_searchfield (dlg, vb, _("_Text:"), "text", tt, _("Find objects by their text content (exact or partial match)"));
- sp_find_new_searchfield (dlg, vb, _("_ID:"), "id", tt, _("Find objects by the value of the id attribute (exact or partial match)"));
- sp_find_new_searchfield (dlg, vb, _("_Style:"), "style", tt, _("Find objects by the value of the style attribute (exact or partial match)"));
- sp_find_new_searchfield (dlg, vb, _("_Attribute:"), "attr", tt ,_("Find objects by the name of an attribute (exact or partial match)"));
+ sp_find_new_searchfield (dlg, vb, _("_Text:"), "text", _("Find objects by their text content (exact or partial match)"));
+ sp_find_new_searchfield (dlg, vb, _("_ID:"), "id", _("Find objects by the value of the id attribute (exact or partial match)"));
+ sp_find_new_searchfield (dlg, vb, _("_Style:"), "style", _("Find objects by the value of the style attribute (exact or partial match)"));
+ sp_find_new_searchfield (dlg, vb, _("_Attribute:"), "attr", _("Find objects by the name of an attribute (exact or partial match)"));
gtk_widget_show_all (vb);
@@ -715,7 +712,7 @@ sp_find_dialog_old (void)
gtk_widget_show (b);
gtk_toggle_button_set_active ((GtkToggleButton *) b, FALSE);
gtk_object_set_data (GTK_OBJECT (dlg), "inselection", b);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Limit search to the current selection"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Limit search to the current selection"));
gtk_box_pack_start (GTK_BOX (vb), b, FALSE, FALSE, 0);
}
@@ -724,7 +721,7 @@ sp_find_dialog_old (void)
gtk_widget_show (b);
gtk_toggle_button_set_active ((GtkToggleButton *) b, FALSE);
gtk_object_set_data (GTK_OBJECT (dlg), "inlayer", b);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Limit search to the current layer"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Limit search to the current layer"));
gtk_box_pack_start (GTK_BOX (vb), b, FALSE, FALSE, 0);
}
@@ -733,7 +730,7 @@ sp_find_dialog_old (void)
gtk_widget_show (b);
gtk_toggle_button_set_active ((GtkToggleButton *) b, FALSE);
gtk_object_set_data (GTK_OBJECT (dlg), "includehidden", b);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Include hidden objects in search"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Include hidden objects in search"));
gtk_box_pack_start (GTK_BOX (vb), b, FALSE, FALSE, 0);
}
@@ -742,7 +739,7 @@ sp_find_dialog_old (void)
gtk_widget_show (b);
gtk_toggle_button_set_active ((GtkToggleButton *) b, FALSE);
gtk_object_set_data (GTK_OBJECT (dlg), "includelocked", b);
- gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Include locked objects in search"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Include locked objects in search"));
gtk_box_pack_start (GTK_BOX (vb), b, FALSE, FALSE, 0);
}
}
@@ -753,8 +750,8 @@ sp_find_dialog_old (void)
gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, 0);
// TRANSLATORS: "Clear" is a verb here
- sp_find_new_button (dlg, hb, _("_Clear"), tt, _("Clear values"), sp_find_dialog_reset);
- sp_find_new_button (dlg, hb, _("_Find"), tt, _("Select objects matching all of the fields you filled in"), sp_find_dialog_find);
+ sp_find_new_button (dlg, hb, _("_Clear"), _("Clear values"), sp_find_dialog_reset);
+ sp_find_new_button (dlg, hb, _("_Find"), _("Select objects matching all of the fields you filled in"), sp_find_dialog_find);
}
}
diff --git a/src/dialogs/find.h b/src/dialogs/find.h
index fe5861a73..219c36bf2 100644
--- a/src/dialogs/find.h
+++ b/src/dialogs/find.h
@@ -12,7 +12,7 @@
#ifndef SEEN_FIND_H
#define SEEN_FIND_H
-#include <gtk/gtkstyle.h>
+#include <gtk/gtk.h>
void sp_find_dialog();
diff --git a/src/dialogs/item-properties.cpp b/src/dialogs/item-properties.cpp
index 94b8b1e98..cd56c2da4 100644
--- a/src/dialogs/item-properties.cpp
+++ b/src/dialogs/item-properties.cpp
@@ -16,16 +16,7 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include <gtk/gtkvbox.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtktable.h>
-#include <gtk/gtkcheckbutton.h>
#include <gtk/gtk.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkframe.h>
-#include <gtk/gtkexpander.h>
-#include <gtk/gtktextview.h>
-#include <gtk/gtktooltips.h>
#include "../desktop-handles.h"
#include "dialog-events.h"
@@ -98,15 +89,13 @@ sp_item_widget_new (void)
GtkWidget *spw, *vb, *t, *cb, *l, *f, *tf, *pb, *int_expander, *int_label;
GtkTextBuffer *desc_buffer;
- GtkTooltips *tt = gtk_tooltips_new();
-
/* Create container widget */
spw = sp_widget_new_global (INKSCAPE);
- gtk_signal_connect ( GTK_OBJECT (spw), "modify_selection",
- GTK_SIGNAL_FUNC (sp_item_widget_modify_selection),
+ g_signal_connect ( G_OBJECT (spw), "modify_selection",
+ G_CALLBACK (sp_item_widget_modify_selection),
spw );
- gtk_signal_connect ( GTK_OBJECT (spw), "change_selection",
- GTK_SIGNAL_FUNC (sp_item_widget_change_selection),
+ g_signal_connect ( G_OBJECT (spw), "change_selection",
+ G_CALLBACK (sp_item_widget_change_selection),
spw );
vb = gtk_vbox_new (FALSE, 0);
@@ -129,7 +118,7 @@ sp_item_widget_new (void)
/* Create the entry box for the object id */
tf = gtk_entry_new ();
- gtk_tooltips_set_tip (tt, tf, _("The id= attribute (only letters, digits, and the characters .-_: allowed)"), NULL);
+ gtk_widget_set_tooltip_text (tf, _("The id= attribute (only letters, digits, and the characters .-_: allowed)"));
gtk_entry_set_max_length (GTK_ENTRY (tf), 64);
gtk_table_attach ( GTK_TABLE (t), tf, 1, 2, 0, 1,
(GtkAttachOptions)( GTK_EXPAND | GTK_FILL ),
@@ -147,8 +136,8 @@ sp_item_widget_new (void)
gtk_table_attach ( GTK_TABLE (t), pb, 2, 3, 0, 1,
(GtkAttachOptions)( GTK_SHRINK | GTK_FILL ),
(GtkAttachOptions)0, 0, 0 );
- gtk_signal_connect ( GTK_OBJECT (pb), "clicked",
- GTK_SIGNAL_FUNC (sp_item_widget_label_changed),
+ g_signal_connect ( G_OBJECT (pb), "clicked",
+ G_CALLBACK (sp_item_widget_label_changed),
spw );
/* Create the label for the object label */
@@ -161,7 +150,7 @@ sp_item_widget_new (void)
/* Create the entry box for the object label */
tf = gtk_entry_new ();
- gtk_tooltips_set_tip (tt, tf, _("A freeform label for the object"), NULL);
+ gtk_widget_set_tooltip_text (tf, _("A freeform label for the object"));
gtk_entry_set_max_length (GTK_ENTRY (tf), 256);
gtk_table_attach ( GTK_TABLE (t), tf, 1, 2, 1, 2,
(GtkAttachOptions)( GTK_EXPAND | GTK_FILL ),
@@ -223,7 +212,7 @@ sp_item_widget_new (void)
/* Hide */
cb = gtk_check_button_new_with_mnemonic (_("_Hide"));
- gtk_tooltips_set_tip (tt, cb, _("Check to make the object invisible"), NULL);
+ gtk_widget_set_tooltip_text (cb, _("Check to make the object invisible"));
gtk_table_attach ( GTK_TABLE (t), cb, 0, 1, 0, 1,
(GtkAttachOptions)( GTK_EXPAND | GTK_FILL ),
(GtkAttachOptions)0, 0, 0 );
@@ -233,12 +222,12 @@ sp_item_widget_new (void)
/* Lock */
// TRANSLATORS: "Lock" is a verb here
cb = gtk_check_button_new_with_mnemonic (_("L_ock"));
- gtk_tooltips_set_tip (tt, cb, _("Check to make the object insensitive (not selectable by mouse)"), NULL);
+ gtk_widget_set_tooltip_text (cb, _("Check to make the object insensitive (not selectable by mouse)"));
gtk_table_attach ( GTK_TABLE (t), cb, 1, 2, 0, 1,
(GtkAttachOptions)( GTK_EXPAND | GTK_FILL ),
(GtkAttachOptions)0, 0, 0 );
- gtk_signal_connect ( GTK_OBJECT (cb), "toggled",
- GTK_SIGNAL_FUNC (sp_item_widget_sensitivity_toggled),
+ g_signal_connect ( G_OBJECT (cb), "toggled",
+ G_CALLBACK (sp_item_widget_sensitivity_toggled),
spw );
gtk_object_set_data (GTK_OBJECT (spw), "sensitive", cb);
@@ -536,9 +525,9 @@ sp_item_dialog (void)
wd.stop = 0;
g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd);
- gtk_signal_connect ( GTK_OBJECT (dlg), "event", GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg);
- gtk_signal_connect ( GTK_OBJECT (dlg), "destroy", G_CALLBACK (sp_item_dialog_destroy), dlg);
- gtk_signal_connect ( GTK_OBJECT (dlg), "delete_event", G_CALLBACK (sp_item_dialog_delete), dlg);
+ g_signal_connect ( G_OBJECT (dlg), "event", G_CALLBACK (sp_dialog_event_handler), dlg);
+ g_signal_connect ( G_OBJECT (dlg), "destroy", G_CALLBACK (sp_item_dialog_destroy), dlg);
+ g_signal_connect ( G_OBJECT (dlg), "delete_event", G_CALLBACK (sp_item_dialog_delete), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_item_dialog_delete), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide", G_CALLBACK (sp_dialog_hide), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide", G_CALLBACK (sp_dialog_unhide), dlg);
diff --git a/src/dialogs/item-properties.h b/src/dialogs/item-properties.h
index bc04608bc..7d57ae5e8 100644
--- a/src/dialogs/item-properties.h
+++ b/src/dialogs/item-properties.h
@@ -12,7 +12,7 @@
#define SEEN_DIALOGS_ITEM_PROPERTIES_H
#include <glib.h>
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
#include "../forward.h"
GtkWidget *sp_item_widget_new (void);
diff --git a/src/dialogs/object-attributes.h b/src/dialogs/object-attributes.h
index ef84708c0..b490ebfa1 100644
--- a/src/dialogs/object-attributes.h
+++ b/src/dialogs/object-attributes.h
@@ -13,7 +13,7 @@
#define SEEN_DIALOGS_OBJECT_ATTRIBUTES_H
#include <glib.h>
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
#include "../forward.h"
void sp_object_attributes_dialog (SPObject *object, const gchar *tag);
diff --git a/src/dialogs/spellcheck.cpp b/src/dialogs/spellcheck.cpp
index f72612420..1d475a5c3 100644
--- a/src/dialogs/spellcheck.cpp
+++ b/src/dialogs/spellcheck.cpp
@@ -40,6 +40,7 @@
#include "display/canvas-bpath.h"
#include "display/curve.h"
#include "document-undo.h"
+#include "sp-root.h"
#ifdef HAVE_ASPELL
#include <aspell.h>
@@ -184,10 +185,10 @@ static gboolean sp_spellcheck_dialog_delete(GtkObject *, GdkEvent *, gpointer /*
}
void
-sp_spellcheck_new_button (GtkWidget *dlg, GtkWidget *hb, const gchar *label, GtkTooltips *tt, const gchar *tip, void (*function) (GObject *, GObject *), const gchar *cookie)
+sp_spellcheck_new_button (GtkWidget *dlg, GtkWidget *hb, const gchar *label, const gchar *tip, void (*function) (GObject *, GObject *), const gchar *cookie)
{
GtkWidget *b = gtk_button_new_with_mnemonic (label);
- gtk_tooltips_set_tip (tt, b, tip, NULL);
+ gtk_widget_set_tooltip_text (b, tip);
gtk_box_pack_start (GTK_BOX (hb), b, TRUE, TRUE, 0);
g_signal_connect ( G_OBJECT (b), "clicked", G_CALLBACK (function), dlg );
gtk_object_set_data (GTK_OBJECT (dlg), cookie, b);
@@ -916,17 +917,15 @@ sp_spellcheck_dialog (void)
g_signal_connect( G_OBJECT(INKSCAPE), "deactivate_desktop", G_CALLBACK( spellcheck_desktop_deactivated ), NULL);
- gtk_signal_connect ( GTK_OBJECT (dlg), "event", GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg);
+ g_signal_connect ( G_OBJECT (dlg), "event", G_CALLBACK (sp_dialog_event_handler), dlg);
- gtk_signal_connect ( GTK_OBJECT (dlg), "destroy", G_CALLBACK (sp_spellcheck_dialog_destroy), NULL );
- gtk_signal_connect ( GTK_OBJECT (dlg), "delete_event", G_CALLBACK (sp_spellcheck_dialog_delete), dlg);
+ g_signal_connect ( G_OBJECT (dlg), "destroy", G_CALLBACK (sp_spellcheck_dialog_destroy), NULL );
+ g_signal_connect ( G_OBJECT (dlg), "delete_event", G_CALLBACK (sp_spellcheck_dialog_delete), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_spellcheck_dialog_delete), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide", G_CALLBACK (sp_dialog_hide), dlg);
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide", G_CALLBACK (sp_dialog_unhide), dlg);
- GtkTooltips *tt = gtk_tooltips_new ();
-
gtk_container_set_border_width (GTK_CONTAINER (dlg), 4);
/* Toplevel vbox */
@@ -970,18 +969,18 @@ sp_spellcheck_dialog (void)
{
GtkWidget *hb = gtk_hbox_new (FALSE, 0);
- sp_spellcheck_new_button (dlg, hb, _("_Accept"), tt, _("Accept the chosen suggestion"),
+ sp_spellcheck_new_button (dlg, hb, _("_Accept"), _("Accept the chosen suggestion"),
sp_spellcheck_accept, "b_accept");
- sp_spellcheck_new_button (dlg, hb, _("_Ignore once"), tt, _("Ignore this word only once"),
+ sp_spellcheck_new_button (dlg, hb, _("_Ignore once"), _("Ignore this word only once"),
sp_spellcheck_ignore_once, "b_ignore_once");
- sp_spellcheck_new_button (dlg, hb, _("_Ignore"), tt, _("Ignore this word in this session"),
+ sp_spellcheck_new_button (dlg, hb, _("_Ignore"), _("Ignore this word in this session"),
sp_spellcheck_ignore, "b_ignore");
gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, 0);
}
{
GtkWidget *hb = gtk_hbox_new (FALSE, 0);
- sp_spellcheck_new_button (dlg, hb, _("A_dd to dictionary:"), tt, _("Add this word to the chosen dictionary"),
+ sp_spellcheck_new_button (dlg, hb, _("A_dd to dictionary:"), _("Add this word to the chosen dictionary"),
sp_spellcheck_add, "b_add");
GtkComboBox *cbox = GTK_COMBO_BOX (gtk_combo_box_new_text());
gtk_combo_box_append_text (cbox, _lang);
@@ -1005,9 +1004,9 @@ sp_spellcheck_dialog (void)
{
GtkWidget *hb = gtk_hbox_new (FALSE, 0);
- sp_spellcheck_new_button (dlg, hb, _("_Stop"), tt, _("Stop the check"),
+ sp_spellcheck_new_button (dlg, hb, _("_Stop"), _("Stop the check"),
sp_spellcheck_stop, "b_stop");
- sp_spellcheck_new_button (dlg, hb, _("_Start"), tt, _("Start the check"),
+ sp_spellcheck_new_button (dlg, hb, _("_Start"), _("Start the check"),
sp_spellcheck_start, "b_start");
gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, 0);
}
diff --git a/src/dialogs/spellcheck.h b/src/dialogs/spellcheck.h
index b941788ca..fe80be2cb 100644
--- a/src/dialogs/spellcheck.h
+++ b/src/dialogs/spellcheck.h
@@ -12,7 +12,7 @@
#ifndef SEEN_SPELLCHECK_H
#define SEEN_SPELLCHECK_H
-#include <gtk/gtkstyle.h>
+#include <gtk/gtk.h>
void sp_spellcheck_dialog();
diff --git a/src/dialogs/text-edit.cpp b/src/dialogs/text-edit.cpp
index 7cec16cd7..81bd0f5d2 100644
--- a/src/dialogs/text-edit.cpp
+++ b/src/dialogs/text-edit.cpp
@@ -177,10 +177,10 @@ sp_text_edit_dialog (void)
wd.stop = 0;
g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd );
- gtk_signal_connect ( GTK_OBJECT (dlg), "event", GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg );
+ g_signal_connect ( G_OBJECT (dlg), "event", G_CALLBACK (sp_dialog_event_handler), dlg );
- gtk_signal_connect ( GTK_OBJECT (dlg), "destroy", G_CALLBACK (sp_text_edit_dialog_destroy), dlg );
- gtk_signal_connect ( GTK_OBJECT (dlg), "delete_event", G_CALLBACK (sp_text_edit_dialog_delete), dlg );
+ g_signal_connect ( G_OBJECT (dlg), "destroy", G_CALLBACK (sp_text_edit_dialog_destroy), dlg );
+ g_signal_connect ( G_OBJECT (dlg), "delete_event", G_CALLBACK (sp_text_edit_dialog_delete), dlg );
g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_text_edit_dialog_delete), dlg );
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide", G_CALLBACK (sp_dialog_hide), dlg );
@@ -188,8 +188,6 @@ sp_text_edit_dialog (void)
gtk_window_set_policy (GTK_WINDOW (dlg), TRUE, TRUE, FALSE);
- GtkTooltips *tt = gtk_tooltips_new();
-
// box containing the notebook and the bottom buttons
GtkWidget *mainvb = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (dlg), mainvb);
@@ -203,7 +201,7 @@ sp_text_edit_dialog (void)
// Font tab
{
- GtkWidget *l = gtk_label_new (_("Font"));
+ GtkWidget *l = gtk_label_new_with_mnemonic (_("_Font"));
GtkWidget *vb = gtk_vbox_new (FALSE, VB_MARGIN);
gtk_container_set_border_width (GTK_CONTAINER (vb), VB_MARGIN);
gtk_notebook_append_page (GTK_NOTEBOOK (nb), vb, l);
@@ -240,7 +238,7 @@ sp_text_edit_dialog (void)
// TODO - replace with Inkscape-specific call
GtkWidget *px = gtk_image_new_from_stock ( GTK_STOCK_JUSTIFY_LEFT, GTK_ICON_SIZE_LARGE_TOOLBAR );
GtkWidget *b = group = gtk_radio_button_new (NULL);
- gtk_tooltips_set_tip (tt, b, _("Align lines left"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Align lines left"));
gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE);
g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg);
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE );
@@ -255,7 +253,7 @@ sp_text_edit_dialog (void)
GtkWidget *px = gtk_image_new_from_stock ( GTK_STOCK_JUSTIFY_CENTER, GTK_ICON_SIZE_LARGE_TOOLBAR );
GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group)));
/* TRANSLATORS: `Center' here is a verb. */
- gtk_tooltips_set_tip (tt, b, _("Center lines"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Center lines"));
gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE);
g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg );
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE);
@@ -269,7 +267,7 @@ sp_text_edit_dialog (void)
// TODO - replace with Inkscape-specific call
GtkWidget *px = gtk_image_new_from_stock ( GTK_STOCK_JUSTIFY_RIGHT, GTK_ICON_SIZE_LARGE_TOOLBAR );
GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group)));
- gtk_tooltips_set_tip (tt, b, _("Align lines right"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Align lines right"));
gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE);
g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg );
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE);
@@ -283,7 +281,7 @@ sp_text_edit_dialog (void)
// TODO - replace with Inkscape-specific call
GtkWidget *px = gtk_image_new_from_stock ( GTK_STOCK_JUSTIFY_FILL, GTK_ICON_SIZE_LARGE_TOOLBAR );
GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group)));
- gtk_tooltips_set_tip (tt, b, _("Justify lines"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Justify lines"));
gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE);
g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg );
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE);
@@ -305,7 +303,7 @@ sp_text_edit_dialog (void)
GtkWidget *px = sp_icon_new( Inkscape::ICON_SIZE_LARGE_TOOLBAR,
INKSCAPE_ICON_FORMAT_TEXT_DIRECTION_HORIZONTAL );
GtkWidget *b = group = gtk_radio_button_new (NULL);
- gtk_tooltips_set_tip (tt, b, _("Horizontal text"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Horizontal text"));
gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE);
g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg );
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE);
@@ -319,7 +317,7 @@ sp_text_edit_dialog (void)
GtkWidget *px = sp_icon_new( Inkscape::ICON_SIZE_LARGE_TOOLBAR,
INKSCAPE_ICON_FORMAT_TEXT_DIRECTION_VERTICAL );
GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group)));
- gtk_tooltips_set_tip (tt, b, _("Vertical text"), NULL);
+ gtk_widget_set_tooltip_text (b, _("Vertical text"));
gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE);
g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg );
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE);
@@ -330,7 +328,7 @@ sp_text_edit_dialog (void)
gtk_box_pack_start (GTK_BOX (l_vb), row, FALSE, FALSE, 0);
}
-
+
{
GtkWidget *row = gtk_hbox_new (FALSE, VB_MARGIN);
@@ -343,7 +341,6 @@ sp_text_edit_dialog (void)
{
GtkWidget *row = gtk_hbox_new (FALSE, VB_MARGIN);
-
GtkWidget *c = gtk_combo_new ();
gtk_combo_set_value_in_list ((GtkCombo *) c, FALSE, FALSE);
gtk_combo_set_use_arrows ((GtkCombo *) c, TRUE);
@@ -359,7 +356,7 @@ sp_text_edit_dialog (void)
gtk_combo_set_popdown_strings ((GtkCombo *) c, sl);
g_list_free (sl);
}
-
+
g_signal_connect ( (GObject *) ((GtkCombo *) c)->entry,
"changed",
(GCallback) sp_text_edit_dialog_line_spacing_changed,
@@ -383,7 +380,7 @@ sp_text_edit_dialog (void)
// Text tab
{
- GtkWidget *l = gtk_label_new (_("Text"));
+ GtkWidget *l = gtk_label_new_with_mnemonic (_("_Text"));
GtkWidget *vb = gtk_vbox_new (FALSE, VB_MARGIN);
gtk_container_set_border_width (GTK_CONTAINER (vb), VB_MARGIN);
gtk_notebook_append_page (GTK_NOTEBOOK (nb), vb, l);
@@ -430,7 +427,7 @@ sp_text_edit_dialog (void)
gtk_box_pack_start (GTK_BOX (mainvb), hb, FALSE, FALSE, 0);
{
- GtkWidget *b = gtk_button_new_with_label (_("Set as default"));
+ GtkWidget *b = gtk_button_new_with_mnemonic (_("Set as _default"));
g_signal_connect ( G_OBJECT (b), "clicked",
G_CALLBACK (sp_text_edit_dialog_set_default),
dlg );
@@ -447,7 +444,8 @@ sp_text_edit_dialog (void)
{
GtkWidget *b = gtk_button_new_from_stock (GTK_STOCK_APPLY);
- GTK_WIDGET_SET_FLAGS (b, GTK_CAN_DEFAULT | GTK_HAS_DEFAULT);
+ gtk_widget_set_can_default (b, TRUE);
+ gtk_widget_grab_default (b);
g_signal_connect ( G_OBJECT (b), "clicked",
G_CALLBACK (sp_text_edit_dialog_apply), dlg );
gtk_box_pack_end ( GTK_BOX (hb), b, FALSE, FALSE, 0 );
diff --git a/src/dialogs/xml-tree.cpp b/src/dialogs/xml-tree.cpp
index ddb419dcd..c50c07e80 100644
--- a/src/dialogs/xml-tree.cpp
+++ b/src/dialogs/xml-tree.cpp
@@ -66,7 +66,6 @@ static Inkscape::MessageStack *_message_stack = NULL;
static Inkscape::MessageContext *_message_context = NULL;
static sigc::connection _message_changed_connection;
-static GtkTooltips *tooltips = NULL;
static GtkEditable *attr_name = NULL;
static GtkTextView *attr_value = NULL;
static SPXMLViewTree *tree = NULL;
@@ -194,9 +193,6 @@ void sp_xml_tree_dialog()
GtkWidget *text_container, *attr_container, *attr_subpaned_container, *box2;
GtkWidget *set_attr;
- tooltips = gtk_tooltips_new();
- gtk_tooltips_enable(tooltips);
-
dlg = sp_window_new("", TRUE);
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (x == -1000 || y == -1000) {
@@ -225,10 +221,10 @@ void sp_xml_tree_dialog()
wd.stop = 0;
g_signal_connect ( G_OBJECT(INKSCAPE), "activate_desktop", G_CALLBACK(sp_transientize_callback), &wd );
- gtk_signal_connect( GTK_OBJECT(dlg), "event", GTK_SIGNAL_FUNC(sp_dialog_event_handler), dlg );
+ g_signal_connect( G_OBJECT(dlg), "event", G_CALLBACK(sp_dialog_event_handler), dlg );
- gtk_signal_connect( GTK_OBJECT(dlg), "destroy", G_CALLBACK(on_destroy), dlg);
- gtk_signal_connect( GTK_OBJECT(dlg), "delete_event", G_CALLBACK(on_delete), dlg);
+ g_signal_connect( G_OBJECT(dlg), "destroy", G_CALLBACK(on_destroy), dlg);
+ g_signal_connect( G_OBJECT(dlg), "delete_event", G_CALLBACK(on_delete), dlg);
g_signal_connect ( G_OBJECT(INKSCAPE), "shut_down", G_CALLBACK(on_delete), dlg);
g_signal_connect ( G_OBJECT(INKSCAPE), "dialogs_hide", G_CALLBACK(sp_dialog_hide), dlg);
@@ -267,8 +263,8 @@ void sp_xml_tree_dialog()
gtk_paned_pack1(GTK_PANED(paned), box, FALSE, FALSE);
tree = SP_XMLVIEW_TREE(sp_xmlview_tree_new(NULL, NULL, NULL));
- gtk_tooltips_set_tip( tooltips, GTK_WIDGET(tree),
- _("Drag to reorder nodes"), NULL );
+ gtk_widget_set_tooltip_text( GTK_WIDGET(tree),
+ _("Drag to reorder nodes") );
g_signal_connect( G_OBJECT(tree), "tree_select_row",
G_CALLBACK(on_tree_select_row), NULL );
@@ -495,19 +491,19 @@ void sp_xml_tree_dialog()
FALSE, TRUE, 0);
attr_name = GTK_EDITABLE(gtk_entry_new());
- gtk_tooltips_set_tip( tooltips, GTK_WIDGET(attr_name),
+ gtk_widget_set_tooltip_text( GTK_WIDGET(attr_name),
// TRANSLATORS: "Attribute" is a noun here
- _("Attribute name"), NULL );
+ _("Attribute name") );
- gtk_signal_connect( GTK_OBJECT(attributes), "select_row",
+ g_signal_connect( G_OBJECT(attributes), "select_row",
(GCallback) on_attr_select_row_set_name_content,
attr_name);
- gtk_signal_connect( GTK_OBJECT(attributes), "unselect_row",
+ g_signal_connect( G_OBJECT(attributes), "unselect_row",
(GCallback) on_attr_unselect_row_clear_text,
attr_name);
- gtk_signal_connect( GTK_OBJECT(tree), "tree_unselect_row",
+ g_signal_connect( G_OBJECT(tree), "tree_unselect_row",
(GCallback) on_tree_unselect_row_clear_text,
attr_name);
@@ -515,16 +511,16 @@ void sp_xml_tree_dialog()
TRUE, TRUE, 0);
set_attr = gtk_button_new();
- gtk_tooltips_set_tip( tooltips, GTK_WIDGET(set_attr),
+ gtk_widget_set_tooltip_text( GTK_WIDGET(set_attr),
// TRANSLATORS: "Set" is a verb here
- _("Set attribute"), NULL );
+ _("Set attribute") );
// TRANSLATORS: "Set" is a verb here
GtkWidget *set_label = gtk_label_new(_("Set"));
gtk_container_add(GTK_CONTAINER(set_attr), set_label);
- gtk_signal_connect( GTK_OBJECT(set_attr), "clicked",
+ g_signal_connect( G_OBJECT(set_attr), "clicked",
(GCallback) cmd_set_attr, NULL);
- gtk_signal_connect( GTK_OBJECT(attr_name), "changed",
+ g_signal_connect( G_OBJECT(attr_name), "changed",
(GCallback) on_editable_changed_enable_if_valid_xml_name,
set_attr );
gtk_widget_set_sensitive(GTK_WIDGET(set_attr), FALSE);
@@ -540,16 +536,16 @@ void sp_xml_tree_dialog()
attr_value =(GtkTextView *) gtk_text_view_new();
gtk_text_view_set_wrap_mode((GtkTextView *) attr_value, GTK_WRAP_CHAR);
- gtk_tooltips_set_tip( tooltips, GTK_WIDGET(attr_value),
+ gtk_widget_set_tooltip_text( GTK_WIDGET(attr_value),
// TRANSLATORS: "Attribute" is a noun here
- _("Attribute value"), NULL );
- gtk_signal_connect( GTK_OBJECT(attributes), "select_row",
+ _("Attribute value") );
+ g_signal_connect( G_OBJECT(attributes), "select_row",
(GCallback) on_attr_select_row_set_value_content,
attr_value );
- gtk_signal_connect( GTK_OBJECT(attributes), "unselect_row",
+ g_signal_connect( G_OBJECT(attributes), "unselect_row",
(GCallback) on_attr_unselect_row_clear_text,
attr_value );
- gtk_signal_connect( GTK_OBJECT(tree), "tree_unselect_row",
+ g_signal_connect( G_OBJECT(tree), "tree_unselect_row",
(GCallback) on_tree_unselect_row_clear_text,
attr_value );
gtk_text_view_set_editable(attr_value, TRUE);
@@ -895,8 +891,6 @@ void after_tree_move(GtkCTree */*tree*/,
static void on_destroy(GtkObject */*object*/, gpointer /*data*/)
{
set_tree_desktop(NULL);
- gtk_object_destroy(GTK_OBJECT(tooltips));
- tooltips = NULL;
sp_signal_disconnect_by_data(INKSCAPE, dlg);
wd.win = dlg = NULL;
wd.stop = 0;
@@ -1327,8 +1321,8 @@ void cmd_new_element_node(GtkObject */*object*/, gpointer /*data*/)
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(dlg));
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
- gtk_signal_connect(GTK_OBJECT(window), "destroy", gtk_main_quit, NULL);
- gtk_signal_connect(GTK_OBJECT(window), "key-press-event", G_CALLBACK(quit_on_esc), window);
+ g_signal_connect(G_OBJECT(window), "destroy", gtk_main_quit, NULL);
+ g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(quit_on_esc), window);
vbox = gtk_vbox_new(FALSE, 4);
gtk_container_add(GTK_CONTAINER(window), vbox);
@@ -1345,25 +1339,24 @@ void cmd_new_element_node(GtkObject */*object*/, gpointer /*data*/)
gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, TRUE, 0);
cancel = gtk_button_new_with_label(_("Cancel"));
- GTK_WIDGET_SET_FLAGS( GTK_WIDGET(cancel),
- GTK_CAN_DEFAULT );
- gtk_signal_connect_object( GTK_OBJECT(cancel), "clicked",
+ gtk_widget_set_can_default( GTK_WIDGET(cancel), TRUE );
+ g_signal_connect_swapped( G_OBJECT(cancel), "clicked",
G_CALLBACK(gtk_widget_destroy),
- GTK_OBJECT(window) );
+ G_OBJECT(window) );
gtk_container_add(GTK_CONTAINER(bbox), cancel);
create = gtk_button_new_with_label(_("Create"));
gtk_widget_set_sensitive(GTK_WIDGET(create), FALSE);
- gtk_signal_connect( GTK_OBJECT(entry), "changed",
+ g_signal_connect( G_OBJECT(entry), "changed",
G_CALLBACK(on_editable_changed_enable_if_valid_xml_name),
create );
- gtk_signal_connect( GTK_OBJECT(create), "clicked",
+ g_signal_connect( G_OBJECT(create), "clicked",
G_CALLBACK(on_clicked_get_editable_text), &name );
- gtk_signal_connect_object( GTK_OBJECT(create), "clicked",
+ g_signal_connect_swapped( G_OBJECT(create), "clicked",
G_CALLBACK(gtk_widget_destroy),
- GTK_OBJECT(window) );
- GTK_WIDGET_SET_FLAGS( GTK_WIDGET(create),
- GTK_CAN_DEFAULT | GTK_RECEIVES_DEFAULT );
+ G_OBJECT(window) );
+ gtk_widget_set_can_default( GTK_WIDGET(create), TRUE );
+ gtk_widget_set_receives_default( GTK_WIDGET(create), TRUE );
gtk_container_add(GTK_CONTAINER(bbox), create);
gtk_widget_show_all(GTK_WIDGET(window));
diff --git a/src/dir-util-test.h b/src/dir-util-test.h
index 8f8475873..cc3bc20b8 100644
--- a/src/dir-util-test.h
+++ b/src/dir-util-test.h
@@ -17,17 +17,17 @@ public:
{"/foo/bar/baz", "/foo/", "bar/baz"},
{"/foo/bar/baz", "/", "foo/bar/baz"},
{"/foo/bar/baz", "/foo/qux", "/foo/bar/baz"},
- {"/foo", NULL, "/foo"}
};
for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ )
{
- char const* result = sp_relative_path_from_path( cases[i][0], cases[i][1] );
- TS_ASSERT( result );
- TS_ASSERT( cases[i][2] );
- if ( result && cases[i][2] )
- {
- TS_ASSERT_EQUALS( std::string(result), std::string(cases[i][2]) );
+ if ( cases[i][0] && cases[i][1] ) { // std::string can't use null.
+ std::string result = sp_relative_path_from_path( cases[i][0], cases[i][1] );
+ TS_ASSERT( !result.empty() );
+ if ( !result.empty() )
+ {
+ TS_ASSERT_EQUALS( result, std::string(cases[i][2]) );
+ }
}
}
}
diff --git a/src/dir-util.cpp b/src/dir-util.cpp
index 67db03628..acec39953 100644
--- a/src/dir-util.cpp
+++ b/src/dir-util.cpp
@@ -1,9 +1,8 @@
-/** @file
- * @brief Utility functions for filenames
+/**
+ * @file
+ * Utility functions for filenames.
*/
-#define DIR_UTIL_C
-
#include <errno.h>
#include <string>
#include <cstring>
@@ -13,49 +12,37 @@
#include <glib/gconvert.h>
#include <glib/gstrfuncs.h>
-/** Returns a form of \a path relative to \a base if that is easy to construct (e.g. if \a path
- appears to be in the directory specified by \a base), otherwise returns \a path.
-
- N.B. The return value is a pointer into the \a path string.
-
- \a base is expected to be either NULL or the absolute path of a directory.
-
- \a path is expected to be an absolute path.
-
- \see inkscape_abs2rel for a more sophisticated version.
- \see prepend_current_dir_if_relative.
-*/
-char const *
-sp_relative_path_from_path(char const *const path, char const *const base)
+std::string sp_relative_path_from_path( std::string const &path, std::string const &base)
{
- if (base == NULL || path == NULL) {
- return path;
- }
+ std::string result;
+ if ( !base.empty() && !path.empty() ) {
+ size_t base_len = base.length();
+ while (base_len != 0
+ && (base[base_len - 1] == G_DIR_SEPARATOR))
+ {
+ --base_len;
+ }
- size_t base_len = strlen(base);
- while (base_len != 0
- && (base[base_len - 1] == G_DIR_SEPARATOR))
- {
- --base_len;
- }
+ if ( (path.substr(0, base_len) == base.substr(0, base_len))
+ && (path[base_len] == G_DIR_SEPARATOR))
+ {
+ size_t retPos = base_len + 1;
+ while ( (retPos < path.length()) && (path[retPos] == G_DIR_SEPARATOR) ) {
+ retPos++;
+ }
+ if ( (retPos + 1) < path.length() ) {
+ result = path.substr(retPos);
+ }
+ }
- if ((memcmp(path, base, base_len) == 0)
- && (path[base_len] == G_DIR_SEPARATOR))
- {
- char const *ret = path + base_len + 1;
- while (*ret == G_DIR_SEPARATOR) {
- ++ret;
- }
- if (*ret != '\0') {
- return ret;
- }
- }
-
- return path;
+ }
+ if ( result.empty() ) {
+ result = path;
+ }
+ return result;
}
-char const *
-sp_extension_from_path(char const *const path)
+char const *sp_extension_from_path(char const *const path)
{
if (path == NULL) {
return NULL;
@@ -77,25 +64,7 @@ static char const dots[] = {'.', '.', G_DIR_SEPARATOR, '\0'};
static char const *const parent = dots;
static char const *const current = dots + 1;
-/**
- * \brief Convert a relative path name into absolute. If path is already absolute, does nothing except copying path to result.
- *
- * \param path relative path
- * \param base base directory (must be absolute path)
- * \param result result buffer
- * \param size size of result buffer
- * \return != NULL: absolute path
- * == NULL: error
-
-\comment
- based on functions by Shigio Yamaguchi.
- FIXME:TODO: force it to also do path normalization of the entire resulting path,
- i.e. get rid of any .. and . in any place, even if 'path' is already absolute
- (now it returns it unchanged in this case)
-
- */
-char *
-inkscape_rel2abs (const char *path, const char *base, char *result, const size_t size)
+char *inkscape_rel2abs(const char *path, const char *base, char *result, const size_t size)
{
const char *pp, *bp;
/* endp points the last position which is safe in the result buffer. */
@@ -181,79 +150,77 @@ erange:
return (NULL);
}
-char *
-inkscape_abs2rel (const char *path, const char *base, char *result, const size_t size)
+char *inkscape_abs2rel(const char *path, const char *base, char *result, const size_t size)
{
- const char *pp, *bp, *branch;
- /* endp points the last position which is safe in the result buffer. */
- const char *endp = result + size - 1;
- char *rp;
+ const char *pp, *bp, *branch;
+ // endp points the last position which is safe in the result buffer.
+ const char *endp = result + size - 1;
+ char *rp;
- if (*path != G_DIR_SEPARATOR)
+ if (*path != G_DIR_SEPARATOR)
{
- if (strlen (path) >= size)
- goto erange;
- strcpy (result, path);
- goto finish;
+ if (strlen (path) >= size)
+ goto erange;
+ strcpy (result, path);
+ goto finish;
}
- else if (*base != G_DIR_SEPARATOR || !size)
+ else if (*base != G_DIR_SEPARATOR || !size)
{
- errno = EINVAL;
- return (NULL);
+ errno = EINVAL;
+ return (NULL);
}
- else if (size == 1)
- goto erange;
- /* seek to branched point. */
- branch = path;
- for (pp = path, bp = base; *pp && *bp && *pp == *bp; pp++, bp++)
- if (*pp == G_DIR_SEPARATOR)
- branch = pp;
- if (((*pp == 0) || ((*pp == G_DIR_SEPARATOR) && (*(pp + 1) == 0))) &&
- ((*bp == 0) || ((*bp == G_DIR_SEPARATOR) && (*(bp + 1) == 0))))
+ else if (size == 1)
+ goto erange;
+ /* seek to branched point. */
+ branch = path;
+ for (pp = path, bp = base; *pp && *bp && *pp == *bp; pp++, bp++)
+ if (*pp == G_DIR_SEPARATOR)
+ branch = pp;
+ if (((*pp == 0) || ((*pp == G_DIR_SEPARATOR) && (*(pp + 1) == 0))) &&
+ ((*bp == 0) || ((*bp == G_DIR_SEPARATOR) && (*(bp + 1) == 0))))
{
- rp = result;
- *rp++ = '.';
- if (*pp == G_DIR_SEPARATOR || *(pp - 1) == G_DIR_SEPARATOR)
- *rp++ = G_DIR_SEPARATOR;
- if (rp > endp)
- goto erange;
- *rp = 0;
- goto finish;
+ rp = result;
+ *rp++ = '.';
+ if (*pp == G_DIR_SEPARATOR || *(pp - 1) == G_DIR_SEPARATOR)
+ *rp++ = G_DIR_SEPARATOR;
+ if (rp > endp)
+ goto erange;
+ *rp = 0;
+ goto finish;
}
- if (((*pp == 0) && (*bp == G_DIR_SEPARATOR)) || ((*pp == G_DIR_SEPARATOR) && (*bp == 0)))
- branch = pp;
- /* up to root. */
- rp = result;
- for (bp = base + (branch - path); *bp; bp++)
- if (*bp == G_DIR_SEPARATOR && *(bp + 1) != 0)
- {
- if (rp + 3 > endp)
- goto erange;
- *rp++ = '.';
- *rp++ = '.';
- *rp++ = G_DIR_SEPARATOR;
- }
- if (rp > endp)
- goto erange;
- *rp = 0;
- /* down to leaf. */
- if (*branch)
+ if (((*pp == 0) && (*bp == G_DIR_SEPARATOR)) || ((*pp == G_DIR_SEPARATOR) && (*bp == 0)))
+ branch = pp;
+ /* up to root. */
+ rp = result;
+ for (bp = base + (branch - path); *bp; bp++)
+ if (*bp == G_DIR_SEPARATOR && *(bp + 1) != 0)
+ {
+ if (rp + 3 > endp)
+ goto erange;
+ *rp++ = '.';
+ *rp++ = '.';
+ *rp++ = G_DIR_SEPARATOR;
+ }
+ if (rp > endp)
+ goto erange;
+ *rp = 0;
+ /* down to leaf. */
+ if (*branch)
{
- if (rp + strlen (branch + 1) > endp)
- goto erange;
- strcpy (rp, branch + 1);
+ if (rp + strlen (branch + 1) > endp)
+ goto erange;
+ strcpy (rp, branch + 1);
}
- else
- *--rp = 0;
+ else
+ *--rp = 0;
finish:
- return result;
+ return result;
erange:
- errno = ERANGE;
- return (NULL);
+ errno = ERANGE;
+ return (NULL);
}
-gchar *
-prepend_current_dir_if_relative(gchar const *uri)
+gchar *prepend_current_dir_if_relative(gchar const *uri)
{
if (!uri) {
return NULL;
@@ -278,4 +245,13 @@ prepend_current_dir_if_relative(gchar const *uri)
return ret;
}
-
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vi: set autoindent shiftwidth=4 tabstop=8 filetype=cpp expandtab softtabstop=4 encoding=utf-8 textwidth=99 :
diff --git a/src/dir-util.h b/src/dir-util.h
index 7d04b3007..f7700cfa3 100644
--- a/src/dir-util.h
+++ b/src/dir-util.h
@@ -12,14 +12,47 @@
#include <stdlib.h>
#include <glib/gtypes.h>
-char const *sp_relative_path_from_path(char const *path, char const *base);
+/**
+ * Returns a form of \a path relative to \a base if that is easy to construct (eg if \a path
+ * appears to be in the directory specified by \a base), otherwise returns \a path.
+ *
+ * @param path is expected to be an absolute path.
+ * @param base is expected to be either empty or the absolute path of a directory.
+ *
+ * @return a relative version of the path, if reasonable.
+ *
+ * @see inkscape_abs2rel for a more sophisticated version.
+ * @see prepend_current_dir_if_relative.
+*/
+std::string sp_relative_path_from_path(std::string const &path, std::string const &base);
+
char const *sp_extension_from_path(char const *path);
+
+/**
+ * Convert a relative path name into absolute. If path is already absolute, does nothing except copying path to result.
+ *
+ * @param path relative path.
+ * @param base base directory (must be absolute path).
+ * @param result result buffer.
+ * @param size size of result buffer.
+ *
+ * @return != NULL: absolute path
+ * == NULL: error
+ *
+ * based on functions by Shigio Yamaguchi.
+ * FIXME:TODO: force it to also do path normalization of the entire resulting path,
+ * i.e. get rid of any .. and . in any place, even if 'path' is already absolute
+ * (now it returns it unchanged in this case)
+ *
+ */
char *inkscape_rel2abs(char const *path, char const *base, char *result, size_t const size);
+
char *inkscape_abs2rel(char const *path, char const *base, char *result, size_t const size);
+
gchar *prepend_current_dir_if_relative(gchar const *filename);
-#endif /* !SEEN_DIR_UTIL_H */
+#endif // !SEEN_DIR_UTIL_H
/*
Local Variables:
diff --git a/src/display/CMakeLists.txt b/src/display/CMakeLists.txt
index 9fa2304be..30643550f 100644
--- a/src/display/CMakeLists.txt
+++ b/src/display/CMakeLists.txt
@@ -1,59 +1,130 @@
-SET(display_SRC
-canvas-arena.cpp
-canvas-axonomgrid.cpp
-canvas-bpath.cpp
-canvas-grid.cpp
-canvas-temporary-item.cpp
-canvas-temporary-item-list.cpp
-curve.cpp
-gnome-canvas-acetate.cpp
-guideline.cpp
-inkscape-cairo.cpp
-nr-3dutils.cpp
-nr-arena.cpp
-nr-arena-glyphs.cpp
-nr-arena-group.cpp
-nr-arena-image.cpp
-nr-arena-item.cpp
-nr-arena-shape.cpp
-nr-filter-blend.cpp
-nr-filter-colormatrix.cpp
-nr-filter-component-transfer.cpp
-nr-filter-composite.cpp
-nr-filter-convolve-matrix.cpp
-nr-filter.cpp
-nr-filter-diffuselighting.cpp
-nr-filter-displacement-map.cpp
-nr-filter-flood.cpp
-nr-filter-gaussian.cpp
-nr-filter-getalpha.cpp
-nr-filter-image.cpp
-nr-filter-merge.cpp
-nr-filter-morphology.cpp
-nr-filter-offset.cpp
-nr-filter-primitive.cpp
-nr-filter-skeleton.cpp
-nr-filter-slot.cpp
-nr-filter-specularlighting.cpp
-nr-filter-tile.cpp
-nr-filter-turbulence.cpp
-nr-filter-units.cpp
-nr-filter-utils.cpp
-nr-light.cpp
-nr-plain-stuff.cpp
-nr-plain-stuff-gdk.cpp
-nr-svgfonts.h
-pixblock-scaler.cpp
-pixblock-transform.cpp
-snap-indicator.cpp
-sodipodi-ctrl.cpp
-sodipodi-ctrlrect.cpp
-sp-canvas.cpp
-sp-canvas-util.cpp
-sp-ctrlline.cpp
-sp-ctrlquadr.cpp
-#testnr.cpp
+
+set(display_SRC
+ canvas-arena.cpp
+ canvas-axonomgrid.cpp
+ canvas-bpath.cpp
+ canvas-grid.cpp
+ canvas-temporary-item-list.cpp
+ canvas-temporary-item.cpp
+ canvas-text.cpp
+ curve.cpp
+ gnome-canvas-acetate.cpp
+ grayscale.cpp
+ guideline.cpp
+ inkscape-cairo.cpp
+ nr-3dutils.cpp
+ nr-arena-glyphs.cpp
+ nr-arena-group.cpp
+ nr-arena-image.cpp
+ nr-arena-item.cpp
+ nr-arena-shape.cpp
+ nr-arena.cpp
+ nr-filter-blend.cpp
+ nr-filter-colormatrix.cpp
+ nr-filter-component-transfer.cpp
+ nr-filter-composite.cpp
+ nr-filter-convolve-matrix.cpp
+ nr-filter-diffuselighting.cpp
+ nr-filter-displacement-map.cpp
+ nr-filter-flood.cpp
+ nr-filter-gaussian.cpp
+ nr-filter-getalpha.cpp
+ nr-filter-image.cpp
+ nr-filter-merge.cpp
+ nr-filter-morphology.cpp
+ nr-filter-offset.cpp
+ nr-filter-primitive.cpp
+ # nr-filter-skeleton.cpp
+ nr-filter-slot.cpp
+ nr-filter-specularlighting.cpp
+ nr-filter-tile.cpp
+ nr-filter-turbulence.cpp
+ nr-filter-units.cpp
+ nr-filter-utils.cpp
+ nr-filter.cpp
+ nr-light.cpp
+ nr-plain-stuff-gdk.cpp
+ nr-plain-stuff.cpp
+ nr-svgfonts.cpp
+ nr-svgfonts.h
+ pixblock-scaler.cpp
+ pixblock-transform.cpp
+ snap-indicator.cpp
+ sodipodi-ctrl.cpp
+ sodipodi-ctrlrect.cpp
+ sp-canvas-util.cpp
+ sp-canvas.cpp
+ sp-ctrlline.cpp
+ sp-ctrlpoint.cpp
+ sp-ctrlquadr.cpp
+
+
+ # -------
+ # Headers
+ canvas-arena.h
+ canvas-axonomgrid.h
+ canvas-bpath.h
+ canvas-grid.h
+ canvas-temporary-item-list.h
+ canvas-temporary-item.h
+ canvas-text.h
+ curve-test.h
+ curve.h
+ gnome-canvas-acetate.h
+ grayscale.h
+ guideline.h
+ inkscape-cairo.h
+ nr-3dutils.h
+ nr-arena-forward.h
+ nr-arena-glyphs.h
+ nr-arena-group.h
+ nr-arena-image.h
+ nr-arena-item.h
+ nr-arena-shape.h
+ nr-arena.h
+ nr-filter-blend.h
+ nr-filter-colormatrix.h
+ nr-filter-component-transfer.h
+ nr-filter-composite.h
+ nr-filter-convolve-matrix.h
+ nr-filter-diffuselighting.h
+ nr-filter-displacement-map.h
+ nr-filter-flood.h
+ nr-filter-gaussian.h
+ nr-filter-getalpha.h
+ nr-filter-image.h
+ nr-filter-merge.h
+ nr-filter-morphology.h
+ nr-filter-offset.h
+ nr-filter-pixops.h
+ nr-filter-primitive.h
+ nr-filter-skeleton.h
+ nr-filter-slot.h
+ nr-filter-specularlighting.h
+ nr-filter-tile.h
+ nr-filter-turbulence.h
+ nr-filter-types.h
+ nr-filter-units.h
+ nr-filter-utils.h
+ nr-filter.h
+ nr-light-types.h
+ nr-light.h
+ nr-plain-stuff-gdk.h
+ nr-plain-stuff.h
+ pixblock-scaler.h
+ pixblock-transform.h
+ rendermode.h
+ snap-indicator.h
+ sodipodi-ctrl.h
+ sodipodi-ctrlrect.h
+ sp-canvas-group.h
+ sp-canvas-item.h
+ sp-canvas-util.h
+ sp-canvas.h
+ sp-ctrlline.h
+ sp-ctrlpoint.h
+ sp-ctrlquadr.h
)
-ADD_LIBRARY(display STATIC ${display_SRC})
-TARGET_LINK_LIBRARIES(display
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+# add_inkscape_lib(display_LIB "${display_SRC}")
+add_inkscape_source("${display_SRC}")
diff --git a/src/display/canvas-arena.cpp b/src/display/canvas-arena.cpp
index 884e604be..72062ce99 100644
--- a/src/display/canvas-arena.cpp
+++ b/src/display/canvas-arena.cpp
@@ -10,7 +10,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtksignal.h>
+#include <gtk/gtk.h>
#include "display/display-forward.h"
#include "display/sp-canvas-util.h"
@@ -77,10 +77,11 @@ sp_canvas_arena_class_init (SPCanvasArenaClass *klass)
parent_class = (SPCanvasItemClass*)gtk_type_class (SP_TYPE_CANVAS_ITEM);
- signals[ARENA_EVENT] = gtk_signal_new ("arena_event",
- GTK_RUN_LAST,
- GTK_CLASS_TYPE(object_class),
+ signals[ARENA_EVENT] = g_signal_new ("arena_event",
+ G_TYPE_FROM_CLASS(object_class),
+ G_SIGNAL_RUN_LAST,
((glong)((guint8*)&(klass->arena_event) - (guint8*)klass)),
+ NULL, NULL,
sp_marshal_INT__POINTER_POINTER,
GTK_TYPE_INT, 2, GTK_TYPE_POINTER, GTK_TYPE_POINTER);
@@ -319,7 +320,7 @@ sp_canvas_arena_send_event (SPCanvasArena *arena, GdkEvent *event)
gint ret = FALSE;
/* Send event to arena */
- gtk_signal_emit (GTK_OBJECT (arena), signals[ARENA_EVENT], arena->active, event, &ret);
+ g_signal_emit (G_OBJECT (arena), signals[ARENA_EVENT], 0, arena->active, event, &ret);
return ret;
}
diff --git a/src/display/canvas-arena.h b/src/display/canvas-arena.h
index 6db87b675..ef065a03b 100644
--- a/src/display/canvas-arena.h
+++ b/src/display/canvas-arena.h
@@ -22,10 +22,10 @@
G_BEGIN_DECLS
#define SP_TYPE_CANVAS_ARENA (sp_canvas_arena_get_type ())
-#define SP_CANVAS_ARENA(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_CANVAS_ARENA, SPCanvasArena))
-#define SP_CANVAS_ARENA_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_CANVAS_ARENA, SPCanvasArenaClass))
-#define SP_IS_CANVAS_ARENA(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_CANVAS_ARENA))
-#define SP_IS_CANVAS_ARENA_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_CANVAS_ARENA))
+#define SP_CANVAS_ARENA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_CANVAS_ARENA, SPCanvasArena))
+#define SP_CANVAS_ARENA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_CANVAS_ARENA, SPCanvasArenaClass))
+#define SP_IS_CANVAS_ARENA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_CANVAS_ARENA))
+#define SP_IS_CANVAS_ARENA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_CANVAS_ARENA))
typedef struct _SPCanvasArena SPCanvasArena;
typedef struct _SPCanvasArenaClass SPCanvasArenaClass;
diff --git a/src/display/canvas-bpath.h b/src/display/canvas-bpath.h
index 7f8b75dfe..ad19797c2 100644
--- a/src/display/canvas-bpath.h
+++ b/src/display/canvas-bpath.h
@@ -25,10 +25,10 @@ struct SPCanvasGroup;
struct SPCurve;
#define SP_TYPE_CANVAS_BPATH (sp_canvas_bpath_get_type ())
-#define SP_CANVAS_BPATH(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_CANVAS_BPATH, SPCanvasBPath))
-#define SP_CANVAS_BPATH_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_CANVAS_BPATH, SPCanvasBPathClass))
-#define SP_IS_CANVAS_BPATH(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_CANVAS_BPATH))
-#define SP_IS_CANVAS_BPATH_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_CANVAS_BPATH))
+#define SP_CANVAS_BPATH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_CANVAS_BPATH, SPCanvasBPath))
+#define SP_CANVAS_BPATH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_CANVAS_BPATH, SPCanvasBPathClass))
+#define SP_IS_CANVAS_BPATH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_CANVAS_BPATH))
+#define SP_IS_CANVAS_BPATH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_CANVAS_BPATH))
#define bpath_liv
diff --git a/src/display/canvas-grid.h b/src/display/canvas-grid.h
index f386fe05e..f42fecad7 100644
--- a/src/display/canvas-grid.h
+++ b/src/display/canvas-grid.h
@@ -39,10 +39,10 @@ enum GridType {
#define GRID_MAXTYPENR 1
#define INKSCAPE_TYPE_GRID_CANVASITEM (Inkscape::grid_canvasitem_get_type ())
-#define INKSCAPE_GRID_CANVASITEM(obj) (GTK_CHECK_CAST ((obj), INKSCAPE_TYPE_GRID_CANVASITEM, GridCanvasItem))
-#define INKSCAPE_GRID_CANVASITEM_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), INKSCAPE_TYPE_GRID_CANVASITEM, GridCanvasItem))
-#define INKSCAPE_IS_GRID_CANVASITEM(obj) (GTK_CHECK_TYPE ((obj), INKSCAPE_TYPE_GRID_CANVASITEM))
-#define INKSCAPE_IS_GRID_CANVASITEM_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), INKSCAPE_TYPE_GRID_CANVASITEM))
+#define INKSCAPE_GRID_CANVASITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INKSCAPE_TYPE_GRID_CANVASITEM, GridCanvasItem))
+#define INKSCAPE_GRID_CANVASITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), INKSCAPE_TYPE_GRID_CANVASITEM, GridCanvasItem))
+#define INKSCAPE_IS_GRID_CANVASITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INKSCAPE_TYPE_GRID_CANVASITEM))
+#define INKSCAPE_IS_GRID_CANVASITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INKSCAPE_TYPE_GRID_CANVASITEM))
class CanvasGrid;
diff --git a/src/display/canvas-temporary-item.cpp b/src/display/canvas-temporary-item.cpp
index ccef4d0cb..8d336f0ff 100644
--- a/src/display/canvas-temporary-item.cpp
+++ b/src/display/canvas-temporary-item.cpp
@@ -16,7 +16,7 @@
#include "display/canvas-temporary-item.h"
-#include <gtk/gtkobject.h>
+#include <gtk/gtk.h>
namespace Inkscape {
namespace Display {
diff --git a/src/display/canvas-text.h b/src/display/canvas-text.h
index 9a6a93eb4..a621e655c 100644
--- a/src/display/canvas-text.h
+++ b/src/display/canvas-text.h
@@ -20,8 +20,8 @@ struct SPItem;
struct SPDesktop;
#define SP_TYPE_CANVASTEXT (sp_canvastext_get_type ())
-#define SP_CANVASTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_CANVASTEXT, SPCanvasText))
-#define SP_IS_CANVASTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_CANVASTEXT))
+#define SP_CANVASTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_CANVASTEXT, SPCanvasText))
+#define SP_IS_CANVASTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_CANVASTEXT))
struct SPCanvasText : public SPCanvasItem {
SPItem *item; // the item to which this line belongs in some sense; may be NULL for some users
diff --git a/src/display/curve-test.h b/src/display/curve-test.h
index d89cb4c99..3d698ca07 100644
--- a/src/display/curve-test.h
+++ b/src/display/curve-test.h
@@ -21,7 +21,7 @@ public:
path1.close();
// Closed path (ClosingSegment is zero length)
path2.append(Geom::LineSegment(Geom::Point(2,0),Geom::Point(3,0)));
- path2.append(Geom::BezierCurve<3>(Geom::Point(3,0),Geom::Point(2,1),Geom::Point(1,1),Geom::Point(2,0)));
+ // TODO fix path2.append(Geom::BezierCurve<3>(Geom::Point(3,0),Geom::Point(2,1),Geom::Point(1,1),Geom::Point(2,0)));
path2.close();
// Open path
path3.append(Geom::SVGEllipticalArc(Geom::Point(4,0),1,2,M_PI,false,false,Geom::Point(5,1)));
diff --git a/src/display/gnome-canvas-acetate.h b/src/display/gnome-canvas-acetate.h
index 8c284291c..756c663ca 100644
--- a/src/display/gnome-canvas-acetate.h
+++ b/src/display/gnome-canvas-acetate.h
@@ -20,10 +20,10 @@
#define GNOME_TYPE_CANVAS_ACETATE (sp_canvas_acetate_get_type ())
-#define SP_CANVAS_ACETATE(obj) (GTK_CHECK_CAST ((obj), GNOME_TYPE_CANVAS_ACETATE, SPCanvasAcetate))
-#define SP_CANVAS_ACETATE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GNOME_TYPE_CANVAS_ACETATE, SPCanvasAcetateClass))
-#define GNOME_IS_CANVAS_ACETATE(obj) (GTK_CHECK_TYPE ((obj), GNOME_TYPE_CANVAS_ACETATE))
-#define GNOME_IS_CANVAS_ACETATE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GNOME_TYPE_CANVAS_ACETATE))
+#define SP_CANVAS_ACETATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNOME_TYPE_CANVAS_ACETATE, SPCanvasAcetate))
+#define SP_CANVAS_ACETATE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GNOME_TYPE_CANVAS_ACETATE, SPCanvasAcetateClass))
+#define GNOME_IS_CANVAS_ACETATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GNOME_TYPE_CANVAS_ACETATE))
+#define GNOME_IS_CANVAS_ACETATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GNOME_TYPE_CANVAS_ACETATE))
struct SPCanvasAcetate {
diff --git a/src/display/grayscale.cpp b/src/display/grayscale.cpp
index 37f2b255c..745a08c1e 100644
--- a/src/display/grayscale.cpp
+++ b/src/display/grayscale.cpp
@@ -21,14 +21,22 @@
namespace Grayscale {
+/* Original values from Johan:
+const float red_factor = 0.3;
+const float green_factor = 0.59;
+const float blue_factor = 0.11;
+*/
+
+// Values below are from the SVG specification
+const float red_factor = 0.2125;
+const float green_factor = 0.7154;
+const float blue_factor = 0.0721;
+
guint32 process(guint32 rgba) {
return process(SP_RGBA32_R_U(rgba), SP_RGBA32_G_U(rgba), SP_RGBA32_B_U(rgba), SP_RGBA32_A_U(rgba));
}
guint32 process(guchar r, guchar g, guchar b, guchar a) {
- float red_factor = 0.3;
- float green_factor = 0.59;
- float blue_factor = 0.11;
/** To reduce banding in gradients, this calculation is tweaked a bit
* by outputing blue+1 or red+1 or both. The luminance is calculated
diff --git a/src/display/grayscale.h b/src/display/grayscale.h
index 855c9e465..fe0d75cad 100644
--- a/src/display/grayscale.h
+++ b/src/display/grayscale.h
@@ -12,17 +12,13 @@
* Released under GNU GPL
*/
-#include <gdk/gdktypes.h>
+#include <gdk/gdk.h>
namespace Grayscale {
guint32 process(guint32 rgba);
guint32 process(guchar r, guchar g, guchar b, guchar a);
guchar luminance(guchar r, guchar g, guchar b);
- const float red_factor = 0.3;
- const float green_factor = 0.59;
- const float blue_factor = 0.11;
-
bool activeDesktopIsGrayscale();
};
diff --git a/src/display/guideline.cpp b/src/display/guideline.cpp
index 072ae69f1..c761fa74e 100644
--- a/src/display/guideline.cpp
+++ b/src/display/guideline.cpp
@@ -77,6 +77,7 @@ static void sp_guideline_init(SPGuideLine *gl)
gl->sensitive = 0;
gl->origin = NULL;
+ gl->label = NULL;
}
static void sp_guideline_destroy(GtkObject *object)
@@ -98,6 +99,10 @@ static void sp_guideline_destroy(GtkObject *object)
static void sp_guideline_render(SPCanvasItem *item, SPCanvasBuf *buf)
{
+ //TODO: the routine that renders the label of a specific guideline sometimes
+ // ends up erasing the labels of the other guidelines.
+ // Maybe we should render all labels everytime.
+
SPGuideLine const *gl = SP_GUIDELINE (item);
cairo_save(buf->ct);
@@ -105,6 +110,20 @@ static void sp_guideline_render(SPCanvasItem *item, SPCanvasBuf *buf)
ink_cairo_set_source_rgba32(buf->ct, gl->rgba);
cairo_set_line_width(buf->ct, 1);
cairo_set_line_cap(buf->ct, CAIRO_LINE_CAP_SQUARE);
+ cairo_set_font_size(buf->ct, 10);
+
+ int px = (int) Inkscape::round(gl->point_on_line[Geom::X]);
+ int py = (int) Inkscape::round(gl->point_on_line[Geom::Y]);
+
+ if (gl->label) {
+ cairo_save(buf->ct);
+ cairo_translate(buf->ct, px, py);
+ cairo_rotate(buf->ct, atan2(gl->normal_to_line[Geom::X], gl->normal_to_line[Geom::Y]));
+ cairo_translate(buf->ct, 0, -5);
+ cairo_move_to(buf->ct, 0, 0);
+ cairo_show_text(buf->ct, gl->label);
+ cairo_restore(buf->ct);
+ }
if (gl->is_vertical()) {
int position = (int) Inkscape::round(gl->point_on_line[Geom::X]);
@@ -174,10 +193,11 @@ static void sp_guideline_update(SPCanvasItem *item, Geom::Affine const &affine,
sp_canvas_item_request_update(SP_CANVAS_ITEM (gl->origin));
if (gl->is_horizontal()) {
- sp_canvas_update_bbox (item, -1000000, (int) Inkscape::round(gl->point_on_line[Geom::Y]), 1000000, (int) Inkscape::round(gl->point_on_line[Geom::Y] + 1));
+ sp_canvas_update_bbox (item, -1000000, (int) Inkscape::round(gl->point_on_line[Geom::Y] - 16), 1000000, (int) Inkscape::round(gl->point_on_line[Geom::Y] + 1));
} else if (gl->is_vertical()) {
- sp_canvas_update_bbox (item, (int) Inkscape::round(gl->point_on_line[Geom::X]), -1000000, (int) Inkscape::round(gl->point_on_line[Geom::X] + 1), 1000000);
+ sp_canvas_update_bbox (item, (int) Inkscape::round(gl->point_on_line[Geom::X]), -1000000, (int) Inkscape::round(gl->point_on_line[Geom::X] + 16), 1000000);
} else {
+ //TODO: labels in angled guidelines are not showing up for some reason.
sp_canvas_update_bbox (item, -1000000, -1000000, 1000000, 1000000);
}
}
@@ -198,7 +218,7 @@ static double sp_guideline_point(SPCanvasItem *item, Geom::Point p, SPCanvasItem
return MAX(fabs(distance)-1, 0);
}
-SPCanvasItem *sp_guideline_new(SPCanvasGroup *parent, Geom::Point point_on_line, Geom::Point normal)
+SPCanvasItem *sp_guideline_new(SPCanvasGroup *parent, char* label, Geom::Point point_on_line, Geom::Point normal)
{
SPCanvasItem *item = sp_canvas_item_new(parent, SP_TYPE_GUIDELINE, NULL);
SPCanvasItem *origin = sp_canvas_item_new(parent, SP_TYPE_CTRLPOINT, NULL);
@@ -208,6 +228,7 @@ SPCanvasItem *sp_guideline_new(SPCanvasGroup *parent, Geom::Point point_on_line,
gl->origin = cp;
normal.normalize();
+ gl->label = label;
gl->normal_to_line = normal;
gl->angle = tan( -gl->normal_to_line[Geom::X] / gl->normal_to_line[Geom::Y]);
sp_guideline_set_position(gl, point_on_line);
@@ -217,6 +238,16 @@ SPCanvasItem *sp_guideline_new(SPCanvasGroup *parent, Geom::Point point_on_line,
return item;
}
+void sp_guideline_set_label(SPGuideLine *gl, const char* label)
+{
+ if (gl->label) {
+ g_free(gl->label);
+ }
+ gl->label = g_strdup(label);
+
+ sp_canvas_item_request_update(SP_CANVAS_ITEM (gl));
+}
+
void sp_guideline_set_position(SPGuideLine *gl, Geom::Point point_on_line)
{
sp_canvas_item_affine_absolute(SP_CANVAS_ITEM (gl), Geom::Affine(Geom::Translate(point_on_line)));
diff --git a/src/display/guideline.h b/src/display/guideline.h
index 9654d04a1..a3966f76f 100644
--- a/src/display/guideline.h
+++ b/src/display/guideline.h
@@ -18,8 +18,8 @@
#include "sp-canvas-item.h"
#define SP_TYPE_GUIDELINE (sp_guideline_get_type())
-#define SP_GUIDELINE(o) (GTK_CHECK_CAST((o), SP_TYPE_GUIDELINE, SPGuideLine))
-#define SP_IS_GUIDELINE(o) (GTK_CHECK_TYPE((o), SP_TYPE_GUIDELINE))
+#define SP_GUIDELINE(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_GUIDELINE, SPGuideLine))
+#define SP_IS_GUIDELINE(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_GUIDELINE))
class SPCtrlPoint;
@@ -29,6 +29,7 @@ struct SPGuideLine {
guint32 rgba;
+ char* label;
Geom::Point normal_to_line;
Geom::Point point_on_line;
double angle;
@@ -45,8 +46,9 @@ struct SPGuideLineClass {
GType sp_guideline_get_type();
-SPCanvasItem *sp_guideline_new(SPCanvasGroup *parent, Geom::Point point_on_line, Geom::Point normal);
+SPCanvasItem *sp_guideline_new(SPCanvasGroup *parent, char* label, Geom::Point point_on_line, Geom::Point normal);
+void sp_guideline_set_label(SPGuideLine *gl, const char* label);
void sp_guideline_set_position(SPGuideLine *gl, Geom::Point point_on_line);
void sp_guideline_set_normal(SPGuideLine *gl, Geom::Point normal_to_line);
void sp_guideline_set_color(SPGuideLine *gl, unsigned int rgba);
diff --git a/src/display/nr-3dutils.h b/src/display/nr-3dutils.h
index 4e98c2374..44cb371e6 100644
--- a/src/display/nr-3dutils.h
+++ b/src/display/nr-3dutils.h
@@ -14,7 +14,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gdk/gdktypes.h>
+#include <gdk/gdk.h>
#include <2geom/forward.h>
struct NRPixBlock;
diff --git a/src/display/nr-arena-glyphs.cpp b/src/display/nr-arena-glyphs.cpp
index 5f21ceaa9..facb5e9c6 100644
--- a/src/display/nr-arena-glyphs.cpp
+++ b/src/display/nr-arena-glyphs.cpp
@@ -1,5 +1,3 @@
-#define __NR_ARENA_GLYPHS_C__
-
/*
* RGBA display list system for inkscape
*
diff --git a/src/display/nr-arena-glyphs.h b/src/display/nr-arena-glyphs.h
index 6f8a0bde5..c43095cb2 100644
--- a/src/display/nr-arena-glyphs.h
+++ b/src/display/nr-arena-glyphs.h
@@ -20,7 +20,6 @@
#include "libnrtype/nrtype-forward.h"
#include "display/display-forward.h"
#include "forward.h"
-#include "sp-paint-server.h"
#include "display/nr-arena-item.h"
#include "display/nr-style.h"
@@ -28,6 +27,7 @@
struct SPCurve;
class Shape;
+class SPPainter;
NRType nr_arena_glyphs_get_type (void);
diff --git a/src/display/nr-arena.h b/src/display/nr-arena.h
index 4d33aaa99..1c8216434 100644
--- a/src/display/nr-arena.h
+++ b/src/display/nr-arena.h
@@ -30,7 +30,8 @@ G_END_DECLS
#include <libnr/nr-forward.h>
#include <libnr/nr-object.h>
#include "nr-arena-forward.h"
-#include "sp-paint-server.h"
+
+class SPPainter;
NRType nr_arena_get_type (void);
diff --git a/src/display/nr-filter-diffuselighting.h b/src/display/nr-filter-diffuselighting.h
index 100673749..6e39242f6 100644
--- a/src/display/nr-filter-diffuselighting.h
+++ b/src/display/nr-filter-diffuselighting.h
@@ -13,7 +13,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gdk/gdktypes.h>
+#include <gdk/gdk.h>
#include "display/nr-light-types.h"
#include "display/nr-filter-primitive.h"
#include "display/nr-filter-slot.h"
diff --git a/src/display/nr-filter-specularlighting.h b/src/display/nr-filter-specularlighting.h
index 155496a41..2fcb02588 100644
--- a/src/display/nr-filter-specularlighting.h
+++ b/src/display/nr-filter-specularlighting.h
@@ -13,7 +13,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gdk/gdktypes.h>
+#include <gdk/gdk.h>
#include "display/nr-light-types.h"
#include "display/nr-filter-primitive.h"
diff --git a/src/display/nr-light.h b/src/display/nr-light.h
index 49130cc4e..022243bfc 100644
--- a/src/display/nr-light.h
+++ b/src/display/nr-light.h
@@ -8,7 +8,7 @@
* light color components (at a given point).
*/
-#include <gdk/gdktypes.h>
+#include <gdk/gdk.h>
#include "display/nr-3dutils.h"
#include "display/nr-light-types.h"
#include <2geom/forward.h>
diff --git a/src/display/nr-svgfonts.cpp b/src/display/nr-svgfonts.cpp
index b33835f64..8869274d4 100644
--- a/src/display/nr-svgfonts.cpp
+++ b/src/display/nr-svgfonts.cpp
@@ -14,12 +14,20 @@
#include <2geom/pathvector.h>
#include <2geom/transforms.h>
-#include "../style.h"
#include <cairo.h>
#include <vector>
+#include "style.h"
#include "svg/svg.h"
#include "display/cairo-utils.h"
#include "display/nr-svgfonts.h"
+#include "display/nr-svgfonts.h"
+#include "sp-path.h"
+#include "sp-object-group.h"
+#include "sp-use.h"
+#include "sp-use-reference.h"
+#include "display/curve.h"
+#include "xml/repr.h"
+#include "sp-font-face.h"
//*************************//
// UserFont Implementation //
@@ -212,6 +220,47 @@ SvgFont::scaled_font_text_to_glyphs (cairo_scaled_font_t */*scaled_font*/,
return CAIRO_STATUS_SUCCESS;
}
+void
+SvgFont::render_glyph_path(cairo_t* cr, Geom::PathVector* pathv){
+ if (!pathv->empty()){
+ //This glyph has a path description on its d attribute, so we render it:
+ cairo_new_path(cr);
+
+ //adjust scale of the glyph
+// Geom::Scale s(1.0/((SPFont*) node->parent)->horiz_adv_x);
+ Geom::Scale s(1.0/1000);//TODO: use here the units-per-em attribute?
+
+ Geom::Rect area( Geom::Point(0,0), Geom::Point(1,1) ); //I need help here! (reaction: note that the 'area' parameter is an *optional* rect, so you can pass an empty Geom::OptRect() )
+
+ feed_pathvector_to_cairo (cr, *pathv, s, area, false, 0);
+ cairo_fill(cr);
+ }
+}
+
+void
+SvgFont::glyph_modified(SPObject* /* blah */, unsigned int /* bleh */){
+ this->refresh();
+ //TODO: update rendering on svgfonts preview widget (in the svg fonts dialog)
+}
+
+Geom::PathVector
+SvgFont::flip_coordinate_system(SPFont* spfont, Geom::PathVector pathv){
+ double units_per_em = 1000;
+ SPObject* obj;
+ for (obj = ((SPObject*) spfont)->children; obj; obj=obj->next){
+ if (SP_IS_FONTFACE(obj)){
+ //XML Tree being directly used here while it shouldn't be.
+ sp_repr_get_double(obj->getRepr(), "units_per_em", &units_per_em);
+ }
+ }
+
+ double baseline_offset = units_per_em - spfont->horiz_origin_y;
+
+ //This matrix flips y-axis and places the origin at baseline
+ Geom::Affine m(Geom::Coord(1),Geom::Coord(0),Geom::Coord(0),Geom::Coord(-1),Geom::Coord(0),Geom::Coord(baseline_offset));
+ return pathv*m;
+}
+
cairo_status_t
SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/,
unsigned long glyph,
@@ -234,37 +283,53 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/,
node = (SPObject*) this->glyphs[glyph];
}
+ if (!SP_IS_GLYPH(node) && !SP_IS_MISSING_GLYPH(node)) {
+ return CAIRO_STATUS_SUCCESS; // FIXME: is this the right code to return?
+ }
+
+ SPFont* spfont = (SPFont*) node->parent;
+ if (!spfont) {
+ return CAIRO_STATUS_SUCCESS; // FIXME: is this the right code to return?
+ }
+
//glyphs can be described by arbitrary SVG declared in the childnodes of a glyph node
// or using the d attribute of a glyph node.
// pathv stores the path description from the d attribute:
Geom::PathVector pathv;
if (SP_IS_GLYPH(node) && ((SPGlyph*)node)->d) {
pathv = sp_svg_read_pathv(((SPGlyph*)node)->d);
+ pathv = flip_coordinate_system(spfont, pathv);
+ this->render_glyph_path(cr, &pathv);
} else if (SP_IS_MISSING_GLYPH(node) && ((SPMissingGlyph*)node)->d) {
pathv = sp_svg_read_pathv(((SPMissingGlyph*)node)->d);
- } else {
- return CAIRO_STATUS_SUCCESS; // FIXME: is this the right code to return?
+ pathv = flip_coordinate_system(spfont, pathv);
+ this->render_glyph_path(cr, &pathv);
}
- if (!pathv.empty()){
- //This glyph has a path description on its d attribute, so we render it:
- cairo_new_path(cr);
- //adjust scale of the glyph
-// Geom::Scale s(1.0/((SPFont*) node->parent)->horiz_adv_x);
- Geom::Scale s(1.0/1000);//TODO: use here the units-per-em attribute?
- //This matrix flips the glyph vertically
- Geom::Affine m(Geom::Coord(1),Geom::Coord(0),Geom::Coord(0),Geom::Coord(-1),Geom::Coord(0),Geom::Coord(0));
- //then we offset it
-// pathv += Geom::Point(Geom::Coord(0),Geom::Coord(-((SPFont*) node->parent)->horiz_adv_x));
- pathv += Geom::Point(Geom::Coord(0),Geom::Coord(-1000));//TODO: use here the units-per-em attribute?
-
- Geom::Rect area( Geom::Point(0,0), Geom::Point(1,1) ); //I need help here! (reaction: note that the 'area' parameter is an *optional* rect, so you can pass an empty Geom::OptRect() )
+ if (node->hasChildren()){
+ //render the SVG described on this glyph's child nodes.
+ for(node = node->children; node; node=node->next){
+ if (SP_IS_PATH(node)){
+ pathv = ((SPShape*)node)->curve->get_pathvector();
+ pathv = flip_coordinate_system(spfont, pathv);
+ this->render_glyph_path(cr, &pathv);
+ }
+ if (SP_IS_OBJECTGROUP(node)){
+ g_warning("TODO: svgfonts: render OBJECTGROUP");
+ }
+ if (SP_IS_USE(node)){
+ SPItem* item = SP_USE(node)->ref->getObject();
+ if (SP_IS_PATH(item)){
+ pathv = ((SPShape*)item)->curve->get_pathvector();
+ pathv = flip_coordinate_system(spfont, pathv);
+ this->render_glyph_path(cr, &pathv);
+ }
- feed_pathvector_to_cairo (cr, pathv, s*m, area, false, 0);
- cairo_fill(cr);
+ glyph_modified_connection = ((SPObject*) item)->connectModified(sigc::mem_fun(*this, &SvgFont::glyph_modified));
+ }
+ }
}
- //TODO: render the SVG described on this glyph's child nodes.
return CAIRO_STATUS_SUCCESS;
}
diff --git a/src/display/nr-svgfonts.h b/src/display/nr-svgfonts.h
index ddf4ba327..3cfcbaa72 100644
--- a/src/display/nr-svgfonts.h
+++ b/src/display/nr-svgfonts.h
@@ -19,6 +19,7 @@
#include "../sp-missing-glyph.h"
#include "../sp-font.h"
#include "../sp-glyph-kerning.h"
+#include <sigc++/sigc++.h>
class SvgFont;
struct SPFont;
@@ -38,11 +39,16 @@ cairo_status_t scaled_font_init (cairo_scaled_font_t *scaled_font, cairo_font_ex
cairo_status_t scaled_font_text_to_glyphs (cairo_scaled_font_t *scaled_font, const char *utf8, int utf8_len, cairo_glyph_t **glyphs, int *num_glyphs, cairo_text_cluster_t **clusters, int *num_clusters, cairo_text_cluster_flags_t *flags);
cairo_status_t scaled_font_render_glyph (cairo_scaled_font_t *scaled_font, unsigned long glyph, cairo_t *cr, cairo_text_extents_t *metrics);
+Geom::PathVector flip_coordinate_system(SPFont* spfont, Geom::PathVector pathv);
+void render_glyph_path(cairo_t* cr, Geom::PathVector* pathv);
+void glyph_modified(SPObject *, unsigned int);
+
private:
SPFont* font;
UserFont* userfont;
std::vector<SPGlyph*> glyphs;
SPMissingGlyph* missingglyph;
+sigc::connection glyph_modified_connection;
bool drawing_expose_cb (Gtk::Widget *widget, GdkEventExpose *event, gpointer data);
};
diff --git a/src/display/sodipodi-ctrl.h b/src/display/sodipodi-ctrl.h
index df0470adb..3bf0889c7 100644
--- a/src/display/sodipodi-ctrl.h
+++ b/src/display/sodipodi-ctrl.h
@@ -7,17 +7,17 @@
*
*/
-#include <gtk/gtkenums.h>
+#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <libnr/nr-rect-l.h>
#include "sp-canvas-item.h"
#define SP_TYPE_CTRL (sp_ctrl_get_type ())
-#define SP_CTRL(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_CTRL, SPCtrl))
-#define SP_CTRL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_CTRL, SPCtrlClass))
-#define SP_IS_CTRL(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_CTRL))
-#define SP_IS_CTRL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_CTRL))
+#define SP_CTRL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_CTRL, SPCtrl))
+#define SP_CTRL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_CTRL, SPCtrlClass))
+#define SP_IS_CTRL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_CTRL))
+#define SP_IS_CTRL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_CTRL))
typedef enum {
SP_CTRL_SHAPE_SQUARE,
diff --git a/src/display/sodipodi-ctrlrect.h b/src/display/sodipodi-ctrlrect.h
index 2ba73a4c9..945deabc4 100644
--- a/src/display/sodipodi-ctrlrect.h
+++ b/src/display/sodipodi-ctrlrect.h
@@ -23,10 +23,10 @@
struct SPCanvasBuf;
#define SP_TYPE_CTRLRECT (sp_ctrlrect_get_type ())
-#define SP_CTRLRECT(obj) (GTK_CHECK_CAST((obj), SP_TYPE_CTRLRECT, CtrlRect))
-#define SP_CTRLRECT_CLASS(c) (GTK_CHECK_CLASS_CAST((c), SP_TYPE_CTRLRECT, SPCtrlRectClass))
-#define SP_IS_CTRLRECT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_CTRLRECT))
-#define SP_IS_CTRLRECT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_CTRLRECT))
+#define SP_CTRLRECT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_CTRLRECT, CtrlRect))
+#define SP_CTRLRECT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST((c), SP_TYPE_CTRLRECT, SPCtrlRectClass))
+#define SP_IS_CTRLRECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_CTRLRECT))
+#define SP_IS_CTRLRECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_CTRLRECT))
class CtrlRect : public SPCanvasItem
{
diff --git a/src/display/sp-canvas-group.h b/src/display/sp-canvas-group.h
index 10bf0fa6c..354d389b7 100644
--- a/src/display/sp-canvas-group.h
+++ b/src/display/sp-canvas-group.h
@@ -24,8 +24,8 @@
#include <glib-object.h>
#define SP_TYPE_CANVAS_GROUP (sp_canvas_group_get_type())
-#define SP_CANVAS_GROUP(obj) (GTK_CHECK_CAST((obj), SP_TYPE_CANVAS_GROUP, SPCanvasGroup))
-#define SP_IS_CANVAS_GROUP(obj) (GTK_CHECK_TYPE((obj), SP_TYPE_CANVAS_GROUP))
+#define SP_CANVAS_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_CANVAS_GROUP, SPCanvasGroup))
+#define SP_IS_CANVAS_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_CANVAS_GROUP))
GType sp_canvas_group_get_type();
diff --git a/src/display/sp-canvas-item.h b/src/display/sp-canvas-item.h
index cc0bdfc77..f62dc34a7 100644
--- a/src/display/sp-canvas-item.h
+++ b/src/display/sp-canvas-item.h
@@ -22,8 +22,8 @@
#endif
#include <glib-object.h>
-#include <gtk/gtkobject.h>
-#include <gdk/gdkevents.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
#include "2geom/rect.h"
@@ -36,9 +36,9 @@ struct SPCanvasGroup;
typedef struct _SPCanvasItemClass SPCanvasItemClass;
#define SP_TYPE_CANVAS_ITEM (sp_canvas_item_get_type())
-#define SP_CANVAS_ITEM(obj) (GTK_CHECK_CAST((obj), SP_TYPE_CANVAS_ITEM, SPCanvasItem))
-#define SP_IS_CANVAS_ITEM(obj) (GTK_CHECK_TYPE((obj), SP_TYPE_CANVAS_ITEM))
-#define SP_CANVAS_ITEM_GET_CLASS(o) (GTK_CHECK_GET_CLASS((o), SP_TYPE_CANVAS_ITEM, SPCanvasItemClass))
+#define SP_CANVAS_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_CANVAS_ITEM, SPCanvasItem))
+#define SP_IS_CANVAS_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_CANVAS_ITEM))
+#define SP_CANVAS_ITEM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), SP_TYPE_CANVAS_ITEM, SPCanvasItemClass))
GType sp_canvas_item_get_type();
diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp
index 105a9a0ff..c84452c07 100644
--- a/src/display/sp-canvas.cpp
+++ b/src/display/sp-canvas.cpp
@@ -18,10 +18,7 @@
# include <config.h>
#endif
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkversion.h>
-
+#include <gtk/gtk.h>
#include <gtkmm.h>
#include "helper/sp-marshal.h"
@@ -44,12 +41,9 @@
using Inkscape::Debug::GdkEventLatencyTracker;
-// GTK_CHECK_VERSION returns false on failure
-#define HAS_GDK_EVENT_REQUEST_MOTIONS GTK_CHECK_VERSION(2, 12, 0)
-
// gtk_check_version returns non-NULL on failure
static bool const HAS_BROKEN_MOTION_HINTS =
- true || gtk_check_version(2, 12, 0) != NULL || !HAS_GDK_EVENT_REQUEST_MOTIONS;
+ true || gtk_check_version(2, 12, 0) != NULL;
// Define this to visualize the regions to be redrawn
//#define DEBUG_REDRAW 1;
@@ -539,7 +533,7 @@ sp_canvas_item_grab (SPCanvasItem *item, guint event_mask, GdkCursor *cursor, gu
{
g_return_val_if_fail (item != NULL, -1);
g_return_val_if_fail (SP_IS_CANVAS_ITEM (item), -1);
- g_return_val_if_fail (GTK_WIDGET_MAPPED (item->canvas), -1);
+ g_return_val_if_fail (gtk_widget_get_mapped (GTK_WIDGET (item->canvas)), -1);
if (item->canvas->grabbed_item)
return -1;
@@ -630,7 +624,7 @@ sp_canvas_item_grab_focus (SPCanvasItem *item)
{
g_return_if_fail (item != NULL);
g_return_if_fail (SP_IS_CANVAS_ITEM (item));
- g_return_if_fail (GTK_WIDGET_CAN_FOCUS (GTK_WIDGET (item->canvas)));
+ g_return_if_fail (gtk_widget_get_can_focus (GTK_WIDGET (item->canvas)));
SPCanvasItem *focused_item = item->canvas->focused_item;
@@ -1022,9 +1016,9 @@ sp_canvas_class_init (SPCanvasClass *klass)
static void
sp_canvas_init (SPCanvas *canvas)
{
- GTK_WIDGET_UNSET_FLAGS (canvas, GTK_NO_WINDOW);
- GTK_WIDGET_UNSET_FLAGS (canvas, GTK_DOUBLE_BUFFERED);
- GTK_WIDGET_SET_FLAGS (canvas, GTK_CAN_FOCUS);
+ gtk_widget_set_has_window (GTK_WIDGET (canvas), TRUE);
+ gtk_widget_set_double_buffered (GTK_WIDGET (canvas), FALSE);
+ gtk_widget_set_can_focus (GTK_WIDGET (canvas), TRUE);
canvas->pick_event.type = GDK_LEAVE_NOTIFY;
canvas->pick_event.crossing.x = 0;
@@ -1178,7 +1172,7 @@ sp_canvas_realize (GtkWidget *widget)
widget->style = gtk_style_attach (widget->style, widget->window);
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+ gtk_widget_set_realized (widget, TRUE);
canvas->pixmap_gc = gdk_gc_new (SP_CANVAS_WINDOW (canvas));
}
@@ -1243,7 +1237,7 @@ sp_canvas_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
widget->allocation = *allocation;
- if (GTK_WIDGET_REALIZED (widget)) {
+ if (gtk_widget_get_realized (widget)) {
gdk_window_move_resize (widget->window,
widget->allocation.x, widget->allocation.y,
widget->allocation.width, widget->allocation.height);
@@ -1362,7 +1356,7 @@ emit_event (SPCanvas *canvas, GdkEvent *event)
while (item && !finished) {
gtk_object_ref (GTK_OBJECT (item));
- gtk_signal_emit (GTK_OBJECT (item), item_signals[ITEM_EVENT], &ev, &finished);
+ g_signal_emit (G_OBJECT (item), item_signals[ITEM_EVENT], 0, &ev, &finished);
SPCanvasItem *parent = item->parent;
gtk_object_unref (GTK_OBJECT (item));
item = parent;
@@ -1596,9 +1590,7 @@ sp_canvas_scroll (GtkWidget *widget, GdkEventScroll *event)
static inline void request_motions(GdkWindow *w, GdkEventMotion *event) {
gdk_window_get_pointer(w, NULL, NULL, NULL);
-#if HAS_GDK_EVENT_REQUEST_MOTIONS
gdk_event_request_motions(event);
-#endif
}
/**
@@ -1937,7 +1929,7 @@ sp_canvas_expose (GtkWidget *widget, GdkEventExpose *event)
{
SPCanvas *canvas = SP_CANVAS (widget);
- if (!GTK_WIDGET_DRAWABLE (widget) ||
+ if (!gtk_widget_is_drawable (widget) ||
(event->window != SP_CANVAS_WINDOW (canvas)))
return FALSE;
@@ -1992,7 +1984,7 @@ sp_canvas_crossing (GtkWidget *widget, GdkEventCrossing *event)
static gint
sp_canvas_focus_in (GtkWidget *widget, GdkEventFocus *event)
{
- GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);
+ gtk_widget_grab_focus (widget);
SPCanvas *canvas = SP_CANVAS (widget);
@@ -2009,8 +2001,6 @@ sp_canvas_focus_in (GtkWidget *widget, GdkEventFocus *event)
static gint
sp_canvas_focus_out (GtkWidget *widget, GdkEventFocus *event)
{
- GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
-
SPCanvas *canvas = SP_CANVAS (widget);
if (canvas->focused_item)
@@ -2093,7 +2083,7 @@ do_update (SPCanvas *canvas)
}
/* Paint if able to */
- if (GTK_WIDGET_DRAWABLE (canvas)) {
+ if (gtk_widget_is_drawable ( GTK_WIDGET (canvas))) {
return paint (canvas);
}
@@ -2177,7 +2167,7 @@ sp_canvas_scroll_to (SPCanvas *canvas, double cx, double cy, unsigned int clear,
// scrolling without zoom; redraw only the newly exposed areas
if ((dx != 0) || (dy != 0)) {
canvas->is_scrolling = is_scrolling;
- if (GTK_WIDGET_REALIZED (canvas)) {
+ if (gtk_widget_get_realized (GTK_WIDGET (canvas))) {
gdk_window_scroll (SP_CANVAS_WINDOW (canvas), -dx, -dy);
}
}
@@ -2226,7 +2216,7 @@ sp_canvas_request_redraw (SPCanvas *canvas, int x0, int y0, int x1, int y1)
g_return_if_fail (canvas != NULL);
g_return_if_fail (SP_IS_CANVAS (canvas));
- if (!GTK_WIDGET_DRAWABLE (canvas)) return;
+ if (!gtk_widget_is_drawable ( GTK_WIDGET (canvas))) return;
if ((x0 >= x1) || (y0 >= y1)) return;
bbox.x0 = x0;
diff --git a/src/display/sp-canvas.h b/src/display/sp-canvas.h
index 53b8a61f1..7a6b3295e 100644
--- a/src/display/sp-canvas.h
+++ b/src/display/sp-canvas.h
@@ -28,10 +28,8 @@
#endif
#include <glib/gtypes.h>
-#include <gdk/gdkevents.h>
-#include <gdk/gdkgc.h>
-#include <gtk/gtkobject.h>
-#include <gtk/gtkwidget.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
#include <glibmm/ustring.h>
@@ -43,8 +41,8 @@
G_BEGIN_DECLS
#define SP_TYPE_CANVAS sp_canvas_get_type()
-#define SP_CANVAS(obj) (GTK_CHECK_CAST((obj), SP_TYPE_CANVAS, SPCanvas))
-#define SP_IS_CANVAS(obj) (GTK_CHECK_TYPE((obj), SP_TYPE_CANVAS))
+#define SP_CANVAS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_CANVAS, SPCanvas))
+#define SP_IS_CANVAS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_CANVAS))
GType sp_canvas_get_type();
diff --git a/src/display/sp-ctrlline.h b/src/display/sp-ctrlline.h
index e69c478fb..eeed7e75d 100644
--- a/src/display/sp-ctrlline.h
+++ b/src/display/sp-ctrlline.h
@@ -19,8 +19,8 @@
struct SPItem;
#define SP_TYPE_CTRLLINE (sp_ctrlline_get_type ())
-#define SP_CTRLLINE(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_CTRLLINE, SPCtrlLine))
-#define SP_IS_CTRLLINE(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_CTRLLINE))
+#define SP_CTRLLINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_CTRLLINE, SPCtrlLine))
+#define SP_IS_CTRLLINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_CTRLLINE))
struct SPCtrlLine : public SPCanvasItem{
SPItem *item; // the item to which this line belongs in some sense; may be NULL for some users
diff --git a/src/display/sp-ctrlpoint.h b/src/display/sp-ctrlpoint.h
index b98d48f67..907f74bf8 100644
--- a/src/display/sp-ctrlpoint.h
+++ b/src/display/sp-ctrlpoint.h
@@ -17,8 +17,8 @@
struct SPItem;
#define SP_TYPE_CTRLPOINT (sp_ctrlpoint_get_type ())
-#define SP_CTRLPOINT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_CTRLPOINT, SPCtrlPoint))
-#define SP_IS_CTRLPOINT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_CTRLPOINT))
+#define SP_CTRLPOINT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_CTRLPOINT, SPCtrlPoint))
+#define SP_IS_CTRLPOINT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_CTRLPOINT))
struct SPCtrlPoint : public SPCanvasItem {
SPItem *item; // the item to which this line belongs in some sense; may be NULL for some users
diff --git a/src/display/sp-ctrlquadr.h b/src/display/sp-ctrlquadr.h
index f3c1ced45..9fdfd29b3 100644
--- a/src/display/sp-ctrlquadr.h
+++ b/src/display/sp-ctrlquadr.h
@@ -17,8 +17,8 @@
#define SP_TYPE_CTRLQUADR (sp_ctrlquadr_get_type ())
-#define SP_CTRLQUADR(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_CTRLQUADR, SPCtrlQuadr))
-#define SP_IS_CTRLQUADR(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_CTRLQUADR))
+#define SP_CTRLQUADR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_CTRLQUADR, SPCtrlQuadr))
+#define SP_IS_CTRLQUADR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_CTRLQUADR))
struct SPCtrlQuadr;
struct SPCtrlQuadrClass;
diff --git a/src/document-private.h b/src/document-private.h
index d641679ed..c851594c3 100644
--- a/src/document-private.h
+++ b/src/document-private.h
@@ -29,8 +29,6 @@
// XXX only for testing!
#include "console-output-undo-observer.h"
-#define SP_DOCUMENT_DEFS(d) ((SPObject *) SP_ROOT(d->getRoot())->defs)
-
namespace Inkscape {
namespace XML {
class Event;
diff --git a/src/document-undo.h b/src/document-undo.h
index 9be260fa2..afd595ed8 100644
--- a/src/document-undo.h
+++ b/src/document-undo.h
@@ -1,6 +1,7 @@
#ifndef SEEN_SP_DOCUMENT_UNDO_H
#define SEEN_SP_DOCUMENT_UNDO_H
+typedef struct _GtkObject GtkObject;
namespace Inkscape {
@@ -15,10 +16,10 @@ public:
* Since undo sensitivity needs to be nested, setting undo sensitivity
* should be done like this:
*\verbatim
- bool saved = sp_document_get_undo_sensitive(document);
- sp_document_set_undo_sensitive(document, false);
+ bool saved = DocumentUndo::getUndoSensitive(document);
+ DocumentUndo::setUndoSensitive(document, false);
... do stuff ...
- sp_document_set_undo_sensitive(document, saved); \endverbatim
+ DocumentUndo::setUndoSensitive(document, saved); \endverbatim
*/
static void setUndoSensitive(SPDocument *doc, bool sensitive);
diff --git a/src/document.cpp b/src/document.cpp
index c9b822ce6..90fc4c635 100644
--- a/src/document.cpp
+++ b/src/document.cpp
@@ -37,7 +37,7 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include <gtk/gtkmain.h>
+#include <gtk/gtk.h>
#include <string>
#include <cstring>
@@ -214,6 +214,11 @@ SPDocument::~SPDocument() {
//delete this->_whiteboard_session_manager;
}
+SPDefs *SPDocument::getDefs()
+{
+ return root->defs;
+}
+
Persp3D *
SPDocument::getCurrentPersp3D() {
// Check if current_persp3d is still valid
@@ -243,8 +248,7 @@ SPDocument::setCurrentPersp3D(Persp3D * const persp) {
void SPDocument::getPerspectivesInDefs(std::vector<Persp3D*> &list) const
{
- SPDefs *defs = SP_ROOT(this->root)->defs;
- for (SPObject *i = defs->firstChild(); i; i = i->getNext() ) {
+ for (SPObject *i = root->defs->firstChild(); i; i = i->getNext() ) {
if (SP_IS_PERSP3D(i)) {
list.push_back(SP_PERSP3D(i));
}
@@ -348,7 +352,7 @@ SPDocument *SPDocument::createDoc(Inkscape::XML::Document *rdoc,
rroot->setAttribute("baseProfile", NULL);
// creating namedview
- if (!sp_item_group_get_child_by_name((SPGroup *) document->root, NULL, "sodipodi:namedview")) {
+ if (!sp_item_group_get_child_by_name(document->root, NULL, "sodipodi:namedview")) {
// if there's none in the document already,
Inkscape::XML::Node *rnew = NULL;
@@ -388,13 +392,12 @@ SPDocument *SPDocument::createDoc(Inkscape::XML::Document *rdoc,
Inkscape::GC::release(rnew);
}
- /* Defs */
- if (!SP_ROOT(document->root)->defs) {
- Inkscape::XML::Node *r;
- r = rdoc->createElement("svg:defs");
+ // Defs
+ if (!document->root->defs) {
+ Inkscape::XML::Node *r = rdoc->createElement("svg:defs");
rroot->addChild(r, NULL);
Inkscape::GC::release(r);
- g_assert(SP_ROOT(document->root)->defs);
+ g_assert(document->root->defs);
}
/* Default RDF */
@@ -520,17 +523,15 @@ gdouble SPDocument::getWidth() const
g_return_val_if_fail(this->priv != NULL, 0.0);
g_return_val_if_fail(this->root != NULL, 0.0);
- SPRoot *root = SP_ROOT(this->root);
-
- if (root->width.unit == SVGLength::PERCENT && root->viewBox_set)
- return root->viewBox.x1 - root->viewBox.x0;
- return root->width.computed;
+ gdouble result = root->width.computed;
+ if (root->width.unit == SVGLength::PERCENT && root->viewBox_set) {
+ result = root->viewBox.x1 - root->viewBox.x0;
+ }
+ return result;
}
void SPDocument::setWidth(gdouble width, const SPUnit *unit)
{
- SPRoot *root = SP_ROOT(this->root);
-
if (root->width.unit == SVGLength::PERCENT && root->viewBox_set) { // set to viewBox=
root->viewBox.x1 = root->viewBox.x0 + sp_units_get_pixels (width, *unit);
} else { // set to width=
@@ -555,8 +556,6 @@ void SPDocument::setWidth(gdouble width, const SPUnit *unit)
void SPDocument::setHeight(gdouble height, const SPUnit *unit)
{
- SPRoot *root = SP_ROOT(this->root);
-
if (root->height.unit == SVGLength::PERCENT && root->viewBox_set) { // set to viewBox=
root->viewBox.y1 = root->viewBox.y0 + sp_units_get_pixels (height, *unit);
} else { // set to height=
@@ -584,11 +583,11 @@ gdouble SPDocument::getHeight() const
g_return_val_if_fail(this->priv != NULL, 0.0);
g_return_val_if_fail(this->root != NULL, 0.0);
- SPRoot *root = SP_ROOT(this->root);
-
- if (root->height.unit == SVGLength::PERCENT && root->viewBox_set)
- return root->viewBox.y1 - root->viewBox.y0;
- return root->height.computed;
+ gdouble result = root->height.computed;
+ if (root->height.unit == SVGLength::PERCENT && root->viewBox_set) {
+ result = root->viewBox.y1 - root->viewBox.y0;
+ }
+ return result;
}
Geom::Point SPDocument::getDimensions() const
@@ -649,7 +648,7 @@ void SPDocument::fitToRect(Geom::Rect const &rect, bool with_margins)
Geom::Translate const tr(
Geom::Point(0, old_height - rect_with_margins.height())
- to_2geom(rect_with_margins.min()));
- SP_GROUP(root)->translateChildItems(tr);
+ root->translateChildItems(tr);
if(nv) {
Geom::Translate tr2(-rect_with_margins.min());
@@ -922,17 +921,16 @@ void SPDocument::requestModified()
}
}
-void
-sp_document_setup_viewport (SPDocument *doc, SPItemCtx *ctx)
+void SPDocument::setupViewport(SPItemCtx *ctx)
{
ctx->ctx.flags = 0;
ctx->i2doc = Geom::identity();
- /* Set up viewport in case svg has it defined as percentages */
- if (SP_ROOT(doc->root)->viewBox_set) { // if set, take from viewBox
- ctx->vp.x0 = SP_ROOT(doc->root)->viewBox.x0;
- ctx->vp.y0 = SP_ROOT(doc->root)->viewBox.y0;
- ctx->vp.x1 = SP_ROOT(doc->root)->viewBox.x1;
- ctx->vp.y1 = SP_ROOT(doc->root)->viewBox.y1;
+ // Set up viewport in case svg has it defined as percentages
+ if (root->viewBox_set) { // if set, take from viewBox
+ ctx->vp.x0 = root->viewBox.x0;
+ ctx->vp.y0 = root->viewBox.y0;
+ ctx->vp.x1 = root->viewBox.x1;
+ ctx->vp.y1 = root->viewBox.y1;
} else { // as a last resort, set size to A4
ctx->vp.x0 = 0.0;
ctx->vp.y0 = 0.0;
@@ -954,7 +952,7 @@ SPDocument::_updateDocument()
if (this->root->uflags || this->root->mflags) {
if (this->root->uflags) {
SPItemCtx ctx;
- sp_document_setup_viewport (this, &ctx);
+ setupViewport(&ctx);
bool saved = DocumentUndo::getUndoSensitive(this);
DocumentUndo::setUndoSensitive(this, false);
diff --git a/src/document.h b/src/document.h
index 2eb5e2e09..82a9a5158 100644
--- a/src/document.h
+++ b/src/document.h
@@ -18,7 +18,6 @@
*/
#include <glib-object.h>
-#include <gtk/gtksignal.h>
#include <stddef.h>
#include <sigc++/sigc++.h>
#include <sigc++/class_slot.h>
@@ -44,6 +43,7 @@ struct SPDesktop;
struct SPItem;
struct SPObject;
struct SPGroup;
+struct SPRoot;
namespace Inkscape {
struct Application;
@@ -57,9 +57,11 @@ namespace Inkscape {
}
}
+class SPDefs;
class SP3DBox;
class Persp3D;
class Persp3DImpl;
+class SPItemCtx;
namespace Proj {
class TransfMat3x4;
@@ -72,6 +74,8 @@ class SPDocument : public Inkscape::GC::Managed<>,
public Inkscape::GC::Finalized,
public Inkscape::GC::Anchored
{
+// Note: multiple public and private sections is not a good practice, but happens
+// in this class as transitional to fixing encapsulation:
public:
typedef sigc::signal<void, SPObject *> IDChangedSignal;
typedef sigc::signal<void> ResourcesChangedSignal;
@@ -91,7 +95,9 @@ public:
Inkscape::XML::Document *rdoc; ///< Our Inkscape::XML::Document
Inkscape::XML::Node *rroot; ///< Root element of Inkscape::XML::Document
- SPObject *root; ///< Our SPRoot
+private:
+ SPRoot *root; ///< Our SPRoot
+public:
CRCascade *style_cascade;
protected:
@@ -122,7 +128,7 @@ public:
bool oldSignalsConnected;
/** Returns our SPRoot */
- SPObject *getRoot() { return root; }
+ SPRoot *getRoot() { return root; }
Inkscape::XML::Node *getReprRoot() { return rroot; }
@@ -141,6 +147,9 @@ public:
/** basename(uri) or other human-readable label for the document. */
gchar const* getName() const { return name; }
+ /** Return the main defs object for the document. */
+ SPDefs *getDefs();
+
void setCurrentPersp3D(Persp3D * const persp);
inline void setCurrentPersp3DImpl(Persp3DImpl * const persp_impl) { current_persp3d_impl = persp_impl; }
@@ -248,6 +257,7 @@ public:
private:
void do_change_uri(gchar const *const filename, bool const rebase);
+ void setupViewport(SPItemCtx *ctx);
};
struct SPUnit;
diff --git a/src/dom/CMakeLists.txt b/src/dom/CMakeLists.txt
index 7c434eb77..dbaa1a763 100644
--- a/src/dom/CMakeLists.txt
+++ b/src/dom/CMakeLists.txt
@@ -1,38 +1,99 @@
-SET(domfolders
-io
-odf
-util
-#work
-)
-FOREACH(domlistsrc ${domfolders})
- ADD_SUBDIRECTORY(${domlistsrc})
-ENDFOREACH(domlistsrc)
-
-SET(dom_SRC
-cssreader.cpp
-domimpl.cpp
-domptr.cpp
-domstring.cpp
-lsimpl.cpp
-prop-css2.cpp
-#prop-css.cpp
-#prop-svg.cpp
-smilimpl.cpp
-svgimpl.cpp
-svgreader.cpp
-ucd.cpp
-uri.cpp
-xmlreader.cpp
-xmlwriter.cpp
-xpathimpl.cpp
-xpathparser.cpp
-xpathtoken.cpp
-${dom_io_SRC}
-${dom_odf_SRC}
-${dom_util_SRC}
-#${dom_work_SRC}
+set(dom_SRC
+ cssreader.cpp
+ domimpl.cpp
+ domptr.cpp
+ domstring.cpp
+ lsimpl.cpp
+ prop-css2.cpp
+ prop-css.cpp
+ prop-svg.cpp
+ smilimpl.cpp
+ svgimpl.cpp
+ svgreader.cpp
+ ucd.cpp
+ uri.cpp
+ xmlreader.cpp
+ # xmlwriter.cpp
+ xpathimpl.cpp
+ xpathparser.cpp
+ xpathtoken.cpp
+
+ io/base64stream.cpp
+ io/bufferstream.cpp
+ io/domstream.cpp
+ io/gzipstream.cpp
+ # io/httpclient.cpp
+ io/socket.cpp
+ io/stringstream.cpp
+ io/uristream.cpp
+
+ odf/odfdocument.cpp
+ #odf/SvgOdg.cpp
+
+ util/digest.cpp
+ util/thread.cpp
+ util/ziptool.cpp
+
+ # # Dont use any of them.
+ # work/svg2.cpp
+ # work/testdom.cpp
+ # work/testhttp.cpp
+ # work/testjs.cpp
+ # work/testodf.cpp
+ # work/testsvg.cpp
+ # work/testuri.cpp
+ # work/testxpath.cpp
+ # work/testzip.cpp
+ # work/xpathtests.cpp
+
+
+
+ # -------
+ # Headers
+ css.h
+ cssreader.h
+ dom.h
+ domimpl.h
+ domptr.h
+ domstring.h
+ events.h
+ ls.h
+ lsimpl.h
+ smil.h
+ smilimpl.h
+ stylesheets.h
+ svg.h
+ svg2.h
+ svgimpl.h
+ svgreader.h
+ svgtypes.h
+ traversal.h
+ ucd.h
+ uri.h
+ views-level3.h
+ views.h
+ xmlreader.h
+ xmlwriter.h
+ xpath.h
+ xpathimpl.h
+ xpathparser.h
+ xpathtoken.h
+
+ odf/odfdocument.h
+
+ io/base64stream.h
+ io/bufferstream.h
+ io/domstream.h
+ io/gzipstream.h
+ io/httpclient.h
+ io/socket.h
+ io/stringstream.h
+ io/uristream.h
+
+ util/digest.h
+ util/thread.h
+ util/ziptool.h
)
-ADD_LIBRARY(dom STATIC ${dom_SRC})
-TARGET_LINK_LIBRARIES(dom
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+add_inkscape_lib(dom_LIB "${dom_SRC}")
diff --git a/src/dom/io/CMakeLists.txt b/src/dom/io/CMakeLists.txt
deleted file mode 100644
index c8a98466d..000000000
--- a/src/dom/io/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-SET(dom_io_SRC
-base64stream.cpp
-bufferstream.cpp
-domstream.cpp
-gzipstream.cpp
-httpclient.cpp
-socket.cpp
-stringstream.cpp
-uristream.cpp
-)
-
diff --git a/src/dom/odf/CMakeLists.txt b/src/dom/odf/CMakeLists.txt
deleted file mode 100644
index e0cb76060..000000000
--- a/src/dom/odf/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-SET(dom_odf_SRC
-odfdocument.cpp
-#SvgOdg.cpp
-)
-
diff --git a/src/dom/util/CMakeLists.txt b/src/dom/util/CMakeLists.txt
deleted file mode 100644
index 167e980c9..000000000
--- a/src/dom/util/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-SET(dom_util_SRC
-digest.cpp
-thread.cpp
-ziptool.cpp
-)
-
diff --git a/src/dom/work/CMakeLists.txt b/src/dom/work/CMakeLists.txt
deleted file mode 100644
index 8cd4676cf..000000000
--- a/src/dom/work/CMakeLists.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-SET(dom_work_SRC
-#testdom.cpp
-#testhttp.cpp
-#testjs.cpp
-#testodf.cpp
-#testsvg.cpp
-#testuri.cpp
-#testxpath.cpp
-#testzip.cpp
-#xpathtests.cpp
-)
-
diff --git a/src/draw-context.h b/src/draw-context.h
index 3cad8da06..4266bdea4 100644
--- a/src/draw-context.h
+++ b/src/draw-context.h
@@ -24,10 +24,10 @@
/* Freehand context */
#define SP_TYPE_DRAW_CONTEXT (sp_draw_context_get_type())
-#define SP_DRAW_CONTEXT(o) (GTK_CHECK_CAST((o), SP_TYPE_DRAW_CONTEXT, SPDrawContext))
-#define SP_DRAW_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_CAST((k), SP_TYPE_DRAW_CONTEXT, SPDrawContextClass))
-#define SP_IS_DRAW_CONTEXT(o) (GTK_CHECK_TYPE((o), SP_TYPE_DRAW_CONTEXT))
-#define SP_IS_DRAW_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_TYPE((k), SP_TYPE_DRAW_CONTEXT))
+#define SP_DRAW_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_DRAW_CONTEXT, SPDrawContext))
+#define SP_DRAW_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_DRAW_CONTEXT, SPDrawContextClass))
+#define SP_IS_DRAW_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_DRAW_CONTEXT))
+#define SP_IS_DRAW_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_DRAW_CONTEXT))
struct SPDrawAnchor;
namespace Inkscape
diff --git a/src/dropper-context.h b/src/dropper-context.h
index f2d18a507..22c6a1cf3 100644
--- a/src/dropper-context.h
+++ b/src/dropper-context.h
@@ -15,8 +15,8 @@
#include "event-context.h"
#define SP_TYPE_DROPPER_CONTEXT (sp_dropper_context_get_type ())
-#define SP_DROPPER_CONTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_DROPPER_CONTEXT, SPDropperContext))
-#define SP_IS_DROPPER_CONTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_DROPPER_CONTEXT))
+#define SP_DROPPER_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_DROPPER_CONTEXT, SPDropperContext))
+#define SP_IS_DROPPER_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_DROPPER_CONTEXT))
class SPDropperContext;
class SPDropperContextClass;
diff --git a/src/dyna-draw-context.h b/src/dyna-draw-context.h
index 9a736a3fc..af63bf653 100644
--- a/src/dyna-draw-context.h
+++ b/src/dyna-draw-context.h
@@ -22,10 +22,10 @@
#include "splivarot.h"
#define SP_TYPE_DYNA_DRAW_CONTEXT (sp_dyna_draw_context_get_type())
-#define SP_DYNA_DRAW_CONTEXT(o) (GTK_CHECK_CAST((o), SP_TYPE_DYNA_DRAW_CONTEXT, SPDynaDrawContext))
-#define SP_DYNA_DRAW_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_CAST((k), SP_TYPE_DYNA_DRAW_CONTEXT, SPDynaDrawContextClass))
-#define SP_IS_DYNA_DRAW_CONTEXT(o) (GTK_CHECK_TYPE((o), SP_TYPE_DYNA_DRAW_CONTEXT))
-#define SP_IS_DYNA_DRAW_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_TYPE((k), SP_TYPE_DYNA_DRAW_CONTEXT))
+#define SP_DYNA_DRAW_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_DYNA_DRAW_CONTEXT, SPDynaDrawContext))
+#define SP_DYNA_DRAW_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_DYNA_DRAW_CONTEXT, SPDynaDrawContextClass))
+#define SP_IS_DYNA_DRAW_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_DYNA_DRAW_CONTEXT))
+#define SP_IS_DYNA_DRAW_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_DYNA_DRAW_CONTEXT))
class SPDynaDrawContext;
class SPDynaDrawContextClass;
diff --git a/src/ege-adjustment-action.cpp b/src/ege-adjustment-action.cpp
index c075d67e7..6b0ffd1ab 100644
--- a/src/ege-adjustment-action.cpp
+++ b/src/ege-adjustment-action.cpp
@@ -1,5 +1,3 @@
-
-
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
*/
@@ -45,20 +43,7 @@
#include <string.h>
#include <gdk/gdkkeysyms.h>
-#include <gtk/gtkversion.h>
-#include <gtk/gtktoolitem.h>
#include <gtk/gtk.h>
-#include <gtk/gtkhscale.h>
-#if GTK_CHECK_VERSION(2,12,0)
-#include <gtk/gtkscalebutton.h>
-#include <gtk/gtkstock.h>
-#endif /* GTK_CHECK_VERSION(2,12,0) */
-#include <gtk/gtkhbox.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmisc.h>
-#include <gtk/gtktoolbar.h>
-#include <gtk/gtktooltips.h>
-#include <gtk/gtkradiomenuitem.h>
#include "widgets/icon.h"
#include "icon-size.h"
@@ -87,17 +72,17 @@ static void egeAct_free_all_descriptions( EgeAdjustmentAction* action );
static GtkActionClass* gParentClass = 0;
+static EgeCreateAdjWidgetCB gFactoryCb = 0;
static GQuark gDataName = 0;
enum {
APPEARANCE_UNKNOWN = -1,
APPEARANCE_NONE = 0,
- APPEARANCE_FULL, // label, then all choices represented by separate buttons
- APPEARANCE_COMPACT, // label, then choices in a drop-down menu
- APPEARANCE_MINIMAL, // no label, just choices in a drop-down menu
+ APPEARANCE_FULL, /* label, then all choices represented by separate buttons */
+ APPEARANCE_COMPACT, /* label, then choices in a drop-down menu */
+ APPEARANCE_MINIMAL, /* no label, just choices in a drop-down menu */
};
-#if GTK_CHECK_VERSION(2,12,0)
/* TODO need to have appropriate icons setup for these: */
static const gchar *floogles[] = {
GTK_STOCK_REMOVE,
@@ -106,7 +91,6 @@ static const gchar *floogles[] = {
GTK_STOCK_ABOUT,
GTK_STOCK_GO_UP,
0};
-#endif /* GTK_CHECK_VERSION(2,12,0) */
typedef struct _EgeAdjustmentDescr EgeAdjustmentDescr;
@@ -119,7 +103,6 @@ struct _EgeAdjustmentDescr
struct _EgeAdjustmentActionPrivate
{
GtkAdjustment* adj;
- GtkTooltips* toolTips;
GtkWidget* focusWidget;
gdouble climbRate;
guint digits;
@@ -195,6 +178,7 @@ static void ege_adjustment_action_class_init( EgeAdjustmentActionClass* klass )
gDataName = g_quark_from_string("ege-adj-action");
+
objClass->finalize = ege_adjustment_action_finalize;
objClass->get_property = ege_adjustment_action_get_property;
@@ -281,11 +265,15 @@ static void ege_adjustment_action_class_init( EgeAdjustmentActionClass* klass )
}
}
+void ege_adjustment_action_set_compact_tool_factory( EgeCreateAdjWidgetCB factoryCb )
+{
+ gFactoryCb = factoryCb;
+}
+
static void ege_adjustment_action_init( EgeAdjustmentAction* action )
{
action->private_data = EGE_ADJUSTMENT_ACTION_GET_PRIVATE( action );
action->private_data->adj = 0;
- action->private_data->toolTips = 0;
action->private_data->focusWidget = 0;
action->private_data->climbRate = 0.0;
action->private_data->digits = 2;
@@ -381,11 +369,11 @@ static void ege_adjustment_action_get_property( GObject* obj, guint propId, GVal
case PROP_ICON_ID:
g_value_set_string( value, action->private_data->iconId );
- break;
+ break;
case PROP_ICON_SIZE:
g_value_set_int( value, action->private_data->iconSize );
- break;
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID( obj, propId, pspec );
@@ -834,21 +822,23 @@ static GtkWidget* create_tool_item( GtkAction* action )
g_object_get_property( G_OBJECT(action), "short_label", &value );
if ( act->private_data->appearanceMode == APPEARANCE_FULL ) {
- // Slider
+ /* Slider */
gchar *leakyForNow = g_value_dup_string( &value );
spinbutton = gtk_hscale_new( act->private_data->adj);
gtk_widget_set_size_request(spinbutton, 100, -1);
gtk_scale_set_digits( GTK_SCALE(spinbutton), 0 );
g_signal_connect( G_OBJECT(spinbutton), "format-value", G_CALLBACK(slider_format_falue), leakyForNow );
-#if GTK_CHECK_VERSION(2,12,0)
} else if ( act->private_data->appearanceMode == APPEARANCE_MINIMAL ) {
spinbutton = gtk_scale_button_new( GTK_ICON_SIZE_MENU, 0, 100, 2, 0 );
gtk_scale_button_set_adjustment( GTK_SCALE_BUTTON(spinbutton), act->private_data->adj );
gtk_scale_button_set_icons( GTK_SCALE_BUTTON(spinbutton), floogles );
-#endif /* GTK_CHECK_VERSION(2,12,0) */
} else {
- spinbutton = gtk_spin_button_new( act->private_data->adj, act->private_data->climbRate, act->private_data->digits );
+ if ( gFactoryCb ) {
+ spinbutton = gFactoryCb( act->private_data->adj, act->private_data->climbRate, act->private_data->digits );
+ } else {
+ spinbutton = gtk_spin_button_new( act->private_data->adj, act->private_data->climbRate, act->private_data->digits );
+ }
}
item = GTK_WIDGET( gtk_tool_item_new() );
@@ -860,27 +850,24 @@ static GtkWidget* create_tool_item( GtkAction* action )
g_object_get_property( G_OBJECT(action), "tooltip", &tooltip );
const gchar* tipstr = g_value_get_string( &tooltip );
if ( tipstr && *tipstr ) {
- if ( !act->private_data->toolTips ) {
- act->private_data->toolTips = gtk_tooltips_new();
- }
- gtk_tooltips_set_tip( act->private_data->toolTips, spinbutton, tipstr, 0 );
+ gtk_widget_set_tooltip_text( spinbutton, tipstr );
}
- g_value_unset( &tooltip );
+ g_value_unset( &tooltip );
}
if ( act->private_data->appearanceMode != APPEARANCE_FULL ) {
- GtkWidget* filler1 = gtk_label_new(" ");
- gtk_box_pack_start( GTK_BOX(hb), filler1, FALSE, FALSE, 0 );
+ GtkWidget* filler1 = gtk_label_new(" ");
+ gtk_box_pack_start( GTK_BOX(hb), filler1, FALSE, FALSE, 0 );
- // Use an icon if available or use short-label
- if ( act->private_data->iconId && strcmp( act->private_data->iconId, "" ) != 0 ) {
+ /* Use an icon if available or use short-label */
+ if ( act->private_data->iconId && strcmp( act->private_data->iconId, "" ) != 0 ) {
GtkWidget* icon = sp_icon_new( act->private_data->iconSize, act->private_data->iconId );
gtk_box_pack_start( GTK_BOX(hb), icon, FALSE, FALSE, 0 );
- } else {
+ } else {
GtkWidget* lbl = gtk_label_new( g_value_get_string( &value ) ? g_value_get_string( &value ) : "wwww" );
gtk_misc_set_alignment( GTK_MISC(lbl), 1.0, 0.5 );
gtk_box_pack_start( GTK_BOX(hb), lbl, FALSE, FALSE, 0 );
- }
+ }
}
if ( act->private_data->appearanceMode == APPEARANCE_FULL ) {
@@ -904,10 +891,8 @@ static GtkWidget* create_tool_item( GtkAction* action )
g_signal_connect_swapped( G_OBJECT(spinbutton), "event", G_CALLBACK(event_cb), action );
if ( act->private_data->appearanceMode == APPEARANCE_FULL ) {
/* */
-#if GTK_CHECK_VERSION(2,12,0)
} else if ( act->private_data->appearanceMode == APPEARANCE_MINIMAL ) {
/* */
-#endif /* GTK_CHECK_VERSION(2,12,0) */
} else {
gtk_entry_set_width_chars( GTK_ENTRY(spinbutton), act->private_data->digits + 3 );
}
@@ -919,7 +904,7 @@ static GtkWidget* create_tool_item( GtkAction* action )
act->private_data->toolPost( item );
}
- g_value_unset( &value );
+ g_value_unset( &value );
} else {
item = gParentClass->create_tool_item( action );
}
@@ -953,10 +938,8 @@ gboolean focus_in_cb( GtkWidget *widget, GdkEventKey *event, gpointer data )
EgeAdjustmentAction* action = EGE_ADJUSTMENT_ACTION( data );
if ( GTK_IS_SPIN_BUTTON(widget) ) {
action->private_data->lastVal = gtk_spin_button_get_value( GTK_SPIN_BUTTON(widget) );
-#if GTK_CHECK_VERSION(2,12,0)
} else if ( GTK_IS_SCALE_BUTTON(widget) ) {
action->private_data->lastVal = gtk_scale_button_get_value( GTK_SCALE_BUTTON(widget) );
-#endif /* GTK_CHECK_VERSION(2,12,0) */
} else if (GTK_IS_RANGE(widget) ) {
action->private_data->lastVal = gtk_range_get_value( GTK_RANGE(widget) );
}
diff --git a/src/ege-adjustment-action.h b/src/ege-adjustment-action.h
index 4a8a172e2..f63d4ed3e 100644
--- a/src/ege-adjustment-action.h
+++ b/src/ege-adjustment-action.h
@@ -46,7 +46,7 @@
/* Note: this file should be kept compilable as both .cpp and .c */
#include <glib.h>
-#include <gtk/gtkaction.h>
+#include <gtk/gtk.h>
#include <glib-object.h>
G_BEGIN_DECLS
@@ -87,6 +87,24 @@ struct _EgeAdjustmentActionClass
/** Standard Gtk type function */
GType ege_adjustment_action_get_type( void );
+
+/*
+ * Note: This normally could be implemented via a GType property for the class to construct,
+ * but gtkmm classes implemented in C++ only will often not funciton properly.
+ *
+ */
+
+/** Callback type for widgets creation factory */
+typedef GtkWidget* (*EgeCreateAdjWidgetCB)( GtkAdjustment *adjustment, gdouble climb_rate, guint digits );
+
+/**
+ * Sets a factory callback to be used to create the specific widget.
+ *
+ * @param factoryCb the callback to use to create custom widgets, NULL to use the default.
+ */
+void ege_adjustment_action_set_compact_tool_factory( EgeCreateAdjWidgetCB factoryCb );
+
+
/**
* Creates a new EgeAdjustmentAction instance.
* This is a GtkAction subclass that manages a value stored in a
diff --git a/src/ege-color-prof-tracker.cpp b/src/ege-color-prof-tracker.cpp
index 900246595..6aeb554f9 100644
--- a/src/ege-color-prof-tracker.cpp
+++ b/src/ege-color-prof-tracker.cpp
@@ -41,9 +41,7 @@
#include <string.h>
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkmarshal.h>
+#include <gtk/gtk.h>
#ifdef GDK_WINDOWING_X11
#include <X11/Xlib.h>
@@ -450,7 +448,7 @@ void target_hierarchy_changed_cb(GtkWidget* widget, GtkWidget* prev_top, gpointe
{
if ( !prev_top && gtk_widget_get_toplevel(widget) ) {
GtkWidget* top = gtk_widget_get_toplevel(widget);
- if ( GTK_WIDGET_TOPLEVEL(top) ) {
+ if ( gtk_widget_is_toplevel(top) ) {
GtkWindow* win = GTK_WINDOW(top);
g_signal_connect( G_OBJECT(win), "event-after", G_CALLBACK( event_after_cb ), user_data );
g_object_weak_ref( G_OBJECT(win), window_finalized, user_data );
diff --git a/src/ege-output-action.cpp b/src/ege-output-action.cpp
index 72616ce18..c1a5be694 100644
--- a/src/ege-output-action.cpp
+++ b/src/ege-output-action.cpp
@@ -41,9 +41,7 @@
#include <string.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtktoolitem.h>
+#include <gtk/gtk.h>
#include "ege-output-action.h"
diff --git a/src/ege-output-action.h b/src/ege-output-action.h
index e626ccd8c..fc21c2f27 100644
--- a/src/ege-output-action.h
+++ b/src/ege-output-action.h
@@ -46,7 +46,7 @@
/* Note: this file should be kept compilable as both .cpp and .c */
#include <glib.h>
-#include <gtk/gtkaction.h>
+#include <gtk/gtk.h>
#include <glib-object.h>
G_BEGIN_DECLS
diff --git a/src/ege-select-one-action.cpp b/src/ege-select-one-action.cpp
index 83a083425..ea08f1c06 100644
--- a/src/ege-select-one-action.cpp
+++ b/src/ege-select-one-action.cpp
@@ -41,16 +41,7 @@
#include <string.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtktoolitem.h>
#include <gtk/gtk.h>
-#include <gtk/gtkcellrenderertext.h>
-#include <gtk/gtkcellrendererpixbuf.h>
-#include <gtk/gtkcelllayout.h>
-#include <gtk/gtkradioaction.h>
-#include <gtk/gtkradiomenuitem.h>
-#include <gtk/gtktable.h>
#include "ege-select-one-action.h"
@@ -661,7 +652,6 @@ GtkWidget* create_tool_item( GtkAction* action )
GtkTreeIter iter;
gboolean valid = FALSE;
gint index = 0;
- GtkTooltips* tooltips = gtk_tooltips_new();
{
gchar* sss = 0;
@@ -746,7 +736,7 @@ GtkWidget* create_tool_item( GtkAction* action )
sub = gtk_action_create_tool_item( GTK_ACTION(ract) );
gtk_action_connect_proxy( GTK_ACTION(ract), sub );
- gtk_tool_item_set_tooltip( GTK_TOOL_ITEM(sub), tooltips, tip, NULL );
+ gtk_tool_item_set_tooltip_text( GTK_TOOL_ITEM(sub), tip );
gtk_box_pack_start( GTK_BOX(holder), sub, FALSE, FALSE, 0 );
@@ -759,7 +749,6 @@ GtkWidget* create_tool_item( GtkAction* action )
}
g_object_set_data( G_OBJECT(holder), "ege-proxy_action-group", group );
- g_object_set_data( G_OBJECT(holder), "ege-tooltips", tooltips );
gtk_container_add( GTK_CONTAINER(item), holder );
} else {
@@ -935,7 +924,6 @@ void resync_sensitive( EgeSelectOneAction* act )
GSList* group = (GSList*)data;
// List is backwards in group as compared to GtkTreeModel, we better do matching.
while ( group ) {
-#if GTK_CHECK_VERSION(2,16,0)
GtkRadioAction* ract = GTK_RADIO_ACTION(group->data);
const gchar* label = gtk_action_get_label( GTK_ACTION( ract ) );
@@ -964,8 +952,6 @@ void resync_sensitive( EgeSelectOneAction* act )
}
gtk_action_set_sensitive( GTK_ACTION(ract), sens );
-#endif
-
group = g_slist_next(group);
}
}
diff --git a/src/ege-select-one-action.h b/src/ege-select-one-action.h
index 36943b978..d605f4a67 100644
--- a/src/ege-select-one-action.h
+++ b/src/ege-select-one-action.h
@@ -49,8 +49,7 @@
/* Note: this file should be kept compilable as both .cpp and .c */
#include <glib.h>
-#include <gtk/gtkaction.h>
-#include <gtk/gtktreemodel.h>
+#include <gtk/gtk.h>
#include <glib-object.h>
G_BEGIN_DECLS
diff --git a/src/eraser-context.h b/src/eraser-context.h
index a581acd94..68ed04ad5 100644
--- a/src/eraser-context.h
+++ b/src/eraser-context.h
@@ -22,10 +22,10 @@
#include "common-context.h"
#define SP_TYPE_ERASER_CONTEXT (sp_eraser_context_get_type())
-#define SP_ERASER_CONTEXT(o) (GTK_CHECK_CAST((o), SP_TYPE_ERASER_CONTEXT, SPEraserContext))
-#define SP_ERASER_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_CAST((k), SP_TYPE_ERASER_CONTEXT, SPEraserContextClass))
-#define SP_IS_ERASER_CONTEXT(o) (GTK_CHECK_TYPE((o), SP_TYPE_ERASER_CONTEXT))
-#define SP_IS_ERASER_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_TYPE((k), SP_TYPE_ERASER_CONTEXT))
+#define SP_ERASER_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_ERASER_CONTEXT, SPEraserContext))
+#define SP_ERASER_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_ERASER_CONTEXT, SPEraserContextClass))
+#define SP_IS_ERASER_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_ERASER_CONTEXT))
+#define SP_IS_ERASER_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_ERASER_CONTEXT))
class SPEraserContext;
class SPEraserContextClass;
diff --git a/src/event-context.cpp b/src/event-context.cpp
index 828ce3d5b..5a1c7130a 100644
--- a/src/event-context.cpp
+++ b/src/event-context.cpp
@@ -30,8 +30,7 @@
#include <string.h>
#include <gdk/gdkkeysyms.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkmenu.h>
+#include <gtk/gtk.h>
#include <glibmm/i18n.h>
#include <cstring>
#include <string>
diff --git a/src/event-context.h b/src/event-context.h
index 71084cb5f..b0772c23a 100644
--- a/src/event-context.h
+++ b/src/event-context.h
@@ -18,8 +18,7 @@
*/
#include <glib-object.h>
-#include <gdk/gdktypes.h>
-#include <gdk/gdkevents.h>
+#include <gdk/gdk.h>
#include "knot.h"
#include "2geom/forward.h"
diff --git a/src/extension/CMakeLists.txt b/src/extension/CMakeLists.txt
index cd640d3d0..60de65416 100644
--- a/src/extension/CMakeLists.txt
+++ b/src/extension/CMakeLists.txt
@@ -1,41 +1,251 @@
-SET(extfolders
-#dxf2svg
-implementation
-internal
-internal/bitmap
-internal/filter
-internal/pdfinput
-param
-script
-)
-FOREACH(extlistsrc ${extfolders})
- ADD_SUBDIRECTORY(${extlistsrc})
-ENDFOREACH(extlistsrc)
-
-SET(extension_SRC
-db.cpp
-dependency.cpp
-effect.cpp
-error-file.cpp
-execution-env.cpp
-extension.cpp
-init.cpp
-input.cpp
-output.cpp
-patheffect.cpp
-prefdialog.cpp
-print.cpp
-system.cpp
-timer.cpp
-#${extension_dxf2svg_SRC}
-${extension_implementation_SRC}
-${extension_internal_bitmap_SRC}
-${extension_internal_filter_SRC}
-${extension_internal_pdfinput_SRC}
-${extension_param_SRC}
-${extension_script_SRC}
+set(extension_SRC
+ db.cpp
+ dependency.cpp
+ effect.cpp
+ error-file.cpp
+ execution-env.cpp
+ extension.cpp
+ init.cpp
+ input.cpp
+ output.cpp
+ patheffect.cpp
+ prefdialog.cpp
+ print.cpp
+ system.cpp
+ timer.cpp
+
+ implementation/implementation.cpp
+ implementation/xslt.cpp
+ implementation/script.cpp
+
+ param/bool.cpp
+ param/color.cpp
+ param/description.cpp
+ param/enum.cpp
+ param/float.cpp
+ param/int.cpp
+ param/notebook.cpp
+ param/parameter.cpp
+ param/radiobutton.cpp
+ param/string.cpp
+
+ internal/bluredge.cpp
+ internal/cairo-png-out.cpp
+ internal/cairo-ps-out.cpp
+ internal/cairo-render-context.cpp
+ internal/cairo-renderer.cpp
+ internal/cairo-renderer-pdf-out.cpp
+ internal/emf-win32-inout.cpp
+ internal/emf-win32-print.cpp
+ internal/gdkpixbuf-input.cpp
+ internal/gimpgrad.cpp
+ internal/grid.cpp
+ internal/latex-pstricks.cpp
+ internal/latex-pstricks-out.cpp
+ internal/odf.cpp
+ internal/latex-text-renderer.cpp
+ internal/pdf-input-cairo.cpp
+ internal/pov-out.cpp
+ internal/javafx-out.cpp
+ internal/svg.cpp
+ internal/svgz.cpp
+
+ internal/filter/filter-all.cpp
+ internal/filter/filter-file.cpp
+ internal/filter/filter.cpp
+
+ internal/pdfinput/pdf-input.cpp
+ internal/pdfinput/pdf-parser.cpp
+ internal/pdfinput/svg-builder.cpp
+
+ script/InkscapeScript.cpp
+
+ # dxf2svg/aci2rgb.cpp
+ # dxf2svg/entities2elements.cpp
+ # dxf2svg/tables2svg_info.cpp
+ # dxf2svg/blocks.cpp
+ # dxf2svg/entities.cpp
+ # dxf2svg/tables.cpp
+ # dxf2svg/dxf2svg.cpp
+ # dxf2svg/read_dxf.cpp
+ # dxf2svg/test_dxf.cpp
+
+
+ # ------
+ # Header
+ db.h
+ dependency.h
+ effect.h
+ error-file.h
+ execution-env.h
+ extension-forward.h
+ extension.h
+ init.h
+ input.h
+ output.h
+ param/bool.h
+ param/color.h
+ param/description.h
+ param/enum.h
+ param/float.h
+ param/int.h
+ param/notebook.h
+ param/parameter.h
+ param/radiobutton.h
+ param/string.h
+ patheffect.h
+ prefdialog.h
+ print.h
+ system.h
+ timer.h
+
+ implementation/implementation.h
+ implementation/script.h
+ implementation/xslt.h
+
+ internal/bluredge.h
+ internal/cairo-png-out.h
+ internal/cairo-ps-out.h
+ internal/cairo-render-context.h
+ internal/cairo-renderer-pdf-out.h
+ internal/cairo-renderer.h
+ internal/clear-n_.h
+ internal/emf-win32-inout.h
+ internal/emf-win32-print.h
+ internal/filter/abc.h
+ internal/filter/color.h
+ internal/filter/drop-shadow.h
+ internal/filter/experimental.h
+ internal/filter/filter.h
+ internal/filter/morphology.h
+ internal/filter/shadows.h
+ internal/filter/snow.h
+ internal/gdkpixbuf-input.h
+ internal/gimpgrad.h
+ internal/grid.h
+ internal/javafx-out.h
+ internal/latex-pstricks-out.h
+ internal/latex-pstricks.h
+ internal/latex-text-renderer.h
+ internal/odf.h
+ internal/pdf-input-cairo.h
+ internal/pdfinput/pdf-input.h
+ internal/pdfinput/pdf-parser.h
+ internal/pdfinput/svg-builder.h
+ internal/pov-out.h
+ internal/svg.h
+ internal/svgz.h
+ internal/win32.h
+
+ script/InkscapeScript.h
)
-ADD_LIBRARY(extension STATIC ${extension_SRC})
-TARGET_LINK_LIBRARIES(extension
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+if(WIN32)
+ list(APPEND extension_SRC
+ internal/win32.cpp
+ internal/win32.h
+ )
+endif()
+
+if(LibWPG_FOUND)
+ list(APPEND extension_SRC
+ internal/wpg-input.cpp
+ internal/wpg-input.h
+ )
+endif()
+
+if(ImageMagick_FOUND)
+ list(APPEND extension_SRC
+ internal/bitmap/adaptiveThreshold.cpp
+ internal/bitmap/adaptiveThreshold.h
+ internal/bitmap/addNoise.cpp
+ internal/bitmap/addNoise.h
+ internal/bitmap/blur.cpp
+ internal/bitmap/blur.h
+ internal/bitmap/channel.cpp
+ internal/bitmap/channel.h
+ internal/bitmap/charcoal.cpp
+ internal/bitmap/charcoal.h
+ internal/bitmap/colorize.cpp
+ internal/bitmap/colorize.h
+ internal/bitmap/contrast.cpp
+ internal/bitmap/contrast.h
+ internal/bitmap/cycleColormap.cpp
+ internal/bitmap/cycleColormap.h
+ internal/bitmap/despeckle.cpp
+ internal/bitmap/despeckle.h
+ internal/bitmap/edge.cpp
+ internal/bitmap/edge.h
+ internal/bitmap/emboss.cpp
+ internal/bitmap/emboss.h
+ internal/bitmap/enhance.cpp
+ internal/bitmap/enhance.h
+ internal/bitmap/equalize.cpp
+ internal/bitmap/equalize.h
+ internal/bitmap/gaussianBlur.cpp
+ internal/bitmap/gaussianBlur.h
+ internal/bitmap/imagemagick.cpp
+ internal/bitmap/imagemagick.h
+ internal/bitmap/implode.cpp
+ internal/bitmap/implode.h
+ internal/bitmap/level.cpp
+ internal/bitmap/level.h
+ internal/bitmap/levelChannel.cpp
+ internal/bitmap/levelChannel.h
+ internal/bitmap/medianFilter.cpp
+ internal/bitmap/medianFilter.h
+ internal/bitmap/modulate.cpp
+ internal/bitmap/modulate.h
+ internal/bitmap/negate.cpp
+ internal/bitmap/negate.h
+ internal/bitmap/normalize.cpp
+ internal/bitmap/normalize.h
+ internal/bitmap/oilPaint.cpp
+ internal/bitmap/oilPaint.h
+ internal/bitmap/opacity.cpp
+ internal/bitmap/opacity.h
+ internal/bitmap/raise.cpp
+ internal/bitmap/raise.h
+ internal/bitmap/reduceNoise.cpp
+ internal/bitmap/reduceNoise.h
+ internal/bitmap/sample.cpp
+ internal/bitmap/sample.h
+ internal/bitmap/shade.cpp
+ internal/bitmap/shade.h
+ internal/bitmap/sharpen.cpp
+ internal/bitmap/sharpen.h
+ internal/bitmap/solarize.cpp
+ internal/bitmap/solarize.h
+ internal/bitmap/spread.cpp
+ internal/bitmap/spread.h
+ internal/bitmap/swirl.cpp
+ internal/bitmap/swirl.h
+ internal/bitmap/threshold.cpp
+ internal/bitmap/threshold.h
+ internal/bitmap/unsharpmask.cpp
+ internal/bitmap/unsharpmask.h
+ internal/bitmap/wave.cpp
+ internal/bitmap/wave.h
+ )
+endif()
+
+if(WITH_DBUS)
+ list(APPEND extension_SRC
+ dbus/application-interface.cpp
+ dbus/dbus-init.cpp
+ dbus/document-interface.cpp
+
+ # ------
+ # Header
+ dbus/application-interface.h
+ dbus/dbus-init.h
+ dbus/document-interface.h
+ dbus/wrapper/inkscape-dbus-wrapper.h
+ )
+
+ include_directories(dbus)
+endif()
+
+# add_inkscape_lib(extension_LIB "${extension_SRC}")
+add_inkscape_source("${extension_SRC}")
diff --git a/src/extension/dbus/document-interface.cpp b/src/extension/dbus/document-interface.cpp
index 8e22849b5..4e629a1a9 100644
--- a/src/extension/dbus/document-interface.cpp
+++ b/src/extension/dbus/document-interface.cpp
@@ -35,6 +35,7 @@
#include "selection.h" //selection struct
#include "sp-ellipse.h"
#include "sp-object.h"
+#include "sp-root.h"
#include "style.h" //style_write
#include "file.h" //IO
@@ -202,8 +203,7 @@ dbus_create_node (SPDesktop *desk, const gchar *type)
* There is probably a better way to do this (use the shape tools default styles)
* but I'm not sure how.
*/
-gchar *
-finish_create_shape (DocumentInterface *object, GError **error, Inkscape::XML::Node *newNode, gchar *desc)
+gchar *finish_create_shape (DocumentInterface *object, GError ** /*error*/, Inkscape::XML::Node *newNode, gchar *desc)
{
SPCSSAttr *style = sp_desktop_get_style(object->desk, TRUE);
@@ -218,11 +218,11 @@ finish_create_shape (DocumentInterface *object, GError **error, Inkscape::XML::N
object->desk->currentLayer()->appendChildRepr(newNode);
object->desk->currentLayer()->updateRepr();
- if (object->updates)
-
- Inkscape::DocumentUndo::done(sp_desktop_document(object->desk), 0, (gchar *)desc);
- //else
+ if (object->updates) {
+ Inkscape::DocumentUndo::done(sp_desktop_document(object->desk), 0, (gchar *)desc);
+ //} else {
//document_interface_pause_updates(object, error);
+ }
return strdup(newNode->attribute("id"));
}
@@ -285,7 +285,7 @@ document_interface_class_init (DocumentInterfaceClass *klass)
static void
document_interface_init (DocumentInterface *object)
{
- object->desk = NULL;
+ object->desk = NULL;
}
@@ -312,37 +312,34 @@ inkscape_error_quark (void)
#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
-GType
-inkscape_error_get_type (void)
+GType inkscape_error_get_type(void)
{
- static GType etype = 0;
+ static GType etype = 0;
- if (etype == 0)
- {
- static const GEnumValue values[] =
- {
+ if (etype == 0) {
+ static const GEnumValue values[] =
+ {
- ENUM_ENTRY (INKSCAPE_ERROR_SELECTION, "Incompatible_Selection"),
- ENUM_ENTRY (INKSCAPE_ERROR_OBJECT, "Incompatible_Object"),
- ENUM_ENTRY (INKSCAPE_ERROR_VERB, "Failed_Verb"),
- ENUM_ENTRY (INKSCAPE_ERROR_OTHER, "Generic_Error"),
- { 0, 0, 0 }
- };
+ ENUM_ENTRY(INKSCAPE_ERROR_SELECTION, "Incompatible_Selection"),
+ ENUM_ENTRY(INKSCAPE_ERROR_OBJECT, "Incompatible_Object"),
+ ENUM_ENTRY(INKSCAPE_ERROR_VERB, "Failed_Verb"),
+ ENUM_ENTRY(INKSCAPE_ERROR_OTHER, "Generic_Error"),
+ { 0, 0, 0 }
+ };
- etype = g_enum_register_static ("InkscapeError", values);
- }
+ etype = g_enum_register_static("InkscapeError", values);
+ }
- return etype;
+ return etype;
}
/****************************************************************************
MISC FUNCTIONS
****************************************************************************/
-gboolean
-document_interface_delete_all (DocumentInterface *object, GError **error)
+gboolean document_interface_delete_all(DocumentInterface *object, GError ** /*error*/)
{
- sp_edit_clear_all (object->desk);
+ sp_edit_clear_all(object->desk);
return TRUE;
}
@@ -523,7 +520,7 @@ document_interface_image (DocumentInterface *object, int x, int y, gchar *filena
return strdup(newNode->attribute("id"));
}
-gchar *document_interface_node (DocumentInterface *object, gchar *type, GError **error)
+gchar *document_interface_node(DocumentInterface *object, gchar *type, GError ** /*error*/)
{
SPDocument * doc = sp_desktop_document (object->desk);
Inkscape::XML::Document *xml_doc = doc->getReprDoc();
@@ -533,10 +530,11 @@ gchar *document_interface_node (DocumentInterface *object, gchar *type, GError *
object->desk->currentLayer()->appendChildRepr(newNode);
object->desk->currentLayer()->updateRepr();
- if (object->updates)
+ if (object->updates) {
Inkscape::DocumentUndo::done(sp_desktop_document(object->desk), 0, (gchar *)"created empty node");
- //else
+ //} else {
//document_interface_pause_updates(object, error);
+ }
return strdup(newNode->attribute("id"));
}
@@ -556,26 +554,23 @@ document_interface_document_get_height (DocumentInterface *object)
return sp_desktop_document(object->desk)->getHeight();
}
-gchar *
-document_interface_document_get_css (DocumentInterface *object, GError **error)
+gchar *document_interface_document_get_css(DocumentInterface *object, GError ** /*error*/)
{
SPCSSAttr *current = (object->desk)->current;
return sp_repr_css_write_string(current);
}
-gboolean
-document_interface_document_merge_css (DocumentInterface *object,
- gchar *stylestring, GError **error)
+gboolean document_interface_document_merge_css(DocumentInterface *object,
+ gchar *stylestring, GError ** /*error*/)
{
SPCSSAttr * style = sp_repr_css_attr_new();
- sp_repr_css_attr_add_from_string (style, stylestring);
- sp_desktop_set_style (object->desk, style);
+ sp_repr_css_attr_add_from_string(style, stylestring);
+ sp_desktop_set_style(object->desk, style);
return TRUE;
}
-gboolean
-document_interface_document_set_css (DocumentInterface *object,
- gchar *stylestring, GError **error)
+gboolean document_interface_document_set_css(DocumentInterface *object,
+ gchar *stylestring, GError ** /*error*/)
{
SPCSSAttr * style = sp_repr_css_attr_new();
sp_repr_css_attr_add_from_string (style, stylestring);
@@ -808,8 +803,7 @@ document_interface_move_to_layer (DocumentInterface *object, gchar *shape,
return TRUE;
}
-GArray *
-document_interface_get_node_coordinates (DocumentInterface *object, gchar *shape)
+GArray *document_interface_get_node_coordinates(DocumentInterface * /*object*/, gchar * /*shape*/)
{
//FIXME: Needs lot's of work.
/*
@@ -855,29 +849,29 @@ document_interface_save (DocumentInterface *object, GError **error)
return FALSE;
}
-gboolean
-document_interface_load (DocumentInterface *object,
- gchar *filename, GError **error)
+gboolean document_interface_load(DocumentInterface *object,
+ gchar *filename, GError ** /*error*/)
{
- desktop_ensure_active (object->desk);
+ desktop_ensure_active(object->desk);
const Glib::ustring file(filename);
sp_file_open(file, NULL, TRUE, TRUE);
- if (object->updates)
+ if (object->updates) {
Inkscape::DocumentUndo::done(sp_desktop_document(object->desk), SP_VERB_FILE_OPEN, "Opened File");
+ }
return TRUE;
}
-gboolean
-document_interface_save_as (DocumentInterface *object,
- const gchar *filename, GError **error)
+gboolean document_interface_save_as(DocumentInterface *object,
+ const gchar *filename, GError ** /*error*/)
{
SPDocument * doc = sp_desktop_document(object->desk);
#ifdef WITH_GNOME_VFS
const Glib::ustring file(filename);
return file_save_remote(doc, file, NULL, TRUE, TRUE);
#endif
- if (!doc || strlen(filename)<1) //Safety check
+ if (!doc || strlen(filename)<1) { //Safety check
return false;
+ }
try {
Inkscape::Extension::save(NULL, doc, filename,
@@ -892,12 +886,12 @@ document_interface_save_as (DocumentInterface *object,
return true;
}
-gboolean
-document_interface_mark_as_unmodified (DocumentInterface *object, GError **error)
+gboolean document_interface_mark_as_unmodified(DocumentInterface *object, GError ** /*error*/)
{
SPDocument * doc = sp_desktop_document(object->desk);
- if (doc)
+ if (doc) {
doc->modified_since_save = FALSE;
+ }
return TRUE;
}
@@ -948,8 +942,7 @@ document_interface_redo (DocumentInterface *object, GError **error)
Need to make sure it plays well with verbs because they are used so much.
****************************************************************************/
-void
-document_interface_pause_updates (DocumentInterface *object, GError **error)
+void document_interface_pause_updates(DocumentInterface *object, GError ** /*error*/)
{
object->updates = FALSE;
object->desk->canvas->drawing_disabled = 1;
@@ -959,8 +952,7 @@ document_interface_pause_updates (DocumentInterface *object, GError **error)
//sp_desktop_document(object->desk)->root->mflags = FALSE;
}
-void
-document_interface_resume_updates (DocumentInterface *object, GError **error)
+void document_interface_resume_updates(DocumentInterface *object, GError ** /*error*/)
{
object->updates = TRUE;
object->desk->canvas->drawing_disabled = 0;
@@ -973,16 +965,15 @@ document_interface_resume_updates (DocumentInterface *object, GError **error)
Inkscape::DocumentUndo::done(sp_desktop_document(object->desk), SP_VERB_CONTEXT_RECT, "Multiple actions");
}
-void
-document_interface_update (DocumentInterface *object, GError **error)
+void document_interface_update(DocumentInterface *object, GError ** /*error*/)
{
- sp_desktop_document(object->desk)->root->uflags = TRUE;
- sp_desktop_document(object->desk)->root->mflags = TRUE;
+ sp_desktop_document(object->desk)->getRoot()->uflags = TRUE;
+ sp_desktop_document(object->desk)->getRoot()->mflags = TRUE;
object->desk->enableInteraction();
sp_desktop_document(object->desk)->_updateDocument();
object->desk->disableInteraction();
- sp_desktop_document(object->desk)->root->uflags = FALSE;
- sp_desktop_document(object->desk)->root->mflags = FALSE;
+ sp_desktop_document(object->desk)->getRoot()->uflags = FALSE;
+ sp_desktop_document(object->desk)->getRoot()->mflags = FALSE;
//Inkscape::DocumentUndo::done(sp_desktop_document(object->desk), SP_VERB_CONTEXT_RECT, "Multiple actions");
}
@@ -990,8 +981,7 @@ document_interface_update (DocumentInterface *object, GError **error)
SELECTION FUNCTIONS FIXME: use call_verb where appropriate (once update system is tested.)
****************************************************************************/
-gboolean
-document_interface_selection_get (DocumentInterface *object, char ***out, GError **error)
+gboolean document_interface_selection_get(DocumentInterface *object, char ***out, GError ** /*error*/)
{
Inkscape::Selection * sel = sp_desktop_selection(object->desk);
GSList const *oldsel = sel->list();
@@ -1034,10 +1024,9 @@ document_interface_selection_add_list (DocumentInterface *object,
return TRUE;
}
-gboolean
-document_interface_selection_set (DocumentInterface *object, char *name, GError **error)
+gboolean document_interface_selection_set(DocumentInterface *object, char *name, GError ** /*error*/)
{
- SPDocument * doc = sp_desktop_document (object->desk);
+ SPDocument * doc = sp_desktop_document(object->desk);
Inkscape::Selection *selection = sp_desktop_selection(object->desk);
selection->set(doc->getObjectById(name));
return TRUE;
@@ -1055,8 +1044,7 @@ document_interface_selection_set_list (DocumentInterface *object,
return TRUE;
}
-gboolean
-document_interface_selection_rotate (DocumentInterface *object, int angle, GError **error)
+gboolean document_interface_selection_rotate(DocumentInterface *object, int angle, GError ** /*error*/)
{
Inkscape::Selection *selection = sp_desktop_selection(object->desk);
sp_selection_rotate(selection, angle);
@@ -1070,8 +1058,7 @@ document_interface_selection_delete (DocumentInterface *object, GError **error)
return dbus_call_verb (object, SP_VERB_EDIT_DELETE, error);
}
-gboolean
-document_interface_selection_clear (DocumentInterface *object, GError **error)
+gboolean document_interface_selection_clear(DocumentInterface *object, GError ** /*error*/)
{
sp_desktop_selection(object->desk)->clear();
return TRUE;
@@ -1092,10 +1079,9 @@ document_interface_select_all_in_all_layers(DocumentInterface *object,
return dbus_call_verb (object, SP_VERB_EDIT_SELECT_ALL_IN_ALL_LAYERS, error);
}
-gboolean
-document_interface_selection_box (DocumentInterface *object, int x, int y,
- int x2, int y2, gboolean replace,
- GError **error)
+gboolean document_interface_selection_box(DocumentInterface * /*object*/, int /*x*/, int /*y*/,
+ int /*x2*/, int /*y2*/, gboolean /*replace*/,
+ GError ** /*error*/)
{
//FIXME: implement.
return FALSE;
@@ -1156,8 +1142,7 @@ document_interface_selection_paste (DocumentInterface *object, GError **error)
return dbus_call_verb (object, SP_VERB_EDIT_PASTE, error);
}
-gboolean
-document_interface_selection_scale (DocumentInterface *object, gdouble grow, GError **error)
+gboolean document_interface_selection_scale(DocumentInterface *object, gdouble grow, GError ** /*error*/)
{
Inkscape::Selection *selection = sp_desktop_selection(object->desk);
if (!selection)
@@ -1168,15 +1153,13 @@ document_interface_selection_scale (DocumentInterface *object, gdouble grow, GEr
return TRUE;
}
-gboolean
-document_interface_selection_move (DocumentInterface *object, gdouble x, gdouble y, GError **error)
+gboolean document_interface_selection_move(DocumentInterface *object, gdouble x, gdouble y, GError ** /*error*/)
{
- sp_selection_move (object->desk, x, 0 - y); //switching coordinate systems.
+ sp_selection_move(object->desk, x, 0 - y); //switching coordinate systems.
return TRUE;
}
-gboolean
-document_interface_selection_move_to (DocumentInterface *object, gdouble x, gdouble y, GError **error)
+gboolean document_interface_selection_move_to(DocumentInterface *object, gdouble x, gdouble y, GError ** /*error*/)
{
Inkscape::Selection * sel = sp_desktop_selection(object->desk);
@@ -1292,13 +1275,12 @@ document_interface_selection_change_level (DocumentInterface *object, gchar *cmd
LAYER FUNCTIONS
****************************************************************************/
-gchar *
-document_interface_layer_new (DocumentInterface *object, GError **error)
+gchar *document_interface_layer_new(DocumentInterface *object, GError ** /*error*/)
{
SPDesktop * dt = object->desk;
SPObject *new_layer = Inkscape::create_layer(dt->currentRoot(), dt->currentLayer(), Inkscape::LPOS_BELOW);
dt->setCurrentLayer(new_layer);
- return g_strdup(get_name_from_object (new_layer));
+ return g_strdup(get_name_from_object(new_layer));
}
gboolean
@@ -1314,8 +1296,7 @@ document_interface_layer_set (DocumentInterface *object,
return TRUE;
}
-gchar **
-document_interface_layer_get_all (DocumentInterface *object)
+gchar **document_interface_layer_get_all(DocumentInterface * /*object*/)
{
//FIXME: implement.
return NULL;
@@ -1348,8 +1329,13 @@ document_interface_layer_previous (DocumentInterface *object, GError **error)
return dbus_call_verb (object, SP_VERB_LAYER_PREV, error);
}
-
-
-
-
-
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
diff --git a/src/extension/dxf2svg/CMakeLists.txt b/src/extension/dxf2svg/CMakeLists.txt
deleted file mode 100644
index b755d7f44..000000000
--- a/src/extension/dxf2svg/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-SET(extension_dxf2svg_SRC
-#aci2rgb.cpp
-#entities2elements.cpp
-#tables2svg_info.cpp
-#blocks.cpp
-#entities.cpp
-#tables.cpp
-#dxf2svg.cpp
-#read_dxf.cpp
-#test_dxf.cpp
-)
diff --git a/src/extension/effect.h b/src/extension/effect.h
index c02ce542b..28ebc5d96 100644
--- a/src/extension/effect.h
+++ b/src/extension/effect.h
@@ -15,7 +15,7 @@
#include <glibmm/i18n.h>
#include <gtkmm/dialog.h>
-#include <gtk/gtkdialog.h>
+#include <gtk/gtk.h>
#include "verbs.h"
#include "prefdialog.h"
diff --git a/src/extension/execution-env.cpp b/src/extension/execution-env.cpp
index f9e099c26..b05685902 100644
--- a/src/extension/execution-env.cpp
+++ b/src/extension/execution-env.cpp
@@ -128,7 +128,7 @@ ExecutionEnv::createWorkingDialog (void) {
SPDesktop *desktop = (SPDesktop *)_doc;
GtkWidget *toplevel = gtk_widget_get_toplevel(&(desktop->canvas->widget));
- if (!toplevel || !GTK_WIDGET_TOPLEVEL (toplevel))
+ if (!toplevel || !gtk_widget_is_toplevel (toplevel))
return;
Gtk::Window *window = Glib::wrap(GTK_WINDOW(toplevel), false);
@@ -141,7 +141,10 @@ ExecutionEnv::createWorkingDialog (void) {
true); // modal
_visibleDialog->signal_response().connect(sigc::mem_fun(this, &ExecutionEnv::workingCanceled));
g_free(dlgmessage);
- _visibleDialog->show();
+
+ if (!_effect->is_silent()){
+ _visibleDialog->show();
+ }
return;
}
diff --git a/src/extension/extension.cpp b/src/extension/extension.cpp
index e67a4b95f..a70c79943 100644
--- a/src/extension/extension.cpp
+++ b/src/extension/extension.cpp
@@ -59,6 +59,7 @@ Parameter * get_param (const gchar * name);
*/
Extension::Extension (Inkscape::XML::Node * in_repr, Implementation::Implementation * in_imp)
: _help(NULL)
+ , silent(false)
, _gui(true)
{
repr = in_repr;
@@ -105,6 +106,9 @@ Extension::Extension (Inkscape::XML::Node * in_repr, Implementation::Implementat
if (!strcmp(chname, "dependency")) {
_deps.push_back(new Dependency(child_repr));
} /* dependency */
+ if (!strcmp(chname, "options")) {
+ silent = !strcmp( child_repr->attribute("silent"), "true" );
+ }
child_repr = sp_repr_next(child_repr);
}
@@ -310,6 +314,16 @@ Extension::get_repr (void)
}
/**
+ \return bool
+ \brief Whether this extension should hide the "working, please wait" dialog
+*/
+bool
+Extension::is_silent (void)
+{
+ return silent;
+}
+
+/**
\return The textual id of this extension
\brief Get the ID of this extension - not a copy don't delete!
*/
diff --git a/src/extension/extension.h b/src/extension/extension.h
index 63981522e..eddddf62c 100644
--- a/src/extension/extension.h
+++ b/src/extension/extension.h
@@ -90,6 +90,7 @@ private:
state_t _state; /**< Which state the Extension is currently in */
std::vector<Dependency *> _deps; /**< Dependencies for this extension */
static std::ofstream error_file; /**< This is the place where errors get reported */
+ bool silent;
bool _gui;
protected:
@@ -111,6 +112,7 @@ public:
gchar * get_name (void);
/** \brief Gets the help string for this extension */
gchar const * get_help (void) { return _help; }
+ bool is_silent (void);
void deactivate (void);
bool deactivated (void);
void printFailure (Glib::ustring reason);
diff --git a/src/extension/implementation/CMakeLists.txt b/src/extension/implementation/CMakeLists.txt
deleted file mode 100644
index 87e1b2541..000000000
--- a/src/extension/implementation/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-SET(extension_implementation_SRC
-implementation.cpp
-xslt.cpp
-script.cpp
-)
diff --git a/src/extension/implementation/implementation.h b/src/extension/implementation/implementation.h
index bf584b401..b9e417feb 100644
--- a/src/extension/implementation/implementation.h
+++ b/src/extension/implementation/implementation.h
@@ -12,7 +12,7 @@
#ifndef __INKSCAPE_EXTENSION_IMPLEMENTATION_H__
#define __INKSCAPE_EXTENSION_IMPLEMENTATION_H__
-#include <gtk/gtkdialog.h>
+#include <gtk/gtk.h>
#include <gdkmm/types.h>
#include <gtkmm/widget.h>
diff --git a/src/extension/input.h b/src/extension/input.h
index 24cbc4896..8b198495e 100644
--- a/src/extension/input.h
+++ b/src/extension/input.h
@@ -16,7 +16,7 @@
#include "extension.h"
#include "xml/repr.h"
#include "document.h"
-#include <gtk/gtkdialog.h>
+#include <gtk/gtk.h>
namespace Inkscape {
namespace Extension {
diff --git a/src/extension/internal/CMakeLists.txt b/src/extension/internal/CMakeLists.txt
deleted file mode 100644
index 8b23cb0ac..000000000
--- a/src/extension/internal/CMakeLists.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-IF(WIN32)
-SET(EXT_INT_WIN
-win32.cpp
-)
-ENDIF(WIN32)
-
-SET(extension_internal_SRC
-bluredge.cpp
-cairo-png-out.cpp
-cairo-ps-out.cpp
-cairo-render-context.cpp
-cairo-renderer.cpp
-cairo-renderer-pdf-out.cpp
-emf-win32-inout.cpp
-emf-win32-print.cpp
-gdkpixbuf-input.cpp
-gimpgrad.cpp
-grid.cpp
-latex-pstricks.cpp
-latex-pstricks-out.cpp
-odf.cpp
-pdfinput
-latex-text-renderer.cpp
-pdf-input-cairo.cpp
-pov-out.cpp
-javafx-out.cpp
-svg.cpp
-svgz.cpp
-wpg-input.cpp
-${EXT_INT_WIN}
-)
diff --git a/src/extension/internal/bitmap/CMakeLists.txt b/src/extension/internal/bitmap/CMakeLists.txt
deleted file mode 100644
index 8aec17492..000000000
--- a/src/extension/internal/bitmap/CMakeLists.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-SET(extension_internal_bitmap_SRC
-adaptiveThreshold.cpp
-addNoise.cpp
-blur.cpp
-channel.cpp
-charcoal.cpp
-colorize.cpp
-contrast.cpp
-cycleColormap.cpp
-despeckle.cpp
-edge.cpp
-emboss.cpp
-enhance.cpp
-equalize.cpp
-gaussianBlur.cpp
-imagemagick.cpp
-implode.cpp
-levelChannel.cpp
-level.cpp
-medianFilter.cpp
-modulate.cpp
-negate.cpp
-normalize.cpp
-oilPaint.cpp
-opacity.cpp
-raise.cpp
-reduceNoise.cpp
-sample.cpp
-shade.cpp
-sharpen.cpp
-solarize.cpp
-spread.cpp
-swirl.cpp
-threshold.cpp
-unsharpmask.cpp
-wave.cpp
-)
diff --git a/src/extension/internal/bluredge.cpp b/src/extension/internal/bluredge.cpp
index 8ec09d11e..76582ab05 100644
--- a/src/extension/internal/bluredge.cpp
+++ b/src/extension/internal/bluredge.cpp
@@ -59,7 +59,7 @@ BlurEdge::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View
int steps = module->get_param_int("num-steps");
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- double old_offset = prefs->getDouble("/options/defaultoffsetwidth/value", 1.0);
+ double old_offset = prefs->getDouble("/options/defaultoffsetwidth/value", 1.0, "px");
using Inkscape::Util::GSListConstIterator;
// TODO need to properly refcount the items, at least
@@ -97,10 +97,10 @@ BlurEdge::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View
if (offset < 0.0) {
/* Doing an inset here folks */
offset *= -1.0;
- prefs->setDouble("/options/defaultoffsetwidth/value", offset);
+ prefs->setDoubleUnit("/options/defaultoffsetwidth/value", offset, "px");
sp_action_perform(Inkscape::Verb::get(SP_VERB_SELECTION_INSET)->get_action(desktop), NULL);
} else if (offset > 0.0) {
- prefs->setDouble("/options/defaultoffsetwidth/value", offset);
+ prefs->setDoubleUnit("/options/defaultoffsetwidth/value", offset, "px");
sp_action_perform(Inkscape::Verb::get(SP_VERB_SELECTION_OFFSET)->get_action(desktop), NULL);
}
@@ -110,7 +110,7 @@ BlurEdge::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View
Inkscape::GC::release(new_group);
}
- prefs->setDouble("/options/defaultoffsetwidth/value", old_offset);
+ prefs->setDoubleUnit("/options/defaultoffsetwidth/value", old_offset, "px");
selection->clear();
selection->add(items.begin(), items.end());
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp
index 0e2194c17..b9c2a4488 100644
--- a/src/extension/internal/cairo-render-context.cpp
+++ b/src/extension/internal/cairo-render-context.cpp
@@ -1361,7 +1361,7 @@ CairoRenderContext::renderPathVector(Geom::PathVector const & pathv, SPStyle con
addClipPath(pathv, &style->fill_rule);
} else {
setPathVector(pathv);
- if (style->fill_rule.value == SP_WIND_RULE_EVENODD) {
+ if (style->fill_rule.computed == SP_WIND_RULE_EVENODD) {
cairo_set_fill_rule(_cr, CAIRO_FILL_RULE_EVEN_ODD);
} else {
cairo_set_fill_rule(_cr, CAIRO_FILL_RULE_WINDING);
@@ -1391,7 +1391,7 @@ CairoRenderContext::renderPathVector(Geom::PathVector const & pathv, SPStyle con
_setFillStyle(style, pbox);
setPathVector(pathv);
- if (style->fill_rule.value == SP_WIND_RULE_EVENODD) {
+ if (style->fill_rule.computed == SP_WIND_RULE_EVENODD) {
cairo_set_fill_rule(_cr, CAIRO_FILL_RULE_EVEN_ODD);
} else {
cairo_set_fill_rule(_cr, CAIRO_FILL_RULE_WINDING);
@@ -1606,7 +1606,7 @@ CairoRenderContext::renderGlyphtext(PangoFont *font, Geom::Affine const *font_ma
if (_render_mode == RENDER_MODE_CLIP) {
if (_clip_mode == CLIP_MODE_MASK) {
- if (style->fill_rule.value == SP_WIND_RULE_EVENODD) {
+ if (style->fill_rule.computed == SP_WIND_RULE_EVENODD) {
cairo_set_fill_rule(_cr, CAIRO_FILL_RULE_EVEN_ODD);
} else {
cairo_set_fill_rule(_cr, CAIRO_FILL_RULE_WINDING);
diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp
index dbda82c28..bbafd7e94 100644
--- a/src/extension/internal/cairo-renderer.cpp
+++ b/src/extension/internal/cairo-renderer.cpp
@@ -170,11 +170,13 @@ static void sp_shape_render_invoke_marker_rendering(SPMarker* marker, Geom::Affi
if (render) {
SPItem* marker_item = sp_item_first_item_child(marker);
- tr = (Geom::Affine)marker_item->transform * (Geom::Affine)marker->c2p * tr;
- Geom::Affine old_tr = marker_item->transform;
- marker_item->transform = tr;
- ctx->getRenderer()->renderItem (ctx, marker_item);
- marker_item->transform = old_tr;
+ if (marker_item) {
+ tr = (Geom::Affine)marker_item->transform * (Geom::Affine)marker->c2p * tr;
+ Geom::Affine old_tr = marker_item->transform;
+ marker_item->transform = tr;
+ ctx->getRenderer()->renderItem (ctx, marker_item);
+ marker_item->transform = old_tr;
+ }
}
}
@@ -418,19 +420,18 @@ static void sp_symbol_render(SPItem *item, CairoRenderContext *ctx)
ctx->popState();
}
-static void sp_root_render(SPItem *item, CairoRenderContext *ctx)
+static void sp_root_render(SPRoot *root, CairoRenderContext *ctx)
{
- SPRoot *root = SP_ROOT(item);
CairoRenderer *renderer = ctx->getRenderer();
- if (!ctx->getCurrentState()->has_overflow && item->parent)
+ if (!ctx->getCurrentState()->has_overflow && root->parent)
ctx->addClippingRect(root->x.computed, root->y.computed, root->width.computed, root->height.computed);
ctx->pushState();
- renderer->setStateForItem(ctx, item);
+ renderer->setStateForItem(ctx, root);
Geom::Affine tempmat (root->c2p);
ctx->transform(&tempmat);
- sp_group_render(item, ctx);
+ sp_group_render(root, ctx);
ctx->popState();
}
@@ -541,7 +542,10 @@ static void sp_item_invoke_render(SPItem *item, CairoRenderContext *ctx)
if (SP_IS_ROOT(item)) {
TRACE(("root\n"));
- return sp_root_render(item, ctx);
+ return sp_root_render(SP_ROOT(item), ctx);
+ } else if (SP_IS_SYMBOL(item)) {
+ TRACE(("symbol\n"));
+ return sp_symbol_render(item, ctx);
} else if (SP_IS_GROUP(item)) {
TRACE(("group\n"));
return sp_group_render(item, ctx);
@@ -552,9 +556,6 @@ static void sp_item_invoke_render(SPItem *item, CairoRenderContext *ctx)
TRACE(("use begin---\n"));
sp_use_render(item, ctx);
TRACE(("---use end\n"));
- } else if (SP_IS_SYMBOL(item)) {
- TRACE(("symbol\n"));
- return sp_symbol_render(item, ctx);
} else if (SP_IS_TEXT(item)) {
TRACE(("text\n"));
return sp_text_render(item, ctx);
diff --git a/src/extension/internal/emf-win32-inout.cpp b/src/extension/internal/emf-win32-inout.cpp
index 2716faee2..646b33507 100644
--- a/src/extension/internal/emf-win32-inout.cpp
+++ b/src/extension/internal/emf-win32-inout.cpp
@@ -27,6 +27,8 @@
# include "config.h"
#endif
+//#include "inkscape.h"
+#include "sp-root.h"
#include "sp-path.h"
#include "style.h"
#include "print.h"
@@ -59,6 +61,8 @@ namespace Extension {
namespace Internal {
static float device_scale = DEVICESCALE;
+static RECTL rc_old;
+static bool clipset = false;
EmfWin32::EmfWin32 (void) // The null constructor
{
@@ -101,7 +105,7 @@ emf_print_document_to_file(SPDocument *doc, gchar const *filename)
context.module = mod;
/* fixme: This has to go into module constructor somehow */
/* Create new arena */
- mod->base = SP_ITEM(doc->getRoot());
+ mod->base = doc->getRoot();
mod->arena = NRArena::create();
mod->dkey = SPItem::display_key_new(1);
mod->root = mod->base->invoke_show(mod->arena, mod->dkey, SP_ITEM_SHOW_DISPLAY);
@@ -182,6 +186,7 @@ typedef struct emf_device_context {
typedef struct emf_callback_data {
Glib::ustring *outsvg;
Glib::ustring *path;
+ Glib::ustring *outdef;
EMF_DEVICE_CONTEXT dc[EMF_MAX_DC+1]; // FIXME: This should be dynamic..
int level;
@@ -288,6 +293,9 @@ output_style(PEMF_CALLBACK_DATA d, int iType)
tmp_style << "stroke-opacity:1;";
}
tmp_style << "\" ";
+ if (clipset)
+ tmp_style << "\n\tclip-path=\"url(#clipEmfPath" << d->id << ")\" ";
+ clipset = false;
*(d->outsvg) += tmp_style.str().c_str();
}
@@ -747,19 +755,20 @@ myEnhMetaFileProc(HDC /*hDC*/, HANDLETABLE * /*lpHTable*/, ENHMETARECORD const *
{
dbg_str << "<!-- EMR_HEADER -->\n";
- *(d->outsvg) += "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n";
+ *(d->outdef) += "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n";
if (d->pDesc) {
- *(d->outsvg) += "<!-- ";
- *(d->outsvg) += d->pDesc;
- *(d->outsvg) += " -->\n";
+ *(d->outdef) += "<!-- ";
+ *(d->outdef) += d->pDesc;
+ *(d->outdef) += " -->\n";
}
ENHMETAHEADER *pEmr = (ENHMETAHEADER *) lpEMFR;
- tmp_outsvg << "<svg\n";
- tmp_outsvg << " xmlns:svg=\"http://www.w3.org/2000/svg\"\n";
- tmp_outsvg << " xmlns=\"http://www.w3.org/2000/svg\"\n";
- tmp_outsvg << " version=\"1.0\"\n";
+ SVGOStringStream tmp_outdef;
+ tmp_outdef << "<svg\n";
+ tmp_outdef << " xmlns:svg=\"http://www.w3.org/2000/svg\"\n";
+ tmp_outdef << " xmlns=\"http://www.w3.org/2000/svg\"\n";
+ tmp_outdef << " version=\"1.0\"\n";
d->xDPI = 2540;
d->yDPI = 2540;
@@ -777,15 +786,13 @@ myEnhMetaFileProc(HDC /*hDC*/, HANDLETABLE * /*lpHTable*/, ENHMETARECORD const *
if (pEmr->szlMillimeters.cx && pEmr->szlDevice.cx)
device_scale = PX_PER_MM*pEmr->szlMillimeters.cx/pEmr->szlDevice.cx;
- tmp_outsvg <<
+ tmp_outdef <<
" width=\"" << d->MMX << "mm\"\n" <<
" height=\"" << d->MMY << "mm\">\n";
-// tmp_outsvg <<
-// " id=\"" << (d->id++) << "\">\n";
+ *(d->outdef) += tmp_outdef.str().c_str();
+ *(d->outdef) += "<defs>"; // temporary end of header
- tmp_outsvg << "<g>\n";
-// "<g\n" <<
-// " id=\"" << (d->id++) << "\">\n";
+ tmp_outsvg << "\n</defs>\n<g>\n"; // start of main body
if (pEmr->nHandles) {
d->n_obj = pEmr->nHandles;
@@ -1129,6 +1136,7 @@ myEnhMetaFileProc(HDC /*hDC*/, HANDLETABLE * /*lpHTable*/, ENHMETARECORD const *
assert_empty_path(d, "EMR_EOF");
tmp_outsvg << "</g>\n";
tmp_outsvg << "</svg>\n";
+ *(d->outsvg) = *(d->outdef) + *(d->outsvg);
break;
}
case EMR_SETPIXELV:
@@ -1211,8 +1219,37 @@ myEnhMetaFileProc(HDC /*hDC*/, HANDLETABLE * /*lpHTable*/, ENHMETARECORD const *
dbg_str << "<!-- EMR_EXCLUDECLIPRECT -->\n";
break;
case EMR_INTERSECTCLIPRECT:
+ {
dbg_str << "<!-- EMR_INTERSECTCLIPRECT -->\n";
+
+ PEMRINTERSECTCLIPRECT pEmr = (PEMRINTERSECTCLIPRECT) lpEMFR;
+ RECTL rc = pEmr->rclClip;
+ clipset = true;
+ if ((rc.left == rc_old.left) && (rc.top == rc_old.top) && (rc.right == rc_old.right) && (rc.bottom == rc_old.bottom))
+ break;
+ rc_old = rc;
+
+ double l = pix_to_x_point( d, rc.left, rc.top );
+ double t = pix_to_y_point( d, rc.left, rc.top );
+ double r = pix_to_x_point( d, rc.right, rc.bottom );
+ double b = pix_to_y_point( d, rc.right, rc.bottom );
+
+ SVGOStringStream tmp_rectangle;
+ tmp_rectangle << "\n<clipPath\n\tclipPathUnits=\"userSpaceOnUse\" ";
+ tmp_rectangle << "\n\tid=\"clipEmfPath" << ++(d->id) << "\" >";
+ tmp_rectangle << "\n<rect ";
+ tmp_rectangle << "\n\tx=\"" << l << "\" ";
+ tmp_rectangle << "\n\ty=\"" << t << "\" ";
+ tmp_rectangle << "\n\twidth=\"" << r-l << "\" ";
+ tmp_rectangle << "\n\theight=\"" << b-t << "\" />";
+ tmp_rectangle << "\n</clipPath>";
+
+ assert_empty_path(d, "EMR_RECTANGLE");
+
+ *(d->outdef) += tmp_rectangle.str().c_str();
+ *(d->path) = "";
break;
+ }
case EMR_SCALEVIEWPORTEXTEX:
dbg_str << "<!-- EMR_SCALEVIEWPORTEXTEX -->\n";
break;
@@ -2250,6 +2287,7 @@ EmfWin32::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri )
d.outsvg = new Glib::ustring("");
d.path = new Glib::ustring("");
+ d.outdef = new Glib::ustring("");
CHAR *ansi_uri = (CHAR *) local_fn;
gunichar2 *unicode_fn = g_utf8_to_utf16( local_fn, -1, NULL, NULL, NULL );
@@ -2368,6 +2406,8 @@ EmfWin32::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri )
delete d.outsvg;
if (d.path)
delete d.path;
+ if (d.outdef)
+ delete d.outdef;
if (local_fn)
g_free(local_fn);
if (unicode_fn)
@@ -2409,6 +2449,7 @@ EmfWin32::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri )
delete d.outsvg;
delete d.path;
+ delete d.outdef;
if (d.emf_obj) {
int i;
diff --git a/src/extension/internal/emf-win32-print.cpp b/src/extension/internal/emf-win32-print.cpp
index eb6abeaca..e5d1b0681 100644
--- a/src/extension/internal/emf-win32-print.cpp
+++ b/src/extension/internal/emf-win32-print.cpp
@@ -42,9 +42,7 @@
#include "sp-item.h"
//#include "glib.h"
-//#include "gtk/gtkdialog.h"
-//#include "gtk/gtkbox.h"
-//#include "gtk/gtkstock.h"
+//#include "gtk/gtk.h"
//#include "glibmm/i18n.h"
//#include "enums.h"
@@ -52,6 +50,7 @@
#include "style.h"
//#include "sp-paint-server.h"
#include "inkscape-version.h"
+#include "sp-root.h"
//#include "libnrtype/FontFactory.h"
//#include "libnrtype/font-instance.h"
@@ -144,7 +143,7 @@ PrintEmfWin32::begin (Inkscape::Extension::Print *mod, SPDocument *doc)
d.x1 = _width;
d.y1 = _height;
} else {
- SPItem* doc_item = SP_ITEM(doc->getRoot());
+ SPItem* doc_item = doc->getRoot();
doc_item->invoke_bbox(&d, doc_item->i2d_affine(), TRUE);
}
diff --git a/src/extension/internal/filter/CMakeLists.txt b/src/extension/internal/filter/CMakeLists.txt
deleted file mode 100644
index 80a14ba3a..000000000
--- a/src/extension/internal/filter/CMakeLists.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-SET(extension_internal_filter_SRC
-drop-shadow.h
-filter-all.cpp
-filter.cpp
-filter-file.cpp
-filter.h
-snow.h
-)
diff --git a/src/extension/internal/filter/experimental.h b/src/extension/internal/filter/experimental.h
index 8d260f62e..f60a6b414 100755
--- a/src/extension/internal/filter/experimental.h
+++ b/src/extension/internal/filter/experimental.h
@@ -335,7 +335,7 @@ public:
"<param name=\"simply\" gui-text=\"" N_("Strength:") "\" type=\"float\" appearance=\"full\" precision=\"2\" min=\"0.01\" max=\"20.00\">0.6</param>\n"
"<param name=\"clean\" gui-text=\"" N_("Clean-up:") "\" type=\"int\" appearance=\"full\" min=\"1\" max=\"500\">10</param>\n"
"<param name=\"erase\" gui-text=\"" N_("Erase:") "\" type=\"float\" appearance=\"full\" min=\"0\" max=\"60\">0</param>\n"
- "<param name=\"transluscent\" gui-text=\"" N_("Transluscent") "\" type=\"boolean\" >false</param>\n"
+ "<param name=\"translucent\" gui-text=\"" N_("Translucent") "\" type=\"boolean\" >false</param>\n"
"<_param name=\"smoothheader\" type=\"description\" appearance=\"header\">Smoothness</_param>\n"
"<param name=\"smooth\" gui-text=\"" N_("Strength:") "\" type=\"float\" appearance=\"full\" precision=\"2\" min=\"0.01\" max=\"20.00\">0.6</param>\n"
"<param name=\"dilat\" gui-text=\"" N_("Dilatation:") "\" type=\"float\" appearance=\"full\" min=\"1\" max=\"50\">6</param>\n"
diff --git a/src/extension/internal/filter/filter.cpp b/src/extension/internal/filter/filter.cpp
index 715278051..fb8d4de4b 100644
--- a/src/extension/internal/filter/filter.cpp
+++ b/src/extension/internal/filter/filter.cpp
@@ -133,7 +133,7 @@ Filter::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View *d
items.insert<GSListConstIterator<SPItem *> >(items.end(), selection->itemList(), NULL);
Inkscape::XML::Document * xmldoc = document->doc()->getReprDoc();
- Inkscape::XML::Node * defsrepr = SP_DOCUMENT_DEFS(document->doc())->getRepr();
+ Inkscape::XML::Node * defsrepr = document->doc()->getDefs()->getRepr();
for(std::list<SPItem *>::iterator item = items.begin();
item != items.end(); item++) {
diff --git a/src/extension/internal/javafx-out.cpp b/src/extension/internal/javafx-out.cpp
index 750849eb1..8399d602f 100644
--- a/src/extension/internal/javafx-out.cpp
+++ b/src/extension/internal/javafx-out.cpp
@@ -38,7 +38,7 @@
#include "helper/geom.h"
#include "helper/geom-curves.h"
#include <io/sys.h>
-
+#include "sp-root.h"
#include <string>
#include <stdio.h>
@@ -758,7 +758,7 @@ bool JavaFXOutput::doTree(SPDocument *doc)
miny = bignum;
maxy = -bignum;
- if (!doTreeRecursive(doc, doc->root)) {
+ if (!doTreeRecursive(doc, doc->getRoot())) {
return false;
}
@@ -875,7 +875,7 @@ bool JavaFXOutput::saveDocument(SPDocument *doc, gchar const *filename_utf8)
out(" content: [\n");
idindex = 0;
- doBody(doc, doc->root);
+ doBody(doc, doc->getRoot());
if (!doTail()) {
return false;
diff --git a/src/extension/internal/latex-text-renderer.cpp b/src/extension/internal/latex-text-renderer.cpp
index 1f9bdfef1..5d9fec905 100644
--- a/src/extension/internal/latex-text-renderer.cpp
+++ b/src/extension/internal/latex-text-renderer.cpp
@@ -10,7 +10,7 @@
* Jon A. Cruz <jon@joncruz.org>
* Abhishek Sharma
*
- * Copyright (C) 2006-2010 Authors
+ * Copyright (C) 2006-2011 Authors
*
* Licensed under GNU GPL
*/
@@ -196,22 +196,22 @@ static char const preamble[] =
"%% \n"
"%% For more information, please see info/svg-inkscape on CTAN:\n"
"%% http://tug.ctan.org/tex-archive/info/svg-inkscape\n"
-"\n"
-"\\begingroup\n"
-" \\makeatletter\n"
+"%%\n"
+"\\begingroup%\n"
+" \\makeatletter%\n"
" \\providecommand\\color[2][]{%\n"
-" \\errmessage{(Inkscape) Color is used for the text in Inkscape, but the package \'color.sty\' is not loaded}\n"
+" \\errmessage{(Inkscape) Color is used for the text in Inkscape, but the package \'color.sty\' is not loaded}%\n"
" \\renewcommand\\color[2][]{}%\n"
-" }\n"
+" }%\n"
" \\providecommand\\transparent[1]{%\n"
-" \\errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package \'transparent.sty\' is not loaded}\n"
+" \\errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package \'transparent.sty\' is not loaded}%\n"
" \\renewcommand\\transparent[1]{}%\n"
-" }\n"
-" \\providecommand\\rotatebox[2]{#2}\n";
+" }%\n"
+" \\providecommand\\rotatebox[2]{#2}%\n";
static char const postamble[] =
" \\end{picture}%\n"
-"\\endgroup\n";
+"\\endgroup%\n";
void
LaTeXTextRenderer::writePreamble()
@@ -266,10 +266,15 @@ LaTeXTextRenderer::sp_text_render(SPItem *item)
SPText *textobj = SP_TEXT (item);
SPStyle *style = item->style;
- gchar *str = sp_te_get_string_multiline(item);
- if (!str) {
+ gchar *strtext = sp_te_get_string_multiline(item);
+ if (!strtext) {
return;
}
+ // replace carriage return with double slash
+ gchar ** splitstr = g_strsplit(strtext, "\n", -1);
+ gchar *str = g_strjoinv("\\\\ ", splitstr);
+ g_free(strtext);
+ g_strfreev(splitstr);
// get position and alignment
// Align vertically on the baseline of the font (retreived from the anchor point)
@@ -340,7 +345,7 @@ LaTeXTextRenderer::sp_text_render(SPItem *item)
li != le; li.nextStartOfSpan())
{
SPStyle const &spanstyle = *(sp_te_style_at_position (item, li));
- bool is_bold = false, is_italic = false;
+ bool is_bold = false, is_italic = false, is_oblique = false;
if (spanstyle.font_weight.computed == SP_CSS_FONT_WEIGHT_500 ||
spanstyle.font_weight.computed == SP_CSS_FONT_WEIGHT_600 ||
@@ -351,19 +356,34 @@ LaTeXTextRenderer::sp_text_render(SPItem *item)
spanstyle.font_weight.computed == SP_CSS_FONT_WEIGHT_BOLDER)
{
is_bold = true;
- os << "{\\bfseries{}";
+ os << "\\textbf{";
}
if (spanstyle.font_style.computed == SP_CSS_FONT_STYLE_ITALIC)
{
is_italic = true;
- os << "{\\itshape{}";
+ os << "\\textit{";
+ }
+ if (spanstyle.font_style.computed == SP_CSS_FONT_STYLE_OBLIQUE)
+ {
+ is_oblique = true;
+ os << "\\textsl{"; // this is an accurate choice if the LaTeX chosen font matches the font in Inkscape. Gives bad results when it is not so...
}
Inkscape::Text::Layout::iterator ln = li;
ln.nextStartOfSpan();
- Glib::ustring spanstr = sp_te_get_string_multiline (item, li, ln);
- os << spanstr;
-
+ Glib::ustring uspanstr = sp_te_get_string_multiline (item, li, ln);
+ const gchar *spanstr = uspanstr.c_str();
+ if (!spanstr) {
+ continue;
+ }
+ // replace carriage return with double slash
+ gchar ** splitstr = g_strsplit(spanstr, "\n", -1);
+ gchar *spanstr_new = g_strjoinv("\\\\ ", splitstr);
+ os << spanstr_new;
+ g_strfreev(splitstr);
+ g_free(spanstr_new);
+
+ if (is_oblique) { os << "}"; } // oblique end
if (is_italic) { os << "}"; } // italic end
if (is_bold) { os << "}"; } // bold end
}
@@ -389,16 +409,6 @@ Flowing in rectangle is possible, not in arb shape.
SPFlowtext *flowtext = SP_FLOWTEXT(item);
SPStyle *style = item->style;
- gchar *strtext = sp_te_get_string_multiline(item);
- if (!strtext) {
- return;
- }
- // replace carriage return with double slash
- gchar ** splitstr = g_strsplit(strtext, "\n", -1);
- gchar *str = g_strjoinv("\\\\ ", splitstr);
- g_free(strtext);
- g_strfreev(splitstr);
-
SPItem *frame_item = flowtext->get_frame(NULL);
if (!frame_item || !SP_IS_RECT(frame_item)) {
g_warning("LaTeX export: non-rectangular flowed text shapes are not supported, skipping text.");
@@ -479,7 +489,7 @@ Flowing in rectangle is possible, not in arb shape.
li != le; li.nextStartOfSpan())
{
SPStyle const &spanstyle = *(sp_te_style_at_position (item, li));
- bool is_bold = false, is_italic = false;
+ bool is_bold = false, is_italic = false, is_oblique = false;
if (spanstyle.font_weight.computed == SP_CSS_FONT_WEIGHT_500 ||
spanstyle.font_weight.computed == SP_CSS_FONT_WEIGHT_600 ||
@@ -490,19 +500,34 @@ Flowing in rectangle is possible, not in arb shape.
spanstyle.font_weight.computed == SP_CSS_FONT_WEIGHT_BOLDER)
{
is_bold = true;
- os << "{\\bfseries{}";
+ os << "\\textbf{";
}
if (spanstyle.font_style.computed == SP_CSS_FONT_STYLE_ITALIC)
{
is_italic = true;
- os << "{\\itshape{}";
+ os << "\\textit{";
+ }
+ if (spanstyle.font_style.computed == SP_CSS_FONT_STYLE_OBLIQUE)
+ {
+ is_oblique = true;
+ os << "\\textsl{"; // this is an accurate choice if the LaTeX chosen font matches the font in Inkscape. Gives bad results when it is not so...
}
Inkscape::Text::Layout::iterator ln = li;
ln.nextStartOfSpan();
- Glib::ustring spanstr = sp_te_get_string_multiline (item, li, ln);
- os << spanstr;
-
+ Glib::ustring uspanstr = sp_te_get_string_multiline (item, li, ln);
+ const gchar *spanstr = uspanstr.c_str();
+ if (!spanstr) {
+ continue;
+ }
+ // replace carriage return with double slash
+ gchar ** splitstr = g_strsplit(spanstr, "\n", -1);
+ gchar *spanstr_new = g_strjoinv("\\\\ ", splitstr);
+ os << spanstr_new;
+ g_strfreev(splitstr);
+ g_free(spanstr_new);
+
+ if (is_oblique) { os << "}"; } // oblique end
if (is_italic) { os << "}"; } // italic end
if (is_bold) { os << "}"; } // bold end
}
@@ -517,13 +542,10 @@ Flowing in rectangle is possible, not in arb shape.
fprintf(_stream, "%s", os.str().c_str());
}
-void
-LaTeXTextRenderer::sp_root_render(SPItem *item)
+void LaTeXTextRenderer::sp_root_render(SPRoot *root)
{
- SPRoot *root = SP_ROOT(item);
-
push_transform(root->c2p);
- sp_group_render(item);
+ sp_group_render(root);
pop_transform();
}
@@ -536,7 +558,7 @@ LaTeXTextRenderer::sp_item_invoke_render(SPItem *item)
}
if (SP_IS_ROOT(item)) {
- return sp_root_render(item);
+ return sp_root_render(SP_ROOT(item));
} else if (SP_IS_GROUP(item)) {
return sp_group_render(item);
} else if (SP_IS_USE(item)) {
@@ -598,19 +620,19 @@ LaTeXTextRenderer::setupDocument(SPDocument *doc, bool pageBoundingBox, SPItem *
// scaling of the image when including it in LaTeX
- os << " \\ifx\\svgwidth\\undefined\n";
- os << " \\setlength{\\unitlength}{" << d->width() * PT_PER_PX << "pt}\n";
- os << " \\ifx\\svgscale\\undefined\n";
- os << " \\relax\n";
- os << " \\else\n";
- os << " \\setlength{\\unitlength}{\\unitlength * \\real{\\svgscale}}\n";
- os << " \\fi\n";
- os << " \\else\n";
- os << " \\setlength{\\unitlength}{\\svgwidth}\n";
- os << " \\fi\n";
- os << " \\global\\let\\svgwidth\\undefined\n";
- os << " \\global\\let\\svgscale\\undefined\n";
- os << " \\makeatother\n";
+ os << " \\ifx\\svgwidth\\undefined%\n";
+ os << " \\setlength{\\unitlength}{" << d->width() * PT_PER_PX << "bp}%\n"; // note: 'bp' is the Postscript pt unit in LaTeX, see LP bug #792384
+ os << " \\ifx\\svgscale\\undefined%\n";
+ os << " \\relax%\n";
+ os << " \\else%\n";
+ os << " \\setlength{\\unitlength}{\\unitlength * \\real{\\svgscale}}%\n";
+ os << " \\fi%\n";
+ os << " \\else%\n";
+ os << " \\setlength{\\unitlength}{\\svgwidth}%\n";
+ os << " \\fi%\n";
+ os << " \\global\\let\\svgwidth\\undefined%\n";
+ os << " \\global\\let\\svgscale\\undefined%\n";
+ os << " \\makeatother%\n";
os << " \\begin{picture}(" << _width << "," << _height << ")%\n";
// strip pathname, as it is probably desired. Having a specific path in the TeX file is not convenient.
diff --git a/src/extension/internal/latex-text-renderer.h b/src/extension/internal/latex-text-renderer.h
index 2259427d6..66055a3bc 100644
--- a/src/extension/internal/latex-text-renderer.h
+++ b/src/extension/internal/latex-text-renderer.h
@@ -22,6 +22,7 @@
#include <stack>
class SPItem;
+struct SPRoot;
namespace Inkscape {
namespace Extension {
@@ -60,7 +61,7 @@ protected:
void writePostamble();
void sp_item_invoke_render(SPItem *item);
- void sp_root_render(SPItem *item);
+ void sp_root_render(SPRoot *item);
void sp_group_render(SPItem *item);
void sp_use_render(SPItem *item);
void sp_text_render(SPItem *item);
diff --git a/src/extension/internal/pdf-input-cairo.cpp b/src/extension/internal/pdf-input-cairo.cpp
index 048b26bed..daa185268 100644
--- a/src/extension/internal/pdf-input-cairo.cpp
+++ b/src/extension/internal/pdf-input-cairo.cpp
@@ -31,6 +31,8 @@
#include <poppler/glib/poppler-document.h>
#include <poppler/glib/poppler-page.h>
+#include "ui/widget/spinbutton.h"
+
namespace Inkscape {
namespace Extension {
namespace Internal {
@@ -67,7 +69,7 @@ PdfImportCairoDialog::PdfImportCairoDialog(PopplerDocument *doc)
// Page number
int num_pages = poppler_document_get_n_pages(_poppler_doc);
Gtk::Adjustment *_pageNumberSpin_adj = Gtk::manage(new class Gtk::Adjustment(1, 1, num_pages, 1, 10, 0));
- _pageNumberSpin = Gtk::manage(new class Gtk::SpinButton(*_pageNumberSpin_adj, 1, 1));
+ _pageNumberSpin = Gtk::manage(new class Inkscape::UI::Widget::SpinButton(*_pageNumberSpin_adj, 1, 1));
_labelTotalPages = Gtk::manage(new class Gtk::Label());
hbox2 = Gtk::manage(new class Gtk::HBox(false, 0));
// Disable the page selector when there's only one page
diff --git a/src/extension/internal/pdf-input-cairo.h b/src/extension/internal/pdf-input-cairo.h
index ad7c884cb..7581cb0a5 100644
--- a/src/extension/internal/pdf-input-cairo.h
+++ b/src/extension/internal/pdf-input-cairo.h
@@ -20,7 +20,6 @@
#include <gtkmm/button.h>
#include <gtkmm/buttonbox.h>
#include <gtkmm/label.h>
-#include <gtkmm/spinbutton.h>
#include <gtkmm/box.h>
#include <gtkmm/checkbutton.h>
#include <gtkmm/comboboxtext.h>
@@ -39,6 +38,13 @@
#include "../implementation/implementation.h"
namespace Inkscape {
+
+namespace UI {
+namespace Widget {
+ class SpinButton;
+}
+}
+
namespace Extension {
namespace Internal {
@@ -64,7 +70,7 @@ private:
class Gtk::Button * cancelbutton;
class Gtk::Button * okbutton;
class Gtk::Label * _labelSelect;
- class Gtk::SpinButton * _pageNumberSpin;
+ class Inkscape::UI::Widget::SpinButton * _pageNumberSpin;
class Gtk::Label * _labelTotalPages;
class Gtk::HBox * hbox2;
class Gtk::CheckButton * _cropCheck;
diff --git a/src/extension/internal/pdfinput/CMakeLists.txt b/src/extension/internal/pdfinput/CMakeLists.txt
deleted file mode 100644
index 9a093a065..000000000
--- a/src/extension/internal/pdfinput/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-SET(extension_internal_pdfinput_SRC
-pdf-input.cpp
-pdf-parser.cpp
-svg-builder.cpp
-)
diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp
index ae3e473a5..186f337c4 100644
--- a/src/extension/internal/pdfinput/pdf-input.cpp
+++ b/src/extension/internal/pdfinput/pdf-input.cpp
@@ -40,7 +40,8 @@
#include "inkscape.h"
#include "dialogs/dialog-events.h"
-#include <gtk/gtkdialog.h>
+#include <gtk/gtk.h>
+#include "ui/widget/spinbutton.h"
namespace Inkscape {
namespace Extension {
@@ -75,7 +76,7 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar *uri)
// Page number
Gtk::Adjustment *_pageNumberSpin_adj = Gtk::manage(
new class Gtk::Adjustment(1, 1, _pdf_doc->getNumPages(), 1, 10, 0));
- _pageNumberSpin = Gtk::manage(new class Gtk::SpinButton(*_pageNumberSpin_adj, 1, 1));
+ _pageNumberSpin = Gtk::manage(new class Inkscape::UI::Widget::SpinButton(*_pageNumberSpin_adj, 1, 1));
_labelTotalPages = Gtk::manage(new class Gtk::Label());
hbox2 = Gtk::manage(new class Gtk::HBox(false, 0));
// Disable the page selector when there's only one page
diff --git a/src/extension/internal/pdfinput/pdf-input.h b/src/extension/internal/pdfinput/pdf-input.h
index 6bf0f11a2..c2fd0b6d8 100644
--- a/src/extension/internal/pdfinput/pdf-input.h
+++ b/src/extension/internal/pdfinput/pdf-input.h
@@ -24,7 +24,6 @@
#include <gtkmm/button.h>
#include <gtkmm/buttonbox.h>
#include <gtkmm/label.h>
-#include <gtkmm/spinbutton.h>
#include <gtkmm/box.h>
#include <gtkmm/checkbutton.h>
#include <gtkmm/comboboxtext.h>
@@ -41,6 +40,13 @@
#endif
namespace Inkscape {
+
+namespace UI {
+namespace Widget {
+ class SpinButton;
+}
+}
+
namespace Extension {
namespace Internal {
@@ -66,7 +72,7 @@ private:
class Gtk::Button * cancelbutton;
class Gtk::Button * okbutton;
class Gtk::Label * _labelSelect;
- class Gtk::SpinButton * _pageNumberSpin;
+ class Inkscape::UI::Widget::SpinButton * _pageNumberSpin;
class Gtk::Label * _labelTotalPages;
class Gtk::HBox * hbox2;
class Gtk::CheckButton * _cropCheck;
diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp
index 94edf826e..dc995b7aa 100644
--- a/src/extension/internal/pdfinput/svg-builder.cpp
+++ b/src/extension/internal/pdfinput/svg-builder.cpp
@@ -531,7 +531,7 @@ void SvgBuilder::setClipPath(GfxState *state, bool even_odd) {
clip_path->appendChild(path);
Inkscape::GC::release(path);
// Append clipPath to defs and get id
- SP_DOCUMENT_DEFS(_doc)->getRepr()->appendChild(clip_path);
+ _doc->getDefs()->getRepr()->appendChild(clip_path);
gchar *urltext = g_strdup_printf ("url(#%s)", clip_path->attribute("id"));
Inkscape::GC::release(clip_path);
_container->setAttribute("clip-path", urltext);
@@ -678,7 +678,7 @@ gchar *SvgBuilder::_createTilingPattern(GfxTilingPattern *tiling_pattern,
delete pattern_builder;
// Append the pattern to defs
- SP_DOCUMENT_DEFS(_doc)->getRepr()->appendChild(pattern_node);
+ _doc->getDefs()->getRepr()->appendChild(pattern_node);
gchar *id = g_strdup(pattern_node->attribute("id"));
Inkscape::GC::release(pattern_node);
@@ -752,7 +752,7 @@ gchar *SvgBuilder::_createGradient(GfxShading *shading, double *matrix, bool for
return NULL;
}
- Inkscape::XML::Node *defs = SP_DOCUMENT_DEFS(_doc)->getRepr();
+ Inkscape::XML::Node *defs = _doc->getDefs()->getRepr();
defs->appendChild(gradient);
gchar *id = g_strdup(gradient->attribute("id"));
Inkscape::GC::release(gradient);
@@ -1635,9 +1635,9 @@ Inkscape::XML::Node *SvgBuilder::_createMask(double width, double height) {
sp_repr_set_svg_double(mask_node, "height", height);
// Append mask to defs
if (_is_top_level) {
- SP_DOCUMENT_DEFS(_doc)->getRepr()->appendChild(mask_node);
+ _doc->getDefs()->getRepr()->appendChild(mask_node);
Inkscape::GC::release(mask_node);
- return SP_DOCUMENT_DEFS(_doc)->getRepr()->lastChild();
+ return _doc->getDefs()->getRepr()->lastChild();
} else { // Work around for renderer bug when mask isn't defined in pattern
static int mask_count = 0;
Inkscape::XML::Node *defs = _root->firstChild();
diff --git a/src/extension/internal/pov-out.cpp b/src/extension/internal/pov-out.cpp
index 1563d04c1..382f8cbfb 100644
--- a/src/extension/internal/pov-out.cpp
+++ b/src/extension/internal/pov-out.cpp
@@ -35,6 +35,7 @@
#include "helper/geom.h"
#include "helper/geom-curves.h"
#include <io/sys.h>
+#include "sp-root.h"
#include <string>
#include <stdio.h>
@@ -485,7 +486,7 @@ bool PovOutput::doTree(SPDocument *doc)
miny = bignum;
maxy = -bignum;
- if (!doTreeRecursive(doc, doc->root))
+ if (!doTreeRecursive(doc, doc->getRoot()))
return false;
//## Let's make a union of all of the Shapes
diff --git a/src/extension/internal/svg.cpp b/src/extension/internal/svg.cpp
index 946ff22fe..afc706e89 100644
--- a/src/extension/internal/svg.cpp
+++ b/src/extension/internal/svg.cpp
@@ -24,6 +24,7 @@
#include "extension/output.h"
#include <vector>
#include "xml/attribute-record.h"
+#include "sp-root.h"
#ifdef WITH_GNOME_VFS
# include <libgnomevfs/gnome-vfs.h>
diff --git a/src/extension/internal/wpg-input.cpp b/src/extension/internal/wpg-input.cpp
index 70fa28967..3cd5044f7 100644
--- a/src/extension/internal/wpg-input.cpp
+++ b/src/extension/internal/wpg-input.cpp
@@ -49,9 +49,17 @@
#include "extension/input.h"
#include "document.h"
+// Take a guess and fallback to 0.1.x if no configure has run
+#if !defined(WITH_LIBWPG01) && !defined(WITH_LIBWPG02)
+#define WITH_LIBWPG01 1
+#endif
+
#include "libwpg/libwpg.h"
+#if WITH_LIBWPG01
#include "libwpg/WPGStreamImplementation.h"
-
+#elif WITH_LIBWPG02
+#include "libwpd-stream/libwpd-stream.h"
+#endif
using namespace libwpg;
@@ -62,9 +70,17 @@ namespace Internal {
SPDocument *
WpgInput::open(Inkscape::Extension::Input * mod, const gchar * uri) {
+#if WITH_LIBWPG01
WPXInputStream* input = new libwpg::WPGFileStream(uri);
+#elif WITH_LIBWPG02
+ WPXInputStream* input = new WPXFileStream(uri);
+#endif
if (input->isOLEStream()) {
+#if WITH_LIBWPG01
WPXInputStream* olestream = input->getDocumentOLEStream();
+#elif WITH_LIBWPG02
+ WPXInputStream* olestream = input->getDocumentOLEStream("PerfectOffice_MAIN");
+#endif
if (olestream) {
delete input;
input = olestream;
@@ -79,7 +95,11 @@ WpgInput::open(Inkscape::Extension::Input * mod, const gchar * uri) {
return NULL;
}
+#if WITH_LIBWPG01
libwpg::WPGString output;
+#elif WITH_LIBWPG02
+ WPXString output;
+#endif
if (!libwpg::WPGraphics::generateSVG(input, output)) {
delete input;
return NULL;
diff --git a/src/extension/output.h b/src/extension/output.h
index 584fafda8..5f6785b8b 100644
--- a/src/extension/output.h
+++ b/src/extension/output.h
@@ -13,7 +13,7 @@
#ifndef INKSCAPE_EXTENSION_OUTPUT_H__
#define INKSCAPE_EXTENSION_OUTPUT_H__
-#include <gtk/gtkdialog.h>
+#include <gtk/gtk.h>
#include "extension.h"
struct SPDocument;
diff --git a/src/extension/param/CMakeLists.txt b/src/extension/param/CMakeLists.txt
deleted file mode 100644
index 2ef5d5005..000000000
--- a/src/extension/param/CMakeLists.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-SET(extension_param_SRC
-bool.cpp
-color.cpp
-description.cpp
-groupheader.cpp
-enum.cpp
-parameter.cpp
-float.cpp
-int.cpp
-notebook.cpp
-radiobutton.cpp
-string.cpp
-)
-
diff --git a/src/extension/param/float.cpp b/src/extension/param/float.cpp
index d94463a5b..4ef816d61 100644
--- a/src/extension/param/float.cpp
+++ b/src/extension/param/float.cpp
@@ -12,7 +12,7 @@
#include <gtkmm/adjustment.h>
#include <gtkmm/box.h>
#include <gtkmm/scale.h>
-#include <gtkmm/spinbutton.h>
+#include "ui/widget/spinbutton.h"
#include "xml/node.h"
#include "extension/extension.h"
@@ -172,7 +172,7 @@ ParamFloat::get_widget (SPDocument * doc, Inkscape::XML::Node * node, sigc::sign
hbox->pack_start(*scale, false, false);
}
- Gtk::SpinButton * spin = Gtk::manage(new Gtk::SpinButton(*fadjust, 0.1, _precision));
+ Inkscape::UI::Widget::SpinButton * spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(*fadjust, 0.1, _precision));
spin->show();
hbox->pack_start(*spin, false, false);
diff --git a/src/extension/param/int.cpp b/src/extension/param/int.cpp
index 69849c656..3ed8addd9 100644
--- a/src/extension/param/int.cpp
+++ b/src/extension/param/int.cpp
@@ -12,7 +12,7 @@
#include <gtkmm/adjustment.h>
#include <gtkmm/box.h>
#include <gtkmm/scale.h>
-#include <gtkmm/spinbutton.h>
+#include "ui/widget/spinbutton.h"
#include "xml/node.h"
#include "extension/extension.h"
@@ -157,7 +157,7 @@ ParamInt::get_widget (SPDocument * doc, Inkscape::XML::Node * node, sigc::signal
hbox->pack_start(*scale, false, false);
}
- Gtk::SpinButton * spin = Gtk::manage(new Gtk::SpinButton(*fadjust, 1.0, 0));
+ Inkscape::UI::Widget::SpinButton * spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(*fadjust, 1.0, 0));
spin->show();
hbox->pack_start(*spin, false, false);
diff --git a/src/extension/param/parameter.cpp b/src/extension/param/parameter.cpp
index a9935cfe6..455fcc3bb 100644
--- a/src/extension/param/parameter.cpp
+++ b/src/extension/param/parameter.cpp
@@ -19,10 +19,6 @@
# define ESCAPE_DOLLAR_COMMANDLINE
#endif
-#include <gtkmm/adjustment.h>
-#include <gtkmm/box.h>
-#include <gtkmm/spinbutton.h>
-
#include <xml/node.h>
#include <extension/extension.h>
@@ -358,7 +354,7 @@ Parameter::new_child (Inkscape::XML::Node * parent)
Inkscape::XML::Node *Parameter::document_param_node(SPDocument * doc)
{
Inkscape::XML::Document *xml_doc = doc->getReprDoc();
- Inkscape::XML::Node * defs = SP_DOCUMENT_DEFS(doc)->getRepr();
+ Inkscape::XML::Node * defs = doc->getDefs()->getRepr();
Inkscape::XML::Node * params = NULL;
GQuark const name_quark = g_quark_from_string("inkscape:extension-params");
diff --git a/src/extension/patheffect.cpp b/src/extension/patheffect.cpp
index 09ee9be0b..6da310d30 100644
--- a/src/extension/patheffect.cpp
+++ b/src/extension/patheffect.cpp
@@ -42,7 +42,7 @@ PathEffect::processPathEffects (SPDocument * doc, Inkscape::XML::Node * path)
return;
gchar ** patheffects = g_strsplit(patheffectlist, ";", 128);
- Inkscape::XML::Node * defs = SP_DOCUMENT_DEFS(doc)->getRepr();
+ Inkscape::XML::Node * defs = doc->getDefs()->getRepr();
for (int i = 0; patheffects[i] != NULL && i < 128; i++) {
gchar * patheffect = patheffects[i];
diff --git a/src/extension/script/CMakeLists.txt b/src/extension/script/CMakeLists.txt
deleted file mode 100644
index 693948508..000000000
--- a/src/extension/script/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-SET(extension_script_SRC
-InkscapeScript.cpp
-)
diff --git a/src/extension/system.cpp b/src/extension/system.cpp
index cf58f2733..b3b64ca7d 100644
--- a/src/extension/system.cpp
+++ b/src/extension/system.cpp
@@ -35,6 +35,8 @@
#include "implementation/xslt.h"
#include "xml/rebase-hrefs.h"
#include "io/sys.h"
+#include "inkscape.h"
+
/* #include "implementation/plugin.h" */
namespace Inkscape {
@@ -64,8 +66,7 @@ static Extension *build_from_reprdoc(Inkscape::XML::Document *doc, Implementatio
*
* Lastly, the open function is called in the module itself.
*/
-SPDocument *
-open(Extension *key, gchar const *filename)
+SPDocument *open(Extension *key, gchar const *filename)
{
Input *imod = NULL;
if (key == NULL) {
@@ -93,8 +94,9 @@ open(Extension *key, gchar const *filename)
throw Input::open_failed();
}
- if (!imod->prefs(filename))
+ if (!imod->prefs(filename)) {
return NULL;
+ }
SPDocument *doc = imod->open(filename);
if (!doc) {
@@ -102,11 +104,11 @@ open(Extension *key, gchar const *filename)
}
if (last_chance_svg) {
- /* We can't call sp_ui_error_dialog because we may be
- running from the console, in which case calling sp_ui
- routines will cause a segfault. See bug 1000350 - bryce */
- // sp_ui_error_dialog(_("Format autodetect failed. The file is being opened as SVG."));
- g_warning(_("Format autodetect failed. The file is being opened as SVG."));
+ if ( inkscape_use_gui() ) {
+ sp_ui_error_dialog(_("Format autodetect failed. The file is being opened as SVG."));
+ } else {
+ g_warning(_("Format autodetect failed. The file is being opened as SVG."));
+ }
}
/* This kinda overkill as most of these are already set, but I want
@@ -588,10 +590,11 @@ Glib::ustring
get_file_save_path (SPDocument *doc, FileSaveMethod method) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
Glib::ustring path;
+ bool use_current_dir = true;
switch (method) {
case FILE_SAVE_METHOD_SAVE_AS:
{
- bool use_current_dir = prefs->getBool("/dialogs/save_as/use_current_dir", true);
+ use_current_dir = prefs->getBool("/dialogs/save_as/use_current_dir", true);
if (doc->getURI() && use_current_dir) {
path = Glib::path_get_dirname(doc->getURI());
} else {
@@ -603,7 +606,12 @@ get_file_save_path (SPDocument *doc, FileSaveMethod method) {
path = prefs->getString("/dialogs/save_as/path");
break;
case FILE_SAVE_METHOD_SAVE_COPY:
- path = prefs->getString("/dialogs/save_copy/path");
+ use_current_dir = prefs->getBool("/dialogs/save_copy/use_current_dir", prefs->getBool("/dialogs/save_as/use_current_dir", true));
+ if (doc->getURI() && use_current_dir) {
+ path = Glib::path_get_dirname(doc->getURI());
+ } else {
+ path = prefs->getString("/dialogs/save_copy/path");
+ }
break;
case FILE_SAVE_METHOD_INKSCAPE_SVG:
if (doc->getURI()) {
diff --git a/src/file.cpp b/src/file.cpp
index 86df2ed44..43d1ddaaa 100644
--- a/src/file.cpp
+++ b/src/file.cpp
@@ -53,6 +53,7 @@
#include "path-prefix.h"
#include "preferences.h"
#include "print.h"
+#include "resource-manager.h"
#include "rdf.h"
#include "selection-chemistry.h"
#include "selection.h"
@@ -208,14 +209,14 @@ sp_file_exit()
* \param replace_empty if true, and the current desktop is empty, this document
* will replace the empty one.
*/
-bool
-sp_file_open(const Glib::ustring &uri,
- Inkscape::Extension::Extension *key,
- bool add_to_recent, bool replace_empty)
+bool sp_file_open(const Glib::ustring &uri,
+ Inkscape::Extension::Extension *key,
+ bool add_to_recent, bool replace_empty)
{
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- if (desktop)
+ if (desktop) {
desktop->setWaitingCursor();
+ }
SPDocument *doc = NULL;
try {
@@ -226,27 +227,30 @@ sp_file_open(const Glib::ustring &uri,
doc = NULL;
}
- if (desktop)
+ if (desktop) {
desktop->clearWaitingCursor();
+ }
if (doc) {
SPDocument *existing = desktop ? sp_desktop_document(desktop) : NULL;
if (existing && existing->virgin && replace_empty) {
// If the current desktop is empty, open the document there
- doc->ensureUpToDate();
+ doc->ensureUpToDate(); // TODO this will trigger broken link warnings, etc.
desktop->change_document(doc);
doc->emitResizedSignal(doc->getWidth(), doc->getHeight());
} else {
// create a whole new desktop and window
- SPViewWidget *dtw = sp_desktop_widget_new(sp_document_namedview(doc, NULL));
+ SPViewWidget *dtw = sp_desktop_widget_new(sp_document_namedview(doc, NULL)); // TODO this will trigger broken link warnings, etc.
sp_create_window(dtw, TRUE);
desktop = static_cast<SPDesktop*>(dtw->view);
}
doc->virgin = FALSE;
+
// everyone who cares now has a reference, get rid of ours
doc->doUnref();
+
// resize the window to match the document properties
sp_namedview_window_from_document(desktop);
sp_namedview_update_layers_from_document(desktop);
@@ -255,6 +259,14 @@ sp_file_open(const Glib::ustring &uri,
sp_file_add_recent( doc->getURI() );
}
+ if ( inkscape_use_gui() ) {
+ // Perform a fixup pass for hrefs.
+ if ( Inkscape::ResourceManager::getManager().fixupBrokenLinks(doc) ) {
+ Glib::ustring msg = _("Broken links have been changed to point to existing files.");
+ desktop->showInfoDialog(msg);
+ }
+ }
+
return TRUE;
} else {
gchar *safeUri = Inkscape::IO::sanitizeString(uri.c_str());
@@ -789,7 +801,7 @@ sp_file_save_dialog(Gtk::Window &parentWindow, SPDocument *doc, Inkscape::Extens
} else {
dialog_title = (char const *) _("Select file to save to");
}
- gchar* doc_title = doc->root->title();
+ gchar* doc_title = doc->getRoot()->title();
Inkscape::UI::Dialog::FileSaveDialog *saveDialog =
Inkscape::UI::Dialog::FileSaveDialog::create(
parentWindow,
@@ -962,7 +974,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
prevent_id_clashes(doc, in_doc);
- SPObject *in_defs = SP_DOCUMENT_DEFS(in_doc);
+ SPObject *in_defs = in_doc->getDefs();
Inkscape::XML::Node *last_def = in_defs->getRepr()->lastChild();
SPCSSAttr *style = sp_css_attr_from_object(doc->getRoot());
@@ -1038,7 +1050,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
// preserve parent and viewBox transformations
// c2p is identity matrix at this point unless ensureUpToDate is called
doc->ensureUpToDate();
- Geom::Affine affine = SP_ROOT(doc->getRoot())->c2p * SP_ITEM(place_to_insert)->i2doc_affine().inverse();
+ Geom::Affine affine = doc->getRoot()->c2p * SP_ITEM(place_to_insert)->i2doc_affine().inverse();
sp_selection_apply_affine(selection, desktop->dt2doc() * affine * desktop->doc2dt(), true, false);
// move to mouse pointer
diff --git a/src/file.h b/src/file.h
index 65d561adc..0041af81f 100644
--- a/src/file.h
+++ b/src/file.h
@@ -17,7 +17,7 @@
#include <gtkmm.h>
#include <glib/gslist.h>
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
#include "extension/extension-forward.h"
#include "extension/system.h"
diff --git a/src/filter-chemistry.cpp b/src/filter-chemistry.cpp
index 16f5a6e85..b78b96c02 100644
--- a/src/filter-chemistry.cpp
+++ b/src/filter-chemistry.cpp
@@ -89,7 +89,7 @@ SPFilter *new_filter(SPDocument *document)
{
g_return_val_if_fail(document != NULL, NULL);
- SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
+ SPDefs *defs = document->getDefs();
Inkscape::XML::Document *xml_doc = document->getReprDoc();
@@ -186,7 +186,7 @@ new_filter_gaussian_blur (SPDocument *document, gdouble radius, double expansion
{
g_return_val_if_fail(document != NULL, NULL);
- SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
+ SPDefs *defs = document->getDefs();
Inkscape::XML::Document *xml_doc = document->getReprDoc();
@@ -241,7 +241,7 @@ new_filter_blend_gaussian_blur (SPDocument *document, const char *blendmode, gdo
{
g_return_val_if_fail(document != NULL, NULL);
- SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
+ SPDefs *defs = document->getDefs();
Inkscape::XML::Document *xml_doc = document->getReprDoc();
@@ -355,7 +355,7 @@ SPFilter *modify_filter_gaussian_blur_from_item(SPDocument *document, SPItem *it
// If there are more users for this filter, duplicate it
if (filter->hrefcount > count_filter_hrefs(item, filter)) {
Inkscape::XML::Node *repr = item->style->getFilter()->getRepr()->duplicate(xml_doc);
- SPDefs *defs = reinterpret_cast<SPDefs *>(SP_DOCUMENT_DEFS(document));
+ SPDefs *defs = document->getDefs();
defs->appendChild(repr);
filter = SP_FILTER( document->getObjectByRepr(repr) );
diff --git a/src/filters/CMakeLists.txt b/src/filters/CMakeLists.txt
index 554402d35..72e0bba78 100644
--- a/src/filters/CMakeLists.txt
+++ b/src/filters/CMakeLists.txt
@@ -1,25 +1,64 @@
-SET(filters_SRC
-blend.cpp
-colormatrix.cpp
-componenttransfer.cpp
-componenttransfer-funcnode.cpp
-composite.cpp
-convolvematrix.cpp
-diffuselighting.cpp
-displacementmap.cpp
-distantlight.cpp
-flood.cpp
-image.cpp
-merge.cpp
-mergenode.cpp
-morphology.cpp
-offset.cpp
-pointlight.cpp
-specularlighting.cpp
-spotlight.cpp
-tile.cpp
-turbulence.cpp
+
+set(filters_SRC
+ blend.cpp
+ colormatrix.cpp
+ componenttransfer.cpp
+ componenttransfer-funcnode.cpp
+ composite.cpp
+ convolvematrix.cpp
+ diffuselighting.cpp
+ displacementmap.cpp
+ distantlight.cpp
+ flood.cpp
+ image.cpp
+ merge.cpp
+ mergenode.cpp
+ morphology.cpp
+ offset.cpp
+ pointlight.cpp
+ specularlighting.cpp
+ spotlight.cpp
+ tile.cpp
+ turbulence.cpp
+
+ # -------
+ # Headers
+ blend-fns.h
+ blend.h
+ colormatrix-fns.h
+ colormatrix.h
+ componenttransfer-fns.h
+ componenttransfer-funcnode.h
+ componenttransfer.h
+ composite-fns.h
+ composite.h
+ convolvematrix-fns.h
+ convolvematrix.h
+ diffuselighting-fns.h
+ diffuselighting.h
+ displacementmap-fns.h
+ displacementmap.h
+ distantlight.h
+ flood-fns.h
+ flood.h
+ image-fns.h
+ image.h
+ merge-fns.h
+ merge.h
+ mergenode.h
+ morphology-fns.h
+ morphology.h
+ offset-fns.h
+ offset.h
+ pointlight.h
+ specularlighting-fns.h
+ specularlighting.h
+ spotlight.h
+ tile-fns.h
+ tile.h
+ turbulence-fns.h
+ turbulence.h
)
-ADD_LIBRARY(filters STATIC ${filters_SRC})
-TARGET_LINK_LIBRARIES(filters
-2geom ${INKSCAPE_LIBS})
+
+# add_inkscape_lib(filters_LIB "${filters_SRC}"")
+add_inkscape_source("${filters_SRC}")
diff --git a/src/flood-context.h b/src/flood-context.h
index d9da96010..6847c19be 100644
--- a/src/flood-context.h
+++ b/src/flood-context.h
@@ -19,10 +19,10 @@
#include "helper/units.h"
#define SP_TYPE_FLOOD_CONTEXT (sp_flood_context_get_type ())
-#define SP_FLOOD_CONTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_FLOOD_CONTEXT, SPFloodContext))
-#define SP_FLOOD_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_FLOOD_CONTEXT, SPFloodContextClass))
-#define SP_IS_FLOOD_CONTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_FLOOD_CONTEXT))
-#define SP_IS_FLOOD_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_FLOOD_CONTEXT))
+#define SP_FLOOD_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FLOOD_CONTEXT, SPFloodContext))
+#define SP_FLOOD_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FLOOD_CONTEXT, SPFloodContextClass))
+#define SP_IS_FLOOD_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FLOOD_CONTEXT))
+#define SP_IS_FLOOD_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FLOOD_CONTEXT))
#define FLOOD_COLOR_CHANNEL_R 1
#define FLOOD_COLOR_CHANNEL_G 2
diff --git a/src/forward.h b/src/forward.h
index 97d2c15ed..352fae6fa 100644
--- a/src/forward.h
+++ b/src/forward.h
@@ -52,12 +52,6 @@ class SPDocumentClass;
class SPGroup;
class SPGroupClass;
-class SPDefs;
-class SPDefsClass;
-
-class SPRoot;
-class SPRootClass;
-
class SPNamedView;
class SPNamedViewClass;
@@ -101,9 +95,6 @@ class SPTSpanClass;
class SPString;
class SPStringClass;
-class SPPaintServer;
-class SPPaintServerClass;
-
class SPStop;
class SPStopClass;
diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp
index 8cbd88eb6..676e9aa94 100644
--- a/src/gradient-chemistry.cpp
+++ b/src/gradient-chemistry.cpp
@@ -103,7 +103,7 @@ static SPGradient *sp_gradient_get_private_normalized(SPDocument *document, SPGr
g_return_val_if_fail(SP_IS_GRADIENT(vector), NULL);
g_return_val_if_fail(vector->hasStops(), NULL);
- SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
+ SPDefs *defs = document->getDefs();
Inkscape::XML::Document *xml_doc = document->getReprDoc();
// create a new private gradient of the requested type
@@ -205,7 +205,7 @@ SPGradient *sp_gradient_fork_private_if_necessary(SPGradient *gr, SPGradient *ve
}
SPDocument *doc = gr->document;
- SPObject *defs = SP_DOCUMENT_DEFS(doc);
+ SPObject *defs = doc->getDefs();
if ((gr->hasStops()) ||
(gr->state != SP_GRADIENT_STATE_UNKNOWN) ||
@@ -256,7 +256,7 @@ SPGradient *sp_gradient_fork_vector_if_necessary(SPGradient *gr)
Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *repr = gr->getRepr()->duplicate(xml_doc);
- SP_DOCUMENT_DEFS(doc)->getRepr()->addChild(repr, NULL);
+ doc->getDefs()->getRepr()->addChild(repr, NULL);
SPGradient *gr_new = (SPGradient *) doc->getObjectByRepr(repr);
gr_new = sp_gradient_ensure_vector_normalized (gr_new);
Inkscape::GC::release(repr);
@@ -1195,7 +1195,7 @@ static void addStop( Inkscape::XML::Node *parent, Glib::ustring const &color, gi
*/
SPGradient *sp_document_default_gradient_vector( SPDocument *document, SPColor const &color, bool singleStop )
{
- SPDefs *defs = static_cast<SPDefs *>(SP_DOCUMENT_DEFS(document));
+ SPDefs *defs = document->getDefs();
Inkscape::XML::Document *xml_doc = document->rdoc;
Inkscape::XML::Node *repr = xml_doc->createElement("svg:linearGradient");
diff --git a/src/gradient-context.cpp b/src/gradient-context.cpp
index bfd1047f1..922a9b16e 100644
--- a/src/gradient-context.cpp
+++ b/src/gradient-context.cpp
@@ -498,7 +498,7 @@ sp_gradient_context_root_handler(SPEventContext *event_context, GdkEvent *event)
SPGradientContext *rc = SP_GRADIENT_CONTEXT(event_context);
event_context->tolerance = prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100);
- double const nudge = prefs->getDoubleLimited("/options/nudgedistance/value", 2, 0, 1000); // in px
+ double const nudge = prefs->getDoubleLimited("/options/nudgedistance/value", 2, 0, 1000, "px"); // in px
GrDrag *drag = event_context->_grdrag;
g_assert (drag);
diff --git a/src/gradient-context.h b/src/gradient-context.h
index 3bb9efa15..1ed14cf3f 100644
--- a/src/gradient-context.h
+++ b/src/gradient-context.h
@@ -20,10 +20,10 @@
#include "event-context.h"
#define SP_TYPE_GRADIENT_CONTEXT (sp_gradient_context_get_type())
-#define SP_GRADIENT_CONTEXT(obj) (GTK_CHECK_CAST((obj), SP_TYPE_GRADIENT_CONTEXT, SPGradientContext))
-#define SP_GRADIENT_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST((klass), SP_TYPE_GRADIENT_CONTEXT, SPGradientContextClass))
-#define SP_IS_GRADIENT_CONTEXT(obj) (GTK_CHECK_TYPE((obj), SP_TYPE_GRADIENT_CONTEXT))
-#define SP_IS_GRADIENT_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE((klass), SP_TYPE_GRADIENT_CONTEXT))
+#define SP_GRADIENT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_GRADIENT_CONTEXT, SPGradientContext))
+#define SP_GRADIENT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_GRADIENT_CONTEXT, SPGradientContextClass))
+#define SP_IS_GRADIENT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_GRADIENT_CONTEXT))
+#define SP_IS_GRADIENT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_GRADIENT_CONTEXT))
class SPGradientContext;
class SPGradientContextClass;
diff --git a/src/help.h b/src/help.h
index 35f67a714..b6c82fb51 100644
--- a/src/help.h
+++ b/src/help.h
@@ -14,7 +14,7 @@
*/
#include <glib/gtypes.h>
-#include <gtk/gtkmenuitem.h>
+#include <gtk/gtk.h>
void sp_help_about(void);
void sp_help_open_tutorial(GtkMenuItem *menuitem, gpointer data);
diff --git a/src/helper/CMakeLists.txt b/src/helper/CMakeLists.txt
index 8f42a0d5a..8137487e2 100644
--- a/src/helper/CMakeLists.txt
+++ b/src/helper/CMakeLists.txt
@@ -1,29 +1,50 @@
+
include(UseGlibMarshal)
GLIB_MARSHAL(sp_marshal sp-marshal "${CMAKE_CURRENT_BINARY_DIR}/helper")
-SET(GlibOutput
-${CMAKE_CURRENT_BINARY_DIR}/sp-marshal.cpp
-${CMAKE_CURRENT_BINARY_DIR}/sp-marshal.h
+
+set(sp_marshal_SRC
+ ${CMAKE_CURRENT_BINARY_DIR}/sp-marshal.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/sp-marshal.h
)
-SET(helper_SRC
-action.cpp
-geom.cpp
-geom-nodetype.cpp
-gnome-utils.cpp
-pixbuf-ops.cpp
-png-write.cpp
-stock-items.cpp
-unit-menu.cpp
-units.cpp
-#units-test.cpp
-unit-tracker.cpp
-window.cpp
-sp-marshal.list
-# we generate this file and it's .h counter-part
-${CMAKE_CURRENT_BINARY_DIR}/sp-marshal.cpp
-${CMAKE_CURRENT_BINARY_DIR}/sp-marshal.h
+set(helper_SRC
+ action.cpp
+ geom.cpp
+ geom-nodetype.cpp
+ gnome-utils.cpp
+ pixbuf-ops.cpp
+ png-write.cpp
+ stock-items.cpp
+ unit-menu.cpp
+ units.cpp
+ #units-test.cpp
+ unit-tracker.cpp
+ window.cpp
+
+ # we generate this file and it's .h counter-part
+ ${sp_marshal_SRC}
+
+
+ # -------
+ # Headers
+ action.h
+ geom-curves.h
+ geom-nodetype.h
+ geom.h
+ gnome-utils.h
+ helper-forward.h
+ pixbuf-ops.h
+ png-write.h
+ recthull.h
+ stlport.h
+ stock-items.h
+ unit-menu.h
+ unit-tracker.h
+ units-test.h
+ units.h
+ window.h
)
-ADD_LIBRARY(helper STATIC ${helper_SRC})
-TARGET_LINK_LIBRARIES(helper
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+# add_inkscape_lib(helper_LIB "${helper_SRC}")
+add_inkscape_source("${helper_SRC}")
diff --git a/src/helper/stock-items.cpp b/src/helper/stock-items.cpp
index 9f3f172ac..96454cf3a 100644
--- a/src/helper/stock-items.cpp
+++ b/src/helper/stock-items.cpp
@@ -69,7 +69,7 @@ static SPObject * sp_marker_load_from_svg(gchar const *name, SPDocument *current
/* Get the marker we want */
SPObject *object = doc->getObjectById(name);
if (object && SP_IS_MARKER(object)) {
- SPDefs *defs= (SPDefs *) SP_DOCUMENT_DEFS(current_doc);
+ SPDefs *defs = current_doc->getDefs();
Inkscape::XML::Document *xml_doc = current_doc->getReprDoc();
Inkscape::XML::Node *mark_repr = object->getRepr()->duplicate(xml_doc);
defs->getRepr()->addChild(mark_repr, NULL);
@@ -113,7 +113,7 @@ sp_pattern_load_from_svg(gchar const *name, SPDocument *current_doc)
/* Get the pattern we want */
SPObject *object = doc->getObjectById(name);
if (object && SP_IS_PATTERN(object)) {
- SPDefs *defs= (SPDefs *) SP_DOCUMENT_DEFS(current_doc);
+ SPDefs *defs = current_doc->getDefs();
Inkscape::XML::Document *xml_doc = current_doc->getReprDoc();
Inkscape::XML::Node *pat_repr = object->getRepr()->duplicate(xml_doc);
defs->getRepr()->addChild(pat_repr, NULL);
@@ -156,7 +156,7 @@ sp_gradient_load_from_svg(gchar const *name, SPDocument *current_doc)
/* Get the gradient we want */
SPObject *object = doc->getObjectById(name);
if (object && SP_IS_GRADIENT(object)) {
- SPDefs *defs= (SPDefs *) SP_DOCUMENT_DEFS(current_doc);
+ SPDefs *defs = current_doc->getDefs();
Inkscape::XML::Document *xml_doc = current_doc->getReprDoc();
Inkscape::XML::Node *pat_repr = object->getRepr()->duplicate(xml_doc);
defs->getRepr()->addChild(pat_repr, NULL);
@@ -195,7 +195,7 @@ SPObject *get_stock_item(gchar const *urn)
SPDesktop *desktop = inkscape_active_desktop();
SPDocument *doc = sp_desktop_document(desktop);
- SPDefs *defs = reinterpret_cast<SPDefs *>(SP_DOCUMENT_DEFS(doc));
+ SPDefs *defs = doc->getDefs();
SPObject *object = NULL;
if (!strcmp(base, "marker")) {
diff --git a/src/helper/unit-menu.cpp b/src/helper/unit-menu.cpp
index e4ff09829..bcc8589e2 100644
--- a/src/helper/unit-menu.cpp
+++ b/src/helper/unit-menu.cpp
@@ -17,10 +17,7 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include <gtk/gtksignal.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkmenuitem.h>
+#include <gtk/gtk.h>
#include "helper/sp-marshal.h"
#include "helper/units.h"
#include "helper/unit-menu.h"
@@ -208,7 +205,7 @@ spus_unit_activate(GtkWidget *widget, SPUnitSelector *us)
/* when the base changes, signal all the adjustments to get them
* to recalculate */
for (GSList *l = us->adjustments; l != NULL; l = g_slist_next(l)) {
- gtk_signal_emit_by_name(GTK_OBJECT(l->data), "value_changed");
+ g_signal_emit_by_name(G_OBJECT(l->data), "value_changed");
}
}
@@ -236,7 +233,7 @@ spus_rebuild_menu(SPUnitSelector *us)
GtkWidget *i = gtk_menu_item_new_with_label( u->abbr );
gtk_object_set_data(GTK_OBJECT(i), "unit", (gpointer) u);
- gtk_signal_connect(GTK_OBJECT(i), "activate", GTK_SIGNAL_FUNC(spus_unit_activate), us);
+ g_signal_connect(G_OBJECT(i), "activate", G_CALLBACK(spus_unit_activate), us);
sp_set_font_size_smaller (i);
diff --git a/src/helper/unit-menu.h b/src/helper/unit-menu.h
index b3ab8836c..919873c58 100644
--- a/src/helper/unit-menu.h
+++ b/src/helper/unit-menu.h
@@ -11,7 +11,7 @@
*/
#include <glib/gtypes.h>
-#include <gtk/gtkoptionmenu.h>
+#include <gtk/gtk.h>
#include <helper/helper-forward.h>
@@ -19,10 +19,10 @@
/* Unit selector Widget */
#define SP_TYPE_UNIT_SELECTOR (sp_unit_selector_get_type())
-#define SP_UNIT_SELECTOR(o) (GTK_CHECK_CAST((o), SP_TYPE_UNIT_SELECTOR, SPUnitSelector))
-#define SP_UNIT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_CAST((k), SP_TYPE_UNIT_SELECTOR, SPUnitSelectorClass))
-#define SP_IS_UNIT_SELECTOR(o) (GTK_CHECK_TYPE((o), SP_TYPE_UNIT_SELECTOR))
-#define SP_IS_UNIT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_TYPE((k), SP_TYPE_UNIT_SELECTOR))
+#define SP_UNIT_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_UNIT_SELECTOR, SPUnitSelector))
+#define SP_UNIT_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_UNIT_SELECTOR, SPUnitSelectorClass))
+#define SP_IS_UNIT_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_UNIT_SELECTOR))
+#define SP_IS_UNIT_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_UNIT_SELECTOR))
GType sp_unit_selector_get_type(void);
diff --git a/src/helper/unit-tracker.cpp b/src/helper/unit-tracker.cpp
index 3f5a72e6a..609c2f292 100644
--- a/src/helper/unit-tracker.cpp
+++ b/src/helper/unit-tracker.cpp
@@ -10,7 +10,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtkliststore.h>
+#include <gtk/gtk.h>
#include "unit-tracker.h"
#include "ege-select-one-action.h"
diff --git a/src/helper/unit-tracker.h b/src/helper/unit-tracker.h
index 0f333b2ec..a15a0a6ca 100644
--- a/src/helper/unit-tracker.h
+++ b/src/helper/unit-tracker.h
@@ -15,8 +15,7 @@
#include <map>
-#include <gtk/gtkaction.h>
-#include <gtk/gtkliststore.h>
+#include <gtk/gtk.h>
#include "helper/units.h"
diff --git a/src/helper/window.cpp b/src/helper/window.cpp
index b814424e5..f4640203d 100644
--- a/src/helper/window.cpp
+++ b/src/helper/window.cpp
@@ -12,7 +12,7 @@
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
-#include <gtk/gtkwindow.h>
+#include <gtk/gtk.h>
#include <gtkmm/window.h>
#include "inkscape.h"
diff --git a/src/helper/window.h b/src/helper/window.h
index 36b91a813..dc2c48bc0 100644
--- a/src/helper/window.h
+++ b/src/helper/window.h
@@ -10,7 +10,7 @@
* This code is in public domain
*/
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
#include <gtkmm/window.h>
/*
diff --git a/src/icon-size.h b/src/icon-size.h
index da2b3854d..4bb4f1df6 100644
--- a/src/icon-size.h
+++ b/src/icon-size.h
@@ -14,7 +14,7 @@
#include <glib.h>
-#include <gtk/gtkenums.h>
+#include <gtk/gtk.h>
namespace Inkscape {
diff --git a/src/id-clash.cpp b/src/id-clash.cpp
index 67e27e2f0..d5740c0ba 100644
--- a/src/id-clash.cpp
+++ b/src/id-clash.cpp
@@ -22,8 +22,10 @@
#include "id-clash.h"
#include "sp-object.h"
#include "style.h"
+#include "sp-paint-server.h"
#include "xml/node.h"
#include "xml/repr.h"
+#include "sp-root.h"
typedef enum { REF_HREF, REF_STYLE, REF_URL, REF_CLIPBOARD } ID_REF_TYPE;
diff --git a/src/ige-mac-menu.c b/src/ige-mac-menu.c
index 29915d980..132817dea 100644
--- a/src/ige-mac-menu.c
+++ b/src/ige-mac-menu.c
@@ -667,10 +667,10 @@ sync_menu_shell (GtkMenuShell *menu_shell,
if (GTK_IS_SEPARATOR_MENU_ITEM (menu_item))
attributes |= kMenuItemAttrSeparator;
- if (!GTK_WIDGET_IS_SENSITIVE (menu_item))
+ if (!gtk_widget_is_sensitive (menu_item))
attributes |= kMenuItemAttrDisabled;
- if (!GTK_WIDGET_VISIBLE (menu_item))
+ if (!gtk_widget_get_visible (menu_item))
attributes |= kMenuItemAttrHidden;
InsertMenuItemTextWithCFString (carbon_menu, cfstr,
diff --git a/src/ink-action.cpp b/src/ink-action.cpp
index 587efdff0..d26b038f8 100644
--- a/src/ink-action.cpp
+++ b/src/ink-action.cpp
@@ -2,12 +2,7 @@
#include <glib/gi18n.h>
-#include <gtk/gtkalignment.h>
-#include <gtk/gtktooltips.h>
-#include <gtk/gtktoolitem.h>
-#include <gtk/gtktoggletoolbutton.h>
-#include <gtk/gtkcheckmenuitem.h>
-#include <gtk/gtkimagemenuitem.h>
+#include <gtk/gtk.h>
#include "icon-size.h"
#include "ink-action.h"
@@ -183,7 +178,7 @@ void ink_action_set_property( GObject* obj, guint propId, const GValue *value, G
}
}
-#include <gtk/gtkstock.h>
+#include <gtk/gtk.h>
static GtkWidget* ink_action_create_menu_item( GtkAction* action )
{
diff --git a/src/ink-action.h b/src/ink-action.h
index 7b48d40af..c957f0f5c 100644
--- a/src/ink-action.h
+++ b/src/ink-action.h
@@ -3,9 +3,7 @@
#include <glib.h>
-#include <gtk/gtkaction.h>
-#include <gtk/gtktoggleaction.h>
-#include <gtk/gtkradioaction.h>
+#include <gtk/gtk.h>
#include <glib-object.h>
#include "icon-size.h"
#include "attributes.h"
diff --git a/src/ink-comboboxentry-action.cpp b/src/ink-comboboxentry-action.cpp
index 74034e537..49ab343c2 100644
--- a/src/ink-comboboxentry-action.cpp
+++ b/src/ink-comboboxentry-action.cpp
@@ -26,9 +26,6 @@
#include <string.h>
#include <gtk/gtk.h>
-#include <gtk/gtktoolitem.h>
-#include <gtk/gtkcomboboxentry.h>
-#include <gtk/gtkentrycompletion.h>
#include "ink-comboboxentry-action.h"
@@ -266,9 +263,7 @@ static void ink_comboboxentry_action_init (Ink_ComboBoxEntry_Action *action)
action->active = -1;
action->text = NULL;
action->entry_completion = NULL;
-#if !GTK_CHECK_VERSION(2,16,0)
action->indicator = NULL;
-#endif
action->popup = false;
action->warning = NULL;
action->altx_name = NULL;
@@ -348,15 +343,7 @@ GtkWidget* create_tool_item( GtkAction* action )
{
GtkWidget *align = gtk_alignment_new(0, 0.5, 0, 0);
-#if GTK_CHECK_VERSION(2,16,0)
gtk_container_add( GTK_CONTAINER(align), comboBoxEntry );
-#else // GTK_CHECK_VERSION(2,16,0)
- GtkWidget *hbox = gtk_hbox_new( FALSE, 0 );
- ink_comboboxentry_action->indicator = gtk_image_new_from_stock(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_box_pack_start( GTK_BOX(hbox), comboBoxEntry, TRUE, TRUE, 0 );
- gtk_box_pack_start( GTK_BOX(hbox), ink_comboboxentry_action->indicator, FALSE, FALSE, 0 );
- gtk_container_add( GTK_CONTAINER(align), hbox );
-#endif // GTK_CHECK_VERSION(2,16,0)
gtk_container_add( GTK_CONTAINER(item), align );
}
@@ -415,10 +402,7 @@ GtkWidget* create_tool_item( GtkAction* action )
}
-#if GTK_CHECK_VERSION(2,16,0)
gtk_action_connect_proxy( GTK_ACTION( action ), item );
-#endif
-
gtk_widget_show_all( item );
} else {
@@ -480,7 +464,6 @@ gboolean ink_comboboxentry_action_set_active_text( Ink_ComboBoxEntry_Action* ink
// Show or hide warning
if( ink_comboboxentry_action->active == -1 && ink_comboboxentry_action->warning != NULL ) {
-#if GTK_CHECK_VERSION(2,16,0)
{
GtkStockItem item;
gboolean isStock = gtk_stock_lookup( GTK_STOCK_DIALOG_WARNING, &item );
@@ -498,22 +481,13 @@ gboolean ink_comboboxentry_action_set_active_text( Ink_ComboBoxEntry_Action* ink
gtk_entry_set_icon_tooltip_text( ink_comboboxentry_action->entry,
GTK_ENTRY_ICON_SECONDARY,
ink_comboboxentry_action->warning );
-#else // GTK_CHECK_VERSION(2,16,0)
- gtk_image_set_from_stock( GTK_IMAGE(ink_comboboxentry_action->indicator), GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_widget_set_tooltip_text( ink_comboboxentry_action->indicator, ink_comboboxentry_action->warning );
-#endif // GTK_CHECK_VERSION(2,16,0)
} else {
-#if GTK_CHECK_VERSION(2,16,0)
gtk_entry_set_icon_from_icon_name( GTK_ENTRY(ink_comboboxentry_action->entry),
GTK_ENTRY_ICON_SECONDARY,
NULL );
gtk_entry_set_icon_from_stock( GTK_ENTRY(ink_comboboxentry_action->entry),
GTK_ENTRY_ICON_SECONDARY,
NULL );
-#else // GTK_CHECK_VERSION(2,16,0)
- gtk_image_set_from_stock( GTK_IMAGE(ink_comboboxentry_action->indicator), NULL, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_widget_set_tooltip_text( ink_comboboxentry_action->indicator, NULL );
-#endif // GTK_CHECK_VERSION(2,16,0)
}
}
@@ -585,13 +559,9 @@ void ink_comboboxentry_action_set_warning( Ink_ComboBoxEntry_Action* action,
// Widget may not have been created....
if( action->entry ) {
-#if GTK_CHECK_VERSION(2,16,0)
gtk_entry_set_icon_tooltip_text( GTK_ENTRY(action->entry),
GTK_ENTRY_ICON_SECONDARY,
action->warning );
-#else // GTK_CHECK_VERSION(2,16,0)
- gtk_image_set_from_stock( GTK_IMAGE(action->indicator), action->warning ? GTK_STOCK_DIALOG_WARNING : 0, GTK_ICON_SIZE_SMALL_TOOLBAR );
-#endif // GTK_CHECK_VERSION(2,16,0)
}
}
diff --git a/src/ink-comboboxentry-action.h b/src/ink-comboboxentry-action.h
index e080e6cdf..aade3a89f 100644
--- a/src/ink-comboboxentry-action.h
+++ b/src/ink-comboboxentry-action.h
@@ -22,8 +22,7 @@
#include <glib.h>
#include <glib-object.h>
-#include <gtk/gtkaction.h>
-#include <gtk/gtktreemodel.h>
+#include <gtk/gtk.h>
#define INK_COMBOBOXENTRY_TYPE_ACTION (ink_comboboxentry_action_get_type())
@@ -49,9 +48,7 @@ struct _Ink_ComboBoxEntry_Action {
GtkComboBoxEntry *combobox;
GtkEntry *entry;
GtkEntryCompletion *entry_completion;
-#if !GTK_CHECK_VERSION(2,16,0)
GtkWidget *indicator;
-#endif
gpointer cell_data_func; // drop-down menu format
diff --git a/src/inkscape-private.h b/src/inkscape-private.h
index 2cb83ae76..a6643b989 100644
--- a/src/inkscape-private.h
+++ b/src/inkscape-private.h
@@ -14,10 +14,10 @@
*/
#define SP_TYPE_INKSCAPE (inkscape_get_type ())
-#define SP_INKSCAPE(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_INKSCAPE, Inkscape))
-#define SP_INKSCAPE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_INKSCAPE, InkscapeClass))
-#define SP_IS_INKSCAPE(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_INKSCAPE))
-#define SP_IS_INKSCAPE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_INKSCAPE))
+#define SP_INKSCAPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_INKSCAPE, Inkscape))
+#define SP_INKSCAPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_INKSCAPE, InkscapeClass))
+#define SP_IS_INKSCAPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_INKSCAPE))
+#define SP_IS_INKSCAPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_INKSCAPE))
#include "forward.h"
#include "inkscape.h"
diff --git a/src/inkscape.cpp b/src/inkscape.cpp
index b063b909d..20084da54 100644
--- a/src/inkscape.cpp
+++ b/src/inkscape.cpp
@@ -36,8 +36,7 @@
#include <glib/gstdio.h>
#include <glib.h>
#include <glibmm/i18n.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkmessagedialog.h>
+#include <gtk/gtk.h>
#include <gtkmm/messagedialog.h>
#include <signal.h>
#include <string>
@@ -55,6 +54,7 @@
#include "io/sys.h"
#include "message-stack.h"
#include "preferences.h"
+#include "resource-manager.h"
#include "selection.h"
#include "ui/dialog/debug.h"
#include "xml/repr.h"
@@ -185,7 +185,7 @@ inkscape_class_init (Inkscape::ApplicationClass * klass)
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (Inkscape::ApplicationClass, modify_selection),
NULL, NULL,
- g_cclosure_marshal_VOID__UINT_POINTER,
+ gtk_marshal_VOID__POINTER_UINT,
G_TYPE_NONE, 2,
G_TYPE_POINTER, G_TYPE_UINT);
inkscape_signals[CHANGE_SELECTION] = g_signal_new ("change_selection",
@@ -437,11 +437,7 @@ void inkscape_autosave_init()
// Turn on autosave
guint32 timeout = prefs->getInt("/options/autosave/interval", 10) * 60;
// g_debug("options.autosave.interval = %d", prefs->getInt("/options/autosave/interval", 10));
-#if GLIB_CHECK_VERSION(2,14,0)
autosave_timeout_id = g_timeout_add_seconds(timeout, inkscape_autosave, NULL);
-#else
- autosave_timeout_id = g_timeout_add(timeout * 1000, inkscape_autosave, NULL);
-#endif
}
}
@@ -816,6 +812,7 @@ inkscape_application_init (const gchar *argv0, gboolean use_gui)
inkscape_load_menus(inkscape);
Inkscape::DeviceManager::getManager().loadConfig();
}
+ Inkscape::ResourceManager::getManager();
/* set language for user interface according setting in preferences */
Glib::ustring ui_language = prefs->getString("/ui/language");
diff --git a/src/inkview.cpp b/src/inkview.cpp
index 448aa77f1..173427aae 100644
--- a/src/inkview.cpp
+++ b/src/inkview.cpp
@@ -45,11 +45,7 @@
#include <libxml/tree.h>
#include <gdk/gdkkeysyms.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkstock.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtktable.h>
-#include <gtk/gtkbutton.h>
+#include <gtk/gtk.h>
#include <gtkmm/main.h>
diff --git a/src/interface.cpp b/src/interface.cpp
index 7dcb050ee..11882ddf9 100644
--- a/src/interface.cpp
+++ b/src/interface.cpp
@@ -829,11 +829,11 @@ sp_ui_checkboxes_menus(GtkMenu *m, Inkscape::UI::View::View *view)
{
//sp_ui_menu_append_check_item_from_verb(m, view, _("_Menu"), _("Show or hide the menu bar"), "menu",
// checkitem_toggled, checkitem_update, 0);
- sp_ui_menu_append_check_item_from_verb(m, view, _("Commands Bar"), _("Show or hide the Commands bar (under the menu)"), "commands",
+ sp_ui_menu_append_check_item_from_verb(m, view, _("_Commands Bar"), _("Show or hide the Commands bar (under the menu)"), "commands",
checkitem_toggled, checkitem_update, 0);
- sp_ui_menu_append_check_item_from_verb(m, view, _("Snap Controls Bar"), _("Show or hide the snapping controls"), "snaptoolbox",
+ sp_ui_menu_append_check_item_from_verb(m, view, _("Sn_ap Controls Bar"), _("Show or hide the snapping controls"), "snaptoolbox",
checkitem_toggled, checkitem_update, 0);
- sp_ui_menu_append_check_item_from_verb(m, view, _("Tool Controls Bar"), _("Show or hide the Tool Controls bar"), "toppanel",
+ sp_ui_menu_append_check_item_from_verb(m, view, _("T_ool Controls Bar"), _("Show or hide the Tool Controls bar"), "toppanel",
checkitem_toggled, checkitem_update, 0);
sp_ui_menu_append_check_item_from_verb(m, view, _("_Toolbox"), _("Show or hide the main toolbox (on the left)"), "toolbox",
checkitem_toggled, checkitem_update, 0);
diff --git a/src/interface.h b/src/interface.h
index 01732e911..a39769632 100644
--- a/src/interface.h
+++ b/src/interface.h
@@ -15,7 +15,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtkstyle.h>
+#include <gtk/gtk.h>
#include "forward.h"
#include "sp-item.h"
diff --git a/src/io/CMakeLists.txt b/src/io/CMakeLists.txt
index 13b8f568b..c5606779e 100644
--- a/src/io/CMakeLists.txt
+++ b/src/io/CMakeLists.txt
@@ -1,16 +1,32 @@
-SET(io_SRC
-base64stream.cpp
-ftos.cpp
-gzipstream.cpp
-inkscapestream.cpp
-resource.cpp
-simple-sax.cpp
-#streamtest.cpp
-stringstream.cpp
-sys.cpp
-uristream.cpp
-xsltstream.cpp
+
+set(io_SRC
+ base64stream.cpp
+ ftos.cpp
+ gzipstream.cpp
+ inkjar.cpp
+ inkscapestream.cpp
+ resource.cpp
+ simple-sax.cpp
+ stringstream.cpp
+ sys.cpp
+ uristream.cpp
+ xsltstream.cpp
+
+
+ # -------
+ # Headers
+ base64stream.h
+ ftos.h
+ gzipstream.h
+ inkjar.h
+ inkscapestream.h
+ resource.h
+ simple-sax.h
+ stringstream.h
+ sys.h
+ uristream.h
+ xsltstream.h
)
-ADD_LIBRARY(io STATIC ${io_SRC})
-TARGET_LINK_LIBRARIES(io
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+# add_inkscape_lib(io_LIB "${io_SRC}")
+add_inkscape_source("${io_SRC}")
diff --git a/src/io/sys.cpp b/src/io/sys.cpp
index 198be94e6..437a9d18c 100644
--- a/src/io/sys.cpp
+++ b/src/io/sys.cpp
@@ -19,11 +19,9 @@
#include <glib/gstdio.h>
#include <glib/gutils.h>
#include <glibmm/fileutils.h>
-#if GLIB_CHECK_VERSION(2,6,0)
- #include <glib/gstdio.h>
-#endif
+#include <glib/gstdio.h>
#include <glibmm/ustring.h>
-#include <gtk/gtkmessagedialog.h>
+#include <gtk/gtk.h>
#include "preferences.h"
#include "sys.h"
diff --git a/src/jabber_whiteboard/CMakeLists.txt b/src/jabber_whiteboard/CMakeLists.txt
index 5f4dfa981..b91bdf141 100644
--- a/src/jabber_whiteboard/CMakeLists.txt
+++ b/src/jabber_whiteboard/CMakeLists.txt
@@ -1,23 +1,44 @@
-ADD_SUBDIRECTORY(dialog)
-SET(jabber_whiteboard_SRC
-defines.cpp
-empty.cpp
-inkboard-document.cpp
-inkboard-node.cpp
-invitation-confirm-dialog.cpp
-keynode.cpp
-message-aggregator.cpp
-message-queue.cpp
-message-tags.cpp
-message-utilities.cpp
-#node-tracker.cpp
-#node-utilities.cpp
-pedrogui.cpp
-session-file-selector.cpp
-session-manager.cpp
-${jabber_whiteboard_dialog_SRC}
+set(jabber_whiteboard_SRC
+ defines.cpp
+ empty.cpp
+ inkboard-document.cpp
+ inkboard-node.cpp
+ invitation-confirm-dialog.cpp
+ keynode.cpp
+ message-aggregator.cpp
+ message-queue.cpp
+ message-tags.cpp
+ message-utilities.cpp
+ #node-tracker.cpp
+ #node-utilities.cpp
+ pedrogui.cpp
+ session-file-selector.cpp
+ session-manager.cpp
+
+ dialog/choose-desktop.cpp
+
+
+ # -------
+ # Headers
+ defines.h
+ dialog/choose-desktop.h
+ inkboard-document.h
+ invitation-confirm-dialog.h
+ keynode.h
+ message-aggregator.h
+ message-node.h
+ message-queue.h
+ message-tags.h
+ message-utilities.h
+ message-verifier.h
+ node-tracker.h
+ node-utilities.h
+ pedrogui.h
+ session-file-selector.h
+ session-manager.h
+ tracker-node.h
)
-ADD_LIBRARY(jabber_whiteboard STATIC ${jabber_whiteboard_SRC})
-TARGET_LINK_LIBRARIES(jabber_whiteboard
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+# add_inkscape_lib(jabber_whiteboard_LIB "${jabber_whiteboard_SRC}")
+add_inkscape_source("${jabber_whiteboard_SRC}")
diff --git a/src/jabber_whiteboard/dialog/CMakeLists.txt b/src/jabber_whiteboard/dialog/CMakeLists.txt
deleted file mode 100644
index 74863aa4b..000000000
--- a/src/jabber_whiteboard/dialog/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-SET(jabber_whiteboard_dialog_SRC
-choose-desktop.cpp
-)
diff --git a/src/jabber_whiteboard/pedrogui.h b/src/jabber_whiteboard/pedrogui.h
index d9a66a5e5..f4ebb4544 100644
--- a/src/jabber_whiteboard/pedrogui.h
+++ b/src/jabber_whiteboard/pedrogui.h
@@ -26,6 +26,7 @@
#include <gtkmm.h>
+#include "ui/widget/spinbutton.h"
#include "pedro/pedroxmpp.h"
#include "pedro/pedroconfig.h"
@@ -595,7 +596,7 @@ private:
Gtk::Label hostLabel;
Gtk::Entry hostField;
Gtk::Label portLabel;
- Gtk::SpinButton portSpinner;
+ Inkscape::UI::Widget::SpinButton portSpinner;
Gtk::Label userLabel;
Gtk::Entry userField;
Gtk::Label passLabel;
diff --git a/src/knot.cpp b/src/knot.cpp
index 28c991fde..638b31007 100644
--- a/src/knot.cpp
+++ b/src/knot.cpp
@@ -489,8 +489,8 @@ SPKnot *sp_knot_new(SPDesktop *desktop, const gchar *tip)
"mode", SP_KNOT_MODE_XOR,
NULL);
- knot->_event_handler_id = gtk_signal_connect(GTK_OBJECT(knot->item), "event",
- GTK_SIGNAL_FUNC(sp_knot_handler), knot);
+ knot->_event_handler_id = g_signal_connect(G_OBJECT(knot->item), "event",
+ G_CALLBACK(sp_knot_handler), knot);
return knot;
}
diff --git a/src/knot.h b/src/knot.h
index 1af2548e1..250165f79 100644
--- a/src/knot.h
+++ b/src/knot.h
@@ -15,7 +15,7 @@
*/
#include <gdk/gdk.h>
-#include <gtk/gtkenums.h>
+#include <gtk/gtk.h>
#include "forward.h"
#include <2geom/point.h>
#include "knot-enums.h"
diff --git a/src/libavoid/CMakeLists.txt b/src/libavoid/CMakeLists.txt
index 3f408074c..de067833b 100644
--- a/src/libavoid/CMakeLists.txt
+++ b/src/libavoid/CMakeLists.txt
@@ -1,19 +1,37 @@
-SET(libavoid_SRC
-connector.cpp
-geometry.cpp
-graph.cpp
-makepath.cpp
-polyutil.cpp
-region.cpp
-router.cpp
-shape.cpp
-static.cpp
-timer.cpp
-vertices.cpp
-visibility.cpp
-orthogonal.cpp
-vpsc.cpp
+
+set(libavoid_SRC
+ connector.cpp
+ geometry.cpp
+ geomtypes.cpp
+ graph.cpp
+ makepath.cpp
+ orthogonal.cpp
+ router.cpp
+ shape.cpp
+ timer.cpp
+ vertices.cpp
+ viscluster.cpp
+ visibility.cpp
+ vpsc.cpp
+
+ # -------
+ # Headers
+ assertions.h
+ connector.h
+ debug.h
+ geometry.h
+ geomtypes.h
+ graph.h
+ libavoid.h
+ makepath.h
+ orthogonal.h
+ router.h
+ shape.h
+ timer.h
+ vertices.h
+ viscluster.h
+ visibility.h
+ vpsc.h
)
-ADD_LIBRARY(avoid STATIC ${libavoid_SRC})
-TARGET_LINK_LIBRARIES(avoid
-${INKSCAPE_LIBS}) \ No newline at end of file
+
+add_inkscape_lib(avoid_LIB "${libavoid_SRC}")
diff --git a/src/libavoid/orthogonal.cpp b/src/libavoid/orthogonal.cpp
index 4a7b0af2d..e0a30b246 100644
--- a/src/libavoid/orthogonal.cpp
+++ b/src/libavoid/orthogonal.cpp
@@ -1731,7 +1731,7 @@ static void buildOrthogonalChannelInfo(Router *router,
Polygon& displayRoute = (*curr)->displayRoute();
// Determine all line segments that we are interested in shifting.
// We don't consider the first or last segment of a path.
- for (size_t i = 1; i < displayRoute.size(); ++i)
+ for (size_t i = 1; i < displayRoute.size()-1; ++i)
{
if (displayRoute.ps[i - 1][dim] == displayRoute.ps[i][dim])
{
diff --git a/src/libcola/CMakeLists.txt b/src/libcola/CMakeLists.txt
index b5f2e7f1f..c89ffc692 100644
--- a/src/libcola/CMakeLists.txt
+++ b/src/libcola/CMakeLists.txt
@@ -1,12 +1,23 @@
-SET(libcola_SRC
-cola.cpp
-conjugate_gradient.cpp
-connected_components.cpp
-cycle_detector.cpp
-gradient_projection.cpp
-shortest_paths.cpp
-straightener.cpp
+
+set(libcola_SRC
+ cola.cpp
+ conjugate_gradient.cpp
+ connected_components.cpp
+ # cycle_detector.cpp
+ gradient_projection.cpp
+ shortest_paths.cpp
+ straightener.cpp
+
+
+ # -------
+ # Headers
+ cola.h
+ conjugate_gradient.h
+ # cycle_detector.h
+ defs.h
+ gradient_projection.h
+ shortest_paths.h
+ straightener.h
)
-ADD_LIBRARY(cola STATIC ${libcola_SRC})
-TARGET_LINK_LIBRARIES(cola
-${INKSCAPE_LIBS}) \ No newline at end of file
+
+add_inkscape_lib(cola_LIB "${libcola_SRC}")
diff --git a/src/libcroco/CMakeLists.txt b/src/libcroco/CMakeLists.txt
index 3ca55b4b5..890f58825 100644
--- a/src/libcroco/CMakeLists.txt
+++ b/src/libcroco/CMakeLists.txt
@@ -1,32 +1,62 @@
-SET(libcroco_SRC
-cr-additional-sel.c
-cr-attr-sel.c
-cr-cascade.c
-cr-declaration.c
-cr-doc-handler.c
-cr-enc-handler.c
-cr-fonts.c
-cr-input.c
-cr-libxml-node-iface.c
-cr-num.c
-cr-om-parser.c
-cr-parser.c
-cr-parsing-location.c
-cr-prop-list.c
-cr-pseudo.c
-cr-rgb.c
-cr-selector.c
-cr-sel-eng.c
-cr-simple-sel.c
-cr-statement.c
-cr-string.c
-cr-style.c
-cr-stylesheet.c
-cr-term.c
-cr-tknzr.c
-cr-token.c
-cr-utils.c
+
+set(libcroco_SRC
+ cr-additional-sel.c
+ cr-attr-sel.c
+ cr-cascade.c
+ cr-declaration.c
+ cr-doc-handler.c
+ cr-enc-handler.c
+ cr-fonts.c
+ cr-input.c
+ cr-libxml-node-iface.c
+ cr-num.c
+ cr-om-parser.c
+ cr-parser.c
+ cr-parsing-location.c
+ cr-prop-list.c
+ cr-pseudo.c
+ cr-rgb.c
+ cr-selector.c
+ cr-sel-eng.c
+ cr-simple-sel.c
+ cr-statement.c
+ cr-string.c
+ cr-style.c
+ cr-stylesheet.c
+ cr-term.c
+ cr-tknzr.c
+ cr-token.c
+ cr-utils.c
+
+ cr-additional-sel.h
+ cr-attr-sel.h
+ cr-cascade.h
+ cr-declaration.h
+ cr-doc-handler.h
+ cr-enc-handler.h
+ cr-fonts.h
+ cr-input.h
+ cr-libxml-node-iface.h
+ cr-node-iface.h
+ cr-num.h
+ cr-om-parser.h
+ cr-parser.h
+ cr-parsing-location.h
+ cr-prop-list.h
+ cr-pseudo.h
+ cr-rgb.h
+ cr-sel-eng.h
+ cr-selector.h
+ cr-simple-sel.h
+ cr-statement.h
+ cr-string.h
+ cr-style.h
+ cr-stylesheet.h
+ cr-term.h
+ cr-tknzr.h
+ cr-token.h
+ cr-utils.h
+ libcroco.h
)
-ADD_LIBRARY(croco STATIC ${libcroco_SRC})
-TARGET_LINK_LIBRARIES(croco
-${INKSCAPE_LIBS}) \ No newline at end of file
+
+add_inkscape_lib(croco_LIB "${libcroco_SRC}")
diff --git a/src/libgdl/CMakeLists.txt b/src/libgdl/CMakeLists.txt
index dea93e6bc..befb6edb7 100644
--- a/src/libgdl/CMakeLists.txt
+++ b/src/libgdl/CMakeLists.txt
@@ -1,28 +1,49 @@
-IF(WIN32)
-SET(GDL_WIN
-gdl-win32.c
-)
-ENDIF(WIN32)
-SET(libgdl_SRC
-gdl-dock.c
-gdl-dock-bar.c
-gdl-dock-item.c
-gdl-dock-item-grip.c
-gdl-dock-master.c
-gdl-dock-notebook.c
-gdl-dock-object.c
-gdl-dock-paned.c
-gdl-dock-placeholder.c
-gdl-dock-tablabel.c
-gdl-i18n.c
-gdl-stock.c
-gdl-switcher.c
-gdl-tools.h
-libgdlmarshal.c
-libgdltypebuiltins.c
-${GDL_WIN}
+set(libgdl_SRC
+ gdl-dock.c
+ gdl-dock-bar.c
+ gdl-dock-item.c
+ gdl-dock-item-grip.c
+ gdl-dock-master.c
+ gdl-dock-notebook.c
+ gdl-dock-object.c
+ gdl-dock-paned.c
+ gdl-dock-placeholder.c
+ gdl-dock-tablabel.c
+ gdl-i18n.c
+ gdl-stock.c
+ gdl-switcher.c
+ gdl-tools.h
+ libgdlmarshal.c
+ libgdltypebuiltins.c
+
+
+ # -------
+ # Headers
+ gdl-dock-bar.h
+ gdl-dock-item-grip.h
+ gdl-dock-item.h
+ gdl-dock-master.h
+ gdl-dock-notebook.h
+ gdl-dock-object.h
+ gdl-dock-paned.h
+ gdl-dock-placeholder.h
+ gdl-dock-tablabel.h
+ gdl-dock.h
+ gdl-i18n.h
+ gdl-stock-icons.h
+ gdl-stock.h
+ gdl-switcher.h
+ libgdl.h
+ libgdlmarshal.h
+ libgdltypebuiltins.h
)
-ADD_LIBRARY(gdl STATIC ${libgdl_SRC})
-TARGET_LINK_LIBRARIES(gdl
-${INKSCAPE_LIBS}) \ No newline at end of file
+
+if(WIN32)
+ list(APPEND libgdl_SRC
+ gdl-win32.c
+ gdl-win32.h
+ )
+endif()
+
+add_inkscape_lib(gdl_LIB "${libgdl_SRC}")
diff --git a/src/libgdl/gdl-dock-bar.c b/src/libgdl/gdl-dock-bar.c
index c4882e7ad..1e694eec5 100644
--- a/src/libgdl/gdl-dock-bar.c
+++ b/src/libgdl/gdl-dock-bar.c
@@ -65,7 +65,6 @@ static void gdl_dock_bar_remove_item (GdlDockBar *dockbar,
struct _GdlDockBarPrivate {
GdlDockMaster *master;
GSList *items;
- GtkTooltips *tooltips;
GtkOrientation orientation;
GdlDockBarStyle dockbar_style;
};
@@ -130,11 +129,8 @@ gdl_dock_bar_instance_init (GdlDockBar *dockbar)
dockbar->_priv = g_new0 (GdlDockBarPrivate, 1);
dockbar->_priv->master = NULL;
dockbar->_priv->items = NULL;
- dockbar->_priv->tooltips = gtk_tooltips_new ();
dockbar->_priv->orientation = GTK_ORIENTATION_VERTICAL;
dockbar->_priv->dockbar_style = GDL_DOCK_BAR_BOTH;
- g_object_ref (dockbar->_priv->tooltips);
- gtk_object_sink (GTK_OBJECT (dockbar->_priv->tooltips));
}
static void
@@ -208,11 +204,6 @@ gdl_dock_bar_destroy (GtkObject *object)
priv->master = NULL;
}
- if (priv->tooltips) {
- g_object_unref (priv->tooltips);
- priv->tooltips = NULL;
- }
-
dockbar->_priv = NULL;
g_free (priv);
@@ -334,7 +325,7 @@ gdl_dock_bar_add_item (GdlDockBar *dockbar,
gtk_container_add (GTK_CONTAINER (button), box);
gtk_box_pack_start (GTK_BOX (dockbar), button, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (priv->tooltips, button, name, name);
+ gtk_widget_set_tooltip_text (button, name);
g_free (name);
g_object_set_data (G_OBJECT (item), "GdlDockBar", dockbar);
@@ -490,7 +481,7 @@ static void gdl_dock_bar_size_vrequest (GtkWidget *widget,
child = children->data;
children = children->next;
- if (GTK_WIDGET_VISIBLE (child->widget))
+ if (gtk_widget_get_visible (child->widget))
{
gtk_widget_size_request (child->widget, &child_requisition);
@@ -548,7 +539,7 @@ static void gdl_dock_bar_size_vallocate (GtkWidget *widget,
child = children->data;
children = children->next;
- if (GTK_WIDGET_VISIBLE (child->widget))
+ if (gtk_widget_get_visible (child->widget))
{
nvis_children += 1;
if (child->expand)
@@ -586,7 +577,7 @@ static void gdl_dock_bar_size_vallocate (GtkWidget *widget,
child = children->data;
children = children->next;
- if ((child->pack == GTK_PACK_START) && GTK_WIDGET_VISIBLE (child->widget))
+ if ((child->pack == GTK_PACK_START) && gtk_widget_get_visible (child->widget))
{
if (box->homogeneous)
{
@@ -645,7 +636,7 @@ static void gdl_dock_bar_size_vallocate (GtkWidget *widget,
child = children->data;
children = children->next;
- if ((child->pack == GTK_PACK_END) && GTK_WIDGET_VISIBLE (child->widget))
+ if ((child->pack == GTK_PACK_END) && gtk_widget_get_visible (child->widget))
{
GtkRequisition child_requisition;
gtk_widget_get_child_requisition (child->widget, &child_requisition);
@@ -715,7 +706,7 @@ static void gdl_dock_bar_size_hrequest (GtkWidget *widget,
child = children->data;
children = children->next;
- if (GTK_WIDGET_VISIBLE (child->widget))
+ if (gtk_widget_get_visible (child->widget))
{
GtkRequisition child_requisition;
@@ -777,7 +768,7 @@ static void gdl_dock_bar_size_hallocate (GtkWidget *widget,
child = children->data;
children = children->next;
- if (GTK_WIDGET_VISIBLE (child->widget))
+ if (gtk_widget_get_visible (child->widget))
{
nvis_children += 1;
if (child->expand)
@@ -815,7 +806,7 @@ static void gdl_dock_bar_size_hallocate (GtkWidget *widget,
child = children->data;
children = children->next;
- if ((child->pack == GTK_PACK_START) && GTK_WIDGET_VISIBLE (child->widget))
+ if ((child->pack == GTK_PACK_START) && gtk_widget_get_visible (child->widget))
{
if (box->homogeneous)
{
@@ -878,7 +869,7 @@ static void gdl_dock_bar_size_hallocate (GtkWidget *widget,
child = children->data;
children = children->next;
- if ((child->pack == GTK_PACK_END) && GTK_WIDGET_VISIBLE (child->widget))
+ if ((child->pack == GTK_PACK_END) && gtk_widget_get_visible (child->widget))
{
GtkRequisition child_requisition;
gtk_widget_get_child_requisition (child->widget, &child_requisition);
diff --git a/src/libgdl/gdl-dock-bar.h b/src/libgdl/gdl-dock-bar.h
index 22b99edd4..798dded20 100644
--- a/src/libgdl/gdl-dock-bar.h
+++ b/src/libgdl/gdl-dock-bar.h
@@ -22,18 +22,18 @@
#ifndef __GDL_DOCK_BAR_H__
#define __GDL_DOCK_BAR_H__
-#include <gtk/gtkvbox.h>
+#include <gtk/gtk.h>
#include "libgdl/gdl-dock.h"
G_BEGIN_DECLS
/* standard macros */
#define GDL_TYPE_DOCK_BAR (gdl_dock_bar_get_type ())
-#define GDL_DOCK_BAR(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_BAR, GdlDockBar))
-#define GDL_DOCK_BAR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_BAR, GdlDockBarClass))
-#define GDL_IS_DOCK_BAR(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_BAR))
-#define GDL_IS_DOCK_BAR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_BAR))
-#define GDL_DOCK_BAR_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_BAR, GdlDockBarClass))
+#define GDL_DOCK_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_BAR, GdlDockBar))
+#define GDL_DOCK_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_BAR, GdlDockBarClass))
+#define GDL_IS_DOCK_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_BAR))
+#define GDL_IS_DOCK_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_BAR))
+#define GDL_DOCK_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_BAR, GdlDockBarClass))
/* data types & structures */
typedef struct _GdlDockBar GdlDockBar;
diff --git a/src/libgdl/gdl-dock-item-grip.c b/src/libgdl/gdl-dock-item-grip.c
index 86e7bc14c..c51b782b3 100644
--- a/src/libgdl/gdl-dock-item-grip.c
+++ b/src/libgdl/gdl-dock-item-grip.c
@@ -17,9 +17,7 @@
#include "gdl-i18n.h"
#include <string.h>
#include <glib-object.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtktooltips.h>
-#include <gtk/gtkimage.h>
+#include <gtk/gtk.h>
#include "gdl-dock-item.h"
#include "gdl-dock-item-grip.h"
#include "gdl-stock.h"
@@ -35,7 +33,6 @@ enum {
struct _GdlDockItemGripPrivate {
GtkWidget *close_button;
GtkWidget *iconify_button;
- GtkTooltips *tooltips;
gboolean icon_pixbuf_valid;
GdkPixbuf *icon_pixbuf;
@@ -62,10 +59,10 @@ gdl_dock_item_grip_get_title_area (GdlDockItemGrip *grip,
alloc_height = MAX (grip->_priv->close_button->allocation.height, alloc_height);
alloc_height = MAX (grip->_priv->iconify_button->allocation.height, alloc_height);
- if (GTK_WIDGET_VISIBLE (grip->_priv->close_button)) {
+ if (gtk_widget_get_visible (grip->_priv->close_button)) {
area->width -= grip->_priv->close_button->allocation.width;
}
- if (GTK_WIDGET_VISIBLE (grip->_priv->iconify_button)) {
+ if (gtk_widget_get_visible (grip->_priv->iconify_button)) {
area->width -= grip->_priv->iconify_button->allocation.width;
}
@@ -266,11 +263,6 @@ gdl_dock_item_grip_destroy (GtkObject *object)
priv->icon_pixbuf = NULL;
}
- if (priv->tooltips) {
- g_object_unref (priv->tooltips);
- priv->tooltips = NULL;
- }
-
if (grip->item)
g_signal_handlers_disconnect_by_func (grip->item,
gdl_dock_item_grip_item_notify,
@@ -349,7 +341,7 @@ gdl_dock_item_grip_instance_init (GdlDockItemGrip *grip)
{
GtkWidget *image;
- GTK_WIDGET_SET_FLAGS (grip, GTK_NO_WINDOW);
+ gtk_widget_set_has_window (GTK_WIDGET (grip), FALSE);
grip->_priv = g_new0 (GdlDockItemGripPrivate, 1);
grip->_priv->icon_pixbuf_valid = FALSE;
@@ -360,7 +352,7 @@ gdl_dock_item_grip_instance_init (GdlDockItemGrip *grip)
grip->_priv->close_button = gtk_button_new ();
gtk_widget_pop_composite_child ();
- GTK_WIDGET_UNSET_FLAGS (grip->_priv->close_button, GTK_CAN_FOCUS);
+ gtk_widget_set_can_focus (grip->_priv->close_button, FALSE);
gtk_widget_set_parent (grip->_priv->close_button, GTK_WIDGET (grip));
gtk_button_set_relief (GTK_BUTTON (grip->_priv->close_button), GTK_RELIEF_NONE);
gtk_widget_show (grip->_priv->close_button);
@@ -376,7 +368,7 @@ gdl_dock_item_grip_instance_init (GdlDockItemGrip *grip)
grip->_priv->iconify_button = gtk_button_new ();
gtk_widget_pop_composite_child ();
- GTK_WIDGET_UNSET_FLAGS (grip->_priv->iconify_button, GTK_CAN_FOCUS);
+ gtk_widget_set_can_focus (grip->_priv->iconify_button, FALSE);
gtk_widget_set_parent (grip->_priv->iconify_button, GTK_WIDGET (grip));
gtk_button_set_relief (GTK_BUTTON (grip->_priv->iconify_button), GTK_RELIEF_NONE);
gtk_widget_show (grip->_priv->iconify_button);
@@ -388,13 +380,10 @@ gdl_dock_item_grip_instance_init (GdlDockItemGrip *grip)
g_signal_connect (G_OBJECT (grip->_priv->iconify_button), "clicked",
G_CALLBACK (gdl_dock_item_grip_iconify_clicked), grip);
- grip->_priv->tooltips = gtk_tooltips_new ();
- g_object_ref (grip->_priv->tooltips);
- gtk_object_sink (GTK_OBJECT (grip->_priv->tooltips));
- gtk_tooltips_set_tip (grip->_priv->tooltips, grip->_priv->iconify_button,
- _("Iconify"), _("Iconify this dock"));
- gtk_tooltips_set_tip (grip->_priv->tooltips, grip->_priv->close_button,
- _("Close"), _("Close this dock"));
+ gtk_widget_set_tooltip_text (grip->_priv->iconify_button,
+ _("Iconify"));
+ gtk_widget_set_tooltip_text (grip->_priv->close_button,
+ _("Close"));
}
static void
diff --git a/src/libgdl/gdl-dock-item-grip.h b/src/libgdl/gdl-dock-item-grip.h
index 377ea1470..4dfdd7ab3 100644
--- a/src/libgdl/gdl-dock-item-grip.h
+++ b/src/libgdl/gdl-dock-item-grip.h
@@ -13,22 +13,22 @@
#ifndef _GDL_DOCK_ITEM_GRIP_H_
#define _GDL_DOCK_ITEM_GRIP_H_
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
#include "libgdl/gdl-dock-item.h"
G_BEGIN_DECLS
#define GDL_TYPE_DOCK_ITEM_GRIP (gdl_dock_item_grip_get_type())
#define GDL_DOCK_ITEM_GRIP(obj) \
- (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGrip))
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGrip))
#define GDL_DOCK_ITEM_GRIP_CLASS(klass) \
- (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGripClass))
+ (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGripClass))
#define GDL_IS_DOCK_ITEM_GRIP(obj) \
- (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_ITEM_GRIP))
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_ITEM_GRIP))
#define GDL_IS_DOCK_ITEM_GRIP_CLASS(klass) \
- (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM_GRIP))
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM_GRIP))
#define GDL_DOCK_ITEM_GRIP_GET_CLASS(obj) \
- (GTK_CHECK_GET_CLASS ((obj), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGripClass))
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGripClass))
typedef struct _GdlDockItemGrip GdlDockItemGrip;
typedef struct _GdlDockItemGripClass GdlDockItemGripClass;
diff --git a/src/libgdl/gdl-dock-item.c b/src/libgdl/gdl-dock-item.c
index 01a777bad..b0d97a06d 100644
--- a/src/libgdl/gdl-dock-item.c
+++ b/src/libgdl/gdl-dock-item.c
@@ -426,8 +426,8 @@ gdl_dock_item_class_init (GdlDockItemClass *klass)
static void
gdl_dock_item_instance_init (GdlDockItem *item)
{
- GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (item), GTK_NO_WINDOW);
- GTK_WIDGET_SET_FLAGS (GTK_WIDGET (item), GTK_CAN_FOCUS);
+ gtk_widget_set_has_window (GTK_WIDGET (item), TRUE);
+ gtk_widget_set_can_focus (GTK_WIDGET (item), TRUE);
item->child = NULL;
@@ -644,7 +644,7 @@ gdl_dock_item_remove (GtkContainer *container,
item = GDL_DOCK_ITEM (container);
if (item->_priv && widget == item->_priv->grip) {
- gboolean grip_was_visible = GTK_WIDGET_VISIBLE (widget);
+ gboolean grip_was_visible = gtk_widget_get_visible (widget);
gtk_widget_unparent (widget);
item->_priv->grip = NULL;
if (grip_was_visible)
@@ -658,7 +658,7 @@ gdl_dock_item_remove (GtkContainer *container,
g_return_if_fail (item->child == widget);
- was_visible = GTK_WIDGET_VISIBLE (widget);
+ was_visible = gtk_widget_get_visible (widget);
gtk_widget_unparent (widget);
item->child = NULL;
@@ -781,14 +781,14 @@ gdl_dock_item_size_allocate (GtkWidget *widget,
item->_priv->preferred_height = -1;
item->_priv->preferred_width = -1;
- if (GTK_WIDGET_REALIZED (widget))
+ if (gtk_widget_get_realized (widget))
gdk_window_move_resize (widget->window,
widget->allocation.x,
widget->allocation.y,
widget->allocation.width,
widget->allocation.height);
- if (item->child && GTK_WIDGET_VISIBLE (item->child)) {
+ if (item->child && gtk_widget_get_visible (item->child)) {
GtkAllocation child_allocation;
int border_width;
@@ -836,20 +836,20 @@ gdl_dock_item_map (GtkWidget *widget)
g_return_if_fail (widget != NULL);
g_return_if_fail (GDL_IS_DOCK_ITEM (widget));
- GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
+ gtk_widget_set_mapped (widget, TRUE);
item = GDL_DOCK_ITEM (widget);
gdk_window_show (widget->window);
if (item->child
- && GTK_WIDGET_VISIBLE (item->child)
- && !GTK_WIDGET_MAPPED (item->child))
+ && gtk_widget_get_visible (item->child)
+ && !gtk_widget_get_mapped (item->child))
gtk_widget_map (item->child);
if (item->_priv->grip
- && GTK_WIDGET_VISIBLE (item->_priv->grip)
- && !GTK_WIDGET_MAPPED (item->_priv->grip))
+ && gtk_widget_get_visible (item->_priv->grip)
+ && !gtk_widget_get_mapped (item->_priv->grip))
gtk_widget_map (item->_priv->grip);
}
@@ -861,7 +861,7 @@ gdl_dock_item_unmap (GtkWidget *widget)
g_return_if_fail (widget != NULL);
g_return_if_fail (GDL_IS_DOCK_ITEM (widget));
- GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
+ gtk_widget_set_mapped (widget, FALSE);
item = GDL_DOCK_ITEM (widget);
@@ -883,7 +883,7 @@ gdl_dock_item_realize (GtkWidget *widget)
item = GDL_DOCK_ITEM (widget);
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+ gtk_widget_set_realized (widget, TRUE);
/* widget window */
attributes.x = widget->allocation.x;
@@ -906,7 +906,7 @@ gdl_dock_item_realize (GtkWidget *widget)
widget->style = gtk_style_attach (widget->style, widget->window);
gtk_style_set_background (widget->style, widget->window,
- GTK_WIDGET_STATE (item));
+ gtk_widget_get_state (GTK_WIDGET(item)));
gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
if (item->child)
@@ -923,10 +923,10 @@ gdl_dock_item_style_set (GtkWidget *widget,
g_return_if_fail (widget != NULL);
g_return_if_fail (GDL_IS_DOCK_ITEM (widget));
- if (GTK_WIDGET_REALIZED (widget) && !GTK_WIDGET_NO_WINDOW (widget)) {
+ if (gtk_widget_get_realized (widget) && gtk_widget_get_has_window (widget)) {
gtk_style_set_background (widget->style, widget->window,
widget->state);
- if (GTK_WIDGET_DRAWABLE (widget))
+ if (gtk_widget_is_drawable (widget))
gdk_window_clear (widget->window);
}
}
@@ -941,7 +941,7 @@ gdl_dock_item_paint (GtkWidget *widget,
gtk_paint_box (widget->style,
widget->window,
- GTK_WIDGET_STATE (widget),
+ gtk_widget_get_state (widget),
GTK_SHADOW_NONE,
&event->area, widget,
"dockitem",
@@ -956,7 +956,7 @@ gdl_dock_item_expose (GtkWidget *widget,
g_return_val_if_fail (GDL_IS_DOCK_ITEM (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
- if (GTK_WIDGET_DRAWABLE (widget) && event->window == widget->window) {
+ if (gtk_widget_is_drawable (widget) && event->window == widget->window) {
gdl_dock_item_paint (widget, event);
GDL_CALL_PARENT_GBOOLEAN(GTK_WIDGET_CLASS, expose_event, (widget,event));
}
@@ -1426,7 +1426,7 @@ gdl_dock_item_dock (GdlDockObject *object,
gtk_container_add (GTK_CONTAINER (parent), GTK_WIDGET (new_parent));
/* show automatic object */
- if (GTK_WIDGET_VISIBLE (object))
+ if (gtk_widget_get_visible (GTK_WIDGET (object)))
gtk_widget_show (GTK_WIDGET (new_parent));
/* use extra docking parameter */
@@ -1506,7 +1506,7 @@ gdl_dock_item_drag_start (GdlDockItem *item)
{
GdkCursor *fleur;
- if (!GTK_WIDGET_REALIZED (item))
+ if (!gtk_widget_get_realized (GTK_WIDGET (item)))
gtk_widget_realize (GTK_WIDGET (item));
GDL_DOCK_ITEM_SET_FLAGS (item, GDL_DOCK_IN_DRAG);
@@ -1632,7 +1632,7 @@ gdl_dock_item_real_set_orientation (GdlDockItem *item,
{
item->orientation = orientation;
- if (GTK_WIDGET_DRAWABLE (item))
+ if (gtk_widget_is_drawable (GTK_WIDGET (item)))
gtk_widget_queue_draw (GTK_WIDGET (item));
gtk_widget_queue_resize (GTK_WIDGET (item));
}
@@ -2030,8 +2030,8 @@ gdl_dock_item_or_child_has_focus (GdlDockItem *item)
item_child = GTK_CONTAINER (item_child)->focus_child) ;
item_or_child_has_focus =
- (GTK_WIDGET_HAS_FOCUS (GTK_WIDGET (item)) ||
- (GTK_IS_WIDGET (item_child) && GTK_WIDGET_HAS_FOCUS (item_child)));
+ (gtk_widget_has_focus (GTK_WIDGET (item)) ||
+ (GTK_IS_WIDGET (item_child) && gtk_widget_has_focus (item_child)));
return item_or_child_has_focus;
}
diff --git a/src/libgdl/gdl-dock-item.h b/src/libgdl/gdl-dock-item.h
index 17484ad04..6c0029d13 100644
--- a/src/libgdl/gdl-dock-item.h
+++ b/src/libgdl/gdl-dock-item.h
@@ -36,11 +36,11 @@ G_BEGIN_DECLS
/* standard macros */
#define GDL_TYPE_DOCK_ITEM (gdl_dock_item_get_type ())
-#define GDL_DOCK_ITEM(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_ITEM, GdlDockItem))
-#define GDL_DOCK_ITEM_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM, GdlDockItemClass))
-#define GDL_IS_DOCK_ITEM(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_ITEM))
-#define GDL_IS_DOCK_ITEM_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM))
-#define GDL_DOCK_ITEM_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_ITEM, GdlDockItemClass))
+#define GDL_DOCK_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_ITEM, GdlDockItem))
+#define GDL_DOCK_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM, GdlDockItemClass))
+#define GDL_IS_DOCK_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_ITEM))
+#define GDL_IS_DOCK_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM))
+#define GDL_DOCK_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_ITEM, GdlDockItemClass))
/* data types & structures */
typedef enum {
diff --git a/src/libgdl/gdl-dock-master.h b/src/libgdl/gdl-dock-master.h
index 72697b484..3268e68b5 100644
--- a/src/libgdl/gdl-dock-master.h
+++ b/src/libgdl/gdl-dock-master.h
@@ -25,7 +25,7 @@
#define __GDL_DOCK_MASTER_H__
#include <glib-object.h>
-#include <gtk/gtktypeutils.h>
+#include <gtk/gtk.h>
#include "libgdl/gdl-dock-object.h"
@@ -33,11 +33,11 @@ G_BEGIN_DECLS
/* standard macros */
#define GDL_TYPE_DOCK_MASTER (gdl_dock_master_get_type ())
-#define GDL_DOCK_MASTER(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_MASTER, GdlDockMaster))
-#define GDL_DOCK_MASTER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_MASTER, GdlDockMasterClass))
-#define GDL_IS_DOCK_MASTER(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_MASTER))
-#define GDL_IS_DOCK_MASTER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_MASTER))
-#define GDL_DOCK_MASTER_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_MASTER, GdlDockMasterClass))
+#define GDL_DOCK_MASTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_MASTER, GdlDockMaster))
+#define GDL_DOCK_MASTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_MASTER, GdlDockMasterClass))
+#define GDL_IS_DOCK_MASTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_MASTER))
+#define GDL_IS_DOCK_MASTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_MASTER))
+#define GDL_DOCK_MASTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_MASTER, GdlDockMasterClass))
/* data types & structures */
typedef struct _GdlDockMaster GdlDockMaster;
diff --git a/src/libgdl/gdl-dock-notebook.h b/src/libgdl/gdl-dock-notebook.h
index 105da6c8c..063f53642 100644
--- a/src/libgdl/gdl-dock-notebook.h
+++ b/src/libgdl/gdl-dock-notebook.h
@@ -28,11 +28,11 @@ G_BEGIN_DECLS
/* standard macros */
#define GDL_TYPE_DOCK_NOTEBOOK (gdl_dock_notebook_get_type ())
-#define GDL_DOCK_NOTEBOOK(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_NOTEBOOK, GdlDockNotebook))
-#define GDL_DOCK_NOTEBOOK_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_NOTEBOOK, GdlDockNotebookClass))
-#define GDL_IS_DOCK_NOTEBOOK(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_NOTEBOOK))
-#define GDL_IS_DOCK_NOTEBOOK_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_NOTEBOOK))
-#define GDL_DOCK_NOTEBOOK_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_NOTEBOOK, GdlDockNotebookClass))
+#define GDL_DOCK_NOTEBOOK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_NOTEBOOK, GdlDockNotebook))
+#define GDL_DOCK_NOTEBOOK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_NOTEBOOK, GdlDockNotebookClass))
+#define GDL_IS_DOCK_NOTEBOOK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_NOTEBOOK))
+#define GDL_IS_DOCK_NOTEBOOK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_NOTEBOOK))
+#define GDL_DOCK_NOTEBOOK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_NOTEBOOK, GdlDockNotebookClass))
/* data types & structures */
typedef struct _GdlDockNotebook GdlDockNotebook;
diff --git a/src/libgdl/gdl-dock-object.h b/src/libgdl/gdl-dock-object.h
index 84e5eb9a7..6ac36a44c 100644
--- a/src/libgdl/gdl-dock-object.h
+++ b/src/libgdl/gdl-dock-object.h
@@ -24,17 +24,17 @@
#ifndef __GDL_DOCK_OBJECT_H__
#define __GDL_DOCK_OBJECT_H__
-#include <gtk/gtkcontainer.h>
+#include <gtk/gtk.h>
G_BEGIN_DECLS
/* standard macros */
#define GDL_TYPE_DOCK_OBJECT (gdl_dock_object_get_type ())
-#define GDL_DOCK_OBJECT(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_OBJECT, GdlDockObject))
-#define GDL_DOCK_OBJECT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_OBJECT, GdlDockObjectClass))
-#define GDL_IS_DOCK_OBJECT(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_OBJECT))
-#define GDL_IS_DOCK_OBJECT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_OBJECT))
-#define GDL_DOCK_OBJECT_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_OBJECT, GdlDockObjectClass))
+#define GDL_DOCK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_OBJECT, GdlDockObject))
+#define GDL_DOCK_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_OBJECT, GdlDockObjectClass))
+#define GDL_IS_DOCK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_OBJECT))
+#define GDL_IS_DOCK_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_OBJECT))
+#define GDL_DOCK_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_OBJECT, GdlDockObjectClass))
/* data types & structures */
typedef enum {
diff --git a/src/libgdl/gdl-dock-paned.c b/src/libgdl/gdl-dock-paned.c
index 268a9f673..70273c886 100644
--- a/src/libgdl/gdl-dock-paned.c
+++ b/src/libgdl/gdl-dock-paned.c
@@ -27,8 +27,7 @@
#include "gdl-i18n.h"
#include <string.h>
-#include <gtk/gtkhpaned.h>
-#include <gtk/gtkvpaned.h>
+#include <gtk/gtk.h>
#include "gdl-tools.h"
#include "gdl-dock-paned.h"
diff --git a/src/libgdl/gdl-dock-paned.h b/src/libgdl/gdl-dock-paned.h
index 208c9c422..06b496491 100644
--- a/src/libgdl/gdl-dock-paned.h
+++ b/src/libgdl/gdl-dock-paned.h
@@ -30,11 +30,11 @@ G_BEGIN_DECLS
/* standard macros */
#define GDL_TYPE_DOCK_PANED (gdl_dock_paned_get_type ())
-#define GDL_DOCK_PANED(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_PANED, GdlDockPaned))
-#define GDL_DOCK_PANED_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_PANED, GdlDockPanedClass))
-#define GDL_IS_DOCK_PANED(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_PANED))
-#define GDL_IS_DOCK_PANED_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_PANED))
-#define GDL_DOCK_PANED_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GDL_TYE_DOCK_PANED, GdlDockPanedClass))
+#define GDL_DOCK_PANED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_PANED, GdlDockPaned))
+#define GDL_DOCK_PANED_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_PANED, GdlDockPanedClass))
+#define GDL_IS_DOCK_PANED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_PANED))
+#define GDL_IS_DOCK_PANED_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_PANED))
+#define GDL_DOCK_PANED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDL_TYE_DOCK_PANED, GdlDockPanedClass))
/* data types & structures */
typedef struct _GdlDockPaned GdlDockPaned;
diff --git a/src/libgdl/gdl-dock-placeholder.c b/src/libgdl/gdl-dock-placeholder.c
index cd900a21d..e1785ae83 100644
--- a/src/libgdl/gdl-dock-placeholder.c
+++ b/src/libgdl/gdl-dock-placeholder.c
@@ -215,8 +215,9 @@ gdl_dock_placeholder_class_init (GdlDockPlaceholderClass *klass)
static void
gdl_dock_placeholder_instance_init (GdlDockPlaceholder *ph)
{
- GTK_WIDGET_SET_FLAGS (ph, GTK_NO_WINDOW);
- GTK_WIDGET_UNSET_FLAGS (ph, GTK_CAN_FOCUS);
+ gtk_widget_set_has_window (GTK_WIDGET (ph), FALSE);
+
+ gtk_widget_set_can_focus (GTK_WIDGET (ph), FALSE);
ph->_priv = g_new0 (GdlDockPlaceholderPrivate, 1);
}
diff --git a/src/libgdl/gdl-dock-placeholder.h b/src/libgdl/gdl-dock-placeholder.h
index 4a7035b82..aeb55da67 100644
--- a/src/libgdl/gdl-dock-placeholder.h
+++ b/src/libgdl/gdl-dock-placeholder.h
@@ -30,11 +30,11 @@ G_BEGIN_DECLS
/* standard macros */
#define GDL_TYPE_DOCK_PLACEHOLDER (gdl_dock_placeholder_get_type ())
-#define GDL_DOCK_PLACEHOLDER(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholder))
-#define GDL_DOCK_PLACEHOLDER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholderClass))
-#define GDL_IS_DOCK_PLACEHOLDER(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_PLACEHOLDER))
-#define GDL_IS_DOCK_PLACEHOLDER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_PLACEHOLDER))
-#define GDL_DOCK_PLACEHOLDER_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholderClass))
+#define GDL_DOCK_PLACEHOLDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholder))
+#define GDL_DOCK_PLACEHOLDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholderClass))
+#define GDL_IS_DOCK_PLACEHOLDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_PLACEHOLDER))
+#define GDL_IS_DOCK_PLACEHOLDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_PLACEHOLDER))
+#define GDL_DOCK_PLACEHOLDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholderClass))
/* data types & structures */
typedef struct _GdlDockPlaceholder GdlDockPlaceholder;
diff --git a/src/libgdl/gdl-dock-tablabel.c b/src/libgdl/gdl-dock-tablabel.c
index bd755893b..790bf7612 100644
--- a/src/libgdl/gdl-dock-tablabel.c
+++ b/src/libgdl/gdl-dock-tablabel.c
@@ -324,14 +324,14 @@ gdl_dock_tablabel_size_allocate (GtkWidget *widget,
widget->allocation = *allocation;
- if (GTK_WIDGET_REALIZED (widget))
+ if (gtk_widget_get_realized (widget))
gdk_window_move_resize (tablabel->event_window,
allocation->x,
allocation->y,
allocation->width,
allocation->height);
- if (bin->child && GTK_WIDGET_VISIBLE (bin->child)) {
+ if (bin->child && gtk_widget_get_visible (bin->child)) {
GtkAllocation child_allocation;
child_allocation.x = widget->allocation.x + border_width;
@@ -386,7 +386,7 @@ gdl_dock_tablabel_expose (GtkWidget *widget,
g_return_val_if_fail (GDL_IS_DOCK_TABLABEL (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
- if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_MAPPED (widget)) {
+ if (gtk_widget_get_visible (widget) && gtk_widget_get_mapped (widget)) {
GDL_CALL_PARENT_GBOOLEAN(GTK_WIDGET_CLASS, expose_event, (widget,event));
gdl_dock_tablabel_paint (widget, event);
};
@@ -550,7 +550,7 @@ gdl_dock_tablabel_realize (GtkWidget *widget)
widget->style = gtk_style_attach (widget->style, widget->window);
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+ gtk_widget_set_realized (widget, TRUE);
}
static void
diff --git a/src/libgdl/gdl-dock-tablabel.h b/src/libgdl/gdl-dock-tablabel.h
index 8cf3470eb..b78c1c5c7 100644
--- a/src/libgdl/gdl-dock-tablabel.h
+++ b/src/libgdl/gdl-dock-tablabel.h
@@ -32,11 +32,11 @@ G_BEGIN_DECLS
/* standard macros */
#define GDL_TYPE_DOCK_TABLABEL (gdl_dock_tablabel_get_type ())
-#define GDL_DOCK_TABLABEL(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_TABLABEL, GdlDockTablabel))
-#define GDL_DOCK_TABLABEL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_TABLABEL, GdlDockTablabelClass))
-#define GDL_IS_DOCK_TABLABEL(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_TABLABEL))
-#define GDL_IS_DOCK_TABLABEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_TABLABEL))
-#define GDL_DOCK_TABLABEL_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_TABLABEL, GdlDockTablabelClass))
+#define GDL_DOCK_TABLABEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_TABLABEL, GdlDockTablabel))
+#define GDL_DOCK_TABLABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_TABLABEL, GdlDockTablabelClass))
+#define GDL_IS_DOCK_TABLABEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_TABLABEL))
+#define GDL_IS_DOCK_TABLABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_TABLABEL))
+#define GDL_DOCK_TABLABEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_TABLABEL, GdlDockTablabelClass))
/* data types & structures */
typedef struct _GdlDockTablabel GdlDockTablabel;
diff --git a/src/libgdl/gdl-dock.c b/src/libgdl/gdl-dock.c
index 7c74791db..c366ed69b 100644
--- a/src/libgdl/gdl-dock.c
+++ b/src/libgdl/gdl-dock.c
@@ -260,7 +260,7 @@ gdl_dock_class_init (GdlDockClass *klass)
static void
gdl_dock_instance_init (GdlDock *dock)
{
- GTK_WIDGET_SET_FLAGS (GTK_WIDGET (dock), GTK_NO_WINDOW);
+ gtk_widget_set_has_window (GTK_WIDGET (dock), FALSE);
dock->root = NULL;
dock->_priv = g_new0 (GdlDockPrivate, 1);
@@ -561,7 +561,7 @@ gdl_dock_size_request (GtkWidget *widget,
border_width = container->border_width;
/* make request to root */
- if (dock->root && GTK_WIDGET_VISIBLE (dock->root))
+ if (dock->root && gtk_widget_get_visible (dock->root))
gtk_widget_size_request (GTK_WIDGET (dock->root), requisition);
else {
requisition->width = 0;
@@ -597,7 +597,7 @@ gdl_dock_size_allocate (GtkWidget *widget,
allocation->width = MAX (1, allocation->width - 2 * border_width);
allocation->height = MAX (1, allocation->height - 2 * border_width);
- if (dock->root && GTK_WIDGET_VISIBLE (dock->root))
+ if (dock->root && gtk_widget_get_visible (dock->root))
gtk_widget_size_allocate (GTK_WIDGET (dock->root), allocation);
}
@@ -616,7 +616,7 @@ gdl_dock_map (GtkWidget *widget)
if (dock->root) {
child = GTK_WIDGET (dock->root);
- if (GTK_WIDGET_VISIBLE (child) && !GTK_WIDGET_MAPPED (child))
+ if (gtk_widget_get_visible (child) && !gtk_widget_get_mapped (child))
gtk_widget_map (child);
}
}
@@ -636,7 +636,7 @@ gdl_dock_unmap (GtkWidget *widget)
if (dock->root) {
child = GTK_WIDGET (dock->root);
- if (GTK_WIDGET_VISIBLE (child) && GTK_WIDGET_MAPPED (child))
+ if (gtk_widget_get_visible (child) && gtk_widget_get_mapped (child))
gtk_widget_unmap (child);
}
@@ -720,14 +720,14 @@ gdl_dock_remove (GtkContainer *container,
g_return_if_fail (widget != NULL);
dock = GDL_DOCK (container);
- was_visible = GTK_WIDGET_VISIBLE (widget);
+ was_visible = gtk_widget_get_visible (widget);
if (GTK_WIDGET (dock->root) == widget) {
dock->root = NULL;
GDL_DOCK_OBJECT_UNSET_FLAGS (widget, GDL_DOCK_ATTACHED);
gtk_widget_unparent (widget);
- if (was_visible && GTK_WIDGET_VISIBLE (GTK_WIDGET (container)))
+ if (was_visible && gtk_widget_get_visible (GTK_WIDGET (container)))
gtk_widget_queue_resize (GTK_WIDGET (dock));
}
}
@@ -927,15 +927,15 @@ gdl_dock_dock (GdlDockObject *object,
/* Realize the item (create its corresponding GdkWindow) when
GdlDock has been realized. */
- if (GTK_WIDGET_REALIZED (dock))
+ if (gtk_widget_get_realized (dock))
gtk_widget_realize (widget);
/* Map the widget if it's visible and the parent is visible and has
been mapped. This is done to make sure that the GdkWindow is
visible. */
- if (GTK_WIDGET_VISIBLE (dock) &&
- GTK_WIDGET_VISIBLE (widget)) {
- if (GTK_WIDGET_MAPPED (dock))
+ if (gtk_widget_get_visible (dock) &&
+ gtk_widget_get_visible (widget)) {
+ if (gtk_widget_get_mapped (dock))
gtk_widget_map (widget);
/* Make the widget resize. */
@@ -1258,9 +1258,9 @@ gdl_dock_add_floating_item (GdlDock *dock,
"floaty", y,
NULL));
- if (GTK_WIDGET_VISIBLE (dock)) {
+ if (gtk_widget_get_visible (dock)) {
gtk_widget_show (GTK_WIDGET (new_dock));
- if (GTK_WIDGET_MAPPED (dock))
+ if (gtk_widget_get_mapped (dock))
gtk_widget_map (GTK_WIDGET (new_dock));
/* Make the widget resize. */
@@ -1335,7 +1335,7 @@ gdl_dock_xor_rect (GdlDock *dock,
widget = GTK_WIDGET (dock);
if (!dock->_priv->xor_gc) {
- if (GTK_WIDGET_REALIZED (widget)) {
+ if (gtk_widget_get_realized (widget)) {
GdkGCValues values;
values.function = GDK_INVERT;
diff --git a/src/libgdl/gdl-dock.h b/src/libgdl/gdl-dock.h
index 7508feef7..2259d395d 100644
--- a/src/libgdl/gdl-dock.h
+++ b/src/libgdl/gdl-dock.h
@@ -31,11 +31,11 @@ G_BEGIN_DECLS
/* standard macros */
#define GDL_TYPE_DOCK (gdl_dock_get_type ())
-#define GDL_DOCK(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK, GdlDock))
-#define GDL_DOCK_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK, GdlDockClass))
-#define GDL_IS_DOCK(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK))
-#define GDL_IS_DOCK_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK))
-#define GDL_DOCK_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK, GdlDockClass))
+#define GDL_DOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK, GdlDock))
+#define GDL_DOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK, GdlDockClass))
+#define GDL_IS_DOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK))
+#define GDL_IS_DOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK))
+#define GDL_DOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK, GdlDockClass))
/* data types & structures */
typedef struct _GdlDock GdlDock;
diff --git a/src/libgdl/gdl-stock.c b/src/libgdl/gdl-stock.c
index 94f825678..dc86e523b 100644
--- a/src/libgdl/gdl-stock.c
+++ b/src/libgdl/gdl-stock.c
@@ -24,7 +24,6 @@
#endif
#include <gtk/gtk.h>
-#include <gtk/gtkiconfactory.h>
#include "gdl-stock.h"
#include "gdl-stock-icons.h"
diff --git a/src/libgdl/gdl-switcher.c b/src/libgdl/gdl-switcher.c
index 43768bbdf..65e8b98fe 100644
--- a/src/libgdl/gdl-switcher.c
+++ b/src/libgdl/gdl-switcher.c
@@ -35,10 +35,6 @@
#include "libgdltypebuiltins.h"
#include <gtk/gtk.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtkimage.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtktogglebutton.h>
#if HAVE_GNOME
#include <gconf/gconf-client.h>
@@ -78,7 +74,6 @@ typedef struct {
GtkWidget *icon;
GtkWidget *arrow;
GtkWidget *hbox;
- GtkTooltips *tooltips;
int id;
} Button;
@@ -107,7 +102,7 @@ GDL_CLASS_BOILERPLATE (GdlSwitcher, gdl_switcher, GtkNotebook, GTK_TYPE_NOTEBOOK
static Button *
button_new (GtkWidget *button_widget, GtkWidget *label, GtkWidget *icon,
- GtkTooltips *tooltips, GtkWidget *arrow, GtkWidget *hbox, int id)
+ GtkWidget *arrow, GtkWidget *hbox, int id)
{
Button *button = g_new (Button, 1);
@@ -116,7 +111,6 @@ button_new (GtkWidget *button_widget, GtkWidget *label, GtkWidget *icon,
button->icon = icon;
button->arrow = arrow;
button->hbox = hbox;
- button->tooltips = tooltips;
button->id = id;
g_object_ref (button_widget);
@@ -124,7 +118,6 @@ button_new (GtkWidget *button_widget, GtkWidget *label, GtkWidget *icon,
g_object_ref (icon);
g_object_ref (arrow);
g_object_ref (hbox);
- g_object_ref (tooltips);
return button;
}
@@ -136,7 +129,6 @@ button_free (Button *button)
g_object_unref (button->label);
g_object_unref (button->icon);
g_object_unref (button->hbox);
- g_object_unref (button->tooltips);
g_free (button);
}
@@ -715,7 +707,7 @@ gdl_switcher_instance_init (GdlSwitcher *switcher)
{
GdlSwitcherPrivate *priv;
- GTK_WIDGET_SET_FLAGS (switcher, GTK_NO_WINDOW);
+ gtk_widget_set_has_window (GTK_WIDGET (switcher), FALSE);
priv = g_new0 (GdlSwitcherPrivate, 1);
switcher->priv = priv;
@@ -754,7 +746,6 @@ gdl_switcher_add_button (GdlSwitcher *switcher, const gchar *label,
GtkWidget *icon_widget;
GtkWidget *label_widget;
GtkWidget *arrow;
- GtkTooltips *button_tooltips;
button_widget = gtk_toggle_button_new ();
if (switcher->priv->show)
@@ -785,24 +776,19 @@ gdl_switcher_add_button (GdlSwitcher *switcher, const gchar *label,
}
gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5);
gtk_widget_show (label_widget);
- button_tooltips = gtk_tooltips_new();
- gtk_tooltips_set_tip (GTK_TOOLTIPS (button_tooltips), button_widget,
- tooltips, NULL);
+ gtk_widget_set_tooltip_text (button_widget, tooltips);
switch (INTERNAL_MODE (switcher)) {
case GDL_SWITCHER_STYLE_TEXT:
gtk_box_pack_start (GTK_BOX (hbox), label_widget, TRUE, TRUE, 0);
- gtk_tooltips_disable (button_tooltips);
break;
case GDL_SWITCHER_STYLE_ICON:
gtk_box_pack_start (GTK_BOX (hbox), icon_widget, TRUE, TRUE, 0);
- gtk_tooltips_enable (button_tooltips);
break;
case GDL_SWITCHER_STYLE_BOTH:
default:
gtk_box_pack_start (GTK_BOX (hbox), icon_widget, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (hbox), label_widget, TRUE, TRUE, 0);
- gtk_tooltips_disable (button_tooltips);
break;
}
arrow = gtk_arrow_new (GTK_ARROW_UP, GTK_SHADOW_NONE);
@@ -812,7 +798,7 @@ gdl_switcher_add_button (GdlSwitcher *switcher, const gchar *label,
switcher->priv->buttons =
g_slist_append (switcher->priv->buttons,
button_new (button_widget, label_widget,
- icon_widget, button_tooltips,
+ icon_widget,
arrow, hbox, switcher_id));
gtk_widget_set_parent (button_widget, GTK_WIDGET (switcher));
@@ -905,7 +891,6 @@ set_switcher_style_internal (GdlSwitcher *switcher,
gtk_box_pack_start (GTK_BOX (button->hbox), button->label,
TRUE, TRUE, 0);
gtk_widget_show (button->label);
- gtk_tooltips_disable (button->tooltips);
}
break;
case GDL_SWITCHER_STYLE_ICON:
@@ -918,7 +903,6 @@ set_switcher_style_internal (GdlSwitcher *switcher,
} else
gtk_container_child_set (GTK_CONTAINER (button->hbox),
button->icon, "expand", TRUE, NULL);
- gtk_tooltips_enable (button->tooltips);
break;
case GDL_SWITCHER_STYLE_BOTH:
if (INTERNAL_MODE (switcher)
@@ -933,7 +917,6 @@ set_switcher_style_internal (GdlSwitcher *switcher,
button->icon, "expand", FALSE, NULL);
}
- gtk_tooltips_disable (button->tooltips);
gtk_box_pack_start (GTK_BOX (button->hbox), button->label, TRUE,
TRUE, 0);
gtk_widget_show (button->label);
diff --git a/src/libgdl/gdl-switcher.h b/src/libgdl/gdl-switcher.h
index be4b179bf..9c33f8bbf 100644
--- a/src/libgdl/gdl-switcher.h
+++ b/src/libgdl/gdl-switcher.h
@@ -25,7 +25,7 @@
#ifndef _GDL_SWITCHER_H_
#define _GDL_SWITCHER_H_
-#include <gtk/gtknotebook.h>
+#include <gtk/gtk.h>
G_BEGIN_DECLS
diff --git a/src/libgdl/gdl-tools.h b/src/libgdl/gdl-tools.h
index 32c2e4a41..0cfc9fb95 100644
--- a/src/libgdl/gdl-tools.h
+++ b/src/libgdl/gdl-tools.h
@@ -25,7 +25,7 @@
#define __GDL_TOOLS_H__
#include <glib.h>
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
/* FIXME: Toggle this */
diff --git a/src/libnr/CMakeLists.txt b/src/libnr/CMakeLists.txt
index 3bf483181..994c5d348 100644
--- a/src/libnr/CMakeLists.txt
+++ b/src/libnr/CMakeLists.txt
@@ -1,36 +1,101 @@
-SET(libnr_SRC
-#in-svg-plane-test.cpp
-nr-blit.cpp
-nr-compose.cpp
-nr-compose-transform.cpp
-nr-gradient.cpp
-nr-matrix.cpp
-nr-matrix-div.cpp
-nr-matrix-fns.cpp
-nr-matrix-rotate-ops.cpp
-nr-object.cpp
-nr-pixblock.cpp
-nr-pixblock-line.cpp
-nr-pixblock-pattern.cpp
-nr-pixblock-pixel.cpp
-nr-point-fns.cpp
-#nr-point-fns-test.cpp
-nr-rect.cpp
-nr-rect-l.cpp
-nr-rotate-fns.cpp
-#nr-rotate-fns-test.cpp
-nr-rotate-matrix-ops.cpp
-nr-scale-matrix-ops.cpp
-nr-scale-translate-ops.cpp
-nr-translate-matrix-ops.cpp
-nr-translate-rotate-ops.cpp
-nr-translate-scale-ops.cpp
-#nr-translate-test.cpp
-nr-types.cpp
-#nr-types-test.cpp
-nr-values.cpp
-testnr.cpp
+
+set(nr_SRC
+ # in-svg-plane-test.cpp
+ nr-blit.cpp
+ nr-compose.cpp
+ nr-compose-transform.cpp
+ nr-gradient.cpp
+ nr-matrix.cpp
+ nr-matrix-div.cpp
+ nr-matrix-fns.cpp
+ nr-matrix-rotate-ops.cpp
+ nr-object.cpp
+ nr-pixblock.cpp
+ nr-pixblock-line.cpp
+ nr-pixblock-pattern.cpp
+ nr-pixblock-pixel.cpp
+ nr-point-fns.cpp
+ # nr-point-fns-test.cpp
+ nr-rect.cpp
+ nr-rect-l.cpp
+ nr-rotate-fns.cpp
+ # nr-rotate-fns-test.cpp
+ nr-rotate-matrix-ops.cpp
+ nr-scale-matrix-ops.cpp
+ nr-scale-translate-ops.cpp
+ nr-translate-matrix-ops.cpp
+ nr-translate-rotate-ops.cpp
+ nr-translate-scale-ops.cpp
+ #nr-translate-test.cpp
+ nr-types.cpp
+ # nr-types-test.cpp
+ nr-values.cpp
+ # testnr.cpp
+
+ # -------
+ # Headers
+ # in-svg-plane-test.h
+ in-svg-plane.h
+ nr-blit.h
+ nr-compose-reference.h
+ nr-compose-test.h
+ nr-compose-transform.h
+ nr-compose.h
+ nr-convert2geom.h
+ nr-convex-hull-ops.h
+ nr-convex-hull.h
+ nr-coord.h
+ nr-dim2.h
+ nr-forward.h
+ nr-gradient.h
+ nr-i-coord.h
+ nr-macros.h
+ nr-matrix-div.h
+ nr-matrix-fns.h
+ nr-matrix-ops.h
+ nr-matrix-rotate-ops.h
+ nr-matrix-scale-ops.h
+ nr-matrix-test.h
+ nr-matrix-translate-ops.h
+ nr-matrix.h
+ nr-maybe.h
+ nr-object.h
+ nr-path-code.h
+ nr-pixblock-line.h
+ nr-pixblock-pattern.h
+ nr-pixblock-pixel.h
+ nr-pixblock.h
+ nr-pixops.h
+ # nr-point-fns-test.h
+ nr-point-fns.h
+ nr-point-l.h
+ nr-point-matrix-ops.h
+ nr-point-ops.h
+ nr-point.h
+ nr-rect-l.h
+ nr-rect-ops.h
+ nr-rect.h
+ nr-render.h
+ nr-rotate-fns-test.h
+ nr-rotate-fns.h
+ nr-rotate-matrix-ops.h
+ nr-rotate-ops.h
+ nr-rotate-test.h
+ nr-rotate.h
+ nr-scale-matrix-ops.h
+ nr-scale-ops.h
+ nr-scale-test.h
+ nr-scale-translate-ops.h
+ nr-scale.h
+ nr-translate-matrix-ops.h
+ nr-translate-ops.h
+ nr-translate-rotate-ops.h
+ nr-translate-scale-ops.h
+ # nr-translate-test.h
+ nr-translate.h
+ # nr-types-test.h
+ nr-types.h
+ nr-values.h
)
-ADD_LIBRARY(nr STATIC ${libnr_SRC})
-TARGET_LINK_LIBRARIES(nr
-2geom ${INKSCAPE_LIBS})
+
+add_inkscape_lib(nr_LIB "${nr_SRC}")
diff --git a/src/libnrtype/CMakeLists.txt b/src/libnrtype/CMakeLists.txt
index 61ecb0091..835665761 100644
--- a/src/libnrtype/CMakeLists.txt
+++ b/src/libnrtype/CMakeLists.txt
@@ -1,19 +1,40 @@
-SET(libnrtype_SRC
-FontFactory.cpp
-FontInstance.cpp
-font-lister.cpp
-font-style-to-pos.cpp
-Layout-TNG.cpp
-Layout-TNG-Compute.cpp
-Layout-TNG-Input.cpp
-Layout-TNG-OutIter.cpp
-Layout-TNG-Output.cpp
-Layout-TNG-Scanline-Makers.cpp
-nr-type-pos-def.cpp
-nr-type-primitives.cpp
-RasterFont.cpp
-TextWrapper.cpp
+
+set(nrtype_SRC
+ FontFactory.cpp
+ FontInstance.cpp
+ font-lister.cpp
+ font-style-to-pos.cpp
+ Layout-TNG.cpp
+ Layout-TNG-Compute.cpp
+ Layout-TNG-Input.cpp
+ Layout-TNG-OutIter.cpp
+ Layout-TNG-Output.cpp
+ Layout-TNG-Scanline-Makers.cpp
+ nr-type-pos-def.cpp
+ nr-type-primitives.cpp
+ RasterFont.cpp
+ TextWrapper.cpp
+
+ FontFactory.h
+ Layout-TNG-Scanline-Maker.h
+ Layout-TNG.h
+ RasterFont.h
+ TextWrapper.h
+ boundary-type.h
+ font-glyph.h
+ font-instance.h
+ font-lister.h
+ font-style-to-pos.h
+ font-style.h
+ nr-type-pos-def.h
+ nr-type-primitives.h
+ nrtype-forward.h
+ one-box.h
+ one-glyph.h
+ one-para.h
+ raster-glyph.h
+ raster-position.h
+ text-boundary.h
)
-ADD_LIBRARY(nrtype STATIC ${libnrtype_SRC})
-TARGET_LINK_LIBRARIES(nrtype
-nr ${INKSCAPE_LIBS})
+
+add_inkscape_lib(nrtype_LIB "${nrtype_SRC}")
diff --git a/src/libnrtype/Layout-TNG-Input.cpp b/src/libnrtype/Layout-TNG-Input.cpp
index d16c6457d..45bc0c89b 100644
--- a/src/libnrtype/Layout-TNG-Input.cpp
+++ b/src/libnrtype/Layout-TNG-Input.cpp
@@ -11,7 +11,7 @@
#define PANGO_ENABLE_ENGINE
-#include <gtk/gtkversion.h>
+#include <gtk/gtk.h>
#include "Layout-TNG.h"
#include "style.h"
#include "svg/svg-length.h"
diff --git a/src/libvpsc/CMakeLists.txt b/src/libvpsc/CMakeLists.txt
index 4c3398b0f..8db059b5d 100644
--- a/src/libvpsc/CMakeLists.txt
+++ b/src/libvpsc/CMakeLists.txt
@@ -1,13 +1,29 @@
-SET(libvpsc_SRC
-block.cpp
-blocks.cpp
-constraint.cpp
-csolve_VPSC.cpp
-generate-constraints.cpp
-remove_rectangle_overlap.cpp
-solve_VPSC.cpp
-variable.cpp
+
+set(libvpsc_SRC
+ block.cpp
+ blocks.cpp
+ constraint.cpp
+ csolve_VPSC.cpp
+ generate-constraints.cpp
+ remove_rectangle_overlap.cpp
+ solve_VPSC.cpp
+ variable.cpp
+ pairingheap/PairingHeap.cpp
+
+
+ # -------
+ # Headers
+ block.h
+ blocks.h
+ constraint.h
+ csolve_VPSC.h
+ generate-constraints.h
+ pairingheap/PairingHeap.h
+ pairingheap/dsexceptions.h
+ placement_SolveVPSC.h
+ remove_rectangle_overlap.h
+ solve_VPSC.h
+ variable.h
)
-ADD_LIBRARY(vpsc STATIC ${libvpsc_SRC})
-TARGET_LINK_LIBRARIES(vpsc
-${INKSCAPE_LIBS}) \ No newline at end of file
+
+add_inkscape_lib(vpsc_LIB "${libvpsc_SRC}")
diff --git a/src/livarot/CMakeLists.txt b/src/livarot/CMakeLists.txt
index 6eaf84d1c..1890bd1a7 100644
--- a/src/livarot/CMakeLists.txt
+++ b/src/livarot/CMakeLists.txt
@@ -1,25 +1,41 @@
-SET(livarot_SRC
-AlphaLigne.cpp
-AVL.cpp
-BitLigne.cpp
-float-line.cpp
-int-line.cpp
-PathConversion.cpp
-Path.cpp
-PathCutting.cpp
-path-description.cpp
-PathOutline.cpp
-PathSimplify.cpp
-PathStroke.cpp
-Shape.cpp
-ShapeDraw.cpp
-ShapeMisc.cpp
-ShapeRaster.cpp
-ShapeSweep.cpp
-sweep-event.cpp
-sweep-tree.cpp
-sweep-tree-list.cpp
+
+set(livarot_SRC
+ AlphaLigne.cpp
+ AVL.cpp
+ BitLigne.cpp
+ float-line.cpp
+ int-line.cpp
+ PathConversion.cpp
+ Path.cpp
+ PathCutting.cpp
+ path-description.cpp
+ PathOutline.cpp
+ PathSimplify.cpp
+ PathStroke.cpp
+ Shape.cpp
+ ShapeDraw.cpp
+ ShapeMisc.cpp
+ ShapeRaster.cpp
+ ShapeSweep.cpp
+ sweep-event.cpp
+ sweep-tree.cpp
+ sweep-tree-list.cpp
+
+ AVL.h
+ AlphaLigne.h
+ BitLigne.h
+ Livarot.h
+ LivarotDefs.h
+ Path.h
+ Shape.h
+ float-line.h
+ int-line.h
+ livarot-forward.h
+ path-description.h
+ sweep-event-queue.h
+ sweep-event.h
+ sweep-tree-list.h
+ sweep-tree.h
)
-ADD_LIBRARY(livarot STATIC ${livarot_SRC})
-TARGET_LINK_LIBRARIES(nrtype
-${INKSCAPE_LIBS}) \ No newline at end of file
+
+add_inkscape_lib(livarot_LIB "${livarot_SRC}")
diff --git a/src/live_effects/CMakeLists.txt b/src/live_effects/CMakeLists.txt
index 70e8cbaf8..3bca16715 100644
--- a/src/live_effects/CMakeLists.txt
+++ b/src/live_effects/CMakeLists.txt
@@ -1,37 +1,115 @@
-ADD_SUBDIRECTORY(parameter)
-SET(live_effects_SRC
-bezctx.cpp
-effect.cpp
-lpe-bendpath.cpp
-lpe-boolops.cpp
-lpe-circle_with_radius.cpp
-lpe-constructgrid.cpp
-lpe-curvestitch.cpp
-lpe-envelope.cpp
-lpe-gears.cpp
-lpegroupbbox.cpp
-lpe-interpolate.cpp
-lpe-knot.cpp
-lpe-rough-hatches.cpp
-lpe-lattice.cpp
-lpe-mirror_symmetry.cpp
-lpeobject.cpp
-lpeobject-reference.cpp
-lpe-patternalongpath.cpp
-lpe-perp_bisector.cpp
-lpe-perspective_path.cpp
-lpe-powerstroke.cpp
-lpe-skeleton.cpp
-lpe-sketch.cpp
-lpe-spiro.cpp
-lpe-tangent_to_curve.cpp
-lpe-test-doEffect-stack.cpp
-lpe-vonkoch.cpp
-lpe-dynastroke.cpp
-spiro.cpp
-${live_effects_parameter_SRC}
+set(live_effects_SRC
+ bezctx.cpp
+ effect.cpp
+ lpe-angle_bisector.cpp
+ lpe-bendpath.cpp
+ lpe-boolops.cpp
+ lpe-circle_3pts.cpp
+ lpe-circle_with_radius.cpp
+ lpe-constructgrid.cpp
+ lpe-copy_rotate.cpp
+ lpe-curvestitch.cpp
+ lpe-dynastroke.cpp
+ lpe-envelope.cpp
+ lpe-extrude.cpp
+ lpe-gears.cpp
+ lpe-interpolate.cpp
+ lpe-knot.cpp
+ lpe-lattice.cpp
+ lpe-line_segment.cpp
+ lpe-mirror_symmetry.cpp
+ lpe-offset.cpp
+ lpe-parallel.cpp
+ lpe-path_length.cpp
+ lpe-patternalongpath.cpp
+ lpe-perp_bisector.cpp
+ lpe-perspective_path.cpp
+ lpe-powerstroke.cpp
+ lpe-recursiveskeleton.cpp
+ lpe-rough-hatches.cpp
+ lpe-ruler.cpp
+ # lpe-skeleton.cpp
+ lpe-sketch.cpp
+ lpe-spiro.cpp
+ lpe-tangent_to_curve.cpp
+ lpe-test-doEffect-stack.cpp
+ lpe-text_label.cpp
+ lpe-vonkoch.cpp
+ lpegroupbbox.cpp
+ lpeobject-reference.cpp
+ lpeobject.cpp
+ spiro.cpp
+
+ parameter/array.cpp
+ parameter/bool.cpp
+ parameter/parameter.cpp
+ parameter/path.cpp
+ parameter/path-reference.cpp
+ parameter/point.cpp
+ parameter/powerstrokepointarray.cpp
+ parameter/random.cpp
+ parameter/text.cpp
+ parameter/unit.cpp
+ parameter/vector.cpp
+
+ # -------
+ # Headers
+ bezctx.h
+ bezctx_intf.h
+ effect-enum.h
+ effect.h
+ lpe-angle_bisector.h
+ lpe-bendpath.h
+ lpe-boolops.h
+ lpe-circle_3pts.h
+ lpe-circle_with_radius.h
+ lpe-constructgrid.h
+ lpe-copy_rotate.h
+ lpe-curvestitch.h
+ lpe-dynastroke.h
+ lpe-envelope.h
+ lpe-extrude.h
+ lpe-gears.h
+ lpe-interpolate.h
+ lpe-knot.h
+ lpe-lattice.h
+ lpe-line_segment.h
+ lpe-mirror_symmetry.h
+ lpe-offset.h
+ lpe-parallel.h
+ lpe-path_length.h
+ lpe-patternalongpath.h
+ lpe-perp_bisector.h
+ lpe-perspective_path.h
+ lpe-powerstroke.h
+ lpe-recursiveskeleton.h
+ lpe-rough-hatches.h
+ lpe-ruler.h
+ lpe-skeleton.h
+ lpe-sketch.h
+ lpe-spiro.h
+ lpe-tangent_to_curve.h
+ lpe-test-doEffect-stack.h
+ lpe-text_label.h
+ lpe-vonkoch.h
+ lpegroupbbox.h
+ lpeobject-reference.h
+ lpeobject.h
+ parameter/array.h
+ parameter/bool.h
+ parameter/enum.h
+ parameter/parameter.h
+ parameter/path-reference.h
+ parameter/path.h
+ parameter/point.h
+ parameter/powerstrokepointarray.h
+ parameter/random.h
+ parameter/text.h
+ parameter/unit.h
+ parameter/vector.h
+ spiro.h
)
-ADD_LIBRARY(live_effects STATIC ${live_effects_SRC})
-TARGET_LINK_LIBRARIES(live_effects
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+# add_inkscape_lib(live_effects_LIB "${live_effects_SRC}")
+add_inkscape_source("${live_effects_SRC}")
diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp
index ed0d162ac..10abef4a1 100644
--- a/src/live_effects/effect.cpp
+++ b/src/live_effects/effect.cpp
@@ -262,7 +262,7 @@ void Effect::createAndApply(const char* name, SPDocument *doc, SPItem *item)
Inkscape::XML::Node *repr = xml_doc->createElement("inkscape:path-effect");
repr->setAttribute("effect", name);
- SP_DOCUMENT_DEFS(doc)->getRepr()->addChild(repr, NULL); // adds to <defs> and assigns the 'id' attribute
+ doc->getDefs()->getRepr()->addChild(repr, NULL); // adds to <defs> and assigns the 'id' attribute
const gchar * repr_id = repr->attribute("id");
Inkscape::GC::release(repr);
diff --git a/src/live_effects/effect.h b/src/live_effects/effect.h
index 7fe4e9348..91d09fef6 100644
--- a/src/live_effects/effect.h
+++ b/src/live_effects/effect.h
@@ -157,7 +157,7 @@ protected:
LivePathEffectObject *lpeobj;
// this boolean defaults to false, it concatenates the input path to one pwd2,
- // instead of normally 'splitting' the path into continuous pwd2 paths.
+ // instead of normally 'splitting' the path into continuous pwd2 paths and calling doEffect_pwd2 for each.
bool concatenate_before_pwd2;
private:
diff --git a/src/live_effects/lpeobject.cpp b/src/live_effects/lpeobject.cpp
index 1b5ed1d49..3e4e40198 100644
--- a/src/live_effects/lpeobject.cpp
+++ b/src/live_effects/lpeobject.cpp
@@ -253,7 +253,7 @@ LivePathEffectObject *LivePathEffectObject::fork_private_if_necessary(unsigned i
Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *dup_repr = this->getRepr()->duplicate(xml_doc);
- SP_DOCUMENT_DEFS(doc)->getRepr()->addChild(dup_repr, NULL);
+ doc->getDefs()->getRepr()->addChild(dup_repr, NULL);
LivePathEffectObject *lpeobj_new = LIVEPATHEFFECT( doc->getObjectByRepr(dup_repr) );
Inkscape::GC::release(dup_repr);
diff --git a/src/live_effects/parameter/CMakeLists.txt b/src/live_effects/parameter/CMakeLists.txt
deleted file mode 100644
index 8657b2bec..000000000
--- a/src/live_effects/parameter/CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-SET(live_effects_parameter_SRC
-array.cpp
-bool.cpp
-parameter.cpp
-path.cpp
-path-reference.cpp
-point.cpp
-powerstrokepointarray.cpp
-random.cpp
-text.cpp
-unit.cpp
-vector.cpp
-)
diff --git a/src/live_effects/parameter/path.cpp b/src/live_effects/parameter/path.cpp
index d652dfd0c..bd9748fd6 100644
--- a/src/live_effects/parameter/path.cpp
+++ b/src/live_effects/parameter/path.cpp
@@ -15,7 +15,7 @@
#include "ui/widget/point.h"
#include "widgets/icon.h"
-#include <gtk/gtkstock.h>
+#include <gtk/gtk.h>
#include "selection-chemistry.h"
#include "xml/repr.h"
#include "desktop.h"
diff --git a/src/lpe-tool-context.h b/src/lpe-tool-context.h
index 478989e0b..12e4b3838 100644
--- a/src/lpe-tool-context.h
+++ b/src/lpe-tool-context.h
@@ -19,10 +19,10 @@
#include "helper/units.h"
#define SP_TYPE_LPETOOL_CONTEXT (sp_lpetool_context_get_type())
-#define SP_LPETOOL_CONTEXT(o) (GTK_CHECK_CAST((o), SP_TYPE_LPETOOL_CONTEXT, SPLPEToolContext))
-#define SP_LPETOOL_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_CAST((k), SP_TYPE_LPETOOL_CONTEXT, SPLPEToolContextClass))
-#define SP_IS_LPETOOL_CONTEXT(o) (GTK_CHECK_TYPE((o), SP_TYPE_LPETOOL_CONTEXT))
-#define SP_IS_LPETOOL_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_TYPE((k), SP_TYPE_LPETOOL_CONTEXT))
+#define SP_LPETOOL_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_LPETOOL_CONTEXT, SPLPEToolContext))
+#define SP_LPETOOL_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_LPETOOL_CONTEXT, SPLPEToolContextClass))
+#define SP_IS_LPETOOL_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_LPETOOL_CONTEXT))
+#define SP_IS_LPETOOL_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_LPETOOL_CONTEXT))
class SPLPEToolContext;
class SPLPEToolContextClass;
diff --git a/src/main.cpp b/src/main.cpp
index b510f6902..26774fd66 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -31,7 +31,7 @@
// This has to be included prior to anything that includes setjmp.h, it croaks otherwise
#include <png.h>
-#include <gtk/gtkmessagedialog.h>
+#include <gtk/gtk.h>
#ifdef HAVE_IEEEFP_H
#include <ieeefp.h>
@@ -51,10 +51,6 @@
#include <glib/gprintf.h>
#include <glib-object.h>
#include <gtk/gtk.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkbox.h>
#include "gc-core.h"
@@ -1349,7 +1345,7 @@ sp_do_export_png(SPDocument *doc)
} else if (sp_export_area_page || !(sp_export_id || sp_export_area_drawing)) {
/* Export the whole page: note: Inkscape uses 'page' in all menus and dialogs, not 'canvas' */
doc->ensureUpToDate();
- Geom::Point origin (SP_ROOT(doc->root)->x.computed, SP_ROOT(doc->root)->y.computed);
+ Geom::Point origin(doc->getRoot()->x.computed, doc->getRoot()->y.computed);
area = Geom::Rect(origin, origin + doc->getDimensions());
}
diff --git a/src/marker.cpp b/src/marker.cpp
index 2bd5884b7..e82d3d952 100644
--- a/src/marker.cpp
+++ b/src/marker.cpp
@@ -714,7 +714,7 @@ sp_marker_view_remove (SPMarker *marker, SPMarkerView *view, unsigned int destro
const gchar *generate_marker(GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::Affine /*transform*/, Geom::Affine move)
{
Inkscape::XML::Document *xml_doc = document->getReprDoc();
- Inkscape::XML::Node *defsrepr = SP_DOCUMENT_DEFS(document)->getRepr();
+ Inkscape::XML::Node *defsrepr = document->getDefs()->getRepr();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:marker");
diff --git a/src/measure-context.cpp b/src/measure-context.cpp
new file mode 100644
index 000000000..8920facb9
--- /dev/null
+++ b/src/measure-context.cpp
@@ -0,0 +1,382 @@
+/*
+ * Our nice measuring tool
+ *
+ * Authors:
+ * Felipe Correa da Silva Sanches <juca@members.fsf.org>
+ *
+ * Copyright (C) 2011 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+
+#include <gdk/gdkkeysyms.h>
+#include "helper/units.h"
+#include "macros.h"
+#include "display/curve.h"
+#include "sp-shape.h"
+#include "display/sp-ctrlline.h"
+#include "display/sodipodi-ctrl.h"
+#include "display/sp-canvas-item.h"
+#include "display/sp-canvas-util.h"
+#include "desktop.h"
+#include "document.h"
+#include "pixmaps/cursor-measure.xpm"
+#include "preferences.h"
+#include "inkscape.h"
+#include "desktop-handles.h"
+#include "measure-context.h"
+#include "draw-context.h"
+#include "display/canvas-text.h"
+#include "path-chemistry.h"
+#include "2geom/line.h"
+#include <2geom/path-intersection.h>
+#include <2geom/pathvector.h>
+#include <2geom/crossing.h>
+
+static void sp_measure_context_class_init(SPMeasureContextClass *klass);
+static void sp_measure_context_init(SPMeasureContext *measure_context);
+static void sp_measure_context_setup(SPEventContext *ec);
+static void sp_measure_context_finish (SPEventContext *ec);
+
+static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEvent *event);
+static gint sp_measure_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event);
+
+static SPEventContextClass *parent_class;
+
+static gint xp = 0, yp = 0; // where drag started
+static gint tolerance = 0;
+static bool within_tolerance = false;
+static SPCanvasItem * line = NULL;
+Geom::Point start_point;
+std::vector<Inkscape::Display::TemporaryItem*> measure_tmp_items;
+
+GType sp_measure_context_get_type(void)
+{
+ static GType type = 0;
+
+ if (!type) {
+ GTypeInfo info = {
+ sizeof(SPMeasureContextClass),
+ NULL, NULL,
+ (GClassInitFunc) sp_measure_context_class_init,
+ NULL, NULL,
+ sizeof(SPMeasureContext),
+ 4,
+ (GInstanceInitFunc) sp_measure_context_init,
+ NULL, /* value_table */
+ };
+ type = g_type_register_static(SP_TYPE_EVENT_CONTEXT, "SPMeasureContext", &info, (GTypeFlags) 0);
+ }
+
+ return type;
+}
+
+static void sp_measure_context_class_init(SPMeasureContextClass *klass)
+{
+ SPEventContextClass *event_context_class = (SPEventContextClass *) klass;
+
+ parent_class = (SPEventContextClass*) g_type_class_peek_parent(klass);
+
+ event_context_class->setup = sp_measure_context_setup;
+ event_context_class->finish = sp_measure_context_finish;
+
+ event_context_class->root_handler = sp_measure_context_root_handler;
+ event_context_class->item_handler = sp_measure_context_item_handler;
+}
+
+static void sp_measure_context_init (SPMeasureContext *measure_context)
+{
+ SPEventContext *event_context = SP_EVENT_CONTEXT(measure_context);
+
+ event_context->cursor_shape = cursor_measure_xpm;
+ event_context->hot_x = 4;
+ event_context->hot_y = 4;
+}
+
+static void
+sp_measure_context_finish (SPEventContext *ec)
+{
+ SPMeasureContext *mc = SP_MEASURE_CONTEXT(ec);
+
+ ec->enableGrDrag(false);
+
+ if (mc->grabbed) {
+ sp_canvas_item_ungrab(mc->grabbed, GDK_CURRENT_TIME);
+ mc->grabbed = NULL;
+ }
+}
+
+static void sp_measure_context_setup(SPEventContext *ec)
+{
+ if (((SPEventContextClass *) parent_class)->setup) {
+ ((SPEventContextClass *) parent_class)->setup(ec);
+ }
+}
+
+static gint sp_measure_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event)
+{
+ gint ret = FALSE;
+
+ if (((SPEventContextClass *) parent_class)->item_handler) {
+ ret = ((SPEventContextClass *) parent_class)->item_handler (event_context, item, event);
+ }
+
+ return ret;
+}
+
+bool GeomPointSortPredicate(const Geom::Point& p1, const Geom::Point& p2)
+{
+ return p1[Geom::Y] < p2[Geom::Y];
+}
+
+static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEvent *event)
+{
+ SPDesktop *desktop = event_context->desktop;
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ tolerance = prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100);
+
+ SPMeasureContext *mc = SP_MEASURE_CONTEXT(event_context);
+ gint ret = FALSE;
+
+ switch (event->type) {
+ case GDK_BUTTON_PRESS:
+ {
+ Geom::Point const button_w(event->button.x, event->button.y);
+ start_point = desktop->w2d(button_w);
+ if (event->button.button == 1 && !event_context->space_panning) {
+ // save drag origin
+ xp = (gint) event->button.x;
+ yp = (gint) event->button.y;
+ within_tolerance = true;
+
+ ret = TRUE;
+ }
+
+ if (!line){
+ SPDesktop *desktop = inkscape_active_desktop();
+ line = sp_canvas_item_new(sp_desktop_controls(desktop), SP_TYPE_CTRLLINE, NULL);
+ }
+
+ sp_ctrlline_set_coords (SP_CTRLLINE(line), start_point, start_point);
+ sp_canvas_item_show (line);
+
+ sp_canvas_item_grab(SP_CANVAS_ITEM(desktop->acetate),
+ GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK,
+ NULL, event->button.time);
+ mc->grabbed = SP_CANVAS_ITEM(desktop->acetate);
+ break;
+ }
+
+ case GDK_MOTION_NOTIFY:
+ {
+ if (event->motion.state & GDK_BUTTON1_MASK && !event_context->space_panning) {
+ ret = TRUE;
+
+ if ( within_tolerance
+ && ( abs( (gint) event->motion.x - xp ) < tolerance )
+ && ( abs( (gint) event->motion.y - yp ) < tolerance ) ) {
+ break; // do not drag if we're within tolerance from origin
+ }
+ // Once the user has moved farther than tolerance from the original location
+ // (indicating they intend to move the object, not click), then always process the
+ // motion notify coordinates as given (no snapping back to origin)
+ within_tolerance = false;
+
+ Geom::Point const motion_w(event->motion.x, event->motion.y);
+ Geom::Point const motion_dt(desktop->w2d(motion_w));
+ Geom::Point end_point = motion_dt;
+
+ if (event->motion.state & GDK_CONTROL_MASK)
+ spdc_endpoint_snap_rotation(event_context, end_point, start_point, event->motion.state);
+
+ sp_ctrlline_set_coords (SP_CTRLLINE(line), start_point[Geom::X], start_point[Geom::Y], end_point[Geom::X], end_point[Geom::Y]);
+
+ Geom::PathVector lineseg;
+ Geom::Path p;
+ p.start(desktop->dt2doc(start_point));
+ p.appendNew<Geom::LineSegment>(desktop->dt2doc(end_point));
+ lineseg.push_back(p);
+
+ double deltax = end_point[Geom::X] - start_point[Geom::X];
+ double deltay = end_point[Geom::Y] - start_point[Geom::Y];
+ double angle = atan2(deltay, deltax);
+
+//TODO: calculate NPOINTS
+//800 seems to be a good value for 800x600 resolution
+#define NPOINTS 800
+
+ std::vector<Geom::Point> points;
+ double i;
+ for (i=0; i<NPOINTS; i++){
+ points.push_back(desktop->d2w(start_point + (i/NPOINTS)*(end_point-start_point)));
+ }
+
+ //select elements crossed by line segment:
+ GSList *items = sp_desktop_document(desktop)->getItemsAtPoints(desktop->dkey, points);
+ SPItem* item;
+ GSList *l;
+ int counter=0;
+ std::vector<Geom::Point> intersections;
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ bool ignore_1st_and_last = prefs->getBool("/tools/measure/ignore_1st_and_last", true);
+
+ if (!ignore_1st_and_last){
+ intersections.push_back(desktop->dt2doc(start_point));
+ }
+
+ for (l = items; l != NULL; l = l->next){
+ item = (SPItem*) (l->data);
+#if 0
+//TODO: deal with all kinds of objects:
+
+ Inkscape::XML::Node *repr = sp_selected_item_to_curved_repr(item, 0);
+
+ if (!repr) continue;
+ item = (SPItem *) doc->getObjectByRepr(repr);
+ if (!item) continue;
+ SPCurve* curve = SP_SHAPE(item)->getCurve();
+#else
+ SPCurve* curve = NULL;
+ if (SP_IS_SHAPE(item)) {
+ curve = SP_SHAPE(item)->getCurve();
+ }
+#endif
+ if (!curve) continue;
+ counter++;
+
+ Geom::PathVector pathv = curve->get_pathvector();
+
+ // Find all intersections of the control-line with this shape
+ Geom::CrossingSet cs = Geom::crossings(lineseg, pathv);
+ // Store the results as intersection points
+ unsigned int index = 0;
+ for (Geom::CrossingSet::const_iterator i = cs.begin(); i != cs.end(); i++) {
+ if (index >= lineseg.size()) {
+ break;
+ }
+ // Reconstruct and store the points of intersection
+ for (Geom::Crossings::const_iterator m = (*i).begin(); m != (*i).end(); m++) {
+ intersections.push_back(lineseg[index].pointAt((*m).ta));
+ }
+ index++;
+ }
+ //g_free(repr);
+ }
+
+ if (!ignore_1st_and_last){
+ intersections.push_back(desktop->dt2doc(end_point));
+ }
+
+ //sort intersections
+ if (intersections.size()>2){
+ std::sort(intersections.begin(), intersections.end(), GeomPointSortPredicate);
+ }
+
+ unsigned int idx;
+ for (idx=0; idx<measure_tmp_items.size(); idx++){
+ desktop->remove_temporary_canvasitem(measure_tmp_items[idx]);
+ }
+ measure_tmp_items.clear();
+
+ for (idx=0;idx<intersections.size(); idx++){
+ // Display the intersection indicator (i.e. the cross)
+ SPCanvasItem * canvasitem = NULL;
+ canvasitem = sp_canvas_item_new(sp_desktop_tempgroup (desktop),
+ SP_TYPE_CTRL,
+ "anchor", GTK_ANCHOR_CENTER,
+ "size", 8.0,
+ "stroked", TRUE,
+ "stroke_color", 0xff0000ff,
+ "mode", SP_KNOT_MODE_XOR,
+ "shape", SP_KNOT_SHAPE_CROSS,
+ NULL );
+
+ SP_CTRL(canvasitem)->moveto(desktop->doc2dt(intersections[idx]));
+ measure_tmp_items.push_back(desktop->add_temporary_canvasitem(canvasitem, 0));
+
+ }
+
+ SPUnitId unitid = static_cast<SPUnitId>(prefs->getInt("/tools/measure/unitid", SP_UNIT_PX));
+ SPUnit unit = sp_unit_get_by_id(unitid);
+
+ double fontsize = prefs->getInt("/tools/measure/fontsize");
+
+ Geom::Point previous_point;
+ if (intersections.size()>0)
+ previous_point = intersections[0];
+
+ for (idx=1; idx < intersections.size(); idx++){
+ Geom::Point measure_text_pos = (previous_point + intersections[idx])/2;
+//TODO: shift label a few pixels in the y coordinate
+
+ double lengthval = (intersections[idx] - previous_point).length();
+ sp_convert_distance(&lengthval, &sp_unit_get_by_id(SP_UNIT_PX), &unit);
+
+ char* measure_str = (char*) malloc(sizeof(char)*20);
+ sprintf(measure_str, "%.2f %s", lengthval, unit.abbr);
+ SPCanvasItem *canvas_tooltip = sp_canvastext_new(sp_desktop_tempgroup(desktop), desktop, desktop->dt2doc(measure_text_pos), measure_str);
+
+ sp_canvastext_set_fontsize (SP_CANVASTEXT(canvas_tooltip), fontsize);
+
+ measure_tmp_items.push_back(desktop->add_temporary_canvasitem(canvas_tooltip, 0));
+ free(measure_str);
+ previous_point = intersections[idx];
+ }
+
+ char* angle_str = (char*) malloc(sizeof(char)*20);
+ sprintf(angle_str, "%.2f °", angle * 180/3.1415 );
+ SPCanvasItem *canvas_tooltip = sp_canvastext_new(sp_desktop_tempgroup(desktop), desktop, end_point + desktop->w2d(Geom::Point(5*fontsize,0)), angle_str);
+ sp_canvastext_set_fontsize (SP_CANVASTEXT(canvas_tooltip), fontsize);
+ sp_canvastext_set_rgba32 (SP_CANVASTEXT(canvas_tooltip), 0x337f33ff, 0xffffffff);
+
+ measure_tmp_items.push_back(desktop->add_temporary_canvasitem(canvas_tooltip, 0));
+ free(angle_str);
+
+ gobble_motion_events(GDK_BUTTON1_MASK);
+ }
+ break;
+ }
+
+ case GDK_BUTTON_RELEASE:
+ {
+ if (line){
+ sp_canvas_item_hide(line);
+ }
+
+ unsigned int idx;
+ for (idx=0; idx<measure_tmp_items.size(); idx++){
+ desktop->remove_temporary_canvasitem(measure_tmp_items[idx]);
+ }
+ measure_tmp_items.clear();
+
+ if (mc->grabbed) {
+ sp_canvas_item_ungrab(mc->grabbed, event->button.time);
+ mc->grabbed = NULL;
+ }
+ xp = yp = 0;
+ break;
+ }
+ default:
+ break;
+ }
+
+ if (!ret) {
+ if (((SPEventContextClass *) parent_class)->root_handler) {
+ ret = ((SPEventContextClass *) parent_class)->root_handler(event_context, event);
+ }
+ }
+
+ return ret;
+}
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
diff --git a/src/measure-context.h b/src/measure-context.h
new file mode 100644
index 000000000..24cdf5ac8
--- /dev/null
+++ b/src/measure-context.h
@@ -0,0 +1,35 @@
+#ifndef __SP_MEASURING_CONTEXT_H__
+#define __SP_MEASURING_CONTEXT_H__
+
+/*
+ * Our fine measuring tool
+ *
+ * Authors:
+ * Felipe Correa da Silva Sanches <juca@members.fsf.org>
+ *
+ * Copyright (C) 2011 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "event-context.h"
+
+#define SP_TYPE_MEASURE_CONTEXT (sp_measure_context_get_type ())
+#define SP_MEASURE_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_MEASURE_CONTEXT, SPMeasureContext))
+#define SP_IS_MEASURE_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_MEASURE_CONTEXT))
+
+class SPMeasureContext;
+class SPMeasureContextClass;
+
+struct SPMeasureContext {
+ SPEventContext event_context;
+ SPCanvasItem *grabbed;
+};
+
+struct SPMeasureContextClass {
+ SPEventContextClass parent_class;
+};
+
+GType sp_measure_context_get_type (void);
+
+#endif
diff --git a/src/menus-skeleton.h b/src/menus-skeleton.h
index f1b633865..080163d48 100644
--- a/src/menus-skeleton.h
+++ b/src/menus-skeleton.h
@@ -126,7 +126,7 @@ static char const menus_skeleton[] =
" <verb verb-id=\"ToggleSnapGlobal\" />\n"
" <verb verb-id=\"ViewCmsToggle\" />\n"
" <separator/>\n"
-" <submenu name=\"" N_("Show/Hide") "\">\n"
+" <submenu name=\"" N_("Sh_ow/Hide") "\">\n"
" <objects-checkboxes/>\n"
" </submenu>\n"
" <verb verb-id=\"DialogsToggle\" />\n"
diff --git a/src/modifier-fns.h b/src/modifier-fns.h
index 8d78455e1..c1b35e948 100644
--- a/src/modifier-fns.h
+++ b/src/modifier-fns.h
@@ -11,7 +11,7 @@
* Hereby placed in public domain.
*/
-#include <gdk/gdktypes.h>
+#include <gdk/gdk.h>
#include <glib/gtypes.h>
inline bool
diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp
index 1e2f71c95..682c26869 100644
--- a/src/object-snapper.cpp
+++ b/src/object-snapper.cpp
@@ -36,6 +36,7 @@
#include "sp-mask.h"
#include "helper/geom-curves.h"
#include "desktop.h"
+#include "sp-root.h"
Inkscape::ObjectSnapper::ObjectSnapper(SnapManager *sm, Geom::Coord const d)
: Snapper(sm, d)
diff --git a/src/pedro/CMakeLists.txt b/src/pedro/CMakeLists.txt
index cb9a01b2f..c51090067 100644
--- a/src/pedro/CMakeLists.txt
+++ b/src/pedro/CMakeLists.txt
@@ -1,13 +1,14 @@
-SET(pedro_SRC
-#empty.cpp
-#geckoembed.cpp
-pedroconfig.cpp
-pedrodom.cpp
-#pedrogui.cpp
-#pedromain.cpp
-pedroutil.cpp
-pedroxmpp.cpp
+
+set(pedro_SRC
+ #empty.cpp
+ #geckoembed.cpp
+ pedroconfig.cpp
+ pedrodom.cpp
+ #pedrogui.cpp
+ #pedromain.cpp
+ pedroutil.cpp
+ pedroxmpp.cpp
)
-ADD_LIBRARY(pedro STATIC ${pedro_SRC})
-TARGET_LINK_LIBRARIES(pedro
-${INKSCAPE_LIBS}) \ No newline at end of file
+
+# add_inkscape_lib(pedro_LIB "${pedro_SRC}")
+add_inkscape_source("${pedro_SRC}")
diff --git a/src/pedro/pedrogui.h b/src/pedro/pedrogui.h
index 4af4f1aac..2898da118 100644
--- a/src/pedro/pedrogui.h
+++ b/src/pedro/pedrogui.h
@@ -26,6 +26,7 @@
#include <gtkmm.h>
+#include "ui/widget/spinbutton.h"
#include "pedroxmpp.h"
#include "pedroconfig.h"
@@ -590,7 +591,7 @@ private:
Gtk::Label hostLabel;
Gtk::Entry hostField;
Gtk::Label portLabel;
- Gtk::SpinButton portSpinner;
+ Inkscape::UI::Widget::SpinButton portSpinner;
Gtk::Label userLabel;
Gtk::Entry userField;
Gtk::Label passLabel;
diff --git a/src/pen-context.cpp b/src/pen-context.cpp
index 607bdaedc..64137d56f 100644
--- a/src/pen-context.cpp
+++ b/src/pen-context.cpp
@@ -989,7 +989,7 @@ pen_handle_key_press(SPPenContext *const pc, GdkEvent *event)
gint ret = FALSE;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- gdouble const nudge = prefs->getDoubleLimited("/options/nudgedistance/value", 2, 0, 1000); // in px
+ gdouble const nudge = prefs->getDoubleLimited("/options/nudgedistance/value", 2, 0, 1000, "px"); // in px
switch (get_group0_keyval (&event->key)) {
diff --git a/src/persp3d.cpp b/src/persp3d.cpp
index d43e6b2c5..0b346622a 100644
--- a/src/persp3d.cpp
+++ b/src/persp3d.cpp
@@ -209,7 +209,7 @@ persp3d_update(SPObject *object, SPCtx *ctx, guint flags)
}
Persp3D *persp3d_create_xml_element(SPDocument *document, Persp3DImpl *dup) {// if dup is given, copy the attributes over
- SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
+ SPDefs *defs = document->getDefs();
Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::XML::Node *repr;
@@ -253,7 +253,7 @@ Persp3D *persp3d_create_xml_element(SPDocument *document, Persp3DImpl *dup) {//
Persp3D *persp3d_document_first_persp(SPDocument *document)
{
Persp3D *first = 0;
- for ( SPObject *child = SP_DOCUMENT_DEFS(document)->firstChild(); child && !first; child = child->getNext() ) {
+ for ( SPObject *child = document->getDefs()->firstChild(); child && !first; child = child->getNext() ) {
if (SP_IS_PERSP3D(child)) {
first = SP_PERSP3D(child);
}
@@ -565,7 +565,7 @@ persp3d_print_debugging_info (Persp3D *persp) {
void persp3d_print_debugging_info_all(SPDocument *document)
{
- for ( SPObject *child = SP_DOCUMENT_DEFS(document)->firstChild(); child; child = child->getNext() ) {
+ for ( SPObject *child = document->getDefs()->firstChild(); child; child = child->getNext() ) {
if (SP_IS_PERSP3D(child)) {
persp3d_print_debugging_info(SP_PERSP3D(child));
}
diff --git a/src/pixmaps/cursor-measure.xpm b/src/pixmaps/cursor-measure.xpm
new file mode 100644
index 000000000..2a28579c6
--- /dev/null
+++ b/src/pixmaps/cursor-measure.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char const *cursor_measure_xpm[] = {
+"32 32 3 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+" ... ",
+" .+. ",
+" .+. ",
+"....+.... ",
+".+++ +++. ",
+"....+.... ",
+" .+. ",
+" .+. .. ",
+" ... .++. ",
+" .+..+. ",
+" .+....+. ",
+" .+..+...+. ",
+" .+.+.....+. ",
+" .+.......+. ",
+" .+.+.....+. ",
+" .+...+...+. ",
+" .+.+.....+. ",
+" .+.......+. ",
+" .+.+.....+. ",
+" .+...+...+. ",
+" .+.+.....+. ",
+" .+.......+. ",
+" .+.+.....+. ",
+" .+...+.+. ",
+" .+.+.+. ",
+" .+.+. ",
+" .+. ",
+" . ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/preferences-skeleton.h b/src/preferences-skeleton.h
index 5becb2770..16723170f 100644
--- a/src/preferences-skeleton.h
+++ b/src/preferences-skeleton.h
@@ -238,7 +238,7 @@ static char const preferences_skeleton[] =
" <group id=\"trackalt\" value=\"0\" />"
" <group id=\"switchonextinput\" value=\"0\" />"
" <group id=\"useextinput\" value=\"1\" />"
-" <group id=\"nudgedistance\" value=\"2\"/>\n"
+" <group id=\"nudgedistance\" value=\"2px\"/>\n"
" <group id=\"rotationsnapsperpi\" value=\"12\"/>\n"
" <group id=\"cursortolerance\" value=\"8.0\"/>\n"
" <group id=\"dragtolerance\" value=\"4.0\"/>\n"
@@ -258,8 +258,8 @@ static char const preferences_skeleton[] =
" preserveblack=\"0\"\n"
" uri=\"\" />\n"
" <group id=\"savewindowgeometry\" value=\"1\"/>\n"
-" <group id=\"defaultoffsetwidth\" value=\"2\"/>\n"
-" <group id=\"defaultscale\" value=\"2\"/>\n"
+" <group id=\"defaultoffsetwidth\" value=\"2px\"/>\n"
+" <group id=\"defaultscale\" value=\"2px\"/>\n"
" <group id=\"maxrecentdocuments\" value=\"36\"/>\n"
" <group id=\"zoomincrement\" value=\"1.414213562\"/>\n"
" <group id=\"zoomcorrection\" value=\"1.0\" unit=\"mm\"/>\n"
diff --git a/src/preferences.cpp b/src/preferences.cpp
index 94fbc7257..444acfcac 100644
--- a/src/preferences.cpp
+++ b/src/preferences.cpp
@@ -23,6 +23,7 @@
#include "xml/node-observer.h"
#include "xml/node-iterators.h"
#include "xml/attribute-record.h"
+#include "util/units.h"
#define PREFERENCES_FILE_NAME "preferences.xml"
@@ -452,6 +453,22 @@ void Preferences::setDouble(Glib::ustring const &pref_path, double value)
_setRawValue(pref_path, buf);
}
+/**
+ * Set a floating point attribute of a preference.
+ *
+ * @param pref_path Path of the preference to modify.
+ * @param value The new value of the pref attribute.
+ * @param unit_abbr The string of the unit (abbreviated).
+ */
+void Preferences::setDoubleUnit(Glib::ustring const &pref_path, double value, Glib::ustring const &unit_abbr)
+{
+ gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
+ g_ascii_dtostr(buf, G_ASCII_DTOSTR_BUF_SIZE, value);
+ Glib::ustring str(buf);
+ str += unit_abbr;
+ _setRawValue(pref_path, str.c_str());
+}
+
void Preferences::setColor(Glib::ustring const &pref_path, guint32 value)
{
gchar buf[16];
@@ -745,11 +762,38 @@ double Preferences::_extractDouble(Entry const &v)
return g_ascii_strtod(s, NULL);
}
+double Preferences::_extractDouble(Entry const &v, Glib::ustring const &requested_unit)
+{
+ static Inkscape::Util::UnitTable unit_table; // load the unit_table once by making it static
+
+ double val = _extractDouble(v);
+ Glib::ustring unit = _extractUnit(v);
+
+ return val * (unit_table.getUnit(unit).factor / unit_table.getUnit(requested_unit).factor);
+}
+
Glib::ustring Preferences::_extractString(Entry const &v)
{
return Glib::ustring(static_cast<gchar const *>(v._value));
}
+Glib::ustring Preferences::_extractUnit(Entry const &v)
+{
+ gchar const *str = static_cast<gchar const *>(v._value);
+ gchar const *e;
+ g_ascii_strtod(str, (char **) &e);
+ if (e == str) {
+ return "";
+ }
+
+ if (e[0] == 0) {
+ /* Unitless */
+ return "";
+ } else {
+ return Glib::ustring(e);
+ }
+}
+
guint32 Preferences::_extractColor(Entry const &v)
{
gchar const *s = static_cast<gchar const *>(v._value);
diff --git a/src/preferences.h b/src/preferences.h
index c79a7377d..64bb6ac4f 100644
--- a/src/preferences.h
+++ b/src/preferences.h
@@ -159,9 +159,10 @@ public:
/**
* Interpret the preference as a floating point value.
*
- * @param def Default value if the preference is not set.
+ * @param def Default value if the preference is not set.
+ * @param unit Specifies the unit of the returned result. Will be ignored when equal to "". If the preference has no unit set, the default unit will be assumed.
*/
- inline double getDouble(double def=0.0) const;
+ inline double getDouble(double def=0.0, Glib::ustring const &unit = "") const;
/**
* Interpret the preference as a limited floating point value.
@@ -172,8 +173,9 @@ public:
* @param def Default value if the preference is not set.
* @param min Minimum value allowed to return.
* @param max Maximum value allowed to return.
+ * @param unit Specifies the unit of the returned result. Will be ignored when equal to "". If the preference has no unit set, the default unit will be assumed.
*/
- inline double getDoubleLimited(double def=0.0, double min=DBL_MIN, double max=DBL_MAX) const;
+ inline double getDoubleLimited(double def=0.0, double min=DBL_MIN, double max=DBL_MAX, Glib::ustring const &unit = "") const;
/**
* Interpret the preference as an UTF-8 string.
@@ -182,6 +184,11 @@ public:
*/
inline Glib::ustring getString() const;
+ /**
+ * Interpret the preference as a number followed by a unit (without space), and return this unit string.
+ */
+ inline Glib::ustring getUnit() const;
+
/**
* Interpret the preference as an RGBA color value.
*/
@@ -316,8 +323,8 @@ public:
return getEntry(pref_path).getIntLimited(def, min, max);
}
- double getDouble(Glib::ustring const &pref_path, double def=0.0) {
- return getEntry(pref_path).getDouble(def);
+ double getDouble(Glib::ustring const &pref_path, double def=0.0, Glib::ustring const &unit = "") {
+ return getEntry(pref_path).getDouble(def, unit);
}
/**
@@ -330,9 +337,10 @@ public:
* @param def The default value to return if the preference is not set.
* @param min Minimum value to return.
* @param max Maximum value to return.
+ * @param unit Specifies the unit of the returned result. Will be ignored when equal to "". If the preference has no unit set, the default unit will be assumed.
*/
- double getDoubleLimited(Glib::ustring const &pref_path, double def=0.0, double min=DBL_MIN, double max=DBL_MAX) {
- return getEntry(pref_path).getDoubleLimited(def, min, max);
+ double getDoubleLimited(Glib::ustring const &pref_path, double def=0.0, double min=DBL_MIN, double max=DBL_MAX, Glib::ustring const &unit = "") {
+ return getEntry(pref_path).getDoubleLimited(def, min, max, unit);
}
/**
@@ -344,6 +352,15 @@ public:
return getEntry(pref_path).getString();
}
+ /**
+ * Retrieve the unit string.
+ *
+ * @param pref_path Path to the retrieved preference.
+ */
+ Glib::ustring getUnit(Glib::ustring const &pref_path) {
+ return getEntry(pref_path).getUnit();
+ }
+
guint32 getColor(Glib::ustring const &pref_path, guint32 def=0x000000ff) {
return getEntry(pref_path).getColor(def);
}
@@ -399,6 +416,11 @@ public:
void setDouble(Glib::ustring const &pref_path, double value);
/**
+ * Set a floating point value with unit.
+ */
+ void setDoubleUnit(Glib::ustring const &pref_path, double value, Glib::ustring const &unit_abbr);
+
+ /**
* Set an UTF-8 string value.
*/
void setString(Glib::ustring const &pref_path, Glib::ustring const &value);
@@ -484,7 +506,9 @@ protected:
bool _extractBool(Entry const &v);
int _extractInt(Entry const &v);
double _extractDouble(Entry const &v);
+ double _extractDouble(Entry const &v, Glib::ustring const &requested_unit);
Glib::ustring _extractString(Entry const &v);
+ Glib::ustring _extractUnit(Entry const &v);
guint32 _extractColor(Entry const &v);
SPCSSAttr *_extractStyle(Entry const &v);
SPCSSAttr *_extractInheritedStyle(Entry const &v);
@@ -566,21 +590,28 @@ inline int Preferences::Entry::getIntLimited(int def, int min, int max) const
}
}
-inline double Preferences::Entry::getDouble(double def) const
+inline double Preferences::Entry::getDouble(double def, Glib::ustring const &unit) const
{
if (!this->isValid()) {
return def;
- } else {
+ } else if (unit.length() == 0) {
return Inkscape::Preferences::get()->_extractDouble(*this);
+ } else {
+ return Inkscape::Preferences::get()->_extractDouble(*this, unit);
}
}
-inline double Preferences::Entry::getDoubleLimited(double def, double min, double max) const
+inline double Preferences::Entry::getDoubleLimited(double def, double min, double max, Glib::ustring const &unit) const
{
if (!this->isValid()) {
return def;
} else {
- double val = Inkscape::Preferences::get()->_extractDouble(*this);
+ double val = def;
+ if (unit.length() == 0) {
+ val = Inkscape::Preferences::get()->_extractDouble(*this);
+ } else {
+ val = Inkscape::Preferences::get()->_extractDouble(*this, unit);
+ }
return ( val >= min && val <= max ? val : def );
}
}
@@ -594,6 +625,15 @@ inline Glib::ustring Preferences::Entry::getString() const
}
}
+inline Glib::ustring Preferences::Entry::getUnit() const
+{
+ if (!this->isValid()) {
+ return "";
+ } else {
+ return Inkscape::Preferences::get()->_extractUnit(*this);
+ }
+}
+
inline guint32 Preferences::Entry::getColor(guint32 def) const
{
if (!this->isValid()) {
diff --git a/src/rdf.cpp b/src/rdf.cpp
index c9378cf53..cabbaaed3 100644
--- a/src/rdf.cpp
+++ b/src/rdf.cpp
@@ -18,6 +18,7 @@
#include "rdf.h"
#include "sp-item-group.h"
#include "inkscape.h"
+#include "sp-root.h"
/*
Example RDF XML from various places...
@@ -566,7 +567,9 @@ unsigned int RDFImpl::setReprText( Inkscape::XML::Node * repr,
// set document's title element to the RDF title
if (!strcmp(entity.name, "title")) {
SPDocument *doc = SP_ACTIVE_DOCUMENT;
- if(doc && doc->root) doc->root->setTitle(text);
+ if (doc && doc->getRoot()) {
+ doc->getRoot()->setTitle(text);
+ }
}
switch (entity.datatype) {
@@ -1104,7 +1107,7 @@ void RDFImpl::setDefaults( SPDocument * doc )
g_assert( doc != NULL );
// Create metadata node if it doesn't already exist
- if (!sp_item_group_get_child_by_name((SPGroup *) doc->root, NULL,
+ if (!sp_item_group_get_child_by_name( doc->getRoot(), NULL,
XML_TAG_NAME_METADATA)) {
if ( !doc->getReprDoc()) {
g_critical("XML doc is null.");
diff --git a/src/rect-context.h b/src/rect-context.h
index 54f790c68..db7cd605b 100644
--- a/src/rect-context.h
+++ b/src/rect-context.h
@@ -20,10 +20,10 @@
#include "libnr/nr-point.h"
#define SP_TYPE_RECT_CONTEXT (sp_rect_context_get_type ())
-#define SP_RECT_CONTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_RECT_CONTEXT, SPRectContext))
-#define SP_RECT_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_RECT_CONTEXT, SPRectContextClass))
-#define SP_IS_RECT_CONTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_RECT_CONTEXT))
-#define SP_IS_RECT_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_RECT_CONTEXT))
+#define SP_RECT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_RECT_CONTEXT, SPRectContext))
+#define SP_RECT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_RECT_CONTEXT, SPRectContextClass))
+#define SP_IS_RECT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_RECT_CONTEXT))
+#define SP_IS_RECT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_RECT_CONTEXT))
class SPRectContext;
class SPRectContextClass;
diff --git a/src/resource-manager.cpp b/src/resource-manager.cpp
new file mode 100644
index 000000000..b5cf67f91
--- /dev/null
+++ b/src/resource-manager.cpp
@@ -0,0 +1,399 @@
+/*
+ * Inkscape::ResourceManager - tracks external resources such as image and css files.
+ *
+ * Copyright 2011 Jon A. Cruz <jon@joncruz.org>
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include <string>
+#include <vector>
+#include <algorithm>
+#include <glibmm/i18n.h>
+#include <glibmm/convert.h>
+#include <glibmm/fileutils.h>
+#include <glibmm/miscutils.h>
+#include <glibmm/uriutils.h>
+#include <gtkmm/recentmanager.h>
+
+#include "resource-manager.h"
+
+#include "document.h"
+#include "sp-object.h"
+#include "xml/node.h"
+#include "document-undo.h"
+
+namespace Inkscape {
+
+std::vector<std::string> splitPath( std::string const &path )
+{
+ std::vector<std::string> parts;
+
+ std::string prior;
+ std::string tmp = path;
+ while ( !tmp.empty() && (tmp != prior) ) {
+ prior = tmp;
+
+ parts.push_back( Glib::path_get_basename(tmp) );
+ tmp = Glib::path_get_dirname(tmp);
+ }
+ if ( !parts.empty() ) {
+ std::reverse(parts.begin(), parts.end());
+ if ( (parts[0] == ".") && (path[0] != '.') ) {
+ parts.erase(parts.begin());
+ }
+ }
+
+ return parts;
+}
+
+std::string convertPathToRelative( std::string const &path, std::string const &docbase )
+{
+ std::string result = path;
+
+ if ( !path.empty() && Glib::path_is_absolute(path) ) {
+ // Whack the parts into pieces
+
+ std::vector<std::string> parts = splitPath(path);
+ std::vector<std::string> baseParts = splitPath(docbase);
+
+ // TODO debug g_message("+++++++++++++++++++++++++");
+ for ( std::vector<std::string>::iterator it = parts.begin(); it != parts.end(); ++it ) {
+ // TODO debug g_message(" [%s]", it->c_str());
+ }
+ // TODO debug g_message(" - - - - - - - - - - - - - - - ");
+ for ( std::vector<std::string>::iterator it = baseParts.begin(); it != baseParts.end(); ++it ) {
+ // TODO debug g_message(" [%s]", it->c_str());
+ }
+ // TODO debug g_message("+++++++++++++++++++++++++");
+
+ if ( !parts.empty() && !baseParts.empty() && (parts[0] == baseParts[0]) ) {
+ // Both paths have the same root. We can proceed.
+ while ( !parts.empty() && !baseParts.empty() && (parts[0] == baseParts[0]) ) {
+ parts.erase( parts.begin() );
+ baseParts.erase( baseParts.begin() );
+ }
+
+ // TODO debug g_message("+++++++++++++++++++++++++");
+ for ( std::vector<std::string>::iterator it = parts.begin(); it != parts.end(); ++it ) {
+ // TODO debug g_message(" [%s]", it->c_str());
+ }
+ // TODO debug g_message(" - - - - - - - - - - - - - - - ");
+ for ( std::vector<std::string>::iterator it = baseParts.begin(); it != baseParts.end(); ++it ) {
+ // TODO debug g_message(" [%s]", it->c_str());
+ }
+ // TODO debug g_message("+++++++++++++++++++++++++");
+
+ if ( !parts.empty() ) {
+ result.clear();
+
+ for ( size_t i = 0; i < baseParts.size(); ++i ) {
+ parts.insert(parts.begin(), "..");
+ }
+ result = Glib::build_filename( parts );
+ // TODO debug g_message("----> [%s]", result.c_str());
+ }
+ }
+ }
+
+ return result;
+}
+
+
+class ResourceManagerImpl : public ResourceManager {
+public:
+ ResourceManagerImpl();
+ virtual ~ResourceManagerImpl();
+
+ virtual bool fixupBrokenLinks(SPDocument *doc);
+
+
+ /**
+ * Walk all links in a document and create a listing of unique broken links.
+ *
+ * @return a list of all broken links.
+ */
+ std::vector<Glib::ustring> findBrokenLinks(SPDocument *doc);
+
+ /**
+ * Resolve broken links as a whole and return a map for those that can be found.
+ *
+ * Note: this will allow for future enhancements including relinking to new locations
+ * with the most broken files found, etc.
+ *
+ * @return a map of found links.
+ */
+ std::map<Glib::ustring, Glib::ustring> locateLinks(Glib::ustring const & docbase, std::vector<Glib::ustring> const & brokenLinks);
+
+ bool extractFilepath( Glib::ustring const &href, std::string &uri );
+
+ bool searchUpwards( std::string const &base, std::string const &subpath, std::string &dest );
+
+protected:
+};
+
+
+ResourceManagerImpl::ResourceManagerImpl()
+ : ResourceManager()
+{
+}
+
+ResourceManagerImpl::~ResourceManagerImpl()
+{
+}
+
+bool ResourceManagerImpl::extractFilepath( Glib::ustring const &href, std::string &uri )
+{
+ bool isFile = false;
+
+ uri.clear();
+
+ std::string scheme = Glib::uri_parse_scheme(href);
+ if ( !scheme.empty() ) {
+ // TODO debug g_message("Scheme is now [%s]", scheme.c_str());
+ if ( scheme == "file" ) {
+ // TODO debug g_message("--- is a file URI [%s]", href.c_str());
+
+ // throws Glib::ConvertError:
+ uri = Glib::filename_from_uri(href); // TODO see if we can get this to throw
+ // TODO debug g_message(" [%s]", uri.c_str());
+ isFile = true;
+ }
+ } else {
+ // No scheme. Assuming it is a file path (absolute or relative).
+ // throws Glib::ConvertError:
+ uri = Glib::filename_from_utf8( href );
+ isFile = true;
+ }
+
+ return isFile;
+}
+
+
+std::vector<Glib::ustring> ResourceManagerImpl::findBrokenLinks( SPDocument *doc )
+{
+ std::vector<Glib::ustring> result;
+ std::set<Glib::ustring> uniques;
+
+ if ( doc ) {
+ GSList const *images = doc->getResourceList("image");
+ for (GSList const *it = images; it; it = it->next) {
+ Inkscape::XML::Node *ir = static_cast<SPObject *>(it->data)->getRepr();
+
+ gchar const *href = ir->attribute("xlink:href");
+ if ( href && ( uniques.find(href) == uniques.end() ) ) {
+ std::string uri;
+ if ( extractFilepath( href, uri ) ) {
+ if ( Glib::path_is_absolute(uri) ) {
+ if ( !Glib::file_test(uri, Glib::FILE_TEST_EXISTS) ) {
+ result.push_back(href);
+ uniques.insert(href);
+ }
+ } else {
+ std::string combined = Glib::build_filename(doc->getBase(), uri);
+ if ( !Glib::file_test(uri, Glib::FILE_TEST_EXISTS) ) {
+ result.push_back(href);
+ uniques.insert(href);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return result;
+}
+
+
+std::map<Glib::ustring, Glib::ustring> ResourceManagerImpl::locateLinks(Glib::ustring const & docbase, std::vector<Glib::ustring> const & brokenLinks)
+{
+ std::map<Glib::ustring, Glib::ustring> result;
+
+
+ // Note: we use a vector because we want them to stay in order:
+ std::vector<std::string> priorLocations;
+
+ Glib::RefPtr<Gtk::RecentManager> recentMgr = Gtk::RecentManager::get_default();
+ std::vector< Glib::RefPtr<Gtk::RecentInfo> > recentItems = recentMgr->get_items();
+ for ( std::vector< Glib::RefPtr<Gtk::RecentInfo> >::iterator it = recentItems.begin(); it != recentItems.end(); ++it ) {
+ Glib::ustring uri = (*it)->get_uri();
+ std::string scheme = Glib::uri_parse_scheme(uri);
+ if ( scheme == "file" ) {
+ std::string path = Glib::filename_from_uri(uri);
+ path = Glib::path_get_dirname(path);
+ if ( std::find(priorLocations.begin(), priorLocations.end(), path) == priorLocations.end() ) {
+ // TODO debug g_message(" ==>[%s]", path.c_str());
+ priorLocations.push_back(path);
+ }
+ }
+ }
+
+ // At the moment we expect this list to contain file:// references, or simple relative or absolute paths.
+ for ( std::vector<Glib::ustring>::const_iterator it = brokenLinks.begin(); it != brokenLinks.end(); ++it ) {
+ // TODO debug g_message("========{%s}", it->c_str());
+
+ std::string uri;
+ if ( extractFilepath( *it, uri ) ) {
+ // We were able to get some path. Check it
+ std::string origPath = uri;
+
+ if ( !Glib::path_is_absolute(uri) ) {
+ uri = Glib::build_filename(docbase, uri);
+ // TODO debug g_message(" not absolute. Fixing up as [%s]", uri.c_str());
+ }
+
+ if ( !Glib::file_test(uri, Glib::FILE_TEST_EXISTS) ) {
+ // TODO debug g_message(" DOES NOT EXIST.");
+ std::string remainder;
+ bool exists = searchUpwards( docbase, origPath, remainder );
+
+ if ( !exists ) {
+ // TODO debug g_message("Expanding the search...");
+
+ // Check if the MRU bases point us to it.
+ if ( !Glib::path_is_absolute(origPath) ) {
+ for ( std::vector<std::string>::iterator it = priorLocations.begin(); !exists && (it != priorLocations.end()); ++it ) {
+ exists = searchUpwards( *it, origPath, remainder );
+ }
+ }
+ }
+
+ if ( exists ) {
+ if ( Glib::path_is_absolute( remainder ) ) {
+ // TODO debug g_message("Need to convert to relative if possible [%s]", remainder.c_str());
+ remainder = convertPathToRelative( remainder, docbase );
+ }
+
+ bool isAbsolute = Glib::path_is_absolute( remainder );
+ Glib::ustring replacement = isAbsolute ? Glib::filename_to_uri( remainder ) : Glib::filename_to_utf8( remainder );
+ result[*it] = replacement;
+ }
+ }
+ }
+ }
+
+ return result;
+}
+
+bool ResourceManagerImpl::fixupBrokenLinks(SPDocument *doc)
+{
+ bool changed = false;
+ if ( doc ) {
+ // TODO debug g_message("FIXUP FIXUP FIXUP FIXUP FIXUP FIXUP FIXUP FIXUP FIXUP FIXUP");
+ // TODO debug g_message(" base is [%s]", doc->getBase());
+
+ std::vector<Glib::ustring> brokenHrefs = findBrokenLinks(doc);
+ if ( !brokenHrefs.empty() ) {
+ // TODO debug g_message(" FOUND SOME LINKS %d", static_cast<int>(brokenHrefs.size()));
+ for ( std::vector<Glib::ustring>::iterator it = brokenHrefs.begin(); it != brokenHrefs.end(); ++it ) {
+ // TODO debug g_message(" [%s]", it->c_str());
+ }
+ }
+
+ std::map<Glib::ustring, Glib::ustring> mapping = locateLinks(doc->getBase(), brokenHrefs);
+ for ( std::map<Glib::ustring, Glib::ustring>::iterator it = mapping.begin(); it != mapping.end(); ++it )
+ {
+ // TODO debug g_message(" [%s] ==> {%s}", it->first.c_str(), it->second.c_str());
+ }
+
+ bool savedUndoState = DocumentUndo::getUndoSensitive(doc);
+ DocumentUndo::setUndoSensitive(doc, true);
+
+ GSList const *images = doc->getResourceList("image");
+ for (GSList const *it = images; it; it = it->next) {
+ Inkscape::XML::Node *ir = static_cast<SPObject *>(it->data)->getRepr();
+
+ gchar const *href = ir->attribute("xlink:href");
+ if ( href ) {
+ // TODO debug g_message(" consider [%s]", href);
+
+ if ( mapping.find(href) != mapping.end() ) {
+ // TODO debug g_message(" Found a replacement");
+
+ ir->setAttribute( "xlink:href", mapping[href].c_str() );
+ if ( ir->attribute( "sodipodi:absref" ) ) {
+ ir->setAttribute( "sodipodi:absref", 0 ); // Remove this attribute
+ }
+
+ SPObject *updated = doc->getObjectByRepr(ir);
+ if (updated) {
+ // force immediate update of dependant attributes
+ updated->updateRepr();
+ }
+
+ changed = true;
+ }
+ }
+ }
+ if ( changed ) {
+ DocumentUndo::done( doc, SP_VERB_DIALOG_XML_EDITOR, _("Fixup broken links") );
+ }
+ DocumentUndo::setUndoSensitive(doc, savedUndoState);
+ }
+
+ return changed;
+}
+
+
+bool ResourceManagerImpl::searchUpwards( std::string const &base, std::string const &subpath, std::string &dest )
+{
+ bool exists = false;
+ // TODO debug g_message("............");
+
+ std::vector<std::string> parts = splitPath(subpath);
+ std::vector<std::string> baseParts = splitPath(base);
+
+ while ( !exists && !baseParts.empty() ) {
+ std::vector<std::string> current;
+ current.insert(current.begin(), parts.begin(), parts.end());
+ // TODO debug g_message(" ---{%s}", Glib::build_filename( baseParts ).c_str());
+ while ( !exists && !current.empty() ) {
+ std::vector<std::string> combined;
+ combined.insert( combined.end(), baseParts.begin(), baseParts.end() );
+ combined.insert( combined.end(), current.begin(), current.end() );
+ std::string filepath = Glib::build_filename( combined );
+ exists = Glib::file_test(filepath, Glib::FILE_TEST_EXISTS);
+ // TODO debug g_message(" ...[%s] %s", filepath.c_str(), (exists ? "XXX" : ""));
+ if ( exists ) {
+ dest = filepath;
+ }
+ current.erase( current.begin() );
+ }
+ baseParts.pop_back();
+ }
+
+ return exists;
+}
+
+
+static ResourceManagerImpl* theInstance = 0;
+
+ResourceManager::ResourceManager()
+ : Glib::Object()
+{
+}
+
+ResourceManager::~ResourceManager() {
+}
+
+ResourceManager& ResourceManager::getManager() {
+ if ( !theInstance ) {
+ theInstance = new ResourceManagerImpl();
+ }
+
+ return *theInstance;
+}
+
+
+} // namespace Inkscape
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
diff --git a/src/resource-manager.h b/src/resource-manager.h
new file mode 100644
index 000000000..8f01c23a0
--- /dev/null
+++ b/src/resource-manager.h
@@ -0,0 +1,49 @@
+/*
+ * Inkscape::ResourceManager - Manages external resources such as image and css files.
+ *
+ * Copyright 2011 Jon A. Cruz <jon@joncruz.org>
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifndef SEEN_INKSCAPE_RESOURCE_MANAGER_H
+#define SEEN_INKSCAPE_RESOURCE_MANAGER_H
+
+#include <glibmm/object.h>
+
+class SPDocument;
+
+namespace Inkscape {
+
+class ResourceManager : public Glib::Object {
+
+public:
+ static ResourceManager& getManager();
+
+ virtual bool fixupBrokenLinks(SPDocument *doc) = 0;
+
+protected:
+ ResourceManager();
+ virtual ~ResourceManager();
+
+private:
+ ResourceManager(ResourceManager const &); // no copy
+ void operator=(ResourceManager const &); // no assign
+};
+
+
+
+} // namespace Inkscape
+
+#endif // SEEN_INKSCAPE_RESOURCE_MANAGER_H
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
diff --git a/src/select-context.cpp b/src/select-context.cpp
index e6d78975b..640aae9ee 100644
--- a/src/select-context.cpp
+++ b/src/select-context.cpp
@@ -867,8 +867,8 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
}
}
- gdouble const nudge = prefs->getDoubleLimited("/options/nudgedistance/value", 2, 0, 1000); // in px
- gdouble const offset = prefs->getDoubleLimited("/options/defaultscale/value", 2, 0, 1000);
+ gdouble const nudge = prefs->getDoubleLimited("/options/nudgedistance/value", 2, 0, 1000, "px"); // in px
+ gdouble const offset = prefs->getDoubleLimited("/options/defaultscale/value", 2, 0, 1000, "px");
int const snaps = prefs->getInt("/options/rotationsnapsperpi/value", 12);
switch (get_group0_keyval (&event->key)) {
diff --git a/src/select-context.h b/src/select-context.h
index 377e07275..934892d40 100644
--- a/src/select-context.h
+++ b/src/select-context.h
@@ -13,13 +13,13 @@
*/
#include "event-context.h"
-#include <gtk/gtktypeutils.h>
+#include <gtk/gtk.h>
#define SP_TYPE_SELECT_CONTEXT (sp_select_context_get_type ())
-#define SP_SELECT_CONTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_SELECT_CONTEXT, SPSelectContext))
-#define SP_SELECT_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_SELECT_CONTEXT, SPSelectContextClass))
-#define SP_IS_SELECT_CONTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_SELECT_CONTEXT))
-#define SP_IS_SELECT_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_SELECT_CONTEXT))
+#define SP_SELECT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_SELECT_CONTEXT, SPSelectContext))
+#define SP_SELECT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_SELECT_CONTEXT, SPSelectContextClass))
+#define SP_IS_SELECT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_SELECT_CONTEXT))
+#define SP_IS_SELECT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_SELECT_CONTEXT))
struct SPCanvasItem;
class SPSelectContext;
diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp
index 7dbffba1a..6f385b8f5 100644
--- a/src/selection-chemistry.cpp
+++ b/src/selection-chemistry.cpp
@@ -3230,7 +3230,7 @@ fit_canvas_to_drawing(SPDocument *doc, bool with_margins)
g_return_val_if_fail(doc != NULL, false);
doc->ensureUpToDate();
- SPItem const *const root = SP_ITEM(doc->root);
+ SPItem const *const root = doc->getRoot();
Geom::OptRect const bbox(root->getBounds(root->i2d_affine(), SPItem::RENDERING_BBOX));
if (bbox) {
doc->fitToRect(*bbox, with_margins);
diff --git a/src/seltrans-handles.h b/src/seltrans-handles.h
index f796a1007..53dbd3cda 100644
--- a/src/seltrans-handles.h
+++ b/src/seltrans-handles.h
@@ -14,7 +14,7 @@
#include "display/sodipodi-ctrl.h"
#include <2geom/forward.h>
-#include <gdk/gdkcursor.h>
+#include <gdk/gdk.h>
namespace Inkscape
{
diff --git a/src/shortcuts.cpp b/src/shortcuts.cpp
index d647d30b3..fe1d31331 100644
--- a/src/shortcuts.cpp
+++ b/src/shortcuts.cpp
@@ -26,7 +26,7 @@
#include <cstring>
#include <string>
-#include <gdk/gdkkeys.h>
+#include <gdk/gdk.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
diff --git a/src/sp-clippath.cpp b/src/sp-clippath.cpp
index 4e9f37ee3..147ece167 100644
--- a/src/sp-clippath.cpp
+++ b/src/sp-clippath.cpp
@@ -356,7 +356,7 @@ sp_clippath_view_list_remove(SPClipPathView *list, SPClipPathView *view)
// Create a mask element (using passed elements), add it to <defs>
const gchar *SPClipPath::create (GSList *reprs, SPDocument *document, Geom::Affine const* applyTransform)
{
- Inkscape::XML::Node *defsrepr = SP_DOCUMENT_DEFS(document)->getRepr();
+ Inkscape::XML::Node *defsrepr = document->getDefs()->getRepr();
Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:clipPath");
diff --git a/src/sp-gradient.h b/src/sp-gradient.h
index f7afd969a..85eb70e9b 100644
--- a/src/sp-gradient.h
+++ b/src/sp-gradient.h
@@ -17,9 +17,9 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gdk/gdktypes.h>
-#include <2geom/affine.h>
+#include <gdk/gdk.h>
#include <glibmm/ustring.h>
+#include <2geom/affine.h>
#include "sp-paint-server.h"
#include "sp-gradient-spread.h"
#include "sp-gradient-units.h"
diff --git a/src/sp-guide.cpp b/src/sp-guide.cpp
index 7d36df4a3..19b64eb1a 100644
--- a/src/sp-guide.cpp
+++ b/src/sp-guide.cpp
@@ -160,6 +160,7 @@ static void sp_guide_build(SPObject *object, SPDocument *document, Inkscape::XML
(* ((SPObjectClass *) (parent_class))->build)(object, document, repr);
}
+ object->readAttr( "inkscape:label" );
object->readAttr( "orientation" );
object->readAttr( "position" );
}
@@ -183,6 +184,15 @@ static void sp_guide_set(SPObject *object, unsigned int key, const gchar *value)
SPGuide *guide = SP_GUIDE(object);
switch (key) {
+ case SP_ATTR_INKSCAPE_LABEL:
+ if (value) {
+ guide->label = g_strdup(value);
+ } else {
+ guide->label = NULL;
+ }
+
+ sp_guide_set_label(*guide, guide->label, false);
+ break;
case SP_ATTR_ORIENTATION:
{
if (value && !strcmp(value, "horizontal")) {
@@ -291,7 +301,7 @@ sp_guide_create_guides_around_page(SPDesktop *dt) {
void SPGuide::showSPGuide(SPCanvasGroup *group, GCallback handler)
{
- SPCanvasItem *item = sp_guideline_new(group, point_on_line, normal_to_line);
+ SPCanvasItem *item = sp_guideline_new(group, label, point_on_line, normal_to_line);
sp_guideline_set_color(SP_GUIDELINE(item), color);
g_signal_connect(G_OBJECT(item), "event", G_CALLBACK(handler), this);
@@ -402,6 +412,36 @@ void sp_guide_set_normal(SPGuide &guide, Geom::Point const normal_to_line, bool
*/
}
+void sp_guide_set_color(SPGuide &guide, const unsigned char r, const unsigned char g, const unsigned char b, bool const commit)
+{
+ g_assert(SP_IS_GUIDE(&guide));
+ guide.color = (r << 24) | (g << 16) | (b << 8) | 0x7f;
+
+ if (guide.views){
+ sp_guideline_set_color(SP_GUIDELINE(guide.views->data), guide.color);
+ }
+
+ if (commit){
+ std::ostringstream os;
+ os << "rgb(" << r << "," << g << "," << b << ")";
+ //XML Tree being used directly while it shouldn't be
+ guide.getRepr()->setAttribute("inkscape:color", os.str().c_str());
+ }
+}
+
+void sp_guide_set_label(SPGuide &guide, const char* label, bool const commit)
+{
+ g_assert(SP_IS_GUIDE(&guide));
+ if (guide.views){
+ sp_guideline_set_label(SP_GUIDELINE(guide.views->data), label);
+ }
+
+ if (commit){
+ //XML Tree being used directly while it shouldn't be
+ guide.getRepr()->setAttribute("inkscape:label", label);
+ }
+}
+
/**
* Returns a human-readable description of the guideline for use in dialog boxes and status bar.
* If verbose is false, only positioning information is included (useful for dialogs).
diff --git a/src/sp-guide.h b/src/sp-guide.h
index c53042da5..8cf9c7dc2 100644
--- a/src/sp-guide.h
+++ b/src/sp-guide.h
@@ -31,6 +31,7 @@ struct SPCanvasGroup;
/* Represents the constraint on p that dot(g.direction, p) == g.position. */
class SPGuide : public SPObject {
public:
+ char* label;
Geom::Point normal_to_line;
Geom::Point point_on_line;
@@ -62,6 +63,8 @@ void sp_guide_create_guides_around_page(SPDesktop *dt);
void sp_guide_moveto(SPGuide &guide, Geom::Point const point_on_line, bool const commit);
void sp_guide_set_normal(SPGuide &guide, Geom::Point const normal_to_line, bool const commit);
+void sp_guide_set_label(SPGuide &guide, const char* label, bool const commit);
+void sp_guide_set_color(SPGuide &guide, const unsigned char r, const unsigned char g, const unsigned char b, bool const commit);
void sp_guide_remove(SPGuide *guide);
char *sp_guide_description(SPGuide const *guide, const bool verbose = true);
diff --git a/src/sp-image.cpp b/src/sp-image.cpp
index 8c4f7b0ca..f98a6c8e3 100644
--- a/src/sp-image.cpp
+++ b/src/sp-image.cpp
@@ -5,6 +5,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Edward Flick (EAF)
* Abhishek Sharma
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 1999-2005 Authors
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -55,7 +56,7 @@
}
#include "preferences.h"
-#include <gtk/gtkmessagedialog.h>
+#include <gtk/gtk.h>
#endif // DEBUG_LCMS
#endif // ENABLE_LCMS
/*
@@ -101,7 +102,6 @@ extern "C"
void user_read_data( png_structp png_ptr, png_bytep data, png_size_t length );
void user_write_data( png_structp png_ptr, png_bytep data, png_size_t length );
void user_flush_data( png_structp png_ptr );
-
}
@@ -551,8 +551,7 @@ GdkPixbuf* pixbuf_new_from_file( const char *filename, GError **error )
}
}
-GType
-sp_image_get_type (void)
+GType sp_image_get_type(void)
{
static GType image_type = 0;
if (!image_type) {
@@ -573,8 +572,7 @@ sp_image_get_type (void)
return image_type;
}
-static void
-sp_image_class_init (SPImageClass * klass)
+static void sp_image_class_init( SPImageClass * klass )
{
GObjectClass * gobject_class;
SPObjectClass * sp_object_class;
@@ -623,8 +621,7 @@ static void sp_image_init( SPImage *image )
image->lastMod = 0;
}
-static void
-sp_image_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+static void sp_image_build( SPObject *object, SPDocument *document, Inkscape::XML::Node *repr )
{
if (((SPObjectClass *) parent_class)->build) {
((SPObjectClass *) parent_class)->build (object, document, repr);
@@ -642,8 +639,7 @@ sp_image_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *rep
document->addResource("image", object);
}
-static void
-sp_image_release (SPObject *object)
+static void sp_image_release( SPObject *object )
{
SPImage *image = SP_IMAGE(object);
@@ -683,8 +679,7 @@ sp_image_release (SPObject *object)
}
}
-static void
-sp_image_set (SPObject *object, unsigned int key, const gchar *value)
+static void sp_image_set( SPObject *object, unsigned int key, const gchar *value )
{
SPImage *image = SP_IMAGE (object);
@@ -806,8 +801,7 @@ sp_image_set (SPObject *object, unsigned int key, const gchar *value)
sp_image_set_curve(image); //creates a curve at the image's boundary for snapping
}
-static void
-sp_image_update (SPObject *object, SPCtx *ctx, unsigned int flags)
+static void sp_image_update( SPObject *object, SPCtx *ctx, unsigned int flags )
{
SPImage *image = SP_IMAGE(object);
SPDocument *doc = object->document;
@@ -1012,8 +1006,7 @@ sp_image_update (SPObject *object, SPCtx *ctx, unsigned int flags)
sp_image_update_canvas_image ((SPImage *) object);
}
-static void
-sp_image_modified (SPObject *object, unsigned int flags)
+static void sp_image_modified( SPObject *object, unsigned int flags )
{
SPImage *image = SP_IMAGE (object);
@@ -1028,8 +1021,7 @@ sp_image_modified (SPObject *object, unsigned int flags)
}
}
-static Inkscape::XML::Node *
-sp_image_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+static Inkscape::XML::Node *sp_image_write( SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags )
{
SPImage *image = SP_IMAGE (object);
@@ -1067,8 +1059,7 @@ sp_image_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XM
return repr;
}
-static void
-sp_image_bbox(SPItem const *item, NRRect *bbox, Geom::Affine const &transform, unsigned const /*flags*/)
+static void sp_image_bbox( SPItem const *item, NRRect *bbox, Geom::Affine const &transform, unsigned const /*flags*/ )
{
SPImage const &image = *SP_IMAGE(item);
@@ -1085,8 +1076,7 @@ sp_image_bbox(SPItem const *item, NRRect *bbox, Geom::Affine const &transform, u
}
}
-static void
-sp_image_print (SPItem *item, SPPrintContext *ctx)
+static void sp_image_print( SPItem *item, SPPrintContext *ctx )
{
SPImage *image = SP_IMAGE(item);
@@ -1133,8 +1123,7 @@ sp_image_print (SPItem *item, SPPrintContext *ctx)
}
}
-static gchar *
-sp_image_description(SPItem *item)
+static gchar *sp_image_description( SPItem *item )
{
SPImage *image = SP_IMAGE(item);
char *href_desc;
@@ -1157,8 +1146,7 @@ sp_image_description(SPItem *item)
return ret;
}
-static NRArenaItem *
-sp_image_show (SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int /*flags*/)
+static NRArenaItem *sp_image_show( SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int /*flags*/ )
{
SPImage * image = SP_IMAGE(item);
NRArenaItem *ai = NRArenaImage::create(arena);
@@ -1260,8 +1248,7 @@ GdkPixbuf *sp_image_repr_read_image( time_t& modTime, char*& pixPath, const gcha
return pixbuf;
}
-static GdkPixbuf *
-sp_image_pixbuf_force_rgba (GdkPixbuf * pixbuf)
+static GdkPixbuf *sp_image_pixbuf_force_rgba( GdkPixbuf * pixbuf )
{
GdkPixbuf* result;
if (gdk_pixbuf_get_has_alpha(pixbuf)) {
@@ -1274,7 +1261,6 @@ sp_image_pixbuf_force_rgba (GdkPixbuf * pixbuf)
}
/* We assert that realpixbuf is either NULL or identical size to pixbuf */
-
static void
sp_image_update_arenaitem (SPImage *image, NRArenaImage *ai)
{
@@ -1295,7 +1281,7 @@ sp_image_update_canvas_image (SPImage *image)
}
}
-static void sp_image_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const */*snapprefs*/)
+static void sp_image_snappoints( SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const */*snapprefs*/ )
{
/* An image doesn't have any nodes to snap, but still we want to be able snap one image
to another. Therefore we will create some snappoints at the corner, similar to a rect. If
@@ -1329,8 +1315,7 @@ static void sp_image_snappoints(SPItem const *item, std::vector<Inkscape::SnapCa
* Transform x, y, set x, y, clear translation
*/
-static Geom::Affine
-sp_image_set_transform(SPItem *item, Geom::Affine const &xform)
+static Geom::Affine sp_image_set_transform( SPItem *item, Geom::Affine const &xform )
{
SPImage *image = SP_IMAGE(item);
@@ -1370,8 +1355,7 @@ sp_image_set_transform(SPItem *item, Geom::Affine const &xform)
return ret;
}
-static GdkPixbuf *
-sp_image_repr_read_dataURI (const gchar * uri_data)
+static GdkPixbuf *sp_image_repr_read_dataURI( const gchar * uri_data )
{
GdkPixbuf * pixbuf = NULL;
@@ -1427,8 +1411,7 @@ sp_image_repr_read_dataURI (const gchar * uri_data)
return pixbuf;
}
-static GdkPixbuf *
-sp_image_repr_read_b64 (const gchar * uri_data)
+static GdkPixbuf *sp_image_repr_read_b64( const gchar * uri_data )
{
GdkPixbuf * pixbuf = NULL;
@@ -1504,8 +1487,7 @@ sp_image_repr_read_b64 (const gchar * uri_data)
return pixbuf;
}
-static void
-sp_image_set_curve(SPImage *image)
+static void sp_image_set_curve( SPImage *image )
{
//create a curve at the image's boundary for snapping
if ((image->height.computed < MAGIC_EPSILON_TOO) || (image->width.computed < MAGIC_EPSILON_TOO) || (image->clip_ref->getObject())) {
@@ -1533,8 +1515,7 @@ sp_image_set_curve(SPImage *image)
/**
* Return duplicate of curve (if any exists) or NULL if there is no curve
*/
-SPCurve *
-sp_image_get_curve (SPImage *image)
+SPCurve *sp_image_get_curve( SPImage *image )
{
SPCurve *result = 0;
if (image->curve) {
@@ -1543,8 +1524,7 @@ sp_image_get_curve (SPImage *image)
return result;
}
-void
-sp_embed_image(Inkscape::XML::Node *image_node, GdkPixbuf *pb, Glib::ustring const &mime_in)
+void sp_embed_image( Inkscape::XML::Node *image_node, GdkPixbuf *pb, Glib::ustring const &mime_in )
{
Glib::ustring format, mime;
if (mime_in == "image/jpeg") {
@@ -1555,8 +1535,8 @@ sp_embed_image(Inkscape::XML::Node *image_node, GdkPixbuf *pb, Glib::ustring con
format = "png";
}
- gchar *data;
- gsize length;
+ gchar *data = 0;
+ gsize length = 0;
gdk_pixbuf_save_to_buffer(pb, &data, &length, format.data(), NULL, NULL);
// Save base64 encoded data in image node
@@ -1567,7 +1547,8 @@ sp_embed_image(Inkscape::XML::Node *image_node, GdkPixbuf *pb, Glib::ustring con
gchar *buffer = (gchar *) g_malloc(needed_size), *buf_work = buffer;
buf_work += g_sprintf(buffer, "data:%s;base64,", mime.data());
- gint state = 0, save = 0;
+ gint state = 0;
+ gint save = 0;
gsize written = 0;
written += g_base64_encode_step((guchar*) data, length, TRUE, buf_work, &state, &save);
written += g_base64_encode_close(TRUE, buf_work + written, &state, &save);
diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp
index 2ee57dbe5..8d38fee07 100644
--- a/src/sp-item-group.cpp
+++ b/src/sp-item-group.cpp
@@ -47,6 +47,7 @@
#include "sp-title.h"
#include "sp-desc.h"
#include "sp-switch.h"
+#include "sp-defs.h"
using Inkscape::DocumentUndo;
@@ -343,8 +344,8 @@ sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done)
g_return_if_fail (SP_IS_GROUP (group));
SPDocument *doc = group->document;
- SPObject *root = doc->getRoot();
- SPObject *defs = SP_OBJECT(SP_ROOT(root)->defs);
+ SPRoot *root = doc->getRoot();
+ SPObject *defs = root->defs;
SPItem *gitem = SP_ITEM (group);
Inkscape::XML::Node *grepr = gitem->getRepr();
diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp
index 65f88afde..76efb6b4b 100644
--- a/src/sp-mask.cpp
+++ b/src/sp-mask.cpp
@@ -267,7 +267,7 @@ sp_mask_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML
const gchar *
sp_mask_create (GSList *reprs, SPDocument *document, Geom::Affine const* applyTransform)
{
- Inkscape::XML::Node *defsrepr = SP_DOCUMENT_DEFS(document)->getRepr();
+ Inkscape::XML::Node *defsrepr = document->getDefs()->getRepr();
Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:mask");
diff --git a/src/sp-metadata.cpp b/src/sp-metadata.cpp
index 21410d4fd..84dc114db 100644
--- a/src/sp-metadata.cpp
+++ b/src/sp-metadata.cpp
@@ -20,6 +20,7 @@
#include "document.h"
#include "sp-item-group.h"
+#include "sp-root.h"
#define noDEBUG_METADATA
#ifdef DEBUG_METADATA
@@ -213,7 +214,7 @@ sp_document_metadata (SPDocument *document)
g_return_val_if_fail (document != NULL, NULL);
- nv = sp_item_group_get_child_by_name ((SPGroup *) document->root, NULL,
+ nv = sp_item_group_get_child_by_name( document->getRoot(), NULL,
"metadata");
g_assert (nv != NULL);
diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp
index 001f7731f..1feb644ad 100644
--- a/src/sp-namedview.cpp
+++ b/src/sp-namedview.cpp
@@ -34,6 +34,7 @@
#include "preferences.h"
#include "desktop.h"
#include "conn-avoid-ref.h" // for defaultConnSpacing.
+#include "sp-root.h"
using Inkscape::DocumentUndo;
@@ -1013,7 +1014,7 @@ SPNamedView *sp_document_namedview(SPDocument *document, const gchar *id)
{
g_return_val_if_fail(document != NULL, NULL);
- SPObject *nv = sp_item_group_get_child_by_name((SPGroup *) document->root, NULL, "sodipodi:namedview");
+ SPObject *nv = sp_item_group_get_child_by_name(document->getRoot(), NULL, "sodipodi:namedview");
g_assert(nv != NULL);
if (id == NULL) {
@@ -1021,7 +1022,7 @@ SPNamedView *sp_document_namedview(SPDocument *document, const gchar *id)
}
while (nv && strcmp(nv->getId(), id)) {
- nv = sp_item_group_get_child_by_name((SPGroup *) document->root, nv, "sodipodi:namedview");
+ nv = sp_item_group_get_child_by_name(document->getRoot(), nv, "sodipodi:namedview");
}
return (SPNamedView *) nv;
diff --git a/src/sp-object-repr.cpp b/src/sp-object-repr.cpp
index 18f71ee53..c6d6729cc 100644
--- a/src/sp-object-repr.cpp
+++ b/src/sp-object-repr.cpp
@@ -89,11 +89,7 @@ static unsigned const N_NAME_TYPES = SODIPODI_TYPE + 1;
static GType name_to_gtype(NameType name_type, gchar const *name);
-/**
- * Construct an SPRoot and all its descendents from the given repr.
- */
-SPObject *
-sp_object_repr_build_tree(SPDocument *document, Inkscape::XML::Node *repr)
+SPRoot *sp_object_repr_build_tree(SPDocument *document, Inkscape::XML::Node *repr)
{
g_assert(document != NULL);
g_assert(repr != NULL);
@@ -108,7 +104,7 @@ sp_object_repr_build_tree(SPDocument *document, Inkscape::XML::Node *repr)
g_assert(object != NULL);
object->invoke_build(document, repr, FALSE);
- return object;
+ return SP_ROOT(object);
}
GType
diff --git a/src/sp-object-repr.h b/src/sp-object-repr.h
index 02ad3ea93..407af0bcc 100644
--- a/src/sp-object-repr.h
+++ b/src/sp-object-repr.h
@@ -21,7 +21,10 @@ class Node;
}
-SPObject * sp_object_repr_build_tree (SPDocument *document, Inkscape::XML::Node *repr);
+/**
+ * Construct an SPRoot and all its descendents from the given repr.
+ */
+SPRoot *sp_object_repr_build_tree(SPDocument *document, Inkscape::XML::Node *repr);
GType sp_repr_type_lookup (Inkscape::XML::Node *repr);
diff --git a/src/sp-object.cpp b/src/sp-object.cpp
index 17def7f15..e0b3e3201 100644
--- a/src/sp-object.cpp
+++ b/src/sp-object.cpp
@@ -43,6 +43,7 @@
#include "document.h"
#include "style.h"
#include "sp-object-repr.h"
+#include "sp-paint-server.h"
#include "sp-root.h"
#include "sp-style-elem.h"
#include "sp-script.h"
@@ -1603,9 +1604,9 @@ gchar const * SPObject::getStyleProperty(gchar const *key, gchar const *def) con
*/
void SPObject::_requireSVGVersion(Inkscape::Version version) {
for ( SPObject::ParentIterator iter=this ; iter ; ++iter ) {
- SPObject *object=iter;
+ SPObject *object = iter;
if (SP_IS_ROOT(object)) {
- SPRoot *root=SP_ROOT(object);
+ SPRoot *root = SP_ROOT(object);
if ( root->version.svg < version ) {
root->version.svg = version;
}
diff --git a/src/sp-paint-server-reference.h b/src/sp-paint-server-reference.h
new file mode 100644
index 000000000..90d8979f8
--- /dev/null
+++ b/src/sp-paint-server-reference.h
@@ -0,0 +1,43 @@
+#ifndef SEEN_SP_PAINT_SERVER_REFERENCE_H
+#define SEEN_SP_PAINT_SERVER_REFERENCE_H
+
+/*
+ * Reference class for gradients and patterns.
+ *
+ * Author:
+ * Lauris Kaplinski <lauris@kaplinski.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ *
+ * Copyright (C) 1999-2002 Lauris Kaplinski
+ * Copyright (C) 2000-2001 Ximian, Inc.
+ * Copyright (C) 2010 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-object.h"
+#include "uri-references.h"
+
+struct SPPaintServer;
+
+class SPPaintServerReference : public Inkscape::URIReference {
+public:
+ SPPaintServerReference (SPObject *obj) : URIReference(obj) {}
+ SPPaintServerReference (SPDocument *doc) : URIReference(doc) {}
+ SPPaintServer *getObject() const;
+
+protected:
+ virtual bool _acceptObject(SPObject *obj) const;
+};
+
+#endif // SEEN_SP_PAINT_SERVER_REFERENCE_H
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-paint-server.cpp b/src/sp-paint-server.cpp
index 010d98818..dc99639c8 100644
--- a/src/sp-paint-server.cpp
+++ b/src/sp-paint-server.cpp
@@ -14,6 +14,7 @@
*/
#include <string.h>
+#include "sp-paint-server-reference.h"
#include "sp-paint-server.h"
#include "sp-gradient.h"
@@ -25,6 +26,16 @@ static cairo_pattern_t *sp_paint_server_create_dummy_pattern(SPPaintServer *ps,
static SPObjectClass *parent_class;
+SPPaintServer *SPPaintServerReference::getObject() const
+{
+ return static_cast<SPPaintServer *>(URIReference::getObject());
+}
+
+bool SPPaintServerReference::_acceptObject(SPObject *obj) const
+{
+ return SP_IS_PAINT_SERVER(obj);
+}
+
GType SPPaintServer::get_type(void)
{
static GType type = 0;
diff --git a/src/sp-paint-server.h b/src/sp-paint-server.h
index facca4baa..283a97210 100644
--- a/src/sp-paint-server.h
+++ b/src/sp-paint-server.h
@@ -19,7 +19,6 @@
#include "sp-object.h"
#include "uri-references.h"
-struct NRPixBlock;
struct NRRect;
#define SP_TYPE_PAINT_SERVER (SPPaintServer::get_type())
@@ -50,18 +49,6 @@ struct SPPaintServerClass {
cairo_pattern_t *sp_paint_server_create_pattern(SPPaintServer *ps, cairo_t *ct, NRRect const *bbox, double opacity);
-class SPPaintServerReference : public Inkscape::URIReference {
-public:
- SPPaintServerReference (SPObject *obj) : URIReference(obj) {}
- SPPaintServerReference (SPDocument *doc) : URIReference(doc) {}
- SPPaintServer *getObject() const {
- return static_cast<SPPaintServer *>(URIReference::getObject());
- }
-protected:
- virtual bool _acceptObject(SPObject *obj) const {
- return SP_IS_PAINT_SERVER (obj);
- }
-};
#endif // SEEN_SP_PAINT_SERVER_H
/*
diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp
index 4cf84835c..d1e7671ed 100644
--- a/src/sp-pattern.cpp
+++ b/src/sp-pattern.cpp
@@ -416,7 +416,7 @@ SPPattern *pattern_chain(SPPattern *pattern)
{
SPDocument *document = pattern->document;
Inkscape::XML::Document *xml_doc = document->getReprDoc();
- Inkscape::XML::Node *defsrepr = SP_DOCUMENT_DEFS(document)->getRepr();
+ Inkscape::XML::Node *defsrepr = document->getDefs()->getRepr();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:pattern");
repr->setAttribute("inkscape:collect", "always");
@@ -469,7 +469,7 @@ sp_pattern_transform_multiply (SPPattern *pattern, Geom::Affine postmul, bool se
const gchar *pattern_tile(GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::Affine transform, Geom::Affine move)
{
Inkscape::XML::Document *xml_doc = document->getReprDoc();
- Inkscape::XML::Node *defsrepr = SP_DOCUMENT_DEFS(document)->getRepr();
+ Inkscape::XML::Node *defsrepr = document->getDefs()->getRepr();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:pattern");
repr->setAttribute("patternUnits", "userSpaceOnUse");
diff --git a/src/sp-pattern.h b/src/sp-pattern.h
index 52f3859a6..1f545bfc4 100644
--- a/src/sp-pattern.h
+++ b/src/sp-pattern.h
@@ -13,15 +13,15 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtktypeutils.h>
+#include <gtk/gtk.h>
#include "forward.h"
#include "sp-item.h"
#define SP_TYPE_PATTERN (sp_pattern_get_type ())
-#define SP_PATTERN(o) (GTK_CHECK_CAST ((o), SP_TYPE_PATTERN, SPPattern))
-#define SP_PATTERN_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_PATTERN, SPPatternClass))
-#define SP_IS_PATTERN(o) (GTK_CHECK_TYPE ((o), SP_TYPE_PATTERN))
-#define SP_IS_PATTERN_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_PATTERN))
+#define SP_PATTERN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_PATTERN, SPPattern))
+#define SP_PATTERN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_PATTERN, SPPatternClass))
+#define SP_IS_PATTERN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_PATTERN))
+#define SP_IS_PATTERN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_PATTERN))
GType sp_pattern_get_type (void);
diff --git a/src/sp-root.h b/src/sp-root.h
index ab379fb50..86b92b2b3 100644
--- a/src/sp-root.h
+++ b/src/sp-root.h
@@ -25,6 +25,8 @@
#include "enums.h"
#include "sp-item-group.h"
+class SPDefs;
+
/** \<svg\> element */
struct SPRoot : public SPGroup {
struct {
diff --git a/src/sp-shape.cpp b/src/sp-shape.cpp
index 28d729b61..ea79b6cee 100644
--- a/src/sp-shape.cpp
+++ b/src/sp-shape.cpp
@@ -721,12 +721,14 @@ sp_shape_print_invoke_marker_printing(SPObject* obj, Geom::Affine tr, SPStyle* s
}
SPItem* marker_item = sp_item_first_item_child( marker );
- tr = marker_item->transform * marker->c2p * tr;
+ if (marker_item) {
+ tr = marker_item->transform * marker->c2p * tr;
- Geom::Affine old_tr = marker_item->transform;
- marker_item->transform = tr;
- marker_item->invoke_print (ctx);
- marker_item->transform = old_tr;
+ Geom::Affine old_tr = marker_item->transform;
+ marker_item->transform = tr;
+ marker_item->invoke_print (ctx);
+ marker_item->transform = old_tr;
+ }
}
/**
* Prepares shape for printing. Handles printing of comments for printing
diff --git a/src/spiral-context.h b/src/spiral-context.h
index 29a5f41b2..6d689c49c 100644
--- a/src/spiral-context.h
+++ b/src/spiral-context.h
@@ -15,17 +15,17 @@
* Released under GNU GPL
*/
-#include <gtk/gtktypeutils.h>
+#include <gtk/gtk.h>
#include <stddef.h>
#include <sigc++/sigc++.h>
#include "event-context.h"
#include "libnr/nr-point.h"
#define SP_TYPE_SPIRAL_CONTEXT (sp_spiral_context_get_type ())
-#define SP_SPIRAL_CONTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_SPIRAL_CONTEXT, SPSpiralContext))
-#define SP_SPIRAL_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_SPIRAL_CONTEXT, SPSpiralContextClass))
-#define SP_IS_SPIRAL_CONTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_SPIRAL_CONTEXT))
-#define SP_IS_SPIRAL_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_SPIRAL_CONTEXT))
+#define SP_SPIRAL_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_SPIRAL_CONTEXT, SPSpiralContext))
+#define SP_SPIRAL_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_SPIRAL_CONTEXT, SPSpiralContextClass))
+#define SP_IS_SPIRAL_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_SPIRAL_CONTEXT))
+#define SP_IS_SPIRAL_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_SPIRAL_CONTEXT))
class SPSpiralContext;
class SPSpiralContextClass;
diff --git a/src/splivarot.cpp b/src/splivarot.cpp
index e09639745..3d3027639 100644
--- a/src/splivarot.cpp
+++ b/src/splivarot.cpp
@@ -606,6 +606,9 @@ void sp_selected_path_outline_add_marker( SPObject *marker_object, Geom::Affine
{
SPMarker* marker = SP_MARKER (marker_object);
SPItem* marker_item = sp_item_first_item_child(marker_object);
+ if (!marker_item) {
+ return;
+ }
Geom::Affine tr(marker_transform);
@@ -664,7 +667,9 @@ void item_outline_add_marker( SPObject const *marker_object, Geom::Affine marker
tr = marker->c2p * tr;
SPItem const * marker_item = sp_item_first_item_child(marker_object); // why only consider the first item? can a marker only consist of a single item (that may be a group)?
- item_outline_add_marker_child(marker_item, tr, pathv_in);
+ if (marker_item) {
+ item_outline_add_marker_child(marker_item, tr, pathv_in);
+ }
}
/**
@@ -1263,7 +1268,7 @@ void
sp_selected_path_offset(SPDesktop *desktop)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- double prefOffset = prefs->getDouble("/options/defaultoffsetwidth/value", 1.0);
+ double prefOffset = prefs->getDouble("/options/defaultoffsetwidth/value", 1.0, "px");
sp_selected_path_do_offset(desktop, true, prefOffset);
}
@@ -1271,7 +1276,7 @@ void
sp_selected_path_inset(SPDesktop *desktop)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- double prefOffset = prefs->getDouble("/options/defaultoffsetwidth/value", 1.0);
+ double prefOffset = prefs->getDouble("/options/defaultoffsetwidth/value", 1.0, "px");
sp_selected_path_do_offset(desktop, false, prefOffset);
}
@@ -1397,7 +1402,7 @@ sp_selected_path_create_offset_object(SPDesktop *desktop, int expand, bool updat
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- o_width = prefs->getDouble("/options/defaultoffsetwidth/value", 1.0);
+ o_width = prefs->getDouble("/options/defaultoffsetwidth/value", 1.0, "px");
}
if (o_width < 0.01)
diff --git a/src/spray-context.h b/src/spray-context.h
index c485a6a96..f6d9a9c0b 100644
--- a/src/spray-context.h
+++ b/src/spray-context.h
@@ -24,10 +24,10 @@
#include "ui/dialog/dialog.h"
#define SP_TYPE_SPRAY_CONTEXT (sp_spray_context_get_type())
-#define SP_SPRAY_CONTEXT(o) (GTK_CHECK_CAST((o), SP_TYPE_SPRAY_CONTEXT, SPSprayContext))
-#define SP_SPRAY_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_CAST((k), SP_TYPE_SPRAY_CONTEXT, SPSprayContextClass))
-#define SP_IS_SPRAY_CONTEXT(o) (GTK_CHECK_TYPE((o), SP_TYPE_SPRAY_CONTEXT))
-#define SP_IS_SPRAY_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_TYPE((k), SP_TYPE_SPRAY_CONTEXT))
+#define SP_SPRAY_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_SPRAY_CONTEXT, SPSprayContext))
+#define SP_SPRAY_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_SPRAY_CONTEXT, SPSprayContextClass))
+#define SP_IS_SPRAY_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_SPRAY_CONTEXT))
+#define SP_IS_SPRAY_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_SPRAY_CONTEXT))
class SPSprayContext;
class SPSprayContextClass;
diff --git a/src/star-context.h b/src/star-context.h
index 3bc8ca386..b66e2dd15 100644
--- a/src/star-context.h
+++ b/src/star-context.h
@@ -20,10 +20,10 @@
#include "libnr/nr-point.h"
#define SP_TYPE_STAR_CONTEXT (sp_star_context_get_type ())
-#define SP_STAR_CONTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_STAR_CONTEXT, SPStarContext))
-#define SP_STAR_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_STAR_CONTEXT, SPStarContextClass))
-#define SP_IS_STAR_CONTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_STAR_CONTEXT))
-#define SP_IS_STAR_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_STAR_CONTEXT))
+#define SP_STAR_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_STAR_CONTEXT, SPStarContext))
+#define SP_STAR_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_STAR_CONTEXT, SPStarContextClass))
+#define SP_IS_STAR_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_STAR_CONTEXT))
+#define SP_IS_STAR_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_STAR_CONTEXT))
class SPStarContext;
class SPStarContextClass;
diff --git a/src/style.h b/src/style.h
index 70e84ab42..a12db388a 100644
--- a/src/style.h
+++ b/src/style.h
@@ -22,7 +22,7 @@
#include "sp-filter-reference.h"
#include "uri-references.h"
#include "uri.h"
-#include "sp-paint-server.h"
+#include "sp-paint-server-reference.h"
#include <stddef.h>
#include <sigc++/connection.h>
diff --git a/src/svg-view-widget.cpp b/src/svg-view-widget.cpp
index 777c1b496..da5ad068f 100644
--- a/src/svg-view-widget.cpp
+++ b/src/svg-view-widget.cpp
@@ -14,7 +14,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtk.h>
#include "display/sp-canvas.h"
#include "display/sp-canvas-group.h"
#include "display/canvas-arena.h"
diff --git a/src/svg-view-widget.h b/src/svg-view-widget.h
index e732841c7..1a8697fdf 100644
--- a/src/svg-view-widget.h
+++ b/src/svg-view-widget.h
@@ -22,10 +22,10 @@ class SPSVGSPViewWidget;
class SPSVGSPViewWidgetClass;
#define SP_TYPE_SVG_VIEW_WIDGET (sp_svg_view_widget_get_type ())
-#define SP_SVG_VIEW_WIDGET(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_SVG_VIEW_WIDGET, SPSVGSPViewWidget))
-#define SP_SVG_VIEW_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_SVG_VIEW_WIDGET, SPSVGSPViewWidgetClass))
-#define SP_IS_SVG_VIEW_WIDGET(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_SVG_VIEW_WIDGET))
-#define SP_IS_SVG_VIEW_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_SVG_VIEW_WIDGET))
+#define SP_SVG_VIEW_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_SVG_VIEW_WIDGET, SPSVGSPViewWidget))
+#define SP_SVG_VIEW_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_SVG_VIEW_WIDGET, SPSVGSPViewWidgetClass))
+#define SP_IS_SVG_VIEW_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_SVG_VIEW_WIDGET))
+#define SP_IS_SVG_VIEW_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_SVG_VIEW_WIDGET))
GtkType sp_svg_view_widget_get_type (void);
diff --git a/src/svg/CMakeLists.txt b/src/svg/CMakeLists.txt
index 9d5dc0b7b..9a721969a 100644
--- a/src/svg/CMakeLists.txt
+++ b/src/svg/CMakeLists.txt
@@ -1,18 +1,36 @@
-SET(svg_SRC
-css-ostringstream.cpp
-#ftos.cpp
-itos.cpp
-path-string.cpp
-round.cpp
-sp-svg.def
-stringstream.cpp
-strip-trailing-zeros.cpp
-svg-affine.cpp
-svg-color.cpp
-svg-length.cpp
-svg-path.cpp
-#test-stubs.cpp
+
+set(svg_SRC
+ css-ostringstream.cpp
+ #ftos.cpp
+ itos.cpp
+ path-string.cpp
+ round.cpp
+ sp-svg.def
+ stringstream.cpp
+ strip-trailing-zeros.cpp
+ svg-affine.cpp
+ svg-color.cpp
+ svg-length.cpp
+ svg-path.cpp
+ # test-stubs.cpp
+
+ css-ostringstream-test.h
+ css-ostringstream.h
+ path-string.h
+ stringstream-test.h
+ stringstream.h
+ strip-trailing-zeros.h
+ svg-affine-test.h
+ svg-color-test.h
+ svg-color.h
+ svg-icc-color.h
+ svg-length-test.h
+ svg-length.h
+ svg-path-geom-test.h
+ svg.h
+ # test-stubs.h
+
)
-ADD_LIBRARY(svg STATIC ${svg_SRC})
-TARGET_LINK_LIBRARIES(svg
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+# add_inkscape_lib(svg_LIB "${svg_SRC}")
+add_inkscape_source("${svg_SRC}")
diff --git a/src/text-context.cpp b/src/text-context.cpp
index 5af2c5ebc..b709d4d24 100644
--- a/src/text-context.cpp
+++ b/src/text-context.cpp
@@ -18,11 +18,10 @@
#endif
#include <gdk/gdkkeysyms.h>
-#include <gtk/gtkmain.h>
+#include <gtk/gtk.h>
#include <display/sp-ctrlline.h>
#include <display/sodipodi-ctrlrect.h>
#include <display/sp-ctrlquadr.h>
-#include <gtk/gtkimmulticontext.h>
#include <gtkmm/clipboard.h>
#include "macros.h"
@@ -235,7 +234,7 @@ sp_text_context_setup(SPEventContext *ec)
g_signal_connect(G_OBJECT(canvas), "focus_out_event", G_CALLBACK(sptc_focus_out), tc);
g_signal_connect(G_OBJECT(tc->imc), "commit", G_CALLBACK(sptc_commit), tc);
- if (GTK_WIDGET_HAS_FOCUS(canvas)) {
+ if (gtk_widget_has_focus(canvas)) {
sptc_focus_in(canvas, NULL, tc);
}
}
diff --git a/src/text-context.h b/src/text-context.h
index ec1710da3..0d7a93ef0 100644
--- a/src/text-context.h
+++ b/src/text-context.h
@@ -17,17 +17,17 @@
/* #include <gdk/gdkic.h> */
#include <stddef.h>
#include <sigc++/sigc++.h>
-#include <gtk/gtkimcontext.h>
+#include <gtk/gtk.h>
#include "event-context.h"
#include <2geom/point.h>
#include "libnrtype/Layout-TNG.h"
#define SP_TYPE_TEXT_CONTEXT (sp_text_context_get_type ())
-#define SP_TEXT_CONTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_TEXT_CONTEXT, SPTextContext))
-#define SP_TEXT_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_TEXT_CONTEXT, SPTextContextClass))
-#define SP_IS_TEXT_CONTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_TEXT_CONTEXT))
-#define SP_IS_TEXT_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_TEXT_CONTEXT))
+#define SP_TEXT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_TEXT_CONTEXT, SPTextContext))
+#define SP_TEXT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_TEXT_CONTEXT, SPTextContextClass))
+#define SP_IS_TEXT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_TEXT_CONTEXT))
+#define SP_IS_TEXT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_TEXT_CONTEXT))
class SPTextContext;
class SPTextContextClass;
diff --git a/src/tools-switch.cpp b/src/tools-switch.cpp
index 1f624cc35..42eaf4474 100644
--- a/src/tools-switch.cpp
+++ b/src/tools-switch.cpp
@@ -50,6 +50,7 @@
#include "sp-flowtext.h"
#include "gradient-context.h"
#include "zoom-context.h"
+#include "measure-context.h"
#include "dropper-context.h"
#include "connector-context.h"
#include "flood-context.h"
@@ -75,6 +76,7 @@ static char const *const tool_names[] = {
"/tools/text",
"/tools/gradient",
"/tools/zoom",
+ "/tools/measure",
"/tools/dropper",
"/tools/connector",
"/tools/paintbucket",
@@ -208,6 +210,12 @@ tools_switch(SPDesktop *dt, int num)
inkscape_eventcontext_set(sp_desktop_event_context(dt));
dt->tipsMessageContext()->set(Inkscape::NORMAL_MESSAGE, _("<b>Click</b> or <b>drag around an area</b> to zoom in, <b>Shift+click</b> to zoom out."));
break;
+ case TOOLS_MEASURE:
+ dt->set_event_context(SP_TYPE_MEASURE_CONTEXT, tool_names[num]);
+ dt->activate_guides(false);
+ inkscape_eventcontext_set(sp_desktop_event_context(dt));
+ dt->tipsMessageContext()->set(Inkscape::NORMAL_MESSAGE, _("<b>Drag</b> to measure the dimensions of objects."));
+ break;
case TOOLS_DROPPER:
dt->set_event_context(SP_TYPE_DROPPER_CONTEXT, tool_names[num]);
dt->activate_guides(false);
diff --git a/src/tools-switch.h b/src/tools-switch.h
index 4cc9aa93d..75c728179 100644
--- a/src/tools-switch.h
+++ b/src/tools-switch.h
@@ -31,6 +31,7 @@ enum {
TOOLS_TEXT,
TOOLS_GRADIENT,
TOOLS_ZOOM,
+ TOOLS_MEASURE,
TOOLS_DROPPER,
TOOLS_CONNECTOR,
TOOLS_PAINTBUCKET,
diff --git a/src/trace/CMakeLists.txt b/src/trace/CMakeLists.txt
index 3cb378995..958907df6 100644
--- a/src/trace/CMakeLists.txt
+++ b/src/trace/CMakeLists.txt
@@ -1,13 +1,43 @@
-ADD_SUBDIRECTORY(potrace)
-SET(trace_SRC
-filterset.cpp
-imagemap.cpp
-imagemap-gdk.cpp
-quantize.cpp
-siox.cpp
-trace.cpp
-${trace_potrace_SRC}
+
+set(trace_SRC
+ filterset.cpp
+ imagemap.cpp
+ imagemap-gdk.cpp
+ quantize.cpp
+ siox.cpp
+ trace.cpp
+
+ potrace/curve.cpp
+ potrace/decompose.cpp
+ potrace/greymap.cpp
+ potrace/inkscape-potrace.cpp
+ potrace/potracelib.cpp
+ potrace/render.cpp
+ potrace/trace.cpp
+
+
+ # -------
+ # Headers
+ filterset.h
+ imagemap-gdk.h
+ imagemap.h
+ pool.h
+ quantize.h
+ siox.h
+ trace.h
+
+ potrace/auxiliary.h
+ potrace/bitmap.h
+ potrace/curve.h
+ potrace/decompose.h
+ potrace/greymap.h
+ potrace/inkscape-potrace.h
+ potrace/lists.h
+ potrace/potracelib.h
+ potrace/progress.h
+ potrace/render.h
+ potrace/trace.h
)
-ADD_LIBRARY(trace STATIC ${trace_SRC})
-TARGET_LINK_LIBRARIES(trace
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+# add_inkscape_lib(trace_LIB "${trace_SRC}")
+add_inkscape_source("${trace_SRC}")
diff --git a/src/trace/potrace/CMakeLists.txt b/src/trace/potrace/CMakeLists.txt
deleted file mode 100644
index f61e8bcd1..000000000
--- a/src/trace/potrace/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-SET(trace_potrace_SRC
-curve.cpp
-decompose.cpp
-greymap.cpp
-inkscape-potrace.cpp
-potracelib.cpp
-render.cpp
-trace.cpp
-)
diff --git a/src/trace/potrace/auxiliary.h b/src/trace/potrace/auxiliary.h
index 7baab851c..1c2765816 100644
--- a/src/trace/potrace/auxiliary.h
+++ b/src/trace/potrace/auxiliary.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
@@ -75,4 +75,31 @@ static inline int floordiv(int a, int n) {
#define sq(a) ((a)*(a))
#define cu(a) ((a)*(a)*(a))
+/* ---------------------------------------------------------------------- */
+/* deterministically and efficiently hash (x,y) into a pseudo-random bit */
+static inline int detrand(int x, int y) {
+ unsigned int z;
+ static const unsigned char t[256] = {
+ /* non-linear sequence: constant term of inverse in GF(8),
+ mod x^8+x^4+x^3+x+1 */
+ 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1,
+ 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0,
+ 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1,
+ 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1,
+ 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0,
+ 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1,
+ 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ };
+
+ /* 0x04b3e375 and 0x05a8ef93 are chosen to contain every possible
+ 5-bit sequence */
+ z = ((0x04b3e375 * x) ^ y) * 0x05a8ef93;
+ z = t[z & 0xff] ^ t[(z>>8) & 0xff] ^ t[(z>>16) & 0xff] ^ t[(z>>24) & 0xff];
+ return z;
+}
+
#endif /* AUXILIARY_H */
diff --git a/src/trace/potrace/bitmap.h b/src/trace/potrace/bitmap.h
index 2a172b1ad..671382dc2 100644
--- a/src/trace/potrace/bitmap.h
+++ b/src/trace/potrace/bitmap.h
@@ -1,14 +1,10 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
#ifndef BITMAP_H
#define BITMAP_H
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
#include <string.h>
#include <stdlib.h>
diff --git a/src/trace/potrace/curve.cpp b/src/trace/potrace/curve.cpp
index c9a6fbe04..00d7bd2db 100644
--- a/src/trace/potrace/curve.cpp
+++ b/src/trace/potrace/curve.cpp
@@ -1,8 +1,8 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
-/* $Id$ */
+/* $Id: curve.c 227 2010-12-16 05:47:19Z selinger $ */
/* private part of the path and curve data structures */
#include <stdio.h>
diff --git a/src/trace/potrace/curve.h b/src/trace/potrace/curve.h
index 45c0790be..bfde0af1a 100644
--- a/src/trace/potrace/curve.h
+++ b/src/trace/potrace/curve.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
diff --git a/src/trace/potrace/decompose.cpp b/src/trace/potrace/decompose.cpp
index 15c39825e..8219234c4 100644
--- a/src/trace/potrace/decompose.cpp
+++ b/src/trace/potrace/decompose.cpp
@@ -1,8 +1,8 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
-/* $Id$ */
+/* $Id: decompose.c 227 2010-12-16 05:47:19Z selinger $ */
#include <stdio.h>
#include <stdlib.h>
@@ -55,32 +55,6 @@ static void clear_bm_with_bbox(potrace_bitmap_t *bm, bbox_t *bbox) {
/* ---------------------------------------------------------------------- */
/* auxiliary functions */
-/* deterministically and efficiently hash (x,y) into a pseudo-random bit */
-static inline int detrand(int x, int y) {
- unsigned int z;
- static const unsigned char t[256] = {
- /* non-linear sequence: constant term of inverse in GF(8),
- mod x^8+x^4+x^3+x+1 */
- 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1,
- 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
- 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1,
- 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1,
- 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1,
- 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
- };
-
- /* 0x04b3e375 and 0x05a8ef93 are chosen to contain every possible
- 5-bit sequence */
- z = ((0x04b3e375 * x) ^ y) * 0x05a8ef93;
- z = t[z & 0xff] ^ t[(z>>8) & 0xff] ^ t[(z>>16) & 0xff] ^ t[(z>>24) & 0xff];
- return z & 1;
-}
-
/* return the "majority" value of bitmap bm at intersection (x,y). We
assume that the bitmap is balanced at "radius" 1. */
static int majority(potrace_bitmap_t *bm, int x, int y) {
@@ -304,7 +278,8 @@ static void pathlist_to_tree(path_t *plist, potrace_bitmap_t *bm) {
path_t *heap, *heap1;
path_t *cur;
path_t *head;
- path_t **hook, **hook_in, **hook_out; /* for fast appending to linked list */
+ path_t **plist_hook; /* for fast appending to linked list */
+ path_t **hook_in, **hook_out; /* for fast appending to linked list */
bbox_t bbox;
bm_clear(bm, 0);
@@ -391,18 +366,18 @@ static void pathlist_to_tree(path_t *plist, potrace_bitmap_t *bm) {
heap->next = NULL; /* heap is a linked list of childlists */
}
plist = NULL;
- hook = &plist;
+ plist_hook = &plist;
while (heap) {
heap1 = heap->next;
for (p=heap; p; p=p->sibling) {
/* p is a positive path */
/* append to linked list */
- list_insert_beforehook(p, hook);
+ list_insert_beforehook(p, plist_hook);
/* go through its children */
for (p1=p->childlist; p1; p1=p1->sibling) {
/* append to linked list */
- list_insert_beforehook(p1, hook);
+ list_insert_beforehook(p1, plist_hook);
/* append its childlist to heap, if non-empty */
if (p1->childlist) {
list_append(path_t, heap1, p1->childlist);
@@ -423,9 +398,12 @@ static void pathlist_to_tree(path_t *plist, potrace_bitmap_t *bm) {
static int findnext(potrace_bitmap_t *bm, int *xp, int *yp) {
int x;
int y;
+ int x0;
+
+ x0 = (*xp) & ~(BM_WORDBITS-1);
for (y=*yp; y>=0; y--) {
- for (x=0; x<bm->w; x+=BM_WORDBITS) {
+ for (x=x0; x<bm->w; x+=BM_WORDBITS) {
if (*bm_index(bm, x, y)) {
while (!BM_GET(bm, x, y)) {
x++;
@@ -436,6 +414,7 @@ static int findnext(potrace_bitmap_t *bm, int *xp, int *yp) {
return 0;
}
}
+ x0 = 0;
}
/* not found */
return 1;
@@ -451,7 +430,7 @@ int bm_to_pathlist(const potrace_bitmap_t *bm, path_t **plistp, const potrace_pa
int y;
path_t *p;
path_t *plist = NULL; /* linked list of path objects */
- path_t **hook = &plist; /* used to speed up appending to linked list */
+ path_t **plist_hook = &plist; /* used to speed up appending to linked list */
potrace_bitmap_t *bm1 = NULL;
int sign;
@@ -465,6 +444,7 @@ int bm_to_pathlist(const potrace_bitmap_t *bm, path_t **plistp, const potrace_pa
bm_clearexcess(bm1);
/* iterate through components */
+ x = 0;
y = bm1->h - 1;
while (findnext(bm1, &x, &y) == 0) {
/* calculate the sign by looking at the original */
@@ -483,7 +463,7 @@ int bm_to_pathlist(const potrace_bitmap_t *bm, path_t **plistp, const potrace_pa
if (p->area <= param->turdsize) {
path_free(p);
} else {
- list_insert_beforehook(p, hook);
+ list_insert_beforehook(p, plist_hook);
}
if (bm1->h > 0) { /* to be sure */
diff --git a/src/trace/potrace/decompose.h b/src/trace/potrace/decompose.h
index 5552fa0a1..409439c62 100644
--- a/src/trace/potrace/decompose.h
+++ b/src/trace/potrace/decompose.h
@@ -1,14 +1,15 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
-/* $Id$ */
+/* $Id: decompose.h 227 2010-12-16 05:47:19Z selinger $ */
#ifndef DECOMPOSE_H
#define DECOMPOSE_H
#include "potracelib.h"
#include "progress.h"
+#include "curve.h"
int bm_to_pathlist(const potrace_bitmap_t *bm, path_t **plistp, const potrace_param_t *param, progress_t *progress);
diff --git a/src/trace/potrace/greymap.cpp b/src/trace/potrace/greymap.cpp
index 646ecc3a5..770dd72e6 100644
--- a/src/trace/potrace/greymap.cpp
+++ b/src/trace/potrace/greymap.cpp
@@ -1,14 +1,13 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
-/* $Id$ */
+/* $Id: greymap.c 227 2010-12-16 05:47:19Z selinger $ */
/* Routines for manipulating greymaps, including reading pgm files. We
only deal with greymaps of depth 8 bits. */
#include <stdlib.h>
-#include <errno.h>
#include <string.h>
#include <math.h>
@@ -28,7 +27,6 @@ static int gm_readbody_bmp(FILE *f, greymap_t **gmp);
greymap_t *gm_new(int w, int h) {
greymap_t *gm;
- int errno_save;
gm = (greymap_t *) malloc(sizeof(greymap_t));
if (!gm) {
@@ -38,9 +36,7 @@ greymap_t *gm_new(int w, int h) {
gm->h = h;
gm->map = (signed short int *) malloc(w*h*sizeof(signed short int));
if (!gm->map) {
- errno_save = errno;
free(gm);
- errno = errno_save;
return NULL;
}
return gm;
@@ -60,7 +56,7 @@ greymap_t *gm_dup(greymap_t *gm) {
if (!gm1) {
return NULL;
}
- memcpy(gm1->map, gm->map, gm->w*gm->h*2);
+ memcpy(gm1->map, gm->map, gm->w*gm->h*sizeof(signed short int));
return gm1;
}
@@ -69,7 +65,7 @@ void gm_clear(greymap_t *gm, int b) {
int i;
if (b==0) {
- memset(gm->map, 0, gm->w*gm->h*2);
+ memset(gm->map, 0, gm->w*gm->h*sizeof(signed short int));
} else {
for (i=0; i<gm->w*gm->h; i++) {
gm->map[i] = b;
@@ -161,16 +157,16 @@ static int readbit(FILE *f) {
/* ---------------------------------------------------------------------- */
-char const *gm_read_error = NULL;
-
-/** Read a PNM stream: P1-P6 format (see pnm(5)), or a BMP stream, and
+/* read a PNM stream: P1-P6 format (see pnm(5)), or a BMP stream, and
convert the output to a greymap. Return greymap in *gmp. Return 0
on success, -1 on error with errno set, -2 on bad file format (with
error message in gm_read_error), and 1 on premature end of file, -3
on empty file (including files with only whitespace and comments),
-4 if wrong magic number. If the return value is >=0, *gmp is
- valid.
- */
+ valid. */
+
+char const *gm_read_error = NULL;
+
int gm_read(FILE *f, greymap_t **gmp) {
int magic[2];
@@ -413,6 +409,7 @@ struct bmp_info_s {
unsigned int ncolors; /* number of colors in palette */
unsigned int ColorsImportant;
unsigned int ctbits; /* sample size for color table */
+ int topdown; /* top-down mode? */
};
typedef struct bmp_info_s bmp_info_t;
@@ -481,6 +478,9 @@ static int bmp_forward(FILE *f, int pos) {
#define TRY(x) if (x) goto try_error
#define TRY_EOF(x) if (x) goto eof
+/* correct y-coordinate for top-down format */
+#define ycorr(y) (bmpinfo.topdown ? bmpinfo.h-1-y : y)
+
/* read BMP stream after magic number. Return values as for gm_read.
We choose to be as permissive as possible, since there are many
programs out there which produce BMP. For instance, ppmtobmp can
@@ -512,7 +512,8 @@ static int gm_readbody_bmp(FILE *f, greymap_t **gmp) {
/* info header */
TRY(bmp_readint(f, 4, &bmpinfo.InfoSize));
- if (bmpinfo.InfoSize == 40 || bmpinfo.InfoSize == 64) {
+ if (bmpinfo.InfoSize == 40 || bmpinfo.InfoSize == 64
+ || bmpinfo.InfoSize == 108 || bmpinfo.InfoSize == 124) {
/* Windows or new OS/2 format */
bmpinfo.ctbits = 32; /* sample size in color table */
TRY(bmp_readint(f, 4, &bmpinfo.w));
@@ -525,6 +526,12 @@ static int gm_readbody_bmp(FILE *f, greymap_t **gmp) {
TRY(bmp_readint(f, 4, &bmpinfo.YpixelsPerM));
TRY(bmp_readint(f, 4, &bmpinfo.ncolors));
TRY(bmp_readint(f, 4, &bmpinfo.ColorsImportant));
+ if ((signed int)bmpinfo.h < 0) {
+ bmpinfo.h = -bmpinfo.h;
+ bmpinfo.topdown = 1;
+ } else {
+ bmpinfo.topdown = 0;
+ }
} else if (bmpinfo.InfoSize == 12) {
/* old OS/2 format */
bmpinfo.ctbits = 24; /* sample size in color table */
@@ -534,11 +541,12 @@ static int gm_readbody_bmp(FILE *f, greymap_t **gmp) {
TRY(bmp_readint(f, 2, &bmpinfo.bits));
bmpinfo.comp = 0;
bmpinfo.ncolors = 0;
+ bmpinfo.topdown = 0;
} else {
goto format_error;
}
- /* forward to color table (i.e., if bmpinfo.InfoSize == 64) */
+ /* forward to color table (e.g., if bmpinfo.InfoSize == 64) */
TRY(bmp_forward(f, 14+bmpinfo.InfoSize));
if (bmpinfo.Planes != 1) {
@@ -593,7 +601,7 @@ static int gm_readbody_bmp(FILE *f, greymap_t **gmp) {
for (i=0; 8*i<bmpinfo.w; i++) {
TRY_EOF(bmp_readint(f, 1, &b));
for (j=0; j<8; j++) {
- GM_PUT(gm, i*8+j, y, b & (0x80 >> j) ? coltable[1] : coltable[0]);
+ GM_PUT(gm, i*8+j, ycorr(y), b & (0x80 >> j) ? coltable[1] : coltable[0]);
}
}
TRY(bmp_pad(f));
@@ -620,7 +628,7 @@ static int gm_readbody_bmp(FILE *f, greymap_t **gmp) {
b = bitbuf >> (INTBITS - bmpinfo.bits);
bitbuf <<= bmpinfo.bits;
n -= bmpinfo.bits;
- GM_UPUT(gm, x, y, coltable[b]);
+ GM_UPUT(gm, x, ycorr(y), coltable[b]);
}
TRY(bmp_pad(f));
}
@@ -640,7 +648,7 @@ static int gm_readbody_bmp(FILE *f, greymap_t **gmp) {
for (x=0; x<bmpinfo.w; x++) {
TRY_EOF(bmp_readint(f, bmpinfo.bits/8, &c));
c = ((c>>16) & 0xff) + ((c>>8) & 0xff) + (c & 0xff);
- GM_UPUT(gm, x, y, c/3);
+ GM_UPUT(gm, x, ycorr(y), c/3);
}
TRY(bmp_pad(f));
}
@@ -664,7 +672,7 @@ static int gm_readbody_bmp(FILE *f, greymap_t **gmp) {
if (y>=bmpinfo.h) {
break;
}
- GM_UPUT(gm, x, y, col[i&1]);
+ GM_UPUT(gm, x, ycorr(y), col[i&1]);
x++;
}
} else if (c == 0) {
@@ -693,7 +701,7 @@ static int gm_readbody_bmp(FILE *f, greymap_t **gmp) {
if (y>=bmpinfo.h) {
break;
}
- GM_PUT(gm, x, y, coltable[(b>>(4-4*(i&1))) & 0xf]);
+ GM_PUT(gm, x, ycorr(y), coltable[(b>>(4-4*(i&1))) & 0xf]);
x++;
}
if ((c+1) & 2) {
@@ -720,7 +728,7 @@ static int gm_readbody_bmp(FILE *f, greymap_t **gmp) {
if (y>=bmpinfo.h) {
break;
}
- GM_UPUT(gm, x, y, coltable[c]);
+ GM_UPUT(gm, x, ycorr(y), coltable[c]);
x++;
}
} else if (c == 0) {
@@ -747,7 +755,7 @@ static int gm_readbody_bmp(FILE *f, greymap_t **gmp) {
if (y>=bmpinfo.h) {
break;
}
- GM_PUT(gm, x, y, coltable[b]);
+ GM_PUT(gm, x, ycorr(y), coltable[b]);
x++;
}
if (c & 1) {
diff --git a/src/trace/potrace/greymap.h b/src/trace/potrace/greymap.h
index 059fec4e4..0736232a7 100644
--- a/src/trace/potrace/greymap.h
+++ b/src/trace/potrace/greymap.h
@@ -1,11 +1,11 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
-/* $Id$ */
+/* $Id: greymap.h 227 2010-12-16 05:47:19Z selinger $ */
-#ifndef PGM_H
-#define PGM_H
+#ifndef GREYMAP_H
+#define GREYMAP_H
#include <stdio.h>
@@ -55,4 +55,4 @@ int gm_read(FILE *f, greymap_t **gmp);
int gm_writepgm(FILE *f, greymap_t *gm, char *comment, int raw, int mode, double gamma);
int gm_print(FILE *f, greymap_t *gm);
-#endif /* PGM_H */
+#endif /* GREYMAP_H */
diff --git a/src/trace/potrace/lists.h b/src/trace/potrace/lists.h
index fc853398a..4f78bf20f 100644
--- a/src/trace/potrace/lists.h
+++ b/src/trace/potrace/lists.h
@@ -1,8 +1,8 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
-/* $Id$ */
+/* $Id: lists.h 227 2010-12-16 05:47:19Z selinger $ */
#ifndef _PS_LISTS_H
#define _PS_LISTS_H
diff --git a/src/trace/potrace/potracelib.cpp b/src/trace/potrace/potracelib.cpp
index 17e04cabb..3dbf3230b 100644
--- a/src/trace/potrace/potracelib.cpp
+++ b/src/trace/potrace/potracelib.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
@@ -48,15 +48,16 @@ potrace_param_t *potrace_param_default(void) {
/* On success, returns a Potrace state st with st->status ==
POTRACE_STATUS_OK. On failure, returns NULL if no Potrace state
could be created (with errno set), or returns an incomplete Potrace
- state (with st->status == POTRACE_STATUS_INCOMPLETE). Complete or
- incomplete Potrace state can be freed with potrace_state_free(). */
+ state (with st->status == POTRACE_STATUS_INCOMPLETE, and with errno
+ set). Complete or incomplete Potrace state can be freed with
+ potrace_state_free(). */
potrace_state_t *potrace_trace(const potrace_param_t *param, const potrace_bitmap_t *bm) {
int r;
path_t *plist = NULL;
potrace_state_t *st;
progress_t prog;
progress_t subprog;
-
+
/* prepare private progress bar state */
prog.callback = param->progress.callback;
prog.data = param->progress.data;
diff --git a/src/trace/potrace/potracelib.h b/src/trace/potrace/potracelib.h
index 0b93d65de..d15b05e5c 100644
--- a/src/trace/potrace/potracelib.h
+++ b/src/trace/potrace/potracelib.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
@@ -6,7 +6,11 @@
#define POTRACELIB_H
/* this file defines the API for the core Potrace library. For a more
- detailed description of the API, see doc/potracelib.txt */
+ detailed description of the API, see potracelib.pdf */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
/* ---------------------------------------------------------------------- */
/* tracing parameters */
@@ -128,4 +132,8 @@ void potrace_state_free(potrace_state_t *st);
of potracelib */
char *potrace_version(void);
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
#endif /* POTRACELIB_H */
diff --git a/src/trace/potrace/progress.h b/src/trace/potrace/progress.h
index 0e077430d..220639c6e 100644
--- a/src/trace/potrace/progress.h
+++ b/src/trace/potrace/progress.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
@@ -28,7 +28,7 @@ typedef struct progress_s progress_t;
static inline void progress_update(double d, progress_t *prog) {
double d_scaled;
- if (prog->callback != NULL) {
+ if (prog != NULL && prog->callback != NULL) {
d_scaled = prog->min * (1-d) + prog->max * d;
if (d == 1.0 || d_scaled >= prog->d_prev + prog->epsilon) {
prog->callback(prog->min * (1-d) + prog->max * d, prog->data);
@@ -43,7 +43,7 @@ static inline void progress_update(double d, progress_t *prog) {
static inline void progress_subrange_start(double a, double b, const progress_t *prog, progress_t *sub) {
double min, max;
- if (prog->callback == NULL) {
+ if (prog == NULL || prog->callback == NULL) {
sub->callback = NULL;
return;
}
@@ -66,7 +66,7 @@ static inline void progress_subrange_start(double a, double b, const progress_t
}
static inline void progress_subrange_end(progress_t *prog, progress_t *sub) {
- if (prog->callback != NULL) {
+ if (prog != NULL && prog->callback != NULL) {
if (sub->callback == NULL) {
progress_update(sub->b, prog);
} else {
diff --git a/src/trace/potrace/render.cpp b/src/trace/potrace/render.cpp
index f9183b931..39bec0684 100644
--- a/src/trace/potrace/render.cpp
+++ b/src/trace/potrace/render.cpp
@@ -1,8 +1,8 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
-/* $Id$ */
+/* $Id: render.c 227 2010-12-16 05:47:19Z selinger $ */
#include <stdio.h>
#include <stdlib.h>
diff --git a/src/trace/potrace/render.h b/src/trace/potrace/render.h
index 9c9d921d2..6cfbe0964 100644
--- a/src/trace/potrace/render.h
+++ b/src/trace/potrace/render.h
@@ -1,8 +1,8 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
-/* $Id$ */
+/* $Id: render.h 227 2010-12-16 05:47:19Z selinger $ */
#ifndef RENDER_H
#define RENDER_H
diff --git a/src/trace/potrace/trace.cpp b/src/trace/potrace/trace.cpp
index 909ffb712..8fe1a1bc4 100644
--- a/src/trace/potrace/trace.cpp
+++ b/src/trace/potrace/trace.cpp
@@ -1,8 +1,8 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
-/* $Id$ */
+/* $Id: trace.c 227 2010-12-16 05:47:19Z selinger $ */
/* transform jaggy paths into smooth curves */
#include <stdio.h>
@@ -483,28 +483,38 @@ static double penalty3(privpath_t *pp, int i, int j) {
double a, b, c, s;
double px, py, ex, ey;
- int r=0; /* rotations from i to j */
+ int r = 0; /* rotations from i to j */
if (j>=n) {
- j-=n;
- r+=1;
+ j -= n;
+ r = 1;
}
- x = sums[j+1].x-sums[i].x+r*sums[n].x;
- y = sums[j+1].y-sums[i].y+r*sums[n].y;
- x2 = sums[j+1].x2-sums[i].x2+r*sums[n].x2;
- xy = sums[j+1].xy-sums[i].xy+r*sums[n].xy;
- y2 = sums[j+1].y2-sums[i].y2+r*sums[n].y2;
- k = j+1-i+r*n;
-
- px = (pt[i].x+pt[j].x)/2.0-pt[0].x;
- py = (pt[i].y+pt[j].y)/2.0-pt[0].y;
- ey = (pt[j].x-pt[i].x);
- ex = -(pt[j].y-pt[i].y);
-
- a = ((x2-2*x*px)/k+px*px);
- b = ((xy-x*py-y*px)/k+px*py);
- c = ((y2-2*y*py)/k+py*py);
+ /* critical inner loop: the "if" gives a 4.6 percent speedup */
+ if (r == 0) {
+ x = sums[j+1].x - sums[i].x;
+ y = sums[j+1].y - sums[i].y;
+ x2 = sums[j+1].x2 - sums[i].x2;
+ xy = sums[j+1].xy - sums[i].xy;
+ y2 = sums[j+1].y2 - sums[i].y2;
+ k = j+1 - i;
+ } else {
+ x = sums[j+1].x - sums[i].x + sums[n].x;
+ y = sums[j+1].y - sums[i].y + sums[n].y;
+ x2 = sums[j+1].x2 - sums[i].x2 + sums[n].x2;
+ xy = sums[j+1].xy - sums[i].xy + sums[n].xy;
+ y2 = sums[j+1].y2 - sums[i].y2 + sums[n].y2;
+ k = j+1 - i + n;
+ }
+
+ px = (pt[i].x + pt[j].x) / 2.0 - pt[0].x;
+ py = (pt[i].y + pt[j].y) / 2.0 - pt[0].y;
+ ey = (pt[j].x - pt[i].x);
+ ex = -(pt[j].y - pt[i].y);
+
+ a = ((x2 - 2*x*px) / k + px*px);
+ b = ((xy - x*py - y*px) / k + px*py);
+ c = ((y2 - 2*y*py) / k + py*py);
s = ex*ex*a + 2*ex*ey*b + ey*ey*c;
@@ -513,7 +523,7 @@ static double penalty3(privpath_t *pp, int i, int j) {
/* find the optimal polygon. Fill in the m and po components. Return 1
on failure with errno set, else 0. Non-cyclic version: assumes i=0
- is in the polygon. Fixme: ### implement cyclic version. */
+ is in the polygon. Fixme: implement cyclic version. */
static int bestpolygon(privpath_t *pp)
{
int i, j, m, k;
@@ -576,7 +586,7 @@ static int bestpolygon(privpath_t *pp)
seg1[0] = 0;
/* now find the shortest path with m segments, based on penalty3 */
- /* note: the outer 2 loops jointly have at most n interations, thus
+ /* note: the outer 2 loops jointly have at most n iterations, thus
the worst-case behavior here is quadratic. In practice, it is
close to linear since the inner loop tends to be short. */
pen[0]=0;
@@ -828,24 +838,27 @@ static int adjust_vertices(privpath_t *pp) {
/* ---------------------------------------------------------------------- */
/* Stage 4: smoothing and corner analysis (Sec. 2.3.3) */
-/* Always succeeds and returns 0 */
-static int smooth(privcurve_t *curve, int sign, double alphamax) {
+/* reverse orientation of a path */
+static void reverse(privcurve_t *curve) {
+ int m = curve->n;
+ int i, j;
+ dpoint_t tmp;
+
+ for (i=0, j=m-1; i<j; i++, j--) {
+ tmp = curve->vertex[i];
+ curve->vertex[i] = curve->vertex[j];
+ curve->vertex[j] = tmp;
+ }
+}
+
+/* Always succeeds */
+static void smooth(privcurve_t *curve, double alphamax) {
int m = curve->n;
int i, j, k;
double dd, denom, alpha;
dpoint_t p2, p3, p4;
- if (sign == '-') {
- /* reverse orientation of negative paths */
- for (i=0, j=m-1; i<j; i++, j--) {
- dpoint_t tmp;
- tmp = curve->vertex[i];
- curve->vertex[i] = curve->vertex[j];
- curve->vertex[j] = tmp;
- }
- }
-
/* examine each vertex and find its best fit */
for (i=0; i<m; i++) {
j = mod(i+1, m);
@@ -885,7 +898,7 @@ static int smooth(privcurve_t *curve, int sign, double alphamax) {
}
curve->alphacurve = 1;
- return 0;
+ return;
}
/* ---------------------------------------------------------------------- */
@@ -1098,7 +1111,7 @@ static int opticurve(privpath_t *pp, double opttolerance) {
len[0] = 0;
/* Fixme: we always start from a fixed point -- should find the best
- curve cyclically ### */
+ curve cyclically */
for (j=1; j<=m; j++) {
/* calculate best path from 0 to j */
@@ -1206,7 +1219,10 @@ int process_path(path_t *plist, const potrace_param_t *param, progress_t *progre
TRY(calc_lon(p->priv));
TRY(bestpolygon(p->priv));
TRY(adjust_vertices(p->priv));
- TRY(smooth(&p->priv->curve, p->sign, param->alphamax));
+ if (p->sign == '-') { /* reverse orientation of negative paths */
+ reverse(&p->priv->curve);
+ }
+ smooth(&p->priv->curve, param->alphamax);
if (param->opticurve) {
TRY(opticurve(p->priv, param->opttolerance));
p->priv->fcurve = &p->priv->ocurve;
diff --git a/src/trace/potrace/trace.h b/src/trace/potrace/trace.h
index b33f8ba4d..72d1a3696 100644
--- a/src/trace/potrace/trace.h
+++ b/src/trace/potrace/trace.h
@@ -1,14 +1,15 @@
-/* Copyright (C) 2001-2007 Peter Selinger.
+/* Copyright (C) 2001-2010 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
-/* $Id$ */
+/* $Id: trace.h 227 2010-12-16 05:47:19Z selinger $ */
#ifndef TRACE_H
#define TRACE_H
#include "potracelib.h"
#include "progress.h"
+#include "curve.h"
int process_path(path_t *plist, const potrace_param_t *param, progress_t *progress);
diff --git a/src/tweak-context.h b/src/tweak-context.h
index 542254b91..5fbd078ef 100644
--- a/src/tweak-context.h
+++ b/src/tweak-context.h
@@ -16,10 +16,10 @@
#include <libnr/nr-point.h>
#define SP_TYPE_TWEAK_CONTEXT (sp_tweak_context_get_type())
-#define SP_TWEAK_CONTEXT(o) (GTK_CHECK_CAST((o), SP_TYPE_TWEAK_CONTEXT, SPTweakContext))
-#define SP_TWEAK_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_CAST((k), SP_TYPE_TWEAK_CONTEXT, SPTweakContextClass))
-#define SP_IS_TWEAK_CONTEXT(o) (GTK_CHECK_TYPE((o), SP_TYPE_TWEAK_CONTEXT))
-#define SP_IS_TWEAK_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_TYPE((k), SP_TYPE_TWEAK_CONTEXT))
+#define SP_TWEAK_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_TWEAK_CONTEXT, SPTweakContext))
+#define SP_TWEAK_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_TWEAK_CONTEXT, SPTweakContextClass))
+#define SP_IS_TWEAK_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_TWEAK_CONTEXT))
+#define SP_IS_TWEAK_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_TWEAK_CONTEXT))
class SPTweakContext;
class SPTweakContextClass;
diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt
index 01dadb7c2..30b72437f 100644
--- a/src/ui/CMakeLists.txt
+++ b/src/ui/CMakeLists.txt
@@ -1,24 +1,247 @@
-SET(uifolders
-cache
-dialog
-view
-widget
-)
-FOREACH(uilistsrc ${uifolders})
- ADD_SUBDIRECTORY(${uilistsrc})
-ENDFOREACH(uilistsrc)
-
-SET(ui_SRC
-clipboard.cpp
-context-menu.cpp
-previewholder.cpp
-stock.cpp
-stock-items.cpp
-${ui_cache_SRC}
-${ui_dialog_SRC}
-${ui_view_SRC}
-${ui_widget_SRC}
+
+set(ui_SRC
+ clipboard.cpp
+ context-menu.cpp
+ previewholder.cpp
+ uxmanager.cpp
+
+ cache/svg_preview_cache.cpp
+
+ tool/control-point-selection.cpp
+ tool/control-point.cpp
+ tool/curve-drag-point.cpp
+ tool/event-utils.cpp
+ tool/manipulator.cpp
+ tool/modifier-tracker.cpp
+ tool/multi-path-manipulator.cpp
+ tool/node-tool.cpp
+ tool/node.cpp
+ tool/path-manipulator.cpp
+ tool/selectable-control-point.cpp
+ tool/selector.cpp
+ tool/transform-handle-set.cpp
+
+ dialog/aboutbox.cpp
+ dialog/align-and-distribute.cpp
+ dialog/calligraphic-profile-rename.cpp
+ dialog/color-item.cpp
+ dialog/debug.cpp
+ dialog/desktop-tracker.cpp
+ dialog/dialog-manager.cpp
+ dialog/dialog.cpp
+ dialog/dock-behavior.cpp
+ dialog/document-metadata.cpp
+ dialog/document-properties.cpp
+ dialog/extension-editor.cpp
+ dialog/extensions.cpp
+ dialog/filedialog.cpp
+ dialog/filedialogimpl-gtkmm.cpp
+ dialog/fill-and-stroke.cpp
+ dialog/filter-effects-dialog.cpp
+ dialog/find.cpp
+ dialog/floating-behavior.cpp
+ dialog/glyphs.cpp
+ dialog/guides.cpp
+ dialog/icon-preview.cpp
+ dialog/inkscape-preferences.cpp
+ dialog/input.cpp
+ dialog/layer-properties.cpp
+ dialog/layers.cpp
+ dialog/livepatheffect-editor.cpp
+ dialog/memory.cpp
+ dialog/messages.cpp
+ dialog/ocaldialogs.cpp
+ dialog/print-colors-preview-dialog.cpp
+ dialog/print.cpp
+ dialog/scriptdialog.cpp
+ # dialog/session-player.cpp
+ dialog/svg-fonts-dialog.cpp
+ dialog/swatches.cpp
+ dialog/tile.cpp
+ dialog/tracedialog.cpp
+ dialog/transformation.cpp
+ dialog/undo-history.cpp
+ # dialog/whiteboard-connect.cpp
+ # dialog/whiteboard-sharewithchat.cpp
+ # dialog/whiteboard-sharewithuser.cpp
+
+ widget/button.cpp
+ widget/color-picker.cpp
+ widget/color-preview.cpp
+ widget/combo-text.cpp
+ widget/dock-item.cpp
+ widget/dock.cpp
+ widget/entity-entry.cpp
+ widget/entry.cpp
+ widget/filter-effect-chooser.cpp
+ widget/handlebox.cpp
+ widget/icon-widget.cpp
+ widget/imageicon.cpp
+ widget/imagetoggler.cpp
+ widget/labelled.cpp
+ widget/layer-selector.cpp
+ widget/licensor.cpp
+ widget/notebook-page.cpp
+ widget/object-composite-settings.cpp
+ widget/page-sizer.cpp
+ widget/panel.cpp
+ widget/point.cpp
+ widget/preferences-widget.cpp
+ widget/random.cpp
+ widget/registered-widget.cpp
+ widget/registry.cpp
+ widget/rendering-options.cpp
+ widget/rotateable.cpp
+ widget/ruler.cpp
+ widget/scalar-unit.cpp
+ widget/scalar.cpp
+ widget/selected-style.cpp
+ widget/spin-slider.cpp
+ widget/spinbutton.cpp
+ widget/style-subject.cpp
+ widget/style-swatch.cpp
+ widget/svg-canvas.cpp
+ widget/text.cpp
+ widget/tolerance-slider.cpp
+ widget/toolbox.cpp
+ widget/unit-menu.cpp
+ widget/zoom-status.cpp
+
+ view/view.cpp
+ view/view-widget.cpp
+
+
+ # -------
+ # Headers
+ clipboard.h
+ context-menu.h
+ icon-names.h
+ previewable.h
+ previewfillable.h
+ previewholder.h
+ uxmanager.h
+
+ cache/svg_preview_cache.h
+
+ dialog/aboutbox.h
+ dialog/align-and-distribute.h
+ dialog/behavior.h
+ dialog/calligraphic-profile-rename.h
+ dialog/color-item.h
+ dialog/debug.h
+ dialog/desktop-tracker.h
+ dialog/dialog-manager.h
+ dialog/dialog.h
+ dialog/dock-behavior.h
+ dialog/document-metadata.h
+ dialog/document-properties.h
+ dialog/extension-editor.h
+ dialog/extensions.h
+ dialog/filedialog.h
+ dialog/filedialogimpl-gtkmm.h
+ dialog/filedialogimpl-win32.h
+ dialog/fill-and-stroke.h
+ dialog/filter-effects-dialog.h
+ dialog/find.h
+ dialog/floating-behavior.h
+ dialog/glyphs.h
+ dialog/guides.h
+ dialog/icon-preview.h
+ dialog/inkscape-preferences.h
+ dialog/input.h
+ dialog/layer-properties.h
+ dialog/layers.h
+ dialog/livepatheffect-editor.h
+ dialog/memory.h
+ dialog/messages.h
+ dialog/ocaldialogs.h
+ dialog/panel-dialog.h
+ dialog/print-colors-preview-dialog.h
+ dialog/print.h
+ dialog/scriptdialog.h
+ dialog/session-player.h
+ dialog/svg-fonts-dialog.h
+ dialog/swatches.h
+ dialog/tile.h
+ dialog/tracedialog.h
+ dialog/transformation.h
+ dialog/undo-history.h
+ dialog/whiteboard-connect.h
+ dialog/whiteboard-sharewithchat.h
+ dialog/whiteboard-sharewithuser.h
+
+ tool/commit-events.h
+ tool/control-point-selection.h
+ tool/control-point.h
+ tool/curve-drag-point.h
+ tool/event-utils.h
+ tool/manipulator.h
+ tool/modifier-tracker.h
+ tool/multi-path-manipulator.h
+ tool/node-tool.h
+ tool/node-types.h
+ tool/node.h
+ tool/path-manipulator.h
+ tool/selectable-control-point.h
+ tool/selector.h
+ tool/shape-record.h
+ tool/transform-handle-set.h
+
+ view/edit-widget-interface.h
+ view/view-widget.h
+ view/view.h
+
+ widget/attr-widget.h
+ widget/button.h
+ widget/color-picker.h
+ widget/color-preview.h
+ widget/combo-enums.h
+ widget/combo-text.h
+ widget/dock-item.h
+ widget/dock.h
+ widget/entity-entry.h
+ widget/entry.h
+ widget/filter-effect-chooser.h
+ widget/handlebox.h
+ widget/icon-widget.h
+ widget/imageicon.h
+ widget/imagetoggler.h
+ widget/labelled.h
+ widget/layer-selector.h
+ widget/licensor.h
+ widget/notebook-page.h
+ widget/object-composite-settings.h
+ widget/page-sizer.h
+ widget/panel.h
+ widget/point.h
+ widget/preferences-widget.h
+ widget/random.h
+ widget/registered-enums.h
+ widget/registered-widget.h
+ widget/registry.h
+ widget/rendering-options.h
+ widget/rotateable.h
+ widget/ruler.h
+ widget/scalar-unit.h
+ widget/scalar.h
+ widget/selected-style.h
+ widget/spin-slider.h
+ widget/spinbutton.h
+ widget/style-subject.h
+ widget/style-swatch.h
+ widget/svg-canvas.h
+ widget/text.h
+ widget/tolerance-slider.h
+ widget/toolbox.h
+ widget/unit-menu.h
+ widget/zoom-status.h
)
-ADD_LIBRARY(ui STATIC ${ui_SRC})
-TARGET_LINK_LIBRARIES(ui
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+if(WIN32)
+ list(APPEND ui_SRC
+ dialog/filedialogimpl-win32.cpp
+ )
+endif()
+
+# add_inkscape_lib(ui_LIB "${ui_SRC}")
+add_inkscape_source("${ui_SRC}")
diff --git a/src/ui/cache/CMakeLists.txt b/src/ui/cache/CMakeLists.txt
deleted file mode 100644
index a78010196..000000000
--- a/src/ui/cache/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-SET(ui_cache_SRC
-svg_preview_cache.cpp
-)
diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp
index 4f4f8a022..60379a966 100644
--- a/src/ui/clipboard.cpp
+++ b/src/ui/clipboard.cpp
@@ -894,7 +894,7 @@ void ClipboardManagerImpl::_pasteDefs(SPDesktop *desktop, SPDocument *clipdoc)
SPDocument *target_document = sp_desktop_document(desktop);
Inkscape::XML::Node *root = clipdoc->getReprRoot();
Inkscape::XML::Node *defs = sp_repr_lookup_name(root, "svg:defs", 1);
- Inkscape::XML::Node *target_defs = SP_DOCUMENT_DEFS(target_document)->getRepr();
+ Inkscape::XML::Node *target_defs = target_document->getDefs()->getRepr();
Inkscape::XML::Document *target_xmldoc = target_document->getReprDoc();
prevent_id_clashes(clipdoc, target_document);
@@ -1197,7 +1197,7 @@ void ClipboardManagerImpl::_onGet(Gtk::SelectionData &sel, guint /*info*/)
gdouble dpi = PX_PER_IN;
guint32 bgcolor = 0x00000000;
- Geom::Point origin (SP_ROOT(_clipboardSPDoc->root)->x.computed, SP_ROOT(_clipboardSPDoc->root)->y.computed);
+ Geom::Point origin (_clipboardSPDoc->getRoot()->x.computed, _clipboardSPDoc->getRoot()->y.computed);
Geom::Rect area = Geom::Rect(origin, origin + _clipboardSPDoc->getDimensions());
unsigned long int width = (unsigned long int) (area.width() * dpi / PX_PER_IN + 0.5);
@@ -1254,7 +1254,7 @@ void ClipboardManagerImpl::_createInternalClipboard()
if ( _clipboardSPDoc == NULL ) {
_clipboardSPDoc = SPDocument::createNewDoc(NULL, false, true);
//g_assert( _clipboardSPDoc != NULL );
- _defs = SP_DOCUMENT_DEFS(_clipboardSPDoc)->getRepr();
+ _defs = _clipboardSPDoc->getDefs()->getRepr();
_doc = _clipboardSPDoc->getReprDoc();
_root = _clipboardSPDoc->getReprRoot();
diff --git a/src/ui/context-menu.cpp b/src/ui/context-menu.cpp
index 05fe9a459..a45b8ceaa 100644
--- a/src/ui/context-menu.cpp
+++ b/src/ui/context-menu.cpp
@@ -42,7 +42,7 @@ sp_object_menu(SPObject *object, SPDesktop *desktop, GtkMenu *menu)
/* Implementation */
-#include <gtk/gtkmenuitem.h>
+#include <gtk/gtk.h>
#include <glibmm/i18n.h>
@@ -111,7 +111,7 @@ sp_item_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m)
/* Item dialog */
w = gtk_menu_item_new_with_mnemonic(_("_Object Properties..."));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_item_properties), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_item_properties), item);
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(m), w);
/* Separator */
@@ -124,21 +124,21 @@ sp_item_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m)
gtk_widget_set_sensitive(w, FALSE);
} else {
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_item_select_this), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_item_select_this), item);
}
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(m), w);
/* Create link */
w = gtk_menu_item_new_with_mnemonic(_("_Create Link"));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_item_create_link), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_item_create_link), item);
gtk_widget_set_sensitive(w, !SP_IS_ANCHOR(item));
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(m), w);
/* Set mask */
w = gtk_menu_item_new_with_mnemonic(_("Set Mask"));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_set_mask), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_set_mask), item);
if ((item && item->mask_ref && item->mask_ref->getObject()) || (item->clip_ref && item->clip_ref->getObject())) {
gtk_widget_set_sensitive(w, FALSE);
} else {
@@ -149,7 +149,7 @@ sp_item_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m)
/* Release mask */
w = gtk_menu_item_new_with_mnemonic(_("Release Mask"));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_release_mask), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_release_mask), item);
if (item && item->mask_ref && item->mask_ref->getObject()) {
gtk_widget_set_sensitive(w, TRUE);
} else {
@@ -160,7 +160,7 @@ sp_item_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m)
/* Set Clip */
w = gtk_menu_item_new_with_mnemonic(_("Set _Clip"));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_set_clip), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_set_clip), item);
if ((item && item->mask_ref && item->mask_ref->getObject()) || (item->clip_ref && item->clip_ref->getObject())) {
gtk_widget_set_sensitive(w, FALSE);
} else {
@@ -171,7 +171,7 @@ sp_item_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m)
/* Release Clip */
w = gtk_menu_item_new_with_mnemonic(_("Release C_lip"));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_release_clip), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_release_clip), item);
if (item && item->clip_ref && item->clip_ref->getObject()) {
gtk_widget_set_sensitive(w, TRUE);
} else {
@@ -312,7 +312,7 @@ sp_group_menu(SPObject *object, SPDesktop *desktop, GtkMenu *menu)
/* "Ungroup" */
w = gtk_menu_item_new_with_mnemonic(_("_Ungroup"));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_item_group_ungroup_activate), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_item_group_ungroup_activate), item);
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(menu), w);
}
@@ -352,18 +352,18 @@ sp_anchor_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m)
/* Link dialog */
w = gtk_menu_item_new_with_mnemonic(_("Link _Properties..."));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_anchor_link_properties), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_anchor_link_properties), item);
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(m), w);
/* Select item */
w = gtk_menu_item_new_with_mnemonic(_("_Follow Link"));
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_anchor_link_follow), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_anchor_link_follow), item);
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(m), w);
/* Reset transformations */
w = gtk_menu_item_new_with_mnemonic(_("_Remove Link"));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_anchor_link_remove), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_anchor_link_remove), item);
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(m), w);
}
@@ -411,13 +411,13 @@ sp_image_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m)
/* Link dialog */
w = gtk_menu_item_new_with_mnemonic(_("Image _Properties..."));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_image_image_properties), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_image_image_properties), item);
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(m), w);
w = gtk_menu_item_new_with_mnemonic(_("Edit Externally..."));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_image_image_edit), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_image_image_edit), item);
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(m), w);
Inkscape::XML::Node *ir = object->getRepr();
@@ -534,7 +534,7 @@ sp_shape_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m)
/* Item dialog */
w = gtk_menu_item_new_with_mnemonic(_("_Fill and Stroke..."));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_fill_settings), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_fill_settings), item);
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(m), w);
}
@@ -590,21 +590,21 @@ sp_text_menu(SPObject *object, SPDesktop *desktop, GtkMenu *m)
/* Fill and Stroke dialog */
w = gtk_menu_item_new_with_mnemonic(_("_Fill and Stroke..."));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_fill_settings), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_fill_settings), item);
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(m), w);
/* Edit Text dialog */
w = gtk_menu_item_new_with_mnemonic(_("_Text and Font..."));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_text_settings), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_text_settings), item);
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(m), w);
/* Spellcheck dialog */
w = gtk_menu_item_new_with_mnemonic(_("Check Spellin_g..."));
gtk_object_set_data(GTK_OBJECT(w), "desktop", desktop);
- gtk_signal_connect(GTK_OBJECT(w), "activate", GTK_SIGNAL_FUNC(sp_spellcheck_settings), item);
+ g_signal_connect(G_OBJECT(w), "activate", G_CALLBACK(sp_spellcheck_settings), item);
gtk_widget_show(w);
gtk_menu_append(GTK_MENU(m), w);
}
diff --git a/src/ui/context-menu.h b/src/ui/context-menu.h
index 36846edc3..1f8208ebe 100644
--- a/src/ui/context-menu.h
+++ b/src/ui/context-menu.h
@@ -11,7 +11,7 @@
* This code is in public domain
*/
-#include <gtk/gtkmenu.h>
+#include <gtk/gtk.h>
#include "forward.h"
#include "sp-object.h"
diff --git a/src/ui/dialog/CMakeLists.txt b/src/ui/dialog/CMakeLists.txt
deleted file mode 100644
index 98c4a47bb..000000000
--- a/src/ui/dialog/CMakeLists.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-IF(WIN32)
-SET(ui_dialog_WIN32_SRC
-filedialogimpl-win32.cpp
-)
-ELSEIF(WIN32)
- SET(ui_dialog_WIN32_SRC)
-ENDIF(WIN32)
-
-SET(ui_dialog_SRC
-aboutbox.cpp
-align-and-distribute.cpp
-color-item.cpp
-debug.cpp
-dialog.cpp
-dialog-manager.cpp
-dock-behavior.cpp
-document-metadata.cpp
-document-properties.cpp
-extension-editor.cpp
-eek-preview.cpp
-ege-paint-def.cpp
-filedialog.cpp
-filedialogimpl-gtkmm.cpp
-fill-and-stroke.cpp
-filter-effects-dialog.cpp
-find.cpp
-floating-behavior.cpp
-inkscape-preferences.cpp
-input.cpp
-livepatheffect-editor.cpp
-memory.cpp
-messages.cpp
-ocaldialogs.cpp
-print.cpp
-scriptdialog.cpp
-#session-player.cpp
-tile.cpp
-tracedialog.cpp
-transformation.cpp
-undo-history.cpp
-#whiteboard-connect.cpp
-#whiteboard-sharewithchat.cpp
-#whiteboard-sharewithuser.cpp
-${ui_dialog_WIN32_SRC}
-)
diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp
index f974ec6ce..a2169c0b3 100644
--- a/src/ui/dialog/align-and-distribute.cpp
+++ b/src/ui/dialog/align-and-distribute.cpp
@@ -20,7 +20,7 @@
# include <config.h>
#endif
-#include <gtkmm/spinbutton.h>
+#include "ui/widget/spinbutton.h"
#include "desktop-handles.h"
#include "unclump.h"
@@ -43,6 +43,7 @@
#include "util/glib-list-iterators.h"
#include "verbs.h"
#include "widgets/icon.h"
+#include "sp-root.h"
#include "align-and-distribute.h"
@@ -171,7 +172,7 @@ private :
case AlignAndDistribute::DRAWING:
{
- Geom::OptRect b = static_cast<SPItem *>( sp_desktop_document(desktop)->getRoot() )->getBboxDesktop();
+ Geom::OptRect b = sp_desktop_document(desktop)->getRoot()->getBboxDesktop();
if (b) {
mp = Geom::Point(a.mx0 * b->min()[Geom::X] + a.mx1 * b->max()[Geom::X],
a.my0 * b->min()[Geom::Y] + a.my1 * b->max()[Geom::Y]);
@@ -445,8 +446,8 @@ class ActionRemoveOverlaps : public Action {
private:
Gtk::Label removeOverlapXGapLabel;
Gtk::Label removeOverlapYGapLabel;
- Gtk::SpinButton removeOverlapXGap;
- Gtk::SpinButton removeOverlapYGap;
+ Inkscape::UI::Widget::SpinButton removeOverlapXGap;
+ Inkscape::UI::Widget::SpinButton removeOverlapYGap;
public:
ActionRemoveOverlaps(Glib::ustring const &id,
diff --git a/src/ui/dialog/color-item.cpp b/src/ui/dialog/color-item.cpp
index 014273274..89245575c 100644
--- a/src/ui/dialog/color-item.cpp
+++ b/src/ui/dialog/color-item.cpp
@@ -13,8 +13,8 @@
#include <errno.h>
#include <glibmm/i18n.h>
#include <gtkmm/label.h>
-#include <gtk/gtkdnd.h>
#include <cairo.h>
+#include <gtk/gtk.h>
#include "color-item.h"
diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp
index 0c001da4b..569dd2311 100644
--- a/src/ui/dialog/document-properties.cpp
+++ b/src/ui/dialog/document-properties.cpp
@@ -88,6 +88,7 @@ DocumentProperties::DocumentProperties()
: UI::Widget::Panel ("", "/dialogs/documentoptions", SP_VERB_DIALOG_NAMEDVIEW),
_page_page(1, 1, true, true), _page_guides(1, 1),
_page_snap(1, 1), _page_cms(1, 1), _page_scripting(1, 1),
+ _page_external_scripts(1, 1), _page_embedded_scripts(1, 1),
//---------------------------------------------------------------
_rcb_canb(_("Show page _border"), _("If set, rectangular page border is shown"), "showborder", _wr, false),
_rcb_bord(_("Border on _top of drawing"), _("If set, border is always on top of the drawing"), "borderlayer", _wr, false),
@@ -145,7 +146,7 @@ DocumentProperties::init()
Inkscape::XML::Node *repr = sp_desktop_namedview(getDesktop())->getRepr();
repr->addListener (&_repr_events, this);
- Inkscape::XML::Node *root = sp_desktop_document(getDesktop())->root->getRepr();
+ Inkscape::XML::Node *root = sp_desktop_document(getDesktop())->getRoot()->getRepr();
root->addListener (&_repr_events, this);
show_all_children();
@@ -156,7 +157,7 @@ DocumentProperties::~DocumentProperties()
{
Inkscape::XML::Node *repr = sp_desktop_namedview(getDesktop())->getRepr();
repr->removeListenerByData (this);
- Inkscape::XML::Node *root = sp_desktop_document(getDesktop())->root->getRepr();
+ Inkscape::XML::Node *root = sp_desktop_document(getDesktop())->getRoot()->getRepr();
root->removeListenerByData (this);
}
@@ -421,7 +422,7 @@ DocumentProperties::linkSelectedProfile()
xml_doc->root()->addChild(defsRepr, NULL);
}
- g_assert(SP_ROOT(desktop->doc()->root)->defs);
+ g_assert(desktop->doc()->getDefs());
defsRepr->addChild(cprofRepr, NULL);
// TODO check if this next line was sometimes needed. It being there caused an assertion.
@@ -459,6 +460,13 @@ void DocumentProperties::external_scripts_list_button_release(GdkEventButton* ev
}
}
+void DocumentProperties::embedded_scripts_list_button_release(GdkEventButton* event)
+{
+ if((event->type == GDK_BUTTON_RELEASE) && (event->button == 3)) {
+ _EmbeddedScriptsContextMenu.popup(event->button, event->time);
+ }
+}
+
void DocumentProperties::linked_profiles_list_button_release(GdkEventButton* event)
{
if((event->type == GDK_BUTTON_RELEASE) && (event->button == 3)) {
@@ -476,7 +484,7 @@ void DocumentProperties::cms_create_popup_menu(Gtk::Widget& parent, sigc::slot<v
}
-void DocumentProperties::scripting_create_popup_menu(Gtk::Widget& parent, sigc::slot<void> rem)
+void DocumentProperties::external_create_popup_menu(Gtk::Widget& parent, sigc::slot<void> rem)
{
Gtk::MenuItem* mi = Gtk::manage(new Gtk::ImageMenuItem(Gtk::Stock::REMOVE));
_ExternalScriptsContextMenu.append(*mi);
@@ -485,6 +493,15 @@ void DocumentProperties::scripting_create_popup_menu(Gtk::Widget& parent, sigc::
_ExternalScriptsContextMenu.accelerate(parent);
}
+void DocumentProperties::embedded_create_popup_menu(Gtk::Widget& parent, sigc::slot<void> rem)
+{
+ Gtk::MenuItem* mi = Gtk::manage(new Gtk::ImageMenuItem(Gtk::Stock::REMOVE));
+ _EmbeddedScriptsContextMenu.append(*mi);
+ mi->signal_activate().connect(rem);
+ mi->show();
+ _EmbeddedScriptsContextMenu.accelerate(parent);
+}
+
void DocumentProperties::removeSelectedProfile(){
Glib::ustring name;
if(_LinkedProfilesList.get_selection()) {
@@ -584,27 +601,36 @@ DocumentProperties::build_scripting()
{
_page_scripting.show();
- Gtk::Label *label_script= manage (new Gtk::Label("", Gtk::ALIGN_LEFT));
- label_script->set_markup (_("<b>External script files:</b>"));
+ _page_scripting.set_spacing (4);
+ _page_scripting.pack_start(_scripting_notebook, true, true);
+
+ _scripting_notebook.append_page(_page_external_scripts, _("External scripts"));
+ _scripting_notebook.append_page(_page_embedded_scripts, _("Embedded scripts"));
+
+ //# External scripts tab
+ _page_external_scripts.show();
+
+ Gtk::Label *label_external= manage (new Gtk::Label("", Gtk::ALIGN_LEFT));
+ label_external->set_markup (_("<b>External script files:</b>"));
_add_btn.set_label(_("Add"));
- _page_scripting.set_spacing(4);
+ _page_external_scripts.set_spacing(4);
gint row = 0;
- label_script->set_alignment(0.0);
- _page_scripting.table().attach(*label_script, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
+ label_external->set_alignment(0.0);
+ _page_external_scripts.table().attach(*label_external, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
row++;
- _page_scripting.table().attach(_ExternalScriptsListScroller, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
+ _page_external_scripts.table().attach(_ExternalScriptsListScroller, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
row++;
- Gtk::HBox* spacer = Gtk::manage(new Gtk::HBox());
- spacer->set_size_request(SPACE_SIZE_X, SPACE_SIZE_Y);
- _page_scripting.table().attach(*spacer, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
+ Gtk::HBox* spacer_external = Gtk::manage(new Gtk::HBox());
+ spacer_external->set_size_request(SPACE_SIZE_X, SPACE_SIZE_Y);
+ _page_external_scripts.table().attach(*spacer_external, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
row++;
- _page_scripting.table().attach(_script_entry, 0, 2, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
- _page_scripting.table().attach(_add_btn, 2, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
+ _page_external_scripts.table().attach(_script_entry, 0, 2, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
+ _page_external_scripts.table().attach(_add_btn, 2, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
row++;
//# Set up the External Scripts box
@@ -614,7 +640,58 @@ DocumentProperties::build_scripting()
_ExternalScriptsList.set_headers_visible(true);
// TODO restore? _ExternalScriptsList.set_fixed_height_mode(true);
- populate_external_scripts_box();
+
+ //# Embedded scripts tab
+ _page_embedded_scripts.show();
+
+ Gtk::Label *label_embedded= manage (new Gtk::Label("", Gtk::ALIGN_LEFT));
+ label_embedded->set_markup (_("<b>Embedded script files:</b>"));
+
+ _new_btn.set_label(_("New"));
+
+ _page_embedded_scripts.set_spacing(4);
+ row = 0;
+
+ label_embedded->set_alignment(0.0);
+ _page_embedded_scripts.table().attach(*label_embedded, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
+ row++;
+ _page_embedded_scripts.table().attach(_EmbeddedScriptsListScroller, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
+ row++;
+
+ Gtk::HBox* spacer_embedded = Gtk::manage(new Gtk::HBox());
+ spacer_embedded->set_size_request(SPACE_SIZE_X, SPACE_SIZE_Y);
+ _page_embedded_scripts.table().attach(*spacer_embedded, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
+ row++;
+
+ _page_embedded_scripts.table().attach(_new_btn, 2, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
+ row++;
+
+ //# Set up the Embedded Scripts box
+ _EmbeddedScriptsListStore = Gtk::ListStore::create(_EmbeddedScriptsListColumns);
+ _EmbeddedScriptsList.set_model(_EmbeddedScriptsListStore);
+ _EmbeddedScriptsList.append_column(_("Script id"), _EmbeddedScriptsListColumns.idColumn);
+ _EmbeddedScriptsList.set_headers_visible(true);
+// TODO restore? _EmbeddedScriptsList.set_fixed_height_mode(true);
+
+ //# Set up the Embedded Scripts content box
+ Gtk::Label *label_embedded_content= manage (new Gtk::Label("", Gtk::ALIGN_LEFT));
+ label_embedded_content->set_markup (_("<b>Content:</b>"));
+
+ label_embedded_content->set_alignment(0.0);
+ _page_embedded_scripts.table().attach(*label_embedded_content, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
+ row++;
+
+ _page_embedded_scripts.table().attach(_EmbeddedContentScroller, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0);
+
+ _EmbeddedContentScroller.add(_EmbeddedContent);
+ _EmbeddedContentScroller.set_shadow_type(Gtk::SHADOW_IN);
+ _EmbeddedContentScroller.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+ _EmbeddedContentScroller.set_size_request(-1, -1);
+
+ _EmbeddedScriptsList.signal_cursor_changed().connect(sigc::mem_fun(*this, &DocumentProperties::changeEmbeddedScript));
+ _EmbeddedContent.get_buffer()->signal_changed().connect(sigc::mem_fun(*this, &DocumentProperties::editEmbeddedScript));
+
+ populate_script_lists();
_ExternalScriptsListScroller.add(_ExternalScriptsList);
_ExternalScriptsListScroller.set_shadow_type(Gtk::SHADOW_IN);
@@ -623,17 +700,28 @@ DocumentProperties::build_scripting()
_add_btn.signal_clicked().connect(sigc::mem_fun(*this, &DocumentProperties::addExternalScript));
+ _EmbeddedScriptsListScroller.add(_EmbeddedScriptsList);
+ _EmbeddedScriptsListScroller.set_shadow_type(Gtk::SHADOW_IN);
+ _EmbeddedScriptsListScroller.set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_ALWAYS);
+ _EmbeddedScriptsListScroller.set_size_request(-1, 90);
+
+ _new_btn.signal_clicked().connect(sigc::mem_fun(*this, &DocumentProperties::addEmbeddedScript));
+
+
#if ENABLE_LCMS
_ExternalScriptsList.signal_button_release_event().connect_notify(sigc::mem_fun(*this, &DocumentProperties::external_scripts_list_button_release));
- scripting_create_popup_menu(_ExternalScriptsList, sigc::mem_fun(*this, &DocumentProperties::removeExternalScript));
+ external_create_popup_menu(_ExternalScriptsList, sigc::mem_fun(*this, &DocumentProperties::removeExternalScript));
+
+ _EmbeddedScriptsList.signal_button_release_event().connect_notify(sigc::mem_fun(*this, &DocumentProperties::embedded_scripts_list_button_release));
+ embedded_create_popup_menu(_EmbeddedScriptsList, sigc::mem_fun(*this, &DocumentProperties::removeEmbeddedScript));
#endif // ENABLE_LCMS
//TODO: review this observers code:
const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
if (current) {
- _ext_scripts_observer.set(SP_OBJECT(current->data)->parent);
+ _scripts_observer.set(SP_OBJECT(current->data)->parent);
}
- _ext_scripts_observer.signal_changed().connect(sigc::mem_fun(*this, &DocumentProperties::populate_external_scripts_box));
+ _scripts_observer.signal_changed().connect(sigc::mem_fun(*this, &DocumentProperties::populate_script_lists));
}
@@ -652,7 +740,24 @@ void DocumentProperties::addExternalScript(){
// inform the document, so we can undo
DocumentUndo::done(desktop->doc(), SP_VERB_EDIT_ADD_EXTERNAL_SCRIPT, _("Add external script..."));
- populate_external_scripts_box();
+ populate_script_lists();
+ }
+}
+
+void DocumentProperties::addEmbeddedScript(){
+ SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+ if (!desktop){
+ g_warning("No active desktop");
+ } else {
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
+ Inkscape::XML::Node *scriptRepr = xml_doc->createElement("svg:script");
+
+ xml_doc->root()->addChild(scriptRepr, NULL);
+
+ // inform the document, so we can undo
+ DocumentUndo::done(desktop->doc(), SP_VERB_EDIT_ADD_EMBEDDED_SCRIPT, _("Add embedded script..."));
+
+ populate_script_lists();
}
}
@@ -675,20 +780,138 @@ void DocumentProperties::removeExternalScript(){
if (name == script->xlinkhref){
//XML Tree being used directly here while it shouldn't be.
- sp_repr_unparent(obj->getRepr());
- DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_EDIT_REMOVE_EXTERNAL_SCRIPT, _("Remove external script"));
+ Inkscape::XML::Node *repr = obj->getRepr();
+ if (repr){
+ sp_repr_unparent(repr);
+
+ // inform the document, so we can undo
+ DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_EDIT_REMOVE_EXTERNAL_SCRIPT, _("Remove external script"));
+ }
+ }
+ current = g_slist_next(current);
+ }
+
+ populate_script_lists();
+}
+
+void DocumentProperties::removeEmbeddedScript(){
+ Glib::ustring id;
+ if(_EmbeddedScriptsList.get_selection()) {
+ Gtk::TreeModel::iterator i = _EmbeddedScriptsList.get_selection()->get_selected();
+
+ if(i){
+ id = (*i)[_EmbeddedScriptsListColumns.idColumn];
+ } else {
+ return;
+ }
+ }
+
+ const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
+ while ( current ) {
+ SPObject* obj = SP_OBJECT(current->data);
+ if (id == obj->getId()){
+
+ //XML Tree being used directly here while it shouldn't be.
+ Inkscape::XML::Node *repr = obj->getRepr();
+ if (repr){
+ sp_repr_unparent(repr);
+
+ // inform the document, so we can undo
+ DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_EDIT_REMOVE_EMBEDDED_SCRIPT, _("Remove embedded script"));
+ }
+ }
+ current = g_slist_next(current);
+ }
+
+ populate_script_lists();
+}
+
+void DocumentProperties::changeEmbeddedScript(){
+ Glib::ustring id;
+ if(_EmbeddedScriptsList.get_selection()) {
+ Gtk::TreeModel::iterator i = _EmbeddedScriptsList.get_selection()->get_selected();
+
+ if(i){
+ id = (*i)[_EmbeddedScriptsListColumns.idColumn];
+ } else {
+ return;
+ }
+ }
+
+ bool voidscript=true;
+ const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
+ while ( current ) {
+ SPObject* obj = SP_OBJECT(current->data);
+ if (id == obj->getId()){
+
+ int count=0;
+ for ( SPObject *child = obj->children ; child; child = child->next )
+ {
+ count++;
+ }
+
+ if (count>1)
+ g_warning("TODO: Found a script element with multiple (%d) child nodes! We must implement support for that!", count);
+
+ //XML Tree being used directly here while it shouldn't be.
+ SPObject* child = obj->firstChild();
+ //TODO: shouldnt we get all children instead of simply the first child?
+
+ if (child && child->getRepr()){
+ const gchar* content = child->getRepr()->content();
+ if (content){
+ voidscript=false;
+ _EmbeddedContent.get_buffer()->set_text(content);
+ }
+ }
}
current = g_slist_next(current);
}
- populate_external_scripts_box();
+ if (voidscript)
+ _EmbeddedContent.get_buffer()->set_text("");
+}
+
+void DocumentProperties::editEmbeddedScript(){
+ Glib::ustring id;
+ if(_EmbeddedScriptsList.get_selection()) {
+ Gtk::TreeModel::iterator i = _EmbeddedScriptsList.get_selection()->get_selected();
+
+ if(i){
+ id = (*i)[_EmbeddedScriptsListColumns.idColumn];
+ } else {
+ return;
+ }
+ }
+
+ Inkscape::XML::Document *xml_doc = SP_ACTIVE_DOCUMENT->getReprDoc();
+ const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
+ while ( current ) {
+ SPObject* obj = SP_OBJECT(current->data);
+ if (id == obj->getId()){
+
+ //XML Tree being used directly here while it shouldn't be.
+ Inkscape::XML::Node *repr = obj->getRepr();
+ if (repr){
+ SPObject *child;
+ while (NULL != (child = obj->firstChild())) child->deleteObject();
+ obj->appendChildRepr(xml_doc->createTextNode(_EmbeddedContent.get_buffer()->get_text().c_str()));
+ //TODO repr->set_content(_EmbeddedContent.get_buffer()->get_text());
+
+ // inform the document, so we can undo
+ DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_EDIT_EMBEDDED_SCRIPT, _("Edit embedded script"));
+ }
+ }
+ current = g_slist_next(current);
+ }
}
-void DocumentProperties::populate_external_scripts_box(){
+void DocumentProperties::populate_script_lists(){
_ExternalScriptsListStore->clear();
+ _EmbeddedScriptsListStore->clear();
const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
- if (current) _ext_scripts_observer.set(SP_OBJECT(current->data)->parent);
+ if (current) _scripts_observer.set(SP_OBJECT(current->data)->parent);
while ( current ) {
SPObject* obj = SP_OBJECT(current->data);
SPScript* script = (SPScript*) obj;
@@ -697,6 +920,11 @@ void DocumentProperties::populate_external_scripts_box(){
Gtk::TreeModel::Row row = *(_ExternalScriptsListStore->append());
row[_ExternalScriptsListColumns.filenameColumn] = script->xlinkhref;
}
+ else // Embedded scripts
+ {
+ Gtk::TreeModel::Row row = *(_EmbeddedScriptsListStore->append());
+ row[_EmbeddedScriptsListColumns.idColumn] = obj->getId();
+ }
current = g_slist_next(current);
}
@@ -877,7 +1105,7 @@ DocumentProperties::_handleDocumentReplaced(SPDesktop* desktop, SPDocument *docu
{
Inkscape::XML::Node *repr = sp_desktop_namedview(desktop)->getRepr();
repr->addListener(&_repr_events, this);
- Inkscape::XML::Node *root = document->root->getRepr();
+ Inkscape::XML::Node *root = document->getRoot()->getRepr();
root->addListener(&_repr_events, this);
update();
}
@@ -887,7 +1115,7 @@ DocumentProperties::_handleActivateDesktop(Inkscape::Application *, SPDesktop *d
{
Inkscape::XML::Node *repr = sp_desktop_namedview(desktop)->getRepr();
repr->addListener(&_repr_events, this);
- Inkscape::XML::Node *root = sp_desktop_document(desktop)->root->getRepr();
+ Inkscape::XML::Node *root = sp_desktop_document(desktop)->getRoot()->getRepr();
root->addListener(&_repr_events, this);
update();
}
@@ -897,7 +1125,7 @@ DocumentProperties::_handleDeactivateDesktop(Inkscape::Application *, SPDesktop
{
Inkscape::XML::Node *repr = sp_desktop_namedview(desktop)->getRepr();
repr->removeListenerByData(this);
- Inkscape::XML::Node *root = sp_desktop_document(desktop)->root->getRepr();
+ Inkscape::XML::Node *root = sp_desktop_document(desktop)->getRoot()->getRepr();
root->removeListenerByData(this);
}
diff --git a/src/ui/dialog/document-properties.h b/src/ui/dialog/document-properties.h
index b88f0db26..69729f2da 100644
--- a/src/ui/dialog/document-properties.h
+++ b/src/ui/dialog/document-properties.h
@@ -64,16 +64,22 @@ protected:
#endif // ENABLE_LCMS
void external_scripts_list_button_release(GdkEventButton* event);
- void populate_external_scripts_box();
+ void embedded_scripts_list_button_release(GdkEventButton* event);
+ void populate_script_lists();
void addExternalScript();
+ void addEmbeddedScript();
void removeExternalScript();
- void scripting_create_popup_menu(Gtk::Widget& parent, sigc::slot<void> rem);
+ void removeEmbeddedScript();
+ void changeEmbeddedScript();
+ void editEmbeddedScript();
+ void external_create_popup_menu(Gtk::Widget& parent, sigc::slot<void> rem);
+ void embedded_create_popup_menu(Gtk::Widget& parent, sigc::slot<void> rem);
void _handleDocumentReplaced(SPDesktop* desktop, SPDocument *document);
void _handleActivateDesktop(Inkscape::Application *application, SPDesktop *desktop);
void _handleDeactivateDesktop(Inkscape::Application *application, SPDesktop *desktop);
- Inkscape::XML::SignalObserver _emb_profiles_observer, _ext_scripts_observer;
+ Inkscape::XML::SignalObserver _emb_profiles_observer, _scripts_observer;
Gtk::Tooltips _tt;
Gtk::Notebook _notebook;
@@ -82,6 +88,11 @@ protected:
UI::Widget::NotebookPage _page_snap;
UI::Widget::NotebookPage _page_cms;
UI::Widget::NotebookPage _page_scripting;
+
+ Gtk::Notebook _scripting_notebook;
+ UI::Widget::NotebookPage _page_external_scripts;
+ UI::Widget::NotebookPage _page_embedded_scripts;
+
Gtk::VBox _grids_vbox;
UI::Widget::Registry _wr;
@@ -122,6 +133,7 @@ protected:
//---------------------------------------------------------------
Gtk::Button _add_btn;
+ Gtk::Button _new_btn;
class ExternalScriptsColumns : public Gtk::TreeModel::ColumnRecord
{
public:
@@ -130,11 +142,25 @@ protected:
Gtk::TreeModelColumn<Glib::ustring> filenameColumn;
};
ExternalScriptsColumns _ExternalScriptsListColumns;
+ class EmbeddedScriptsColumns : public Gtk::TreeModel::ColumnRecord
+ {
+ public:
+ EmbeddedScriptsColumns()
+ { add(idColumn); }
+ Gtk::TreeModelColumn<Glib::ustring> idColumn;
+ };
+ EmbeddedScriptsColumns _EmbeddedScriptsListColumns;
Glib::RefPtr<Gtk::ListStore> _ExternalScriptsListStore;
+ Glib::RefPtr<Gtk::ListStore> _EmbeddedScriptsListStore;
Gtk::TreeView _ExternalScriptsList;
+ Gtk::TreeView _EmbeddedScriptsList;
Gtk::ScrolledWindow _ExternalScriptsListScroller;
+ Gtk::ScrolledWindow _EmbeddedScriptsListScroller;
Gtk::Menu _ExternalScriptsContextMenu;
+ Gtk::Menu _EmbeddedScriptsContextMenu;
Gtk::Entry _script_entry;
+ Gtk::TextView _EmbeddedContent;
+ Gtk::ScrolledWindow _EmbeddedContentScroller;
//---------------------------------------------------------------
Gtk::Notebook _grids_notebook;
diff --git a/src/ui/dialog/extensions.cpp b/src/ui/dialog/extensions.cpp
index 3c778affe..27cd15e8c 100644
--- a/src/ui/dialog/extensions.cpp
+++ b/src/ui/dialog/extensions.cpp
@@ -9,7 +9,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtkdialog.h> //for GTK_RESPONSE* types
+#include <gtk/gtk.h> //for GTK_RESPONSE* types
#include <gtkmm/scrolledwindow.h>
#include "extension/db.h"
diff --git a/src/ui/dialog/filedialogimpl-gtkmm.h b/src/ui/dialog/filedialogimpl-gtkmm.h
index af607c124..1598a04d3 100644
--- a/src/ui/dialog/filedialogimpl-gtkmm.h
+++ b/src/ui/dialog/filedialogimpl-gtkmm.h
@@ -35,11 +35,7 @@
//Temporary ugly hack
//Remove this after the get_filter() calls in
//show() on both classes are fixed
-#include <gtk/gtkfilechooser.h>
-
-//Another hack
-#include <gtk/gtkentry.h>
-#include <gtk/gtkexpander.h>
+#include <gtk/gtk.h>
//Inkscape includes
#include "extension/input.h"
diff --git a/src/ui/dialog/filedialogimpl-win32.cpp b/src/ui/dialog/filedialogimpl-win32.cpp
index b3c71e8c8..e83aeccad 100644
--- a/src/ui/dialog/filedialogimpl-win32.cpp
+++ b/src/ui/dialog/filedialogimpl-win32.cpp
@@ -41,6 +41,7 @@
#include "filedialog.h"
#include "filedialogimpl-win32.h"
+#include "sp-root.h"
#include <zlib.h>
#include <cairomm/win32_surface.h>
@@ -407,7 +408,7 @@ void FileOpenDialogImplWin32::createFilterMenu()
*(filterptr++) = L'\0';
_filter_count = extension_index;
- _filter_index = 2; // Select the 2nd filter in the list - 2 is NOT the 3rd
+ _filter_index = 2; // Select the 2nd filter in the list - 2 is NOT the 3rd
}
void FileOpenDialogImplWin32::GetOpenFileName_thread()
@@ -419,7 +420,7 @@ void FileOpenDialogImplWin32::GetOpenFileName_thread()
WCHAR* current_directory_string = (WCHAR*)g_utf8_to_utf16(
_current_directory.data(), _current_directory.length(),
- NULL, NULL, NULL);
+ NULL, NULL, NULL);
memset(&ofn, 0, sizeof(ofn));
@@ -964,8 +965,10 @@ bool FileOpenDialogImplWin32::set_svg_preview()
g_free(utf8string);
// Check the document loaded properly
- if(svgDoc == NULL) return false;
- if(svgDoc->root == NULL)
+ if (svgDoc == NULL) {
+ return false;
+ }
+ if (svgDoc->getRoot() == NULL)
{
svgDoc->doUnref();
return false;
@@ -991,14 +994,14 @@ bool FileOpenDialogImplWin32::set_svg_preview()
// write object bbox to area
Geom::OptRect maybeArea(area);
svgDoc->ensureUpToDate();
- static_cast<SPItem *>(svgDoc->root)->invoke_bbox( maybeArea,
- static_cast<SPItem *>(svgDoc->root)->i2d_affine(), TRUE);
+ svgDoc->getRoot()->invoke_bbox( maybeArea,
+ svgDoc->getRoot()->i2d_affine(), TRUE);
NRArena *const arena = NRArena::create();
unsigned const key = SPItem::display_key_new(1);
- NRArenaItem *root = static_cast<SPItem*>(svgDoc->root)->invoke_show(
+ NRArenaItem *root = svgDoc->getRoot()->invoke_show(
arena, key, SP_ITEM_SHOW_DISPLAY);
NRGC gc(NULL);
@@ -1035,7 +1038,7 @@ bool FileOpenDialogImplWin32::set_svg_preview()
// Tidy up
svgDoc->doUnref();
- static_cast<SPItem*>(svgDoc->root)->invoke_hide(key);
+ svgDoc->getRoot()->invoke_hide(key);
nr_object_unref((NRObject *) arena);
// Create the GDK pixbuf
@@ -1669,7 +1672,7 @@ void FileSaveDialogImplWin32::createFilterMenu()
*(filterptr++) = 0;
_filter_count = extension_index;
- _filter_index = 1; // A value of 1 selects the 1st filter - NOT the 2nd
+ _filter_index = 1; // A value of 1 selects the 1st filter - NOT the 2nd
}
void FileSaveDialogImplWin32::GetSaveFileName_thread()
@@ -1681,7 +1684,7 @@ void FileSaveDialogImplWin32::GetSaveFileName_thread()
WCHAR* current_directory_string = (WCHAR*)g_utf8_to_utf16(
_current_directory.data(), _current_directory.length(),
- NULL, NULL, NULL);
+ NULL, NULL, NULL);
// Copy the selected file name, converting from UTF-8 to UTF-16
memset(_path_string, 0, sizeof(_path_string));
@@ -1733,14 +1736,14 @@ FileSaveDialogImplWin32::show()
_result = false;
_main_loop = g_main_loop_new(g_main_context_default(), FALSE);
- if(_main_loop != NULL)
- {
- if(Glib::Thread::create(sigc::mem_fun(*this, &FileSaveDialogImplWin32::GetSaveFileName_thread), true))
- g_main_loop_run(_main_loop);
+ if(_main_loop != NULL)
+ {
+ if(Glib::Thread::create(sigc::mem_fun(*this, &FileSaveDialogImplWin32::GetSaveFileName_thread), true))
+ g_main_loop_run(_main_loop);
- if(_result)
- appendExtension(myFilename, (Inkscape::Extension::Output*)_extension);
- }
+ if(_result)
+ appendExtension(myFilename, (Inkscape::Extension::Output*)_extension);
+ }
return _result;
}
diff --git a/src/ui/dialog/fill-and-stroke.h b/src/ui/dialog/fill-and-stroke.h
index fe72aa31c..b4be9ce59 100644
--- a/src/ui/dialog/fill-and-stroke.h
+++ b/src/ui/dialog/fill-and-stroke.h
@@ -15,11 +15,9 @@
#ifndef INKSCAPE_UI_DIALOG_FILL_AND_STROKE_H
#define INKSCAPE_UI_DIALOG_FILL_AND_STROKE_H
-#include <gtkmm/adjustment.h>
#include <gtkmm/alignment.h>
#include <gtkmm/notebook.h>
#include <gtkmm/scale.h>
-#include <gtkmm/spinbutton.h>
#include <glibmm/i18n.h>
#include "ui/widget/panel.h"
diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp
index f7911f79a..c6d81b070 100644
--- a/src/ui/dialog/filter-effects-dialog.cpp
+++ b/src/ui/dialog/filter-effects-dialog.cpp
@@ -24,7 +24,7 @@
#include <gtkmm/paned.h>
#include <gtkmm/scale.h>
#include <gtkmm/scrolledwindow.h>
-#include <gtkmm/spinbutton.h>
+#include "ui/widget/spinbutton.h"
#include <gtkmm/stock.h>
#include <gtkmm/tooltips.h>
#include <glibmm/i18n.h>
@@ -133,12 +133,12 @@ private:
const Glib::ustring _true_val, _false_val;
};
-class SpinButtonAttr : public Gtk::SpinButton, public AttrWidget
+class SpinButtonAttr : public Inkscape::UI::Widget::SpinButton, public AttrWidget
{
public:
SpinButtonAttr(double lower, double upper, double step_inc,
double climb_rate, int digits, const SPAttributeEnum a, double def, char* tip_text)
- : Gtk::SpinButton(climb_rate, digits),
+ : Inkscape::UI::Widget::SpinButton(climb_rate, digits),
AttrWidget(a, def)
{
if (tip_text) _tt.set_tip(*this, tip_text);
@@ -248,12 +248,12 @@ public:
pack_start(_s2, false, false);
}
- Gtk::SpinButton& get_spinbutton1()
+ Inkscape::UI::Widget::SpinButton& get_spinbutton1()
{
return _s1;
}
- Gtk::SpinButton& get_spinbutton2()
+ Inkscape::UI::Widget::SpinButton& get_spinbutton2()
{
return _s2;
}
@@ -285,7 +285,7 @@ public:
}
private:
- Gtk::SpinButton _s1, _s2;
+ Inkscape::UI::Widget::SpinButton _s1, _s2;
};
class ColorButton : public Gtk::ColorButton, public AttrWidget
diff --git a/src/ui/dialog/find.cpp b/src/ui/dialog/find.cpp
index bdae14c62..aa6b4081e 100644
--- a/src/ui/dialog/find.cpp
+++ b/src/ui/dialog/find.cpp
@@ -50,6 +50,7 @@
#include "sp-use.h"
#include "sp-image.h"
#include "sp-offset.h"
+#include "sp-root.h"
#include "xml/repr.h"
diff --git a/src/ui/dialog/glyphs.cpp b/src/ui/dialog/glyphs.cpp
index f3d7ed971..fc0912539 100644
--- a/src/ui/dialog/glyphs.cpp
+++ b/src/ui/dialog/glyphs.cpp
@@ -22,9 +22,7 @@
#include <gtkmm/treemodelcolumn.h>
#include <gtkmm/widget.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtkstock.h>
-#include <gtk/gtkversion.h>
+#include <gtk/gtk.h>
#include "glyphs.h"
@@ -48,7 +46,6 @@ GlyphsPanel &GlyphsPanel::getInstance()
}
-#if GLIB_CHECK_VERSION(2,14,0)
static std::map<GUnicodeScript, Glib::ustring> & getScriptToName()
{
static bool init = false;
@@ -123,8 +120,6 @@ static std::map<GUnicodeScript, Glib::ustring> & getScriptToName()
mappings[G_UNICODE_SCRIPT_PHOENICIAN] = _("Phoenician");
mappings[G_UNICODE_SCRIPT_PHAGS_PA] = _("Phags-pa");
mappings[G_UNICODE_SCRIPT_NKO] = _("N'Ko");
-
-#if GLIB_CHECK_VERSION(2,14,0)
mappings[G_UNICODE_SCRIPT_KAYAH_LI] = _("Kayah Li");
mappings[G_UNICODE_SCRIPT_LEPCHA] = _("Lepcha");
mappings[G_UNICODE_SCRIPT_REJANG] = _("Rejang");
@@ -136,11 +131,9 @@ static std::map<GUnicodeScript, Glib::ustring> & getScriptToName()
mappings[G_UNICODE_SCRIPT_CARIAN] = _("Carian");
mappings[G_UNICODE_SCRIPT_LYCIAN] = _("Lycian");
mappings[G_UNICODE_SCRIPT_LYDIAN] = _("Lydian");
-#endif // GLIB_CHECK_VERSION(2,14,0)
}
return mappings;
}
-#endif // GLIB_CHECK_VERSION(2,14,0)
typedef std::pair<gunichar, gunichar> Range;
typedef std::pair<Range, Glib::ustring> NamedRange;
@@ -337,9 +330,7 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) :
entry(0),
label(0),
insertBtn(0),
-#if GLIB_CHECK_VERSION(2,14,0)
scriptCombo(0),
-#endif // GLIB_CHECK_VERSION(2,14,0)
fsel(0),
targetDesktop(0),
deskTrack(),
@@ -366,7 +357,6 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) :
// -------------------------------
-#if GLIB_CHECK_VERSION(2,14,0)
{
Gtk::Label *label = new Gtk::Label(_("Script: "));
table->attach( *Gtk::manage(label),
@@ -391,7 +381,6 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) :
}
row++;
-#endif // GLIB_CHECK_VERSION(2,14,0)
// -------------------------------
@@ -464,10 +453,7 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) :
insertBtn = new Gtk::Button(_("Append"));
conn = insertBtn->signal_clicked().connect(sigc::mem_fun(*this, &GlyphsPanel::insertText));
instanceConns.push_back(conn);
-#if GTK_CHECK_VERSION(2,18,0)
- //gtkmm 2.18
insertBtn->set_can_default();
-#endif
insertBtn->set_sensitive(false);
box->pack_end(*Gtk::manage(insertBtn), Gtk::PACK_SHRINK);
@@ -607,13 +593,11 @@ void GlyphsPanel::glyphSelectionChanged()
Glib::ustring scriptName;
-#if GLIB_CHECK_VERSION(2,14,0)
GUnicodeScript script = g_unichar_get_script(ch);
std::map<GUnicodeScript, Glib::ustring> mappings = getScriptToName();
if (mappings.find(script) != mappings.end()) {
scriptName = mappings[script];
}
-#endif
gchar * tmp = g_strdup_printf("U+%04X %s", ch, scriptName.c_str());
label->set_text(tmp);
}
@@ -680,7 +664,6 @@ void GlyphsPanel::rebuild()
if (font) {
//double sp_font_selector_get_size (SPFontSelector *fsel);
-#if GLIB_CHECK_VERSION(2,14,0)
GUnicodeScript script = G_UNICODE_SCRIPT_INVALID_CODE;
Glib::ustring scriptName = scriptCombo->get_active_text();
std::map<GUnicodeScript, Glib::ustring> items = getScriptToName();
@@ -690,7 +673,6 @@ void GlyphsPanel::rebuild()
break;
}
}
-#endif // GLIB_CHECK_VERSION(2,14,0)
// Disconnect the model while we update it. Simple work-around for 5x+ performance boost.
Glib::RefPtr<Gtk::ListStore> tmp = Gtk::ListStore::create(*getColumns());
@@ -707,13 +689,9 @@ void GlyphsPanel::rebuild()
for (gunichar ch = lower; ch <= upper; ch++) {
int glyphId = font->MapUnicodeChar(ch);
if (glyphId > 0) {
-#if GLIB_CHECK_VERSION(2,14,0)
if ((script == G_UNICODE_SCRIPT_INVALID_CODE) || (script == g_unichar_get_script(ch))) {
present.push_back(ch);
}
-#else
- present.push_back(ch);
-#endif
}
}
diff --git a/src/ui/dialog/glyphs.h b/src/ui/dialog/glyphs.h
index d6c731dda..1440a693f 100644
--- a/src/ui/dialog/glyphs.h
+++ b/src/ui/dialog/glyphs.h
@@ -77,9 +77,7 @@ private:
Gtk::Entry *entry;
Gtk::Label *label;
Gtk::Button *insertBtn;
-#if GLIB_CHECK_VERSION(2,14,0)
Gtk::ComboBoxText *scriptCombo;
-#endif //GLIB_CHECK_VERSION(2,14,0)
Gtk::ComboBoxText *rangeCombo;
SPFontSelector *fsel;
SPDesktop *targetDesktop;
diff --git a/src/ui/dialog/guides.cpp b/src/ui/dialog/guides.cpp
index bd9777048..542fed5bb 100644
--- a/src/ui/dialog/guides.cpp
+++ b/src/ui/dialog/guides.cpp
@@ -15,9 +15,9 @@
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
+#include "guides.h"
+
#include "display/guideline.h"
-#include "helper/unit-menu.h"
-#include "helper/units.h"
#include "desktop.h"
#include "document.h"
#include "sp-guide.h"
@@ -25,14 +25,13 @@
#include "desktop-handles.h"
#include "event-context.h"
#include "widgets/desktop-widget.h"
-#include "sp-metrics.h"
#include <glibmm/i18n.h>
#include "dialogs/dialog-events.h"
#include "message-context.h"
#include "xml/repr.h"
+
#include <2geom/point.h>
#include <2geom/angle.h>
-#include "guides.h"
namespace Inkscape {
namespace UI {
@@ -40,19 +39,22 @@ namespace Dialogs {
GuidelinePropertiesDialog::GuidelinePropertiesDialog(SPGuide *guide, SPDesktop *desktop)
: _desktop(desktop), _guide(guide),
- _label_units(_("Unit:")),
- _label_X(_("X:")),
- _label_Y(_("Y:")),
- _label_degrees(_("Angle (degrees):")),
_relative_toggle(_("Rela_tive change"), _("Move and/or rotate the guide relative to current settings")),
- _adjustment_x(0.0, -1e6, 1e6, 1.0, 10.0, 10.0),
- _adjustment_y(0.0, -1e6, 1e6, 1.0, 10.0, 10.0),
- _adj_angle(0.0, -360, 360, 1.0, 10.0, 10.0),
- _unit_selector(NULL), _mode(true), _oldpos(0.,0.), _oldangle(0.0)
+ _spin_button_x(_("_X:"), "", UNIT_TYPE_LINEAR, "", "", &_unit_menu),
+ _spin_button_y(_("_Y:"), "", UNIT_TYPE_LINEAR, "", "", &_unit_menu),
+ _label_entry(_("_Label:"), _("Optionally give this guideline a name")),
+ _spin_angle(_("_Angle:"), "", UNIT_TYPE_RADIAL),
+ _mode(true), _oldpos(0.,0.), _oldangle(0.0)
{
}
+bool GuidelinePropertiesDialog::_relative_toggle_status = false; // initialize relative checkbox status for when this dialog is opened for first time
+Glib::ustring GuidelinePropertiesDialog::_angle_unit_status = "deg"; // initialize angle unit status
+
GuidelinePropertiesDialog::~GuidelinePropertiesDialog() {
+ // save current status
+ _relative_toggle_status = _relative_toggle.get_active();
+ _angle_unit_status = _spin_angle.getUnit().abbr;
}
void GuidelinePropertiesDialog::showDialog(SPGuide *guide, SPDesktop *desktop) {
@@ -61,30 +63,35 @@ void GuidelinePropertiesDialog::showDialog(SPGuide *guide, SPDesktop *desktop) {
dialog.run();
}
+void GuidelinePropertiesDialog::_colorChanged()
+{
+ const Gdk::Color c = _color.get_color();
+ char r = c.get_red()/257, g = c.get_green()/257, b = c.get_blue()/257;
+ //TODO: why 257? verify this!
+ sp_guide_set_color(*_guide, r, g, b, true);
+}
+
void GuidelinePropertiesDialog::_modeChanged()
{
_mode = !_relative_toggle.get_active();
if (!_mode) {
// relative
- _spin_angle.set_value(0);
+ _spin_angle.setValue(0);
- _spin_button_y.set_value(0);
- _spin_button_x.set_value(0);
+ _spin_button_y.setValue(0);
+ _spin_button_x.setValue(0);
} else {
// absolute
- _spin_angle.set_value(_oldangle);
+ _spin_angle.setValueKeepUnit(_oldangle, "deg");
- SPUnit const &unit = *sp_unit_selector_get_unit(SP_UNIT_SELECTOR(_unit_selector->gobj()));
- gdouble const val_y = sp_pixels_get_units(_oldpos[Geom::Y], unit);
- _spin_button_y.set_value(val_y);
- gdouble const val_x = sp_pixels_get_units(_oldpos[Geom::X], unit);
- _spin_button_x.set_value(val_x);
+ _spin_button_x.setValueKeepUnit(_oldpos[Geom::X], "px");
+ _spin_button_y.setValueKeepUnit(_oldpos[Geom::Y], "px");
}
}
void GuidelinePropertiesDialog::_onApply()
{
- double deg_angle = _spin_angle.get_value();
+ double deg_angle = _spin_angle.getValue("deg");
if (!_mode)
deg_angle += _oldangle;
Geom::Point normal;
@@ -98,17 +105,17 @@ void GuidelinePropertiesDialog::_onApply()
}
sp_guide_set_normal(*_guide, normal, true);
- SPUnit const &unit = *sp_unit_selector_get_unit(SP_UNIT_SELECTOR(_unit_selector->gobj()));
- gdouble const raw_dist_x = _spin_button_x.get_value();
- gdouble const points_x = sp_units_get_pixels(raw_dist_x, unit);
- gdouble const raw_dist_y = _spin_button_y.get_value();
- gdouble const points_y = sp_units_get_pixels(raw_dist_y, unit);
+ double const points_x = _spin_button_x.getValue("px");
+ double const points_y = _spin_button_y.getValue("px");
Geom::Point newpos(points_x, points_y);
if (!_mode)
newpos += _oldpos;
sp_guide_moveto(*_guide, newpos, true);
+ const gchar* name = _label_entry.getEntry()->get_text().c_str();
+ sp_guide_set_label(*_guide, name, true);
+
DocumentUndo::done(_guide->document, SP_VERB_NONE,
_("Set guide properties"));
}
@@ -172,52 +179,61 @@ void GuidelinePropertiesDialog::_setup() {
_label_descr.set_alignment(0, 0.5);
// indent
- _layout_table.attach(*manage(new Gtk::Label(" ")),
- 0, 1, 2, 3, Gtk::FILL, Gtk::FILL, 10);
+// _layout_table.attach(*manage(new Gtk::Label(" ")),
+// 0, 1, 2, 3, Gtk::FILL, Gtk::FILL, 10);
- // mode radio button
- _layout_table.attach(_relative_toggle,
- 1, 3, 9, 10, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
- _relative_toggle.signal_toggled().connect(sigc::mem_fun(*this, &GuidelinePropertiesDialog::_modeChanged));
+ _layout_table.attach(_label_entry,
+ 1, 3, 2, 3, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+
+ _layout_table.attach(_color,
+ 1, 3, 3, 4, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+ _color.signal_color_set().connect(sigc::mem_fun(*this, &GuidelinePropertiesDialog::_colorChanged));
- // unitmenu
+
+ // unitmenus
/* fixme: We should allow percents here too, as percents of the canvas size */
- GtkWidget *unit_selector = sp_unit_selector_new(SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE);
- sp_unit_selector_set_unit(SP_UNIT_SELECTOR(unit_selector), _desktop->namedview->doc_units);
- _unit_selector = Gtk::manage(Glib::wrap(unit_selector));
+ _unit_menu.setUnitType(UNIT_TYPE_LINEAR);
+ _unit_menu.setUnit("px");
+ if (_desktop->namedview->doc_units) {
+ _unit_menu.setUnit( sp_unit_get_abbreviation(_desktop->namedview->doc_units) );
+ }
+ _spin_angle.setUnit(_angle_unit_status);
// position spinbuttons
- sp_unit_selector_add_adjustment(SP_UNIT_SELECTOR(unit_selector), GTK_ADJUSTMENT(_adjustment_x.gobj()));
- sp_unit_selector_add_adjustment(SP_UNIT_SELECTOR(unit_selector), GTK_ADJUSTMENT(_adjustment_y.gobj()));
- _spin_button_x.configure(_adjustment_x, 1.0 , 3);
- _spin_button_x.set_numeric();
- _spin_button_y.configure(_adjustment_y, 1.0 , 3);
- _spin_button_y.set_numeric();
- _layout_table.attach(_label_X,
- 1, 2, 4, 5, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+ _spin_button_x.setDigits(3);
+ _spin_button_x.setIncrements(1.0, 10.0);
+ _spin_button_x.setRange(-1e6, 1e6);
+ _spin_button_y.setDigits(3);
+ _spin_button_y.setIncrements(1.0, 10.0);
+ _spin_button_y.setRange(-1e6, 1e6);
_layout_table.attach(_spin_button_x,
- 2, 3, 4, 5, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
- _layout_table.attach(_label_Y,
- 1, 2, 5, 6, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+ 1, 2, 4, 5, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
_layout_table.attach(_spin_button_y,
- 2, 3, 5, 6, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
- gtk_signal_connect_object(GTK_OBJECT(_spin_button_x.gobj()), "activate",
- GTK_SIGNAL_FUNC(gtk_window_activate_default),
- gobj());
+ 1, 2, 5, 6, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
- _layout_table.attach(_label_units,
- 1, 2, 6, 7, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
- _layout_table.attach(*_unit_selector,
- 2, 3, 6, 7, Gtk::FILL, Gtk::FILL);
+ _layout_table.attach(_unit_menu,
+ 2, 3, 4, 5, Gtk::FILL, Gtk::FILL);
// angle spinbutton
- _spin_angle.configure(_adj_angle, 5.0 , 3);
- _spin_angle.set_numeric();
- _spin_angle.show();
- _layout_table.attach(_label_degrees,
- 1, 2, 8, 9, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+ _spin_angle.setDigits(3);
+ _spin_angle.setIncrements(1.0, 10.0);
+ _spin_angle.setRange(-3600., 3600.);
_layout_table.attach(_spin_angle,
- 2, 3, 8, 9, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+ 1, 3, 6, 7, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+
+ // mode radio button
+ _layout_table.attach(_relative_toggle,
+ 1, 3, 7, 8, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+ _relative_toggle.signal_toggled().connect(sigc::mem_fun(*this, &GuidelinePropertiesDialog::_modeChanged));
+ _relative_toggle.set_active(_relative_toggle_status);
+
+ // don't know what this exactly does, but it results in that the dialog closes when entering a value and pressing enter (see LP bug 484187)
+ g_signal_connect_swapped(G_OBJECT(_spin_button_x.getWidget()->gobj()), "activate",
+ G_CALLBACK(gtk_window_activate_default), gobj());
+ g_signal_connect_swapped(G_OBJECT(_spin_button_y.getWidget()->gobj()), "activate",
+ G_CALLBACK(gtk_window_activate_default), gobj());
+ g_signal_connect_swapped(G_OBJECT(_spin_angle.getWidget()->gobj()), "activate",
+ G_CALLBACK(gtk_window_activate_default), gobj());
// dialog
@@ -249,17 +265,20 @@ void GuidelinePropertiesDialog::_setup() {
g_free(label);
}
+ // init name entry
+ _label_entry.getEntry()->set_text(_guide->label ? _guide->label : "");
+ Gdk::Color c;
+ c.set_rgb_p(((_guide->color>>24)&0xff) / 255.0, ((_guide->color>>16)&0xff) / 255.0, ((_guide->color>>8)&0xff) / 255.0);
+ _color.set_color(c);
+
_modeChanged(); // sets values of spinboxes.
if ( _oldangle == 90. || _oldangle == 270. || _oldangle == -90. || _oldangle == -270.) {
- _spin_button_x.grab_focus();
- _spin_button_x.select_region(0, 20);
+ _spin_button_x.grabFocusAndSelectEntry();
} else if ( _oldangle == 0. || _oldangle == 180. || _oldangle == -180.) {
- _spin_button_y.grab_focus();
- _spin_button_y.select_region(0, 20);
+ _spin_button_y.grabFocusAndSelectEntry();
} else {
- _spin_angle.grab_focus();
- _spin_angle.select_region(0, 20);
+ _spin_angle.grabFocusAndSelectEntry();
}
set_position(Gtk::WIN_POS_MOUSE);
diff --git a/src/ui/dialog/guides.h b/src/ui/dialog/guides.h
index 2817e2644..88d0310b9 100644
--- a/src/ui/dialog/guides.h
+++ b/src/ui/dialog/guides.h
@@ -20,11 +20,24 @@
#include <gtkmm/label.h>
#include <gtkmm/stock.h>
#include <gtkmm/adjustment.h>
+#include <gtkmm/colorbutton.h>
#include "ui/widget/button.h"
+#include "ui/widget/spinbutton.h"
+#include "ui/widget/unit-menu.h"
+#include "ui/widget/scalar-unit.h"
+#include "ui/widget/entry.h"
#include <2geom/point.h>
+class SPGuide;
+class SPDesktop;
+
namespace Inkscape {
namespace UI {
+
+namespace Widget {
+ class UnitMenu;
+};
+
namespace Dialogs {
class GuidelinePropertiesDialog : public Gtk::Dialog {
@@ -45,6 +58,7 @@ protected:
void _response(gint response);
void _modeChanged();
+ void _colorChanged();
private:
GuidelinePropertiesDialog(GuidelinePropertiesDialog const &); // no copy
@@ -55,20 +69,17 @@ private:
Gtk::Table _layout_table;
Gtk::Label _label_name;
Gtk::Label _label_descr;
- Gtk::Label _label_units;
- Gtk::Label _label_X;
- Gtk::Label _label_Y;
- Gtk::Label _label_degrees;
Inkscape::UI::Widget::CheckButton _relative_toggle;
- Gtk::Adjustment _adjustment_x;
- Gtk::SpinButton _spin_button_x;
- Gtk::Adjustment _adjustment_y;
- Gtk::SpinButton _spin_button_y;
+ static bool _relative_toggle_status; // remember the status of the _relative_toggle_status button across instances
+ Inkscape::UI::Widget::UnitMenu _unit_menu;
+ Inkscape::UI::Widget::ScalarUnit _spin_button_x;
+ Inkscape::UI::Widget::ScalarUnit _spin_button_y;
+ Inkscape::UI::Widget::Entry _label_entry;
+ Gtk::ColorButton _color;
- Gtk::Adjustment _adj_angle;
- Gtk::SpinButton _spin_angle;
+ Inkscape::UI::Widget::ScalarUnit _spin_angle;
+ static Glib::ustring _angle_unit_status; // remember the status of the _relative_toggle_status button across instances
- Gtk::Widget *_unit_selector;
bool _mode;
Geom::Point _oldpos;
gdouble _oldangle;
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index 8681ed98f..3c272e691 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -7,7 +7,7 @@
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
* Bruno Dilly <bruno.dilly@gmail.com>
*
- * Copyright (C) 2004-2007 Authors
+ * Copyright (C) 2004-2011 Authors
*
* Released under GNU GPL. Read the file 'COPYING' for more information.
*/
@@ -21,7 +21,7 @@
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/alignment.h>
-#include <gtk/gtkicontheme.h>
+#include <gtk/gtk.h>
#include "preferences.h"
#include "inkscape-preferences.h"
@@ -38,6 +38,7 @@
#include "selection-chemistry.h"
#include "xml/repr.h"
#include "ui/widget/style-swatch.h"
+#include "ui/widget/spinbutton.h"
#include "display/nr-filter-gaussian.h"
#include "display/nr-filter-types.h"
#include "color-profile-fns.h"
@@ -70,7 +71,7 @@ InkscapePreferences::InkscapePreferences()
_current_page(0)
{
//get the width of a spinbutton
- Gtk::SpinButton* sb = new Gtk::SpinButton;
+ Inkscape::UI::Widget::SpinButton* sb = new Inkscape::UI::Widget::SpinButton;
sb->set_width_chars(6);
_getContents()->add(*sb);
show_all_children();
@@ -248,17 +249,17 @@ void InkscapePreferences::initPageSteps()
{
this->AddPage(_page_steps, _("Steps"), PREFS_PAGE_STEPS);
- _steps_arrow.init ( "/options/nudgedistance/value", 0.0, 1000.0, 0.01, 1.0, 2.0, false, false);
+ _steps_arrow.init ( "/options/nudgedistance/value", 0.0, 1000.0, 0.01, 2.0, UNIT_TYPE_LINEAR, "px");
//nudgedistance is limited to 1000 in select-context.cpp: use the same limit here
- _page_steps.add_line( false, _("Arrow keys move by:"), _steps_arrow, _("px"),
- _("Pressing an arrow key moves selected object(s) or node(s) by this distance (in px units)"), false);
- _steps_scale.init ( "/options/defaultscale/value", 0.0, 1000.0, 0.01, 1.0, 2.0, false, false);
+ _page_steps.add_line( false, _("Arrow keys move by:"), _steps_arrow, "",
+ _("Pressing an arrow key moves selected object(s) or node(s) by this distance"), false);
+ _steps_scale.init ( "/options/defaultscale/value", 0.0, 1000.0, 0.01, 2.0, UNIT_TYPE_LINEAR, "px");
//defaultscale is limited to 1000 in select-context.cpp: use the same limit here
- _page_steps.add_line( false, _("> and < scale by:"), _steps_scale, _("px"),
- _("Pressing > or < scales selection up or down by this increment (in px units)"), false);
- _steps_inset.init ( "/options/defaultoffsetwidth/value", 0.0, 3000.0, 0.01, 1.0, 2.0, false, false);
- _page_steps.add_line( false, _("Inset/Outset by:"), _steps_inset, _("px"),
- _("Inset and Outset commands displace the path by this distance (in px units)"), false);
+ _page_steps.add_line( false, _("> and < scale by:"), _steps_scale, "",
+ _("Pressing > or < scales selection up or down by this increment"), false);
+ _steps_inset.init ( "/options/defaultoffsetwidth/value", 0.0, 3000.0, 0.01, 2.0, UNIT_TYPE_LINEAR, "px");
+ _page_steps.add_line( false, _("Inset/Outset by:"), _steps_inset, "",
+ _("Inset and Outset commands displace the path by this distance"), false);
_steps_compass.init ( _("Compass-like display of angles"), "/options/compassangledisplay/value", true);
_page_steps.add_line( false, "", _steps_compass, "",
_("When on, angles are displayed with 0 at north, 0 to 360 range, positive clockwise; otherwise with 0 at east, -180 to 180 range, positive counterclockwise"));
@@ -269,6 +270,9 @@ void InkscapePreferences::initPageSteps()
_steps_rot_snap.init("/options/rotationsnapsperpi/value", labels, values, num_items, 12);
_page_steps.add_line( false, _("Rotation snaps every:"), _steps_rot_snap, _("degrees"),
_("Rotating with Ctrl pressed snaps every that much degrees; also, pressing [ or ] rotates by this amount"), false);
+ _steps_rot_relative.init ( _("Relative snapping of guideline angles"), "/options/relativeguiderotationsnap/value", false);
+ _page_steps.add_line( false, "", _steps_rot_relative, "",
+ _("When on, the snap angles when rotating a guideline will be relative to the original angle"));
_steps_zoom.init ( "/options/zoomincrement/value", 101.0, 500.0, 1.0, 1.0, 1.414213562, true, true);
_page_steps.add_line( false, _("Zoom in/out by:"), _steps_zoom, _("%"),
_("Zoom tool click, +/- keys, and middle click zoom in and out by this multiplier"), false);
@@ -479,6 +483,12 @@ void InkscapePreferences::initPageTools()
AddSelcueCheckbox(_page_zoom, "/tools/zoom", true);
AddGradientCheckbox(_page_zoom, "/tools/zoom", false);
+ //Measure
+ this->AddPage(_page_measure, _("Measure"), iter_tools, PREFS_PAGE_TOOLS_MEASURE);
+ PrefCheckButton* cb = Gtk::manage( new PrefCheckButton);
+ cb->init ( _("Ignore first and last points"), "/tools/measure/ignore_1st_and_last", true);
+ _page_measure.add_line( false, "", *cb, "", _("The start and end of the measurement tool's control line will not be considered for calculating lengths. Only lengths between actual curve intersections will be displayed."));
+
//Shapes
Gtk::TreeModel::iterator iter_shapes = this->AddPage(_page_shapes, _("Shapes"), iter_tools, PREFS_PAGE_TOOLS_SHAPES);
_path_shapes = _page_list.get_model()->get_path(iter_shapes);
@@ -1123,6 +1133,31 @@ void InkscapePreferences::initPageUI()
"gl", "he", "hu", "id", "it", "ja", "km", "rw", "ko", "lt", "mk", "mn", "ne", "nb", "nn", "pa",
"pl", "pt", "pt_BR", "ro", "ru", "sr", "sr@latin", "sk", "sl", "es", "es_MX", "sv", "te_IN", "th", "tr", "uk", "vi" };
+ {
+ // sorting languages according to translated name
+ int i = 0;
+ int j = 0;
+ int n = sizeof( languages ) / sizeof( Glib::ustring );
+ Glib::ustring key_language;
+ Glib::ustring key_langValue;
+ for ( j = 1 ; j < n ; j++ ) {
+ key_language = languages[j];
+ key_langValue = langValues[j];
+ i = j-1;
+ while ( i >= 0
+ && ( ( languages[i] > key_language
+ && langValues[i] != "" )
+ || key_langValue == "" ) )
+ {
+ languages[i+1] = languages[i];
+ langValues[i+1] = langValues[i];
+ i--;
+ }
+ languages[i+1] = key_language;
+ langValues[i+1] = key_langValue;
+ }
+ }
+
_ui_languages.init( "/ui/language", languages, langValues, G_N_ELEMENTS(languages), languages[0]);
_page_ui.add_line( false, _("Language (requires restart):"), _ui_languages, "",
_("Set the language for menus and number formats"), false);
@@ -1177,7 +1212,7 @@ void InkscapePreferences::initPageSave()
{
_save_use_current_dir.init( _("Use current directory for \"Save As ...\""), "/dialogs/save_as/use_current_dir", true);
_page_save.add_line( false, "", _save_use_current_dir, "",
- _("When this option is on, the \"Save as...\" dialog will always open in the directory where the currently open document is; when it's off, it will open in the directory where you last saved a file using that dialog"), true);
+ _("When this option is on, the \"Save as...\" and \"Save a Copy\" dialogs will always open in the directory where the currently open document is; when it's off, each will open in the directory where you last saved a file using it"), true);
// Autosave options
diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h
index a20278551..13851e525 100644
--- a/src/ui/dialog/inkscape-preferences.h
+++ b/src/ui/dialog/inkscape-preferences.h
@@ -46,6 +46,7 @@ enum {
PREFS_PAGE_TOOLS_TWEAK,
PREFS_PAGE_TOOLS_SPRAY,
PREFS_PAGE_TOOLS_ZOOM,
+ PREFS_PAGE_TOOLS_MEASURE,
PREFS_PAGE_TOOLS_SHAPES,
PREFS_PAGE_TOOLS_SHAPES_RECT,
PREFS_PAGE_TOOLS_SHAPES_3DBOX,
@@ -140,6 +141,7 @@ protected:
UI::Widget::DialogPage _page_tweak;
UI::Widget::DialogPage _page_spray;
UI::Widget::DialogPage _page_zoom;
+ UI::Widget::DialogPage _page_measure;
UI::Widget::DialogPage _page_shapes;
UI::Widget::DialogPage _page_pencil;
UI::Widget::DialogPage _page_pen;
@@ -177,11 +179,12 @@ protected:
UI::Widget::PrefCheckButton _snap_mouse_pointer;
UI::Widget::PrefCombo _steps_rot_snap;
+ UI::Widget::PrefCheckButton _steps_rot_relative;
UI::Widget::PrefCheckButton _steps_compass;
- UI::Widget::PrefSpinButton _steps_arrow;
- UI::Widget::PrefSpinButton _steps_scale;
- UI::Widget::PrefSpinButton _steps_inset;
- UI::Widget::PrefSpinButton _steps_zoom;
+ UI::Widget::PrefSpinUnit _steps_arrow;
+ UI::Widget::PrefSpinUnit _steps_scale;
+ UI::Widget::PrefSpinUnit _steps_inset;
+ UI::Widget::PrefSpinButton _steps_zoom;
UI::Widget::PrefRadioButton _t_sel_trans_obj;
UI::Widget::PrefRadioButton _t_sel_trans_outl;
@@ -371,6 +374,7 @@ protected:
static void AddSelcueCheckbox(UI::Widget::DialogPage& p, Glib::ustring const &prefs_path, bool def_value);
static void AddGradientCheckbox(UI::Widget::DialogPage& p, Glib::ustring const &prefs_path, bool def_value);
static void AddConvertGuidesCheckbox(UI::Widget::DialogPage& p, Glib::ustring const &prefs_path, bool def_value);
+ static void AddFirstAndLastCheckbox(UI::Widget::DialogPage& p, Glib::ustring const &prefs_path, bool def_value);
static void AddDotSizeSpinbutton(UI::Widget::DialogPage& p, Glib::ustring const &prefs_path, double def_value);
static void AddNewObjectsStyle(UI::Widget::DialogPage& p, Glib::ustring const &prefs_path, const gchar* banner = NULL);
diff --git a/src/ui/dialog/layers.cpp b/src/ui/dialog/layers.cpp
index 0eca5bbca..8d2d25162 100644
--- a/src/ui/dialog/layers.cpp
+++ b/src/ui/dialog/layers.cpp
@@ -13,8 +13,7 @@
# include <config.h>
#endif
-#include <gtk/gtkstock.h>
-#include <gtk/gtkmain.h>
+#include <gtk/gtk.h>
#include <gtkmm/widget.h>
#include <gtkmm/icontheme.h>
#include <glibmm/i18n.h>
@@ -35,6 +34,7 @@
#include "verbs.h"
#include "widgets/icon.h"
#include "xml/repr.h"
+#include "sp-root.h"
#include "layers.h"
@@ -293,7 +293,7 @@ bool LayersPanel::_checkForUpdated(const Gtk::TreePath &/*path*/, const Gtk::Tre
}
void LayersPanel::_selectLayer( SPObject *layer ) {
- if ( !layer || (_desktop && _desktop->doc() && (layer == _desktop->doc()->root)) ) {
+ if ( !layer || (_desktop && _desktop->doc() && (layer == _desktop->doc()->getRoot())) ) {
if ( _tree.get_selection()->count_selected_rows() != 0 ) {
_tree.get_selection()->unselect_all();
}
@@ -328,7 +328,7 @@ void LayersPanel::_layersChanged()
// g_message("_layersChanged()");
if (_desktop) {
SPDocument* document = _desktop->doc();
- SPObject* root = document->root;
+ SPRoot* root = document->getRoot();
if ( root ) {
_selectedConnection.block();
if ( _desktop->layer_manager && _desktop->layer_manager->includes( root ) ) {
@@ -402,7 +402,7 @@ void LayersPanel::_pushTreeSelectionToCurrent()
_desktop->layer_manager->setCurrentLayer( inTree );
}
} else {
- _desktop->layer_manager->setCurrentLayer( _desktop->doc()->root );
+ _desktop->layer_manager->setCurrentLayer( _desktop->doc()->getRoot() );
}
}
}
diff --git a/src/ui/dialog/layers.h b/src/ui/dialog/layers.h
index b7e81480c..018357425 100644
--- a/src/ui/dialog/layers.h
+++ b/src/ui/dialog/layers.h
@@ -19,7 +19,7 @@
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/box.h>
#include <gtkmm/buttonbox.h>
-#include <gtkmm/spinbutton.h>
+#include "ui/widget/spinbutton.h"
#include <gtkmm/notebook.h>
//#include "ui/previewholder.h"
@@ -117,7 +117,7 @@ private:
Gtk::HButtonBox _buttonsRow;
Gtk::ScrolledWindow _scroller;
Gtk::Menu _popupMenu;
- Gtk::SpinButton _spinBtn;
+ Inkscape::UI::Widget::SpinButton _spinBtn;
Gtk::VBox _layersPage;
UI::Widget::StyleSubject::CurrentLayer _subject;
diff --git a/src/ui/dialog/ocaldialogs.h b/src/ui/dialog/ocaldialogs.h
index 85aefade8..a7dfaa5cd 100644
--- a/src/ui/dialog/ocaldialogs.h
+++ b/src/ui/dialog/ocaldialogs.h
@@ -33,11 +33,9 @@
//Temporary ugly hack
//Remove this after the get_filter() calls in
//show() on both classes are fixed
-#include <gtk/gtkfilechooser.h>
+#include <gtk/gtk.h>
//Another hack
-#include <gtk/gtkentry.h>
-#include <gtk/gtkexpander.h>
#ifdef WITH_GNOME_VFS
#include <libgnomevfs/gnome-vfs-init.h> // gnome_vfs_initialized
#include<libgnomevfs/gnome-vfs.h>
diff --git a/src/ui/dialog/print.h b/src/ui/dialog/print.h
index cc27955cb..0184bc783 100644
--- a/src/ui/dialog/print.h
+++ b/src/ui/dialog/print.h
@@ -13,7 +13,7 @@
#include <glibmm/i18n.h>
#include <gtkmm/printoperation.h> // GtkMM
-#include <gtk/gtkprintoperation.h> // Gtk
+#include <gtk/gtk.h> // Gtk
#include "desktop.h"
#include "sp-item.h"
diff --git a/src/ui/dialog/session-player.cpp b/src/ui/dialog/session-player.cpp
index d8ff8ca56..040c1419b 100644
--- a/src/ui/dialog/session-player.cpp
+++ b/src/ui/dialog/session-player.cpp
@@ -15,7 +15,7 @@
#include <glibmm.h>
#include <glibmm/i18n.h>
-#include <gtk/gtkdialog.h>
+#include <gtk/gtk.h>
#include <gtkmm.h>
#include "inkscape.h"
diff --git a/src/ui/dialog/session-player.h b/src/ui/dialog/session-player.h
index 9c10f264f..2d235cd25 100644
--- a/src/ui/dialog/session-player.h
+++ b/src/ui/dialog/session-player.h
@@ -75,7 +75,7 @@ private:
Gtk::Tooltips _tooltips;
Gtk::Toolbar _playbackcontrols;
Gtk::Adjustment _delay;
- Gtk::SpinButton _delayentry;
+ Widget::SpinButton _delayentry;
Gtk::Frame _filemanager;
Gtk::VBox _fm;
diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp
index 2d1b5ae39..fbca0bf10 100644
--- a/src/ui/dialog/svg-fonts-dialog.cpp
+++ b/src/ui/dialog/svg-fonts-dialog.cpp
@@ -16,7 +16,6 @@
#ifdef ENABLE_SVG_FONTS
-#include <2geom/pathvector.h>
#include "document-private.h"
#include <gtkmm/notebook.h>
#include <glibmm/i18n.h>
@@ -137,7 +136,7 @@ Gtk::HBox* SvgFontsDialog::AttrCombo(gchar* lbl, const SPAttributeEnum /*attr*/)
Gtk::HBox* SvgFontsDialog::AttrSpin(gchar* lbl){
Gtk::HBox* hbox = Gtk::manage(new Gtk::HBox());
hbox->add(* Gtk::manage(new Gtk::Label(lbl)) );
- hbox->add(* Gtk::manage(new Gtk::SpinBox()) );
+ hbox->add(* Gtk::manage(new Inkscape::UI::Widget::SpinBox()) );
hbox->show_all();
return hbox;
}*/
@@ -162,7 +161,10 @@ void GlyphComboBox::update(SPFont* spfont){
}
void SvgFontsDialog::on_kerning_value_changed(){
- if (!this->kerning_pair) return;
+ if (!get_selected_kerning_pair()) {
+ return;
+ }
+
SPDocument* document = sp_desktop_document(this->getDesktop());
//TODO: I am unsure whether this is the correct way of calling SPDocumentUndo::maybe_done
@@ -471,6 +473,24 @@ void SvgFontsDialog::add_glyph(){
update_glyphs();
}
+Geom::PathVector
+SvgFontsDialog::flip_coordinate_system(Geom::PathVector pathv){
+ double units_per_em = 1000;
+ SPObject* obj;
+ for (obj = get_selected_spfont()->children; obj; obj=obj->next){
+ if (SP_IS_FONTFACE(obj)){
+ //XML Tree being directly used here while it shouldn't be.
+ sp_repr_get_double(obj->getRepr(), "units_per_em", &units_per_em);
+ }
+ }
+
+ double baseline_offset = units_per_em - get_selected_spfont()->horiz_origin_y;
+
+ //This matrix flips y-axis and places the origin at baseline
+ Geom::Affine m(Geom::Coord(1),Geom::Coord(0),Geom::Coord(0),Geom::Coord(-1),Geom::Coord(0),Geom::Coord(baseline_offset));
+ return pathv*m;
+}
+
void SvgFontsDialog::set_glyph_description_from_selected_path(){
SPDesktop* desktop = this->getDesktop();
if (!desktop) {
@@ -495,22 +515,17 @@ void SvgFontsDialog::set_glyph_description_from_selected_path(){
return;
} //TODO: //Is there a better way to tell it to to the user?
- Geom::PathVector pathv = sp_svg_read_pathv(node->attribute("d"));
-
- //This matrix flips the glyph vertically
- Geom::Affine m(Geom::Coord(1),Geom::Coord(0),Geom::Coord(0),Geom::Coord(-1),Geom::Coord(0),Geom::Coord(0));
- pathv*=m;
- //then we offset it
- pathv+=Geom::Point(Geom::Coord(0),Geom::Coord(get_selected_spfont()->horiz_adv_x));
-
SPGlyph* glyph = get_selected_glyph();
if (!glyph){
char *msg = _("No glyph selected in the SVGFonts dialog.");
msgStack->flash(Inkscape::ERROR_MESSAGE, msg);
return;
}
+
+ Geom::PathVector pathv = sp_svg_read_pathv(node->attribute("d"));
+
//XML Tree being directly used here while it shouldn't be.
- glyph->getRepr()->setAttribute("d", (char*) sp_svg_write_path (pathv));
+ glyph->getRepr()->setAttribute("d", (char*) sp_svg_write_path (flip_coordinate_system(pathv)));
DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Set glyph curves"));
update_glyphs();
@@ -542,19 +557,12 @@ void SvgFontsDialog::missing_glyph_description_from_selected_path(){
Geom::PathVector pathv = sp_svg_read_pathv(node->attribute("d"));
- //This matrix flips the glyph vertically
- Geom::Affine m(Geom::Coord(1),Geom::Coord(0),Geom::Coord(0),Geom::Coord(-1),Geom::Coord(0),Geom::Coord(0));
- pathv*=m;
- //then we offset it
-// pathv+=Geom::Point(Geom::Coord(0),Geom::Coord(get_selected_spfont()->horiz_adv_x));
- pathv+=Geom::Point(Geom::Coord(0),Geom::Coord(1000));//TODO: use here the units-per-em attribute?
-
SPObject* obj;
for (obj = get_selected_spfont()->children; obj; obj=obj->next){
if (SP_IS_MISSING_GLYPH(obj)){
//XML Tree being directly used here while it shouldn't be.
- obj->getRepr()->setAttribute("d", (char*) sp_svg_write_path (pathv));
+ obj->getRepr()->setAttribute("d", (char*) sp_svg_write_path (flip_coordinate_system(pathv)));
DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Set glyph curves"));
}
}
@@ -786,7 +794,7 @@ SPFont *new_font(SPDocument *document)
{
g_return_val_if_fail(document != NULL, NULL);
- SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
+ SPDefs *defs = document->getDefs();
Inkscape::XML::Document *xml_doc = document->getReprDoc();
@@ -903,7 +911,7 @@ SvgFontsDialog::SvgFontsDialog()
_FontsList.signal_button_release_event().connect_notify(sigc::mem_fun(*this, &SvgFontsDialog::fonts_list_button_release));
create_fonts_popup_menu(_FontsList, sigc::mem_fun(*this, &SvgFontsDialog::remove_selected_font));
- _defs_observer.set(SP_DOCUMENT_DEFS(sp_desktop_document(this->getDesktop())));
+ _defs_observer.set(sp_desktop_document(this->getDesktop())->getDefs());
_defs_observer.signal_changed().connect(sigc::mem_fun(*this, &SvgFontsDialog::update_fonts));
_getContents()->show_all();
diff --git a/src/ui/dialog/svg-fonts-dialog.h b/src/ui/dialog/svg-fonts-dialog.h
index e819187a1..8c2bdc1a4 100644
--- a/src/ui/dialog/svg-fonts-dialog.h
+++ b/src/ui/dialog/svg-fonts-dialog.h
@@ -11,7 +11,9 @@
#ifndef INKSCAPE_UI_DIALOG_SVG_FONTS_H
#define INKSCAPE_UI_DIALOG_SVG_FONTS_H
+#include <2geom/pathvector.h>
#include "ui/widget/panel.h"
+#include "ui/widget/spinbutton.h"
#include "sp-font.h"
#include "sp-font-face.h"
#include "verbs.h"
@@ -77,6 +79,7 @@ public:
void on_kerning_value_changed();
void on_setwidth_changed();
void add_font();
+ Geom::PathVector flip_coordinate_system(Geom::PathVector pathv);
//TODO: AttrEntry is currently unused. Should we remove it?
class AttrEntry : public Gtk::HBox
@@ -206,7 +209,7 @@ private:
SvgFontDrawingArea _font_da, kerning_preview;
GlyphComboBox first_glyph, second_glyph;
SPGlyphKerning* kerning_pair;
- Gtk::SpinButton setwidth_spin;
+ Inkscape::UI::Widget::SpinButton setwidth_spin;
Gtk::HScale kerning_slider;
class EntryWidget : public Gtk::HBox
diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp
index 0fa791366..ad3b79630 100644
--- a/src/ui/dialog/swatches.cpp
+++ b/src/ui/dialog/swatches.cpp
@@ -17,12 +17,9 @@
#include <map>
#include <algorithm>
-#include <gtk/gtkdialog.h> //for GTK_RESPONSE* types
-#include <gtk/gtkdnd.h>
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtkseparatormenuitem.h>
+#include <gtk/gtk.h> //for GTK_RESPONSE* types
#include <glibmm/i18n.h>
+#include <glibmm/main.h>
#include <gdkmm/pixbuf.h>
#include "color-item.h"
@@ -63,8 +60,6 @@ namespace Dialogs {
void _loadPaletteFile( gchar const *filename );
-class DocTrack;
-
std::vector<SwatchPage*> possible;
static std::map<SPDocument*, SwatchPage*> docPalettes;
static std::vector<DocTrack*> docTrackings;
@@ -715,14 +710,31 @@ class DocTrack
public:
DocTrack(SPDocument *doc, sigc::connection &gradientRsrcChanged, sigc::connection &defsChanged, sigc::connection &defsModified) :
doc(doc),
+ updatePending(false),
+ lastGradientUpdate(0.0),
gradientRsrcChanged(gradientRsrcChanged),
defsChanged(defsChanged),
defsModified(defsModified)
{
+ if ( !timer ) {
+ timer = new Glib::Timer();
+ refreshTimer = Glib::signal_timeout().connect( sigc::ptr_fun(handleTimerCB), 33 );
+ }
+ timerRefCount++;
}
~DocTrack()
{
+ timerRefCount--;
+ if ( timerRefCount <= 0 ) {
+ refreshTimer.disconnect();
+ timerRefCount = 0;
+ if ( timer ) {
+ timer->stop();
+ delete timer;
+ timer = 0;
+ }
+ }
if (doc) {
gradientRsrcChanged.disconnect();
defsChanged.disconnect();
@@ -730,7 +742,22 @@ public:
}
}
+ static bool handleTimerCB();
+
+ /**
+ * Checks if update should be queued or executed immediately.
+ *
+ * @return true if the update was queued and should not be immediately executed.
+ */
+ static bool queueUpdateIfNeeded(SPDocument *doc);
+
+ static Glib::Timer *timer;
+ static int timerRefCount;
+ static sigc::connection refreshTimer;
+
SPDocument *doc;
+ bool updatePending;
+ double lastGradientUpdate;
sigc::connection gradientRsrcChanged;
sigc::connection defsChanged;
sigc::connection defsModified;
@@ -740,6 +767,58 @@ private:
DocTrack &operator=(DocTrack const &); // no assign
};
+Glib::Timer *DocTrack::timer = 0;
+int DocTrack::timerRefCount = 0;
+sigc::connection DocTrack::refreshTimer;
+
+static const double DOC_UPDATE_THREASHOLD = 0.090;
+
+bool DocTrack::handleTimerCB()
+{
+ double now = timer->elapsed();
+
+ std::vector<DocTrack *> needCallback;
+ for (std::vector<DocTrack *>::iterator it = docTrackings.begin(); it != docTrackings.end(); ++it) {
+ DocTrack *track = *it;
+ if ( track->updatePending && ( (now - track->lastGradientUpdate) >= DOC_UPDATE_THREASHOLD) ) {
+ needCallback.push_back(track);
+ }
+ }
+
+ for (std::vector<DocTrack *>::iterator it = needCallback.begin(); it != needCallback.end(); ++it) {
+ DocTrack *track = *it;
+ if ( std::find(docTrackings.begin(), docTrackings.end(), track) != docTrackings.end() ) { // Just in case one gets deleted while we are looping
+ // Note: calling handleDefsModified will call queueUpdateIfNeeded and thus update the time and flag.
+ SwatchesPanel::handleDefsModified(track->doc);
+ }
+ }
+
+ return true;
+}
+
+bool DocTrack::queueUpdateIfNeeded( SPDocument *doc )
+{
+ bool deferProcessing = false;
+ for (std::vector<DocTrack*>::iterator it = docTrackings.begin(); it != docTrackings.end(); ++it) {
+ DocTrack *track = *it;
+ if ( track->doc == doc ) {
+ double now = timer->elapsed();
+ double elapsed = now - track->lastGradientUpdate;
+
+ if ( elapsed < DOC_UPDATE_THREASHOLD ) {
+ deferProcessing = true;
+ track->updatePending = true;
+ } else {
+ track->lastGradientUpdate = now;
+ track->updatePending = false;
+ }
+
+ break;
+ }
+ }
+ return deferProcessing;
+}
+
void SwatchesPanel::_trackDocument( SwatchesPanel *panel, SPDocument *document )
{
SPDocument *oldDoc = 0;
@@ -775,8 +854,8 @@ void SwatchesPanel::_trackDocument( SwatchesPanel *panel, SPDocument *document )
docPerPanel[panel] = document;
if (!found) {
sigc::connection conn1 = document->connectResourcesChanged( "gradient", sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleGradientsChange), document) );
- sigc::connection conn2 = SP_DOCUMENT_DEFS(document)->connectRelease( sigc::hide(sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleDefsModified), document)) );
- sigc::connection conn3 = SP_DOCUMENT_DEFS(document)->connectModified( sigc::hide(sigc::hide(sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleDefsModified), document))) );
+ sigc::connection conn2 = document->getDefs()->connectRelease( sigc::hide(sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleDefsModified), document)) );
+ sigc::connection conn3 = document->getDefs()->connectModified( sigc::hide(sigc::hide(sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleDefsModified), document))) );
DocTrack *dt = new DocTrack(document, conn1, conn2, conn3);
docTrackings.push_back(dt);
@@ -896,7 +975,7 @@ void SwatchesPanel::handleGradientsChange(SPDocument *document)
void SwatchesPanel::handleDefsModified(SPDocument *document)
{
SwatchPage *docPalette = (docPalettes.find(document) != docPalettes.end()) ? docPalettes[document] : 0;
- if (docPalette) {
+ if (docPalette && !DocTrack::queueUpdateIfNeeded(document) ) {
std::vector<ColorItem*> tmpColors;
std::map<ColorItem*, cairo_pattern_t*> tmpPrevs;
std::map<ColorItem*, SPGradient*> tmpGrads;
diff --git a/src/ui/dialog/swatches.h b/src/ui/dialog/swatches.h
index f9f3daf91..95d7acb00 100644
--- a/src/ui/dialog/swatches.h
+++ b/src/ui/dialog/swatches.h
@@ -23,6 +23,7 @@ namespace Dialogs {
class ColorItem;
class SwatchPage;
+class DocTrack;
/**
* A panel that displays paint swatches.
@@ -68,6 +69,8 @@ private:
sigc::connection _documentConnection;
sigc::connection _selChanged;
+
+ friend class DocTrack;
};
} //namespace Dialogs
diff --git a/src/ui/dialog/tile.cpp b/src/ui/dialog/tile.cpp
index b0a39bd0e..ae17214bf 100644
--- a/src/ui/dialog/tile.cpp
+++ b/src/ui/dialog/tile.cpp
@@ -18,8 +18,7 @@
# include <config.h>
#endif
-#include <gtk/gtkdialog.h> //for GTK_RESPONSE* types
-#include <gtk/gtksizegroup.h>
+#include <gtk/gtk.h> //for GTK_RESPONSE* types
#include <glibmm/i18n.h>
#include <gtkmm/stock.h>
@@ -136,8 +135,8 @@ void TileDialog::Grid_Arrange ()
on_row_spinbutton_changed();
// set padding to manual values
- paddingx = XPadSpinner.get_value();
- paddingy = YPadSpinner.get_value();
+ paddingx = XPadding.getValue("px");
+ paddingy = YPadding.getValue("px");
std::vector<double> row_heights;
std::vector<double> col_widths;
@@ -422,7 +421,7 @@ void TileDialog::on_col_spinbutton_changed()
void TileDialog::on_xpad_spinbutton_changed()
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("/dialogs/gridtiler/XPad", XPadSpinner.get_value());
+ prefs->setDouble("/dialogs/gridtiler/XPad", XPadding.getValue("px"));
}
@@ -432,7 +431,7 @@ void TileDialog::on_xpad_spinbutton_changed()
void TileDialog::on_ypad_spinbutton_changed()
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("/dialogs/gridtiler/YPad", YPadSpinner.get_value());
+ prefs->setDouble("/dialogs/gridtiler/YPad", YPadding.getValue("px"));
}
@@ -512,7 +511,8 @@ void TileDialog::Spacing_button_changed()
prefs->setDouble("/dialogs/gridtiler/SpacingType", -20);
}
- SizesHBox.set_sensitive ( SpaceManualRadioButton.get_active());
+ XPadding.set_sensitive ( SpaceManualRadioButton.get_active());
+ YPadding.set_sensitive ( SpaceManualRadioButton.get_active());
}
/**
@@ -614,7 +614,9 @@ static void updateSelectionCallback(Inkscape::Application */*inkscape*/, Inkscap
* Constructor
*/
TileDialog::TileDialog()
- : UI::Widget::Panel("", "/dialogs/gridtiler", SP_VERB_SELECTION_GRIDTILE)
+ : UI::Widget::Panel("", "/dialogs/gridtiler", SP_VERB_SELECTION_GRIDTILE),
+ XPadding(_("X:"), _("Horizontal spacing between columns."), UNIT_TYPE_LINEAR, "", "object-columns"),
+ YPadding(_("Y:"), _("Vertical spacing between rows."), XPadding, "", "object-rows")
{
// bool used by spin button callbacks to stop loops where they change each other.
updating = false;
@@ -814,51 +816,25 @@ TileDialog::TileDialog()
}
{
- /*#### Y Padding ####*/
+ /*#### Padding ####*/
- GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_MENU, "object-rows");
- YPadBox.pack_start (*(Glib::wrap(i)), false, false, MARGIN);
+ YPadding.setDigits(1);
+ YPadding.setIncrements(0.2, 0);
+ YPadding.setRange(-10000, 10000);
+ double yPad = prefs->getDouble("/dialogs/gridtiler/YPad", 15);
+ YPadding.setValue(yPad, "px");
+ YPadding.signal_value_changed().connect(sigc::mem_fun(*this, &TileDialog::on_ypad_spinbutton_changed));
- YPadSpinner.set_digits(1);
- YPadSpinner.set_increments(0.2, 0);
- YPadSpinner.set_range(-10000, 10000);
- double YPad = prefs->getDouble("/dialogs/gridtiler/YPad", 15);
- YPadSpinner.set_value(YPad);
- YPadBox.pack_start(YPadSpinner, true, true, MARGIN);
- tips.set_tip(YPadSpinner, _("Vertical spacing between rows (px units)"));
- YPadSpinner.signal_changed().connect(sigc::mem_fun(*this, &TileDialog::on_ypad_spinbutton_changed));
- gtk_size_group_add_widget(_col1, (GtkWidget *) YPadBox.gobj());
+ XPadding.setDigits(1);
+ XPadding.setIncrements(0.2, 0);
+ XPadding.setRange(-10000, 10000);
+ double xPad = prefs->getDouble("/dialogs/gridtiler/XPad", 15);
+ XPadding.setValue(xPad, "px");
- SizesHBox.pack_start(YPadBox, false, false, MARGIN);
+ XPadding.signal_value_changed().connect(sigc::mem_fun(*this, &TileDialog::on_xpad_spinbutton_changed));
}
-
- {
- Gtk::HBox *spacer = new Gtk::HBox;
- SizesHBox.pack_start(*spacer, false, false, 0);
- gtk_size_group_add_widget(_col2, (GtkWidget *) spacer->gobj());
- }
-
- {
- /*#### X padding ####*/
-
- GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_MENU, "object-columns");
- XPadBox.pack_start (*(Glib::wrap(i)), false, false, MARGIN);
-
- XPadSpinner.set_digits(1);
- XPadSpinner.set_increments(0.2, 0);
- XPadSpinner.set_range(-10000, 10000);
- double XPad = prefs->getDouble("/dialogs/gridtiler/XPad", 15);
- XPadSpinner.set_value(XPad);
- XPadBox.pack_start(XPadSpinner, true, true, MARGIN);
- tips.set_tip(XPadSpinner, _("Horizontal spacing between columns (px units)"));
- XPadSpinner.signal_changed().connect(sigc::mem_fun(*this, &TileDialog::on_xpad_spinbutton_changed));
- gtk_size_group_add_widget(_col3, (GtkWidget *) XPadBox.gobj());
-
- SizesHBox.pack_start(XPadBox, false, false, MARGIN);
- }
-
-
- TileBox.pack_start(SizesHBox, false, false, MARGIN);
+ TileBox.pack_start(XPadding, false, false, MARGIN);
+ TileBox.pack_start(YPadding, false, false, MARGIN);
contents->pack_start(TileBox);
@@ -870,7 +846,8 @@ TileDialog::TileDialog()
}
SpaceManualRadioButton.set_active(ManualSpacing);
SpaceByBBoxRadioButton.set_active(!ManualSpacing);
- SizesHBox.set_sensitive (ManualSpacing);
+ XPadding.set_sensitive (ManualSpacing);
+ YPadding.set_sensitive (ManualSpacing);
//## The OK button
TileOkButton = addResponseButton(C_("Rows and columns dialog","_Arrange"), GTK_RESPONSE_APPLY);
diff --git a/src/ui/dialog/tile.h b/src/ui/dialog/tile.h
index 16ae3e4f8..fe77a9098 100644
--- a/src/ui/dialog/tile.h
+++ b/src/ui/dialog/tile.h
@@ -24,6 +24,8 @@
#include <gtkmm/radiobutton.h>
#include "ui/widget/panel.h"
+#include "ui/widget/spinbutton.h"
+#include "ui/widget/scalar-unit.h"
namespace Inkscape {
namespace UI {
@@ -88,12 +90,11 @@ private:
Gtk::HBox AlignHBox;
Gtk::HBox SpinsHBox;
- Gtk::HBox SizesHBox;
// Number per Row
Gtk::VBox NoOfColsBox;
Gtk::Label NoOfColsLabel;
- Gtk::SpinButton NoOfColsSpinner;
+ Inkscape::UI::Widget::SpinButton NoOfColsSpinner;
bool AutoRowSize;
Gtk::CheckButton RowHeightButton;
@@ -104,7 +105,7 @@ private:
// Number per Column
Gtk::VBox NoOfRowsBox;
Gtk::Label NoOfRowsLabel;
- Gtk::SpinButton NoOfRowsSpinner;
+ Inkscape::UI::Widget::SpinButton NoOfRowsSpinner;
bool AutoColSize;
Gtk::CheckButton ColumnWidthButton;
@@ -128,15 +129,8 @@ private:
Gtk::RadioButton HorizRightRadioButton;
double HorizAlign;
- // padding in x
- Gtk::VBox XPadBox;
- Gtk::Label XPadLabel;
- Gtk::SpinButton XPadSpinner;
-
- // padding in y
- Gtk::VBox YPadBox;
- Gtk::Label YPadLabel;
- Gtk::SpinButton YPadSpinner;
+ Inkscape::UI::Widget::ScalarUnit XPadding;
+ Inkscape::UI::Widget::ScalarUnit YPadding;
// BBox or manual spacing
Gtk::VBox SpacingVBox;
@@ -145,19 +139,17 @@ private:
Gtk::RadioButton SpaceManualRadioButton;
bool ManualSpacing;
-
-
// Row height
Gtk::VBox RowHeightVBox;
Gtk::HBox RowHeightBox;
Gtk::Label RowHeightLabel;
- Gtk::SpinButton RowHeightSpinner;
+ Inkscape::UI::Widget::SpinButton RowHeightSpinner;
// Column width
Gtk::VBox ColumnWidthVBox;
Gtk::HBox ColumnWidthBox;
Gtk::Label ColumnWidthLabel;
- Gtk::SpinButton ColumnWidthSpinner;
+ Inkscape::UI::Widget::SpinButton ColumnWidthSpinner;
};
diff --git a/src/ui/dialog/tracedialog.cpp b/src/ui/dialog/tracedialog.cpp
index f6dd6cb28..7fb172531 100644
--- a/src/ui/dialog/tracedialog.cpp
+++ b/src/ui/dialog/tracedialog.cpp
@@ -16,10 +16,10 @@
#include <gtkmm/notebook.h>
#include <gtkmm/frame.h>
-#include <gtkmm/spinbutton.h>
+#include "ui/widget/spinbutton.h"
#include <gtkmm/stock.h>
-#include <gtk/gtkdialog.h> //for GTK_RESPONSE* types
+#include <gtk/gtk.h> //for GTK_RESPONSE* types
#include <glibmm/i18n.h>
#include "desktop.h"
@@ -109,7 +109,7 @@ class TraceDialogImpl : public TraceDialog
Gtk::HBox modeBrightnessBox;
Gtk::RadioButton modeBrightnessRadioButton;
Gtk::Label modeBrightnessSpinnerLabel;
- Gtk::SpinButton modeBrightnessSpinner;
+ Inkscape::UI::Widget::SpinButton modeBrightnessSpinner;
//edge detection
Gtk::Frame modeCannyFrame;
Gtk::HBox modeCannyBox;
@@ -117,16 +117,16 @@ class TraceDialogImpl : public TraceDialog
Gtk::RadioButton modeCannyRadioButton;
//Gtk::HSeparator modeCannySeparator;
//Gtk::Label modeCannyLoSpinnerLabel;
- //Gtk::SpinButton modeCannyLoSpinner;
+ //Inkscape::UI::Widget::SpinButton modeCannyLoSpinner;
Gtk::Label modeCannyHiSpinnerLabel;
- Gtk::SpinButton modeCannyHiSpinner;
+ Inkscape::UI::Widget::SpinButton modeCannyHiSpinner;
//quantization
Gtk::Frame modeQuantFrame;
Gtk::HBox modeQuantBox;
Gtk::VBox modeQuantVBox;
Gtk::RadioButton modeQuantRadioButton;
Gtk::Label modeQuantNrColorLabel;
- Gtk::SpinButton modeQuantNrColorSpinner;
+ Inkscape::UI::Widget::SpinButton modeQuantNrColorSpinner;
//params
Gtk::CheckButton modeInvertButton;
Gtk::HBox modeInvertBox;
@@ -137,7 +137,7 @@ class TraceDialogImpl : public TraceDialog
//brightness
Gtk::HBox modeMultiScanHBox1;
Gtk::RadioButton modeMultiScanBrightnessRadioButton;
- Gtk::SpinButton modeMultiScanNrColorSpinner;
+ Inkscape::UI::Widget::SpinButton modeMultiScanNrColorSpinner;
//colors
Gtk::HBox modeMultiScanHBox2;
Gtk::RadioButton modeMultiScanColorRadioButton;
@@ -162,15 +162,15 @@ class TraceDialogImpl : public TraceDialog
Gtk::HBox optionsSpecklesBox;
Gtk::CheckButton optionsSpecklesButton;
Gtk::Label optionsSpecklesSizeLabel;
- Gtk::SpinButton optionsSpecklesSizeSpinner;
+ Inkscape::UI::Widget::SpinButton optionsSpecklesSizeSpinner;
Gtk::HBox optionsCornersBox;
Gtk::CheckButton optionsCornersButton;
Gtk::Label optionsCornersThresholdLabel;
- Gtk::SpinButton optionsCornersThresholdSpinner;
+ Inkscape::UI::Widget::SpinButton optionsCornersThresholdSpinner;
Gtk::HBox optionsOptimBox;
Gtk::CheckButton optionsOptimButton;
Gtk::Label optionsOptimToleranceLabel;
- Gtk::SpinButton optionsOptimToleranceSpinner;
+ Inkscape::UI::Widget::SpinButton optionsOptimToleranceSpinner;
//#### Credits
diff --git a/src/ui/dialog/undo-history.cpp b/src/ui/dialog/undo-history.cpp
index e6f113e48..4c3446a51 100644
--- a/src/ui/dialog/undo-history.cpp
+++ b/src/ui/dialog/undo-history.cpp
@@ -14,7 +14,7 @@
#endif
#include <glibmm/i18n.h>
-#include <gtk/gtkimage.h>
+#include <gtk/gtk.h>
#include <stddef.h>
#include <sigc++/sigc++.h>
diff --git a/src/ui/dialog/whiteboard-connect.cpp b/src/ui/dialog/whiteboard-connect.cpp
index 0555281d4..ca18cd20d 100644
--- a/src/ui/dialog/whiteboard-connect.cpp
+++ b/src/ui/dialog/whiteboard-connect.cpp
@@ -14,7 +14,7 @@
*/
#include <glibmm/i18n.h>
-#include <gtk/gtkdialog.h>
+#include <gtk/gtk.h>
#include <gtkmm/entry.h>
#include <gtkmm/checkbutton.h>
#include <gtkmm/table.h>
diff --git a/src/ui/dialog/whiteboard-sharewithchat.cpp b/src/ui/dialog/whiteboard-sharewithchat.cpp
index 3315a7029..8ef69613a 100644
--- a/src/ui/dialog/whiteboard-sharewithchat.cpp
+++ b/src/ui/dialog/whiteboard-sharewithchat.cpp
@@ -16,7 +16,7 @@
#include <glibmm/i18n.h>
#include <sigc++/sigc++.h>
-#include <gtk/gtkdialog.h>
+#include <gtk/gtk.h>
#include "message-stack.h"
#include "message-context.h"
diff --git a/src/ui/dialog/whiteboard-sharewithuser.cpp b/src/ui/dialog/whiteboard-sharewithuser.cpp
index 6d905b684..772184107 100644
--- a/src/ui/dialog/whiteboard-sharewithuser.cpp
+++ b/src/ui/dialog/whiteboard-sharewithuser.cpp
@@ -13,7 +13,7 @@
#include <glibmm/i18n.h>
#include <sigc++/sigc++.h>
-#include <gtk/gtkdialog.h>
+#include <gtk/gtk.h>
#include "message-stack.h"
#include "message-context.h"
diff --git a/src/ui/icon-names.h b/src/ui/icon-names.h
index 2ec03c5cc..f7c16b0ed 100644
--- a/src/ui/icon-names.h
+++ b/src/ui/icon-names.h
@@ -556,6 +556,8 @@
"xml-text-new"
#define INKSCAPE_ICON_ZOOM \
"zoom"
+#define INKSCAPE_ICON_MEASURE \
+ "measure"
#define INKSCAPE_ICON_ZOOM_DOUBLE_SIZE \
"zoom-double-size"
#define INKSCAPE_ICON_ZOOM_FIT_DRAWING \
diff --git a/src/ui/tool/control-point-selection.cpp b/src/ui/tool/control-point-selection.cpp
index 1fb98d78f..13da4a712 100644
--- a/src/ui/tool/control-point-selection.cpp
+++ b/src/ui/tool/control-point-selection.cpp
@@ -432,7 +432,7 @@ bool ControlPointSelection::_keyboardMove(GdkEventKey const &event, Geom::Point
delta /= _desktop->current_zoom();
} else {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- double nudge = prefs->getDoubleLimited("/options/nudgedistance/value", 2, 0, 1000);
+ double nudge = prefs->getDoubleLimited("/options/nudgedistance/value", 2, 0, 1000, "px");
delta *= nudge;
}
@@ -533,7 +533,7 @@ bool ControlPointSelection::_keyboardScale(GdkEventKey const &event, int dir)
length_change = 1.0 / _desktop->current_zoom() * dir;
} else {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- length_change = prefs->getDoubleLimited("/options/defaultscale/value", 2, 1, 1000);
+ length_change = prefs->getDoubleLimited("/options/defaultscale/value", 2, 1, 1000, "px");
length_change *= dir;
}
double scale = (maxext + length_change) / maxext;
diff --git a/src/ui/tool/node-tool.h b/src/ui/tool/node-tool.h
index d005a0bdf..218e697b7 100644
--- a/src/ui/tool/node-tool.h
+++ b/src/ui/tool/node-tool.h
@@ -21,10 +21,10 @@
#include "ui/tool/node-types.h"
#define INK_TYPE_NODE_TOOL (ink_node_tool_get_type ())
-#define INK_NODE_TOOL(obj) (GTK_CHECK_CAST ((obj), INK_TYPE_NODE_TOOL, InkNodeTool))
-#define INK_NODE_TOOL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), INK_TYPE_NODE_TOOL, InkNodeToolClass))
-#define INK_IS_NODE_TOOL(obj) (GTK_CHECK_TYPE ((obj), INK_TYPE_NODE_TOOL))
-#define INK_IS_NODE_TOOL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), INK_TYPE_NODE_TOOL))
+#define INK_NODE_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INK_TYPE_NODE_TOOL, InkNodeTool))
+#define INK_NODE_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), INK_TYPE_NODE_TOOL, InkNodeToolClass))
+#define INK_IS_NODE_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INK_TYPE_NODE_TOOL))
+#define INK_IS_NODE_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INK_TYPE_NODE_TOOL))
class InkNodeTool;
class InkNodeToolClass;
diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp
index 7c2013872..52286c6cc 100644
--- a/src/ui/tool/path-manipulator.cpp
+++ b/src/ui/tool/path-manipulator.cpp
@@ -727,7 +727,7 @@ void PathManipulator::scaleHandle(Node *n, int which, int dir, bool pixel)
length_change = 1.0 / _desktop->current_zoom() * dir;
} else {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- length_change = prefs->getDoubleLimited("/options/defaultscale/value", 2, 1, 1000);
+ length_change = prefs->getDoubleLimited("/options/defaultscale/value", 2, 1, 1000, "px");
length_change *= dir;
}
diff --git a/src/ui/view/CMakeLists.txt b/src/ui/view/CMakeLists.txt
deleted file mode 100644
index 5c96bc40e..000000000
--- a/src/ui/view/CMakeLists.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-SET(ui_view_SRC
-desktop.cpp
-desktop-events.cpp
-desktop-handles.cpp
-desktop-style.cpp
-edit.cpp
-edit-widget.cpp
-view.cpp
-view-widget.cpp
-)
diff --git a/src/ui/view/edit-widget-interface.h b/src/ui/view/edit-widget-interface.h
index 919b570dd..4ff4f92f9 100644
--- a/src/ui/view/edit-widget-interface.h
+++ b/src/ui/view/edit-widget-interface.h
@@ -137,6 +137,10 @@ struct EditWidgetInterface
/// Message widget will get no content
virtual void setMessage (Inkscape::MessageType type, gchar const* msg) = 0;
+
+ /** Show an info dialog with the given message */
+ virtual bool showInfoDialog( Glib::ustring const &message ) = 0;
+
/// Open yes/no dialog with warning text and confirmation question.
virtual bool warnDialog (gchar*) = 0;
diff --git a/src/ui/view/view-widget.h b/src/ui/view/view-widget.h
index 9b5e9c4a8..f216c8e27 100644
--- a/src/ui/view/view-widget.h
+++ b/src/ui/view/view-widget.h
@@ -14,7 +14,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtkeventbox.h>
+#include <gtk/gtk.h>
namespace Inkscape {
namespace UI {
@@ -25,10 +25,10 @@ class SPViewWidget;
class SPNamedView;
#define SP_TYPE_VIEW_WIDGET (sp_view_widget_get_type ())
-#define SP_VIEW_WIDGET(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_VIEW_WIDGET, SPViewWidget))
-#define SP_VIEW_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_VIEW_WIDGET, SPViewWidgetClass))
-#define SP_IS_VIEW_WIDGET(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_VIEW_WIDGET))
-#define SP_IS_VIEW_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_VIEW_WIDGET))
+#define SP_VIEW_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_VIEW_WIDGET, SPViewWidget))
+#define SP_VIEW_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_VIEW_WIDGET, SPViewWidgetClass))
+#define SP_IS_VIEW_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_VIEW_WIDGET))
+#define SP_IS_VIEW_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_VIEW_WIDGET))
#define SP_VIEW_WIDGET_VIEW(w) (SP_VIEW_WIDGET (w)->view)
#define SP_VIEW_WIDGET_DOCUMENT(w) (SP_VIEW_WIDGET (w)->view ? ((SPViewWidget *) (w))->view->doc : NULL)
diff --git a/src/ui/view/view.h b/src/ui/view/view.h
index e6853555f..13499a2e4 100644
--- a/src/ui/view/view.h
+++ b/src/ui/view/view.h
@@ -14,7 +14,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gdk/gdktypes.h>
+#include <gdk/gdk.h>
#include <stddef.h>
#include <sigc++/connection.h>
#include "message.h"
diff --git a/src/ui/widget/CMakeLists.txt b/src/ui/widget/CMakeLists.txt
deleted file mode 100644
index ffc94c299..000000000
--- a/src/ui/widget/CMakeLists.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-SET(ui_widget_SRC
-button.cpp
-color-picker.cpp
-color-preview.cpp
-combo-text.cpp
-dock.cpp
-dock-item.cpp
-entity-entry.cpp
-entry.cpp
-filter-effect-chooser.cpp
-handlebox.cpp
-icon-widget.cpp
-imageicon.cpp
-imagetoggler.cpp
-labelled.cpp
-licensor.cpp
-notebook-page.cpp
-object-composite-settings.cpp
-page-sizer.cpp
-panel.cpp
-point.cpp
-preferences-widget.cpp
-random.cpp
-registered-widget.cpp
-registry.cpp
-rendering-options.cpp
-rotateable.cpp
-ruler.cpp
-scalar.cpp
-scalar-unit.cpp
-selected-style.cpp
-spin-slider.cpp
-style-subject.cpp
-style-swatch.cpp
-svg-canvas.cpp
-tolerance-slider.cpp
-toolbox.cpp
-unit-menu.cpp
-zoom-status.cpp
-)
diff --git a/src/ui/widget/Makefile_insert b/src/ui/widget/Makefile_insert
index b6069631b..bd23b6782 100644
--- a/src/ui/widget/Makefile_insert
+++ b/src/ui/widget/Makefile_insert
@@ -66,6 +66,8 @@ ink_common_sources += \
ui/widget/scalar.h \
ui/widget/selected-style.h \
ui/widget/selected-style.cpp \
+ ui/widget/spinbutton.h \
+ ui/widget/spinbutton.cpp \
ui/widget/spin-slider.h \
ui/widget/spin-slider.cpp \
ui/widget/style-subject.h \
diff --git a/src/ui/widget/combo-text.cpp b/src/ui/widget/combo-text.cpp
index 7706f7c29..43428adb8 100644
--- a/src/ui/widget/combo-text.cpp
+++ b/src/ui/widget/combo-text.cpp
@@ -23,7 +23,7 @@
#endif
#include "combo-text.h"
-#include <gtk/gtkcombobox.h>
+#include <gtk/gtk.h>
ComboText::ComboText()
: Gtk::ComboBox()
diff --git a/src/ui/widget/dock-item.cpp b/src/ui/widget/dock-item.cpp
index 72a20c385..87f4d0840 100644
--- a/src/ui/widget/dock-item.cpp
+++ b/src/ui/widget/dock-item.cpp
@@ -262,7 +262,7 @@ DockItem::present()
void
DockItem::grab_focus()
{
- if (GTK_WIDGET_REALIZED (_gdl_dock_item)) {
+ if (gtk_widget_get_realized (_gdl_dock_item)) {
// make sure the window we're in is present
Gtk::Widget *toplevel = getWidget().get_toplevel();
diff --git a/src/ui/widget/entity-entry.cpp b/src/ui/widget/entity-entry.cpp
index e191a9360..e62eb009c 100644
--- a/src/ui/widget/entity-entry.cpp
+++ b/src/ui/widget/entity-entry.cpp
@@ -25,6 +25,7 @@
#include "sp-object.h"
#include "rdf.h"
#include "ui/widget/registry.h"
+#include "sp-root.h"
#include "entity-entry.h"
@@ -87,8 +88,8 @@ void EntityLineEntry::update(SPDocument *doc)
{
const char *text = rdf_get_work_entity (doc, _entity);
// If RDF title is not set, get the document's <title> and set the RDF:
- if ( !text && !strcmp(_entity->name, "title") && doc->root ) {
- text = doc->root->title();
+ if ( !text && !strcmp(_entity->name, "title") && doc->getRoot() ) {
+ text = doc->getRoot()->title();
rdf_set_work_entity(doc, _entity, text);
}
static_cast<Gtk::Entry*>(_packable)->set_text (text ? text : "");
@@ -133,8 +134,8 @@ void EntityMultiLineEntry::update(SPDocument *doc)
{
const char *text = rdf_get_work_entity (doc, _entity);
// If RDF title is not set, get the document's <title> and set the RDF:
- if ( !text && !strcmp(_entity->name, "title") && doc->root ) {
- text = doc->root->title();
+ if ( !text && !strcmp(_entity->name, "title") && doc->getRoot() ) {
+ text = doc->getRoot()->title();
rdf_set_work_entity(doc, _entity, text);
}
Gtk::ScrolledWindow *s = static_cast<Gtk::ScrolledWindow*>(_packable);
diff --git a/src/ui/widget/object-composite-settings.h b/src/ui/widget/object-composite-settings.h
index 76538d6a7..8ef31a889 100644
--- a/src/ui/widget/object-composite-settings.h
+++ b/src/ui/widget/object-composite-settings.h
@@ -17,7 +17,7 @@
#include <gtkmm/alignment.h>
#include <gtkmm/adjustment.h>
#include <gtkmm/label.h>
-#include <gtkmm/spinbutton.h>
+#include "ui/widget/spinbutton.h"
#include <gtkmm/scale.h>
#include <glibmm/ustring.h>
@@ -47,7 +47,7 @@ private:
Gtk::Label _opacity_label;
Gtk::Adjustment _opacity_adjustment;
Gtk::HScale _opacity_hscale;
- Gtk::SpinButton _opacity_spin_button;
+ Inkscape::UI::Widget::SpinButton _opacity_spin_button;
StyleSubject *_subject;
diff --git a/src/ui/widget/page-sizer.cpp b/src/ui/widget/page-sizer.cpp
index f306b9eea..672e1415b 100644
--- a/src/ui/widget/page-sizer.cpp
+++ b/src/ui/widget/page-sizer.cpp
@@ -422,7 +422,7 @@ PageSizer::setDim (double w, double h, bool changeList)
// The origin for the user is in the lower left corner; this point should remain stationary when
// changing the page size. The SVG's origin however is in the upper left corner, so we must compensate for this
Geom::Translate const vert_offset(Geom::Point(0, (old_height - h)));
- SP_GROUP(SP_ROOT(doc->root))->translateChildItems(vert_offset);
+ doc->getRoot()->translateChildItems(vert_offset);
DocumentUndo::done(doc, SP_VERB_NONE, _("Set page size"));
}
diff --git a/src/ui/widget/panel.cpp b/src/ui/widget/panel.cpp
index b3c8ce376..3e0c27587 100644
--- a/src/ui/widget/panel.cpp
+++ b/src/ui/widget/panel.cpp
@@ -22,7 +22,7 @@
#include <gtkmm/dialog.h> // for Gtk::RESPONSE_*
#include <gtkmm/stock.h>
-#include <gtk/gtkiconfactory.h>
+#include <gtk/gtk.h>
#include "panel.h"
#include "icon-size.h"
diff --git a/src/ui/widget/preferences-widget.cpp b/src/ui/widget/preferences-widget.cpp
index afcaa338e..68faa3c66 100644
--- a/src/ui/widget/preferences-widget.cpp
+++ b/src/ui/widget/preferences-widget.cpp
@@ -227,7 +227,6 @@ void PrefSpinButton::init(Glib::ustring const &prefs_path,
this->set_range (lower, upper);
this->set_increments (step_increment, 0);
- this->set_numeric();
this->set_value (value);
this->set_width_chars(6);
if (is_int)
@@ -256,6 +255,45 @@ void PrefSpinButton::on_value_changed()
}
}
+void PrefSpinUnit::init(Glib::ustring const &prefs_path,
+ double lower, double upper, double step_increment,
+ double default_value, UnitType unit_type, Glib::ustring const &default_unit)
+{
+ _prefs_path = prefs_path;
+ _is_percent = (unit_type == UNIT_TYPE_DIMENSIONLESS);
+
+ resetUnitType(unit_type);
+ setUnit(default_unit);
+ setRange (lower, upper); /// @fixme this disregards changes of units
+ setIncrements (step_increment, 0);
+ if (step_increment < 0.1) {
+ setDigits(4);
+ } else {
+ setDigits(2);
+ }
+
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ double value = prefs->getDoubleLimited(prefs_path, default_value, lower, upper);
+ Glib::ustring unitstr = prefs->getUnit(prefs_path);
+ if (unitstr.length() == 0) {
+ unitstr = default_unit;
+ // write the assumed unit to preferences:
+ prefs->setDoubleUnit(_prefs_path, value, unitstr);
+ }
+ setValue(value, unitstr);
+
+ signal_value_changed().connect_notify(sigc::mem_fun(*this, &PrefSpinUnit::on_my_value_changed));
+}
+
+void PrefSpinUnit::on_my_value_changed()
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ if (getWidget()->is_visible()) //only take action if user changed value
+ {
+ prefs->setDoubleUnit(_prefs_path, getValue(getUnit().abbr), getUnit().abbr);
+ }
+}
+
const double ZoomCorrRuler::textsize = 7;
const double ZoomCorrRuler::textpadding = 5;
diff --git a/src/ui/widget/preferences-widget.h b/src/ui/widget/preferences-widget.h
index 6c7f9ce4a..6caab11ae 100644
--- a/src/ui/widget/preferences-widget.h
+++ b/src/ui/widget/preferences-widget.h
@@ -17,7 +17,7 @@
#include <vector>
#include <gtkmm/table.h>
#include <gtkmm/comboboxtext.h>
-#include <gtkmm/spinbutton.h>
+#include "ui/widget/spinbutton.h"
#include <gtkmm/tooltips.h>
#include <gtkmm/treeview.h>
#include <gtkmm/radiobutton.h>
@@ -32,6 +32,8 @@
#include "ui/widget/color-picker.h"
#include "ui/widget/unit-menu.h"
+#include "ui/widget/spinbutton.h"
+#include "ui/widget/scalar-unit.h"
namespace Inkscape {
namespace UI {
@@ -68,7 +70,7 @@ protected:
void on_toggled();
};
-class PrefSpinButton : public Gtk::SpinButton
+class PrefSpinButton : public SpinButton
{
public:
void init(Glib::ustring const &prefs_path,
@@ -81,6 +83,21 @@ protected:
void on_value_changed();
};
+class PrefSpinUnit : public ScalarUnit
+{
+public:
+ PrefSpinUnit() : ScalarUnit("", "") {};
+
+ void init(Glib::ustring const &prefs_path,
+ double lower, double upper, double step_increment,
+ double default_value,
+ UnitType unit_type, Glib::ustring const &default_unit);
+protected:
+ Glib::ustring _prefs_path;
+ bool _is_percent;
+ void on_my_value_changed();
+};
+
class ZoomCorrRuler : public Gtk::DrawingArea {
public:
ZoomCorrRuler(int width = 100, int height = 20);
@@ -116,7 +133,7 @@ private:
void on_spinbutton_value_changed();
void on_unit_changed();
- Gtk::SpinButton _sb;
+ Inkscape::UI::Widget::SpinButton _sb;
UnitMenu _unit;
Gtk::HScale _slider;
ZoomCorrRuler _ruler;
@@ -134,7 +151,7 @@ private:
void on_spinbutton_value_changed();
Glib::ustring _prefs_path;
- Gtk::SpinButton _sb;
+ Inkscape::UI::Widget::SpinButton _sb;
Gtk::HScale _slider;
bool freeze; // used to block recursive updates of slider and spinbutton
};
diff --git a/src/ui/widget/random.cpp b/src/ui/widget/random.cpp
index 02201be12..3dcf09cb5 100644
--- a/src/ui/widget/random.cpp
+++ b/src/ui/widget/random.cpp
@@ -25,6 +25,8 @@
#include <glibmm/i18n.h>
+#include <gtkmm/button.h>
+
namespace Inkscape {
namespace UI {
namespace Widget {
diff --git a/src/ui/widget/ruler.cpp b/src/ui/widget/ruler.cpp
index a220a54ad..c6ac3a381 100644
--- a/src/ui/widget/ruler.cpp
+++ b/src/ui/widget/ruler.cpp
@@ -108,7 +108,7 @@ Ruler::on_button_press_event(GdkEventButton *evb)
_dragging = true;
sp_repr_set_boolean(repr, "showguides", TRUE);
sp_repr_set_boolean(repr, "inkscape:guide-bbox", TRUE);
- _guide = sp_guideline_new(_dt->guides, event_dt, _horiz_f ? Geom::Point(0.,1.) : Geom::Point(1.,0.));
+ _guide = sp_guideline_new(_dt->guides, NULL, event_dt, _horiz_f ? Geom::Point(0.,1.) : Geom::Point(1.,0.));
sp_guideline_set_color(SP_GUIDELINE(_guide), _dt->namedview->guidehicolor);
(void) get_window()->pointer_grab(false,
Gdk::BUTTON_RELEASE_MASK |
diff --git a/src/ui/widget/scalar-unit.cpp b/src/ui/widget/scalar-unit.cpp
index 6209d40e0..1c0fdff68 100644
--- a/src/ui/widget/scalar-unit.cpp
+++ b/src/ui/widget/scalar-unit.cpp
@@ -27,6 +27,7 @@
#endif
#include "scalar-unit.h"
+#include "spinbutton.h"
namespace Inkscape {
namespace UI {
@@ -65,9 +66,45 @@ ScalarUnit::ScalarUnit(Glib::ustring const &label, Glib::ustring const &tooltip,
}
_unit_menu->signal_changed()
.connect_notify(sigc::mem_fun(*this, &ScalarUnit::on_unit_changed));
+
+ static_cast<SpinButton*>(_widget)->setUnitMenu(_unit_menu);
+
+ lastUnits = _unit_menu->getUnitAbbr();
}
/**
+ * Construct a ScalarUnit
+ *
+ * \param label Label.
+ * \param tooltip Tooltip text.
+ * \param take_unitmenu Use the unitmenu from this parameter.
+ * \param suffix Suffix, placed after the widget (defaults to "").
+ * \param icon Icon filename, placed before the label (defaults to "").
+ * \param mnemonic Mnemonic toggle; if true, an underscore (_) in the label
+ * indicates the next character should be used for the
+ * mnemonic accelerator key (defaults to true).
+ */
+ScalarUnit::ScalarUnit(Glib::ustring const &label, Glib::ustring const &tooltip,
+ ScalarUnit &take_unitmenu,
+ Glib::ustring const &suffix,
+ Glib::ustring const &icon,
+ bool mnemonic)
+ : Scalar(label, tooltip, suffix, icon, mnemonic),
+ _unit_menu(take_unitmenu._unit_menu),
+ _hundred_percent(0),
+ _absolute_is_increment(false),
+ _percentage_is_increment(false)
+{
+ _unit_menu->signal_changed()
+ .connect_notify(sigc::mem_fun(*this, &ScalarUnit::on_unit_changed));
+
+ static_cast<SpinButton*>(_widget)->setUnitMenu(_unit_menu);
+
+ lastUnits = _unit_menu->getUnitAbbr();
+}
+
+
+/**
* Initializes the scalar based on the settings in _unit_menu.
* Requires that _unit_menu has already been initialized.
*/
@@ -93,6 +130,22 @@ ScalarUnit::setUnit(Glib::ustring const &unit) {
return true;
}
+/** Adds the unit type to the ScalarUnit widget */
+void
+ScalarUnit::setUnitType(UnitType unit_type) {
+ g_assert(_unit_menu != NULL);
+ _unit_menu->setUnitType(unit_type);
+ lastUnits = _unit_menu->getUnitAbbr();
+}
+
+/** Resets the unit type for the ScalarUnit widget */
+void
+ScalarUnit::resetUnitType(UnitType unit_type) {
+ g_assert(_unit_menu != NULL);
+ _unit_menu->resetUnitType(unit_type);
+ lastUnits = _unit_menu->getUnitAbbr();
+}
+
/** Gets the object for the currently selected unit */
Unit
ScalarUnit::getUnit() const {
@@ -115,6 +168,19 @@ ScalarUnit::setValue(double number, Glib::ustring const &units) {
Scalar::setValue(number);
}
+/** Convert and sets the number only and keeps the current unit. */
+void
+ScalarUnit::setValueKeepUnit(double number, Glib::ustring const &units) {
+ g_assert(_unit_menu != NULL);
+ if (units == "") {
+ // set the value in the default units
+ Scalar::setValue(number);
+ } else {
+ double conversion = _unit_menu->getConversion(units);
+ Scalar::setValue(number / conversion);
+ }
+}
+
/** Sets the number only */
void
ScalarUnit::setValue(double number) {
@@ -134,6 +200,15 @@ ScalarUnit::getValue(Glib::ustring const &unit_name) const {
}
}
+/** Grab focus, and select the text that is in the entry field.
+ */
+void
+ScalarUnit::grabFocusAndSelectEntry() {
+ _widget->grab_focus();
+ static_cast<SpinButton*>(_widget)->select_region(0, 20);
+}
+
+
void
ScalarUnit::setHundredPercent(double number)
{
diff --git a/src/ui/widget/scalar-unit.h b/src/ui/widget/scalar-unit.h
index d8b2edbd5..ed3728e69 100644
--- a/src/ui/widget/scalar-unit.h
+++ b/src/ui/widget/scalar-unit.h
@@ -32,6 +32,11 @@ public:
Glib::ustring const &icon = "",
UnitMenu *unit_menu = NULL,
bool mnemonic = true);
+ ScalarUnit(Glib::ustring const &label, Glib::ustring const &tooltip,
+ ScalarUnit &take_unitmenu,
+ Glib::ustring const &suffix = "",
+ Glib::ustring const &icon = "",
+ bool mnemonic = true);
void initScalar(double min_value, double max_value);
@@ -40,9 +45,14 @@ public:
double getValue(Glib::ustring const &units) const;
bool setUnit(Glib::ustring const &units);
+ void setUnitType(UnitType unit_type);
+ void resetUnitType(UnitType unit_type);
void setValue(double number, Glib::ustring const &units);
+ void setValueKeepUnit(double number, Glib::ustring const &units);
void setValue(double number);
+ void grabFocusAndSelectEntry();
+
void setHundredPercent(double number);
void setAbsoluteIsIncrement(bool value);
void setPercentageIsIncrement(bool value);
diff --git a/src/ui/widget/scalar.cpp b/src/ui/widget/scalar.cpp
index 26a1f6541..6ada379fb 100644
--- a/src/ui/widget/scalar.cpp
+++ b/src/ui/widget/scalar.cpp
@@ -18,6 +18,7 @@
#include "scalar.h"
+#include "spinbutton.h"
namespace Inkscape {
namespace UI {
@@ -37,10 +38,9 @@ Scalar::Scalar(Glib::ustring const &label, Glib::ustring const &tooltip,
Glib::ustring const &suffix,
Glib::ustring const &icon,
bool mnemonic)
- : Labelled(label, tooltip, new Gtk::SpinButton(), suffix, icon, mnemonic),
+ : Labelled(label, tooltip, new SpinButton(), suffix, icon, mnemonic),
setProgrammatically(false)
{
- static_cast<Gtk::SpinButton*>(_widget)->set_numeric();
}
/**
@@ -59,10 +59,9 @@ Scalar::Scalar(Glib::ustring const &label, Glib::ustring const &tooltip,
Glib::ustring const &suffix,
Glib::ustring const &icon,
bool mnemonic)
- : Labelled(label, tooltip, new Gtk::SpinButton(0.0, digits), suffix, icon, mnemonic),
+ : Labelled(label, tooltip, new SpinButton(0.0, digits), suffix, icon, mnemonic),
setProgrammatically(false)
{
- static_cast<Gtk::SpinButton*>(_widget)->set_numeric();
}
/**
@@ -83,10 +82,9 @@ Scalar::Scalar(Glib::ustring const &label, Glib::ustring const &tooltip,
Glib::ustring const &suffix,
Glib::ustring const &icon,
bool mnemonic)
- : Labelled(label, tooltip, new Gtk::SpinButton(adjust, 0.0, digits), suffix, icon, mnemonic),
+ : Labelled(label, tooltip, new SpinButton(adjust, 0.0, digits), suffix, icon, mnemonic),
setProgrammatically(false)
{
- static_cast<Gtk::SpinButton*>(_widget)->set_numeric();
}
/** Fetches the precision of the spin buton */
@@ -94,7 +92,7 @@ unsigned
Scalar::getDigits() const
{
g_assert(_widget != NULL);
- return static_cast<Gtk::SpinButton*>(_widget)->get_digits();
+ return static_cast<SpinButton*>(_widget)->get_digits();
}
/** Gets the current step ingrement used by the spin button */
@@ -103,7 +101,7 @@ Scalar::getStep() const
{
g_assert(_widget != NULL);
double step, page;
- static_cast<Gtk::SpinButton*>(_widget)->get_increments(step, page);
+ static_cast<SpinButton*>(_widget)->get_increments(step, page);
return step;
}
@@ -113,7 +111,7 @@ Scalar::getPage() const
{
g_assert(_widget != NULL);
double step, page;
- static_cast<Gtk::SpinButton*>(_widget)->get_increments(step, page);
+ static_cast<SpinButton*>(_widget)->get_increments(step, page);
return page;
}
@@ -123,7 +121,7 @@ Scalar::getRangeMin() const
{
g_assert(_widget != NULL);
double min, max;
- static_cast<Gtk::SpinButton*>(_widget)->get_range(min, max);
+ static_cast<SpinButton*>(_widget)->get_range(min, max);
return min;
}
@@ -133,7 +131,7 @@ Scalar::getRangeMax() const
{
g_assert(_widget != NULL);
double min, max;
- static_cast<Gtk::SpinButton*>(_widget)->get_range(min, max);
+ static_cast<SpinButton*>(_widget)->get_range(min, max);
return max;
}
@@ -142,7 +140,7 @@ double
Scalar::getValue() const
{
g_assert(_widget != NULL);
- return static_cast<Gtk::SpinButton*>(_widget)->get_value();
+ return static_cast<SpinButton*>(_widget)->get_value();
}
/** Get the value spin_button represented as an integer. */
@@ -150,7 +148,7 @@ int
Scalar::getValueAsInt() const
{
g_assert(_widget != NULL);
- return static_cast<Gtk::SpinButton*>(_widget)->get_value_as_int();
+ return static_cast<SpinButton*>(_widget)->get_value_as_int();
}
@@ -159,7 +157,7 @@ void
Scalar::setDigits(unsigned digits)
{
g_assert(_widget != NULL);
- static_cast<Gtk::SpinButton*>(_widget)->set_digits(digits);
+ static_cast<SpinButton*>(_widget)->set_digits(digits);
}
/** Sets the step and page increments for the spin button
@@ -169,7 +167,7 @@ void
Scalar::setIncrements(double step, double /*page*/)
{
g_assert(_widget != NULL);
- static_cast<Gtk::SpinButton*>(_widget)->set_increments(step, 0);
+ static_cast<SpinButton*>(_widget)->set_increments(step, 0);
}
/** Sets the minimum and maximum range allowed for the spin button */
@@ -177,7 +175,7 @@ void
Scalar::setRange(double min, double max)
{
g_assert(_widget != NULL);
- static_cast<Gtk::SpinButton*>(_widget)->set_range(min, max);
+ static_cast<SpinButton*>(_widget)->set_range(min, max);
}
/** Sets the value of the spin button */
@@ -186,14 +184,14 @@ Scalar::setValue(double value)
{
g_assert(_widget != NULL);
setProgrammatically = true; // callback is supposed to reset back, if it cares
- static_cast<Gtk::SpinButton*>(_widget)->set_value(value);
+ static_cast<SpinButton*>(_widget)->set_value(value);
}
/** Manually forces an update of the spin button */
void
Scalar::update() {
g_assert(_widget != NULL);
- static_cast<Gtk::SpinButton*>(_widget)->update();
+ static_cast<SpinButton*>(_widget)->update();
}
@@ -202,7 +200,7 @@ Scalar::update() {
Glib::SignalProxy0<void>
Scalar::signal_value_changed()
{
- return static_cast<Gtk::SpinButton*>(_widget)->signal_value_changed();
+ return static_cast<SpinButton*>(_widget)->signal_value_changed();
}
diff --git a/src/ui/widget/scalar.h b/src/ui/widget/scalar.h
index 6de128edb..7142ba93f 100644
--- a/src/ui/widget/scalar.h
+++ b/src/ui/widget/scalar.h
@@ -15,9 +15,6 @@
#ifndef INKSCAPE_UI_WIDGET_SCALAR_H
#define INKSCAPE_UI_WIDGET_SCALAR_H
-#include <gtkmm/adjustment.h>
-#include <gtkmm/spinbutton.h>
-
#include "labelled.h"
namespace Inkscape {
diff --git a/src/ui/widget/selected-style.cpp b/src/ui/widget/selected-style.cpp
index 50476dc65..ae8cd564e 100644
--- a/src/ui/widget/selected-style.cpp
+++ b/src/ui/widget/selected-style.cpp
@@ -14,7 +14,7 @@
# include <config.h>
#endif
-#include <gtk/gtkdnd.h>
+#include <gtk/gtk.h>
#include "selected-style.h"
diff --git a/src/ui/widget/selected-style.h b/src/ui/widget/selected-style.h
index e74d5b1ae..0caa7fe4c 100644
--- a/src/ui/widget/selected-style.h
+++ b/src/ui/widget/selected-style.h
@@ -21,7 +21,7 @@
#include <gtkmm/menu.h>
#include <gtkmm/menuitem.h>
#include <gtkmm/adjustment.h>
-#include <gtkmm/spinbutton.h>
+#include "ui/widget/spinbutton.h"
#include <stddef.h>
#include <sigc++/sigc++.h>
@@ -138,7 +138,7 @@ protected:
Gtk::EventBox _opacity_place;
Gtk::Adjustment _opacity_adjustment;
- Gtk::SpinButton _opacity_sb;
+ Inkscape::UI::Widget::SpinButton _opacity_sb;
Gtk::Label _na[2];
Glib::ustring __na[2];
diff --git a/src/ui/widget/spin-slider.cpp b/src/ui/widget/spin-slider.cpp
index faafc63b4..259b057aa 100644
--- a/src/ui/widget/spin-slider.cpp
+++ b/src/ui/widget/spin-slider.cpp
@@ -90,11 +90,11 @@ Gtk::HScale& SpinSlider::get_scale()
return _scale;
}
-const Gtk::SpinButton& SpinSlider::get_spin_button() const
+const Inkscape::UI::Widget::SpinButton& SpinSlider::get_spin_button() const
{
return _spin;
}
-Gtk::SpinButton& SpinSlider::get_spin_button()
+Inkscape::UI::Widget::SpinButton& SpinSlider::get_spin_button()
{
return _spin;
}
diff --git a/src/ui/widget/spin-slider.h b/src/ui/widget/spin-slider.h
index a4d0aa9d6..703c5d896 100644
--- a/src/ui/widget/spin-slider.h
+++ b/src/ui/widget/spin-slider.h
@@ -15,7 +15,7 @@
#include <gtkmm/adjustment.h>
#include <gtkmm/box.h>
#include <gtkmm/scale.h>
-#include <gtkmm/spinbutton.h>
+#include "spinbutton.h"
#include "attr-widget.h"
namespace Inkscape {
@@ -42,8 +42,8 @@ public:
const Gtk::HScale& get_scale() const;
Gtk::HScale& get_scale();
- const Gtk::SpinButton& get_spin_button() const;
- Gtk::SpinButton& get_spin_button();
+ const Inkscape::UI::Widget::SpinButton& get_spin_button() const;
+ Inkscape::UI::Widget::SpinButton& get_spin_button();
void set_update_policy(const Gtk::UpdateType);
@@ -52,7 +52,7 @@ public:
private:
Gtk::Adjustment _adjustment;
Gtk::HScale _scale;
- Gtk::SpinButton _spin;
+ Inkscape::UI::Widget::SpinButton _spin;
};
// Contains two SpinSliders for controlling number-opt-number attributes
diff --git a/src/ui/widget/spinbutton.cpp b/src/ui/widget/spinbutton.cpp
new file mode 100644
index 000000000..32090f96c
--- /dev/null
+++ b/src/ui/widget/spinbutton.cpp
@@ -0,0 +1,129 @@
+/**
+ * \brief SpinButton widget, that allows entry of both '.' and ',' for the decimal, even when in numeric mode.
+ */
+/*
+ * Author:
+ * Johan B. C. Engelen
+ *
+ * Copyright (C) 2011 Author
+ *
+ * Released under GNU GPL. Read the file 'COPYING' for more information.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "spinbutton.h"
+
+#include "unit-menu.h"
+#include "util/expression-evaluator.h"
+#include "event-context.h"
+
+namespace Inkscape {
+namespace UI {
+namespace Widget {
+
+
+void
+SpinButton::connect_signals() {
+ signal_input().connect(sigc::mem_fun(*this, &SpinButton::on_input));
+ signal_focus_in_event().connect(sigc::mem_fun(*this, &SpinButton::on_my_focus_in_event));
+ signal_key_press_event().connect(sigc::mem_fun(*this, &SpinButton::on_my_key_press_event));
+};
+
+/**
+ * This callback function should try to convert the entered text to a number and write it to newvalue.
+ * It calls a method to evaluate the (potential) mathematical expression.
+ *
+ * @retval false No conversion done, continue with default handler.
+ * @retval true Conversion successful, don't call default handler.
+ */
+int
+SpinButton::on_input(double* newvalue)
+{
+ try {
+ Inkscape::Util::GimpEevlQuantity result;
+ if (_unit_menu) {
+ Unit unit = _unit_menu->getUnit();
+ result = Inkscape::Util::gimp_eevl_evaluate (get_text().c_str(), &unit);
+ // check if output dimension corresponds to input unit
+ if (result.dimension != (unit.isAbsolute() ? 1 : 0) ) {
+ throw Inkscape::Util::EvaluatorException("Input dimensions do not match with parameter dimensions.","");
+ }
+ } else {
+ result = Inkscape::Util::gimp_eevl_evaluate (get_text().c_str(), NULL);
+ }
+
+ *newvalue = result.value;
+ }
+ catch(Inkscape::Util::EvaluatorException &e) {
+ g_message ("%s", e.what());
+
+ return false;
+ }
+
+ return true;
+}
+
+/** When focus is obtained, save the value to enable undo later.
+ * @retval false continue with default handler.
+ * @retval true don't call default handler.
+*/
+bool
+SpinButton::on_my_focus_in_event(GdkEventFocus* /*event*/)
+{
+ on_focus_in_value = get_value();
+ return false; // do not consume the event
+}
+
+/** Handle specific keypress events, like Ctrl+Z
+ * @retval false continue with default handler.
+ * @retval true don't call default handler.
+*/
+bool
+SpinButton::on_my_key_press_event(GdkEventKey* event)
+{
+ switch (get_group0_keyval (event)) {
+ case GDK_Escape:
+ undo();
+ return true; // I consumed the event
+ break;
+ case GDK_z:
+ case GDK_Z:
+ if (event->state & GDK_CONTROL_MASK) {
+ undo();
+ return true; // I consumed the event
+ }
+ break;
+ default:
+ break;
+ }
+
+ return false; // do not consume the event
+}
+
+/**
+ * Undo the editing, by resetting the value upon when the spinbutton got focus.
+ */
+void
+SpinButton::undo()
+{
+ set_value(on_focus_in_value);
+}
+
+
+} // namespace Widget
+} // namespace UI
+} // namespace Inkscape
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=c++:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
diff --git a/src/ui/widget/spinbutton.h b/src/ui/widget/spinbutton.h
new file mode 100644
index 000000000..df913553d
--- /dev/null
+++ b/src/ui/widget/spinbutton.h
@@ -0,0 +1,81 @@
+/**
+ * \brief SpinButton widget, that allows entry of both '.' and ',' for the decimal, even when in numeric mode.
+ */
+/*
+ * Author:
+ * Johan B. C. Engelen
+ *
+ * Copyright (C) 2011 Author
+ *
+ * Released under GNU GPL. Read the file 'COPYING' for more information.
+ */
+
+#ifndef INKSCAPE_UI_WIDGET_SPINBUTTON_H
+#define INKSCAPE_UI_WIDGET_SPINBUTTON_H
+
+#include <gtkmm/spinbutton.h>
+
+namespace Inkscape {
+namespace UI {
+namespace Widget {
+
+class UnitMenu;
+
+/**
+ * SpinButton widget, that allows entry of simple math expressions (also units, when linked with UnitMenu).
+ *
+ * Calling "set_numeric()" effectively disables the expression parsing. If no unit menu is linked, all unitlike characters are ignored.
+ */
+class SpinButton : public Gtk::SpinButton
+{
+public:
+ SpinButton(double climb_rate = 0.0, guint digits = 0)
+ : Gtk::SpinButton(climb_rate, digits),
+ _unit_menu(NULL)
+ {
+ connect_signals();
+ };
+ explicit SpinButton(Gtk::Adjustment& adjustment, double climb_rate = 0.0, guint digits = 0)
+ : Gtk::SpinButton(adjustment, climb_rate, digits),
+ _unit_menu(NULL)
+ {
+ connect_signals();
+ };
+
+ virtual ~SpinButton() {};
+
+ void setUnitMenu(UnitMenu* unit_menu) { _unit_menu = unit_menu; };
+
+protected:
+ UnitMenu *_unit_menu; /// Linked unit menu for unit conversion in entered expressions.
+
+ void connect_signals();
+ int on_input(double* newvalue);
+ bool on_my_focus_in_event(GdkEventFocus* event);
+ bool on_my_key_press_event(GdkEventKey* event);
+ void undo();
+
+ double on_focus_in_value;
+
+private:
+ // noncopyable
+ SpinButton(const SpinButton&);
+ SpinButton& operator=(const SpinButton&);
+};
+
+} // namespace Widget
+} // namespace UI
+} // namespace Inkscape
+
+#endif // INKSCAPE_UI_WIDGET_SPINBUTTON_H
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=c++:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
diff --git a/src/ui/widget/toolbox.cpp b/src/ui/widget/toolbox.cpp
index e90a58b6e..5e5f43263 100644
--- a/src/ui/widget/toolbox.cpp
+++ b/src/ui/widget/toolbox.cpp
@@ -14,7 +14,7 @@
#endif
#include <gtkmm/radioaction.h>
-#include <gtk/gtkmain.h>
+#include <gtk/gtk.h>
#include "ui/widget/toolbox.h"
#include "path-prefix.h"
diff --git a/src/ui/widget/unit-menu.cpp b/src/ui/widget/unit-menu.cpp
index b4271762c..362f5d90f 100644
--- a/src/ui/widget/unit-menu.cpp
+++ b/src/ui/widget/unit-menu.cpp
@@ -54,6 +54,27 @@ UnitMenu::setUnitType(UnitType unit_type)
return true;
}
+/** Removes all unit entries, then adds the unit type to the widget.
+ This extracts the corresponding
+ units from the unit map matching the given type, and appends them
+ to the dropdown widget. It causes the primary unit for the given
+ unit_type to be selected. */
+bool
+UnitMenu::resetUnitType(UnitType unit_type)
+{
+ clear_text();
+
+ return setUnitType(unit_type);
+}
+
+/** Adds a unit, possibly user-defined, to the menu. */
+void
+UnitMenu::addUnit(Unit const& u)
+{
+ _unit_table.addUnit(u, false);
+ append_text(u.abbr);
+}
+
/** Returns the Unit object corresponding to the current selection
in the dropdown widget */
Unit
diff --git a/src/ui/widget/unit-menu.h b/src/ui/widget/unit-menu.h
index 60a9702b4..cf42231ba 100644
--- a/src/ui/widget/unit-menu.h
+++ b/src/ui/widget/unit-menu.h
@@ -28,6 +28,8 @@ public:
virtual ~UnitMenu();
bool setUnitType(UnitType unit_type);
+ bool resetUnitType(UnitType unit_type);
+ void addUnit(Unit const& u);
bool setUnit(Glib::ustring const &unit);
diff --git a/src/ui/widget/zoom-status.h b/src/ui/widget/zoom-status.h
index 58d595329..85c3eeee1 100644
--- a/src/ui/widget/zoom-status.h
+++ b/src/ui/widget/zoom-status.h
@@ -13,7 +13,7 @@
*/
#include <gtkmm/adjustment.h>
-#include <gtkmm/spinbutton.h>
+#include "ui/widget/spinbutton.h"
struct SPDesktop;
@@ -22,7 +22,7 @@ namespace Inkscape {
namespace UI {
namespace Widget {
-class ZoomStatus : public Gtk::SpinButton
+class ZoomStatus : public Inkscape::UI::Widget::SpinButton
{
public:
ZoomStatus();
diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt
index 18237ac75..5c8411437 100644
--- a/src/util/CMakeLists.txt
+++ b/src/util/CMakeLists.txt
@@ -1,7 +1,41 @@
-SET(util_SRC
-share.cpp
-units.cpp
+
+set(util_SRC
+ ege-appear-time-tracker.cpp
+ ege-tags.cpp
+ expression-evaluator.cpp
+ share.cpp
+ units.cpp
+
+ accumulators.h
+ compose.hpp
+ copy.h
+ ege-appear-time-tracker.h
+ ege-tags.h
+ enums.h
+ expression-evaluator.h
+ filter-list.h
+ find-if-before.h
+ find-last-if.h
+ fixed_point.h
+ format.h
+ forward-pointer-iterator.h
+ function.h
+ glib-list-iterators.h
+ list-container-test.h
+ list-container.h
+ list-copy.h
+ list.h
+ longest-common-suffix.h
+ map-list.h
+ mathfns.h
+ reference.h
+ reverse-list.h
+ share.h
+ tuple.h
+ ucompose.hpp
+ units.h
+ unordered-containers.h
)
-ADD_LIBRARY(util STATIC ${util_SRC})
-TARGET_LINK_LIBRARIES(util
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+# add_inkscape_lib(util_LIB "${util_SRC}")
+add_inkscape_source("${util_SRC}")
diff --git a/src/util/Makefile_insert b/src/util/Makefile_insert
index deff951d4..4066ffd5d 100644
--- a/src/util/Makefile_insert
+++ b/src/util/Makefile_insert
@@ -9,6 +9,8 @@ ink_common_sources += \
util/ege-appear-time-tracker.h \
util/ege-tags.h \
util/ege-tags.cpp \
+ util/expression-evaluator.h \
+ util/expression-evaluator.cpp \
util/filter-list.h \
util/find-if-before.h \
util/find-last-if.h \
diff --git a/src/util/expression-evaluator.cpp b/src/util/expression-evaluator.cpp
new file mode 100644
index 000000000..87937be9a
--- /dev/null
+++ b/src/util/expression-evaluator.cpp
@@ -0,0 +1,569 @@
+/* LIBGIMP - The GIMP Library
+ * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
+ *
+ * Original file from libgimpwidgets: gimpeevl.c
+ * Copyright (C) 2008 Fredrik Alstromer <roe@excu.se>
+ * Copyright (C) 2008 Martin Nordholts <martinn@svn.gnome.org>
+ * Modified for Inkscape by Johan Engelen
+ * Copyright (C) 2011 Johan Engelen
+ *
+ * This library is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/** Introducing eevl eva, the evaluator. A straightforward recursive
+ * descent parser, no fuss, no new dependencies. The lexer is hand
+ * coded, tedious, not extremely fast but works. It evaluates the
+ * expression as it goes along, and does not create a parse tree or
+ * anything, and will not optimize anything. It uses doubles for
+ * precision, with the given use case, that's enough to combat any
+ * rounding errors (as opposed to optimizing the evalutation).
+ *
+ * It relies on external unit resolving through a callback and does
+ * elementary dimensionality constraint check (e.g. "2 mm + 3 px * 4
+ * in" is an error, as L + L^2 is a missmatch). It uses g_strtod() for numeric
+ * conversions and it's non-destructive in terms of the paramters, and
+ * it's reentrant.
+ *
+ * EBNF:
+ *
+ * expression ::= term { ('+' | '-') term }* |
+ * <empty string> ;
+ *
+ * term ::= signed factor { ( '*' | '/' ) signed factor }* ;
+ *
+ * signed factor ::= ( '+' | '-' )? factor ;
+ *
+ * unit factor ::= factor unit? ;
+ *
+ * factor ::= number | '(' expression ')' ;
+ *
+ * number ::= ? what g_strtod() consumes ? ;
+ *
+ * unit ::= ? what not g_strtod() consumes and not whitespace ? ;
+ *
+ * The code should match the EBNF rather closely (except for the
+ * non-terminal unit factor, which is inlined into factor) for
+ * maintainability reasons.
+ *
+ * It will allow 1++1 and 1+-1 (resulting in 2 and 0, respectively),
+ * but I figured one might want that, and I don't think it's going to
+ * throw anyone off.
+ */
+
+#include "config.h"
+
+#include "util/expression-evaluator.h"
+#include "util/units.h"
+
+#include <string.h>
+
+namespace Inkscape {
+namespace Util {
+
+enum
+{
+ GIMP_EEVL_TOKEN_NUM = 30000,
+ GIMP_EEVL_TOKEN_IDENTIFIER = 30001,
+
+ GIMP_EEVL_TOKEN_ANY = 40000,
+
+ GIMP_EEVL_TOKEN_END = 50000
+};
+
+typedef int GimpEevlTokenType;
+
+
+typedef struct
+{
+ GimpEevlTokenType type;
+
+ union
+ {
+ gdouble fl;
+
+ struct
+ {
+ const gchar *c;
+ gint size;
+ };
+
+ } value;
+
+} GimpEevlToken;
+
+typedef struct
+{
+ const gchar *string;
+ GimpEevlUnitResolverProc unit_resolver_proc;
+ Unit *unit;
+
+ GimpEevlToken current_token;
+ const gchar *start_of_current_token;
+} GimpEevl;
+
+/** Unit Resolver...
+ */
+bool unitresolverproc (const gchar* identifier, GimpEevlQuantity *result, Unit* unit)
+{
+ static UnitTable unit_table;
+
+ if (!unit) {
+ result->value = 1;
+ result->dimension = 1;
+ return true;
+ }else if (!identifier) {
+ result->value = 1;
+ result->dimension = unit->isAbsolute() ? 1 : 0;
+ return true;
+ } else if (unit_table.hasUnit(identifier)) {
+ Unit identifier_unit = unit_table.getUnit(identifier);
+
+ // Catch the case of zero or negative unit factors (error!)
+ if (identifier_unit.factor < 0.0000001) {
+ return false;
+ }
+
+ result->value = unit->factor / identifier_unit.factor;
+ result->dimension = identifier_unit.isAbsolute() ? 1 : 0;
+ return true;
+ } else {
+ return false;
+ }
+}
+
+static void gimp_eevl_init (GimpEevl *eva,
+ const gchar *string,
+ GimpEevlUnitResolverProc unit_resolver_proc,
+ Unit *unit);
+static GimpEevlQuantity gimp_eevl_complete (GimpEevl *eva);
+static GimpEevlQuantity gimp_eevl_expression (GimpEevl *eva);
+static GimpEevlQuantity gimp_eevl_term (GimpEevl *eva);
+static GimpEevlQuantity gimp_eevl_signed_factor (GimpEevl *eva);
+static GimpEevlQuantity gimp_eevl_factor (GimpEevl *eva);
+static gboolean gimp_eevl_accept (GimpEevl *eva,
+ GimpEevlTokenType token_type,
+ GimpEevlToken *consumed_token);
+static void gimp_eevl_lex (GimpEevl *eva);
+static void gimp_eevl_lex_accept_count (GimpEevl *eva,
+ gint count,
+ GimpEevlTokenType token_type);
+static void gimp_eevl_lex_accept_to (GimpEevl *eva,
+ gchar *to,
+ GimpEevlTokenType token_type);
+static void gimp_eevl_move_past_whitespace (GimpEevl *eva);
+static gboolean gimp_eevl_unit_identifier_start (gunichar c);
+static gboolean gimp_eevl_unit_identifier_continue (gunichar c);
+static gint gimp_eevl_unit_identifier_size (const gchar *s,
+ gint start);
+static void gimp_eevl_expect (GimpEevl *eva,
+ GimpEevlTokenType token_type,
+ GimpEevlToken *value);
+static void gimp_eevl_error (GimpEevl *eva,
+ const char *msg);
+
+
+/**
+ * Evaluates the given arithmetic expression, along with an optional dimension
+ * analysis, and basic unit conversions.
+ *
+ * @param string The NULL-terminated string to be evaluated.
+ * @param unit_resolver_proc Unit resolver callback.
+ *
+ * All units conversions factors are relative to some implicit
+ * base-unit (which in GIMP is inches). This is also the unit of the
+ * returned value.
+ *
+ * Returns: A #GimpEevlQuantity with a value given in the base unit along with
+ * the order of the dimension (i.e. if the base unit is inches, a dimension
+ * order of two menas in^2).
+ *
+ * @return Result of evaluation.
+ * @throws Inkscape::Util::EvaluatorException There was a parse error.
+ **/
+GimpEevlQuantity
+gimp_eevl_evaluate (const gchar* string, Unit* unit)
+{
+ if (! g_utf8_validate (string, -1, NULL)) {
+ throw EvaluatorException("Invalid UTF8 string", NULL);
+ }
+
+ GimpEevl eva;
+ gimp_eevl_init (&eva, string, unitresolverproc, unit);
+
+ return gimp_eevl_complete(&eva);
+}
+
+static void
+gimp_eevl_init (GimpEevl *eva,
+ const gchar *string,
+ GimpEevlUnitResolverProc unit_resolver_proc,
+ Unit *unit)
+{
+ eva->string = string;
+ eva->unit_resolver_proc = unit_resolver_proc;
+ eva->unit = unit;
+
+ eva->current_token.type = GIMP_EEVL_TOKEN_END;
+
+ /* Preload symbol... */
+ gimp_eevl_lex (eva);
+}
+
+static GimpEevlQuantity
+gimp_eevl_complete (GimpEevl *eva)
+{
+ GimpEevlQuantity result = {0, 0};
+ GimpEevlQuantity default_unit_factor;
+
+ /* Empty expression evaluates to 0 */
+ if (gimp_eevl_accept (eva, GIMP_EEVL_TOKEN_END, NULL))
+ return result;
+
+ result = gimp_eevl_expression (eva);
+
+ /* There should be nothing left to parse by now */
+ gimp_eevl_expect (eva, GIMP_EEVL_TOKEN_END, 0);
+
+ eva->unit_resolver_proc (NULL, &default_unit_factor, eva->unit);
+
+ /* Entire expression is dimensionless, apply default unit if
+ * applicable
+ */
+ if (result.dimension == 0 && default_unit_factor.dimension != 0)
+ {
+ result.value /= default_unit_factor.value;
+ result.dimension = default_unit_factor.dimension;
+ }
+ return result;
+}
+
+static GimpEevlQuantity
+gimp_eevl_expression (GimpEevl *eva)
+{
+ gboolean subtract;
+ GimpEevlQuantity evaluated_terms;
+
+ evaluated_terms = gimp_eevl_term (eva);
+
+ /* continue evaluating terms, chained with + or -. */
+ for (subtract = FALSE;
+ gimp_eevl_accept (eva, '+', NULL) ||
+ (subtract = gimp_eevl_accept (eva, '-', NULL));
+ subtract = FALSE)
+ {
+ GimpEevlQuantity new_term = gimp_eevl_term (eva);
+
+ /* If dimensions missmatch, attempt default unit assignent */
+ if (new_term.dimension != evaluated_terms.dimension)
+ {
+ GimpEevlQuantity default_unit_factor;
+
+ eva->unit_resolver_proc (NULL,
+ &default_unit_factor,
+ eva->unit);
+
+ if (new_term.dimension == 0 &&
+ evaluated_terms.dimension == default_unit_factor.dimension)
+ {
+ new_term.value /= default_unit_factor.value;
+ new_term.dimension = default_unit_factor.dimension;
+ }
+ else if (evaluated_terms.dimension == 0 &&
+ new_term.dimension == default_unit_factor.dimension)
+ {
+ evaluated_terms.value /= default_unit_factor.value;
+ evaluated_terms.dimension = default_unit_factor.dimension;
+ }
+ else
+ {
+ gimp_eevl_error (eva, "Dimension missmatch during addition");
+ }
+ }
+
+ evaluated_terms.value += (subtract ? -new_term.value : new_term.value);
+ }
+
+ return evaluated_terms;
+}
+
+static GimpEevlQuantity
+gimp_eevl_term (GimpEevl *eva)
+{
+ gboolean division;
+ GimpEevlQuantity evaluated_signed_factors;
+
+ evaluated_signed_factors = gimp_eevl_signed_factor (eva);
+
+ for (division = FALSE;
+ gimp_eevl_accept (eva, '*', NULL) ||
+ (division = gimp_eevl_accept (eva, '/', NULL));
+ division = FALSE)
+ {
+ GimpEevlQuantity new_signed_factor = gimp_eevl_signed_factor (eva);
+
+ if (division)
+ {
+ evaluated_signed_factors.value /= new_signed_factor.value;
+ evaluated_signed_factors.dimension -= new_signed_factor.dimension;
+
+ }
+ else
+ {
+ evaluated_signed_factors.value *= new_signed_factor.value;
+ evaluated_signed_factors.dimension += new_signed_factor.dimension;
+ }
+ }
+
+ return evaluated_signed_factors;
+}
+
+static GimpEevlQuantity
+gimp_eevl_signed_factor (GimpEevl *eva)
+{
+ GimpEevlQuantity result;
+ gboolean negate = FALSE;
+
+ if (! gimp_eevl_accept (eva, '+', NULL))
+ negate = gimp_eevl_accept (eva, '-', NULL);
+
+ result = gimp_eevl_factor (eva);
+
+ if (negate) result.value = -result.value;
+
+ return result;
+}
+
+static GimpEevlQuantity
+gimp_eevl_factor (GimpEevl *eva)
+{
+ GimpEevlQuantity evaluated_factor = { 0, 0 };
+ GimpEevlToken consumed_token;
+
+ if (gimp_eevl_accept (eva,
+ GIMP_EEVL_TOKEN_NUM,
+ &consumed_token))
+ {
+ evaluated_factor.value = consumed_token.value.fl;
+ }
+ else if (gimp_eevl_accept (eva, '(', NULL))
+ {
+ evaluated_factor = gimp_eevl_expression (eva);
+ gimp_eevl_expect (eva, ')', 0);
+ }
+ else
+ {
+ gimp_eevl_error (eva, "Expected number or '('");
+ }
+
+ if (eva->current_token.type == GIMP_EEVL_TOKEN_IDENTIFIER)
+ {
+ gchar *identifier;
+ GimpEevlQuantity result;
+
+ gimp_eevl_accept (eva,
+ GIMP_EEVL_TOKEN_ANY,
+ &consumed_token);
+
+ identifier = g_newa (gchar, consumed_token.value.size + 1);
+
+ strncpy (identifier, consumed_token.value.c, consumed_token.value.size);
+ identifier[consumed_token.value.size] = '\0';
+
+ if (eva->unit_resolver_proc (identifier,
+ &result,
+ eva->unit))
+ {
+ evaluated_factor.value /= result.value;
+ evaluated_factor.dimension += result.dimension;
+ }
+ else
+ {
+ gimp_eevl_error (eva, "Unit was not resolved");
+ }
+ }
+
+ return evaluated_factor;
+}
+
+static gboolean
+gimp_eevl_accept (GimpEevl *eva,
+ GimpEevlTokenType token_type,
+ GimpEevlToken *consumed_token)
+{
+ gboolean existed = FALSE;
+
+ if (token_type == eva->current_token.type ||
+ token_type == GIMP_EEVL_TOKEN_ANY)
+ {
+ existed = TRUE;
+
+ if (consumed_token)
+ *consumed_token = eva->current_token;
+
+ /* Parse next token */
+ gimp_eevl_lex (eva);
+ }
+
+ return existed;
+}
+
+static void
+gimp_eevl_lex (GimpEevl *eva)
+{
+ const gchar *s;
+
+ gimp_eevl_move_past_whitespace (eva);
+ s = eva->string;
+ eva->start_of_current_token = s;
+
+ if (! s || s[0] == '\0')
+ {
+ /* We're all done */
+ eva->current_token.type = GIMP_EEVL_TOKEN_END;
+ }
+ else if (s[0] == '+' || s[0] == '-')
+ {
+ /* Snatch these before the g_strtod() does, othewise they might
+ * be used in a numeric conversion.
+ */
+ gimp_eevl_lex_accept_count (eva, 1, s[0]);
+ }
+ else
+
+ {
+ /* Attempt to parse a numeric value */
+ gchar *endptr = NULL;
+ gdouble value = g_strtod (s, &endptr);
+
+ if (endptr && endptr != s)
+ {
+ /* A numeric could be parsed, use it */
+ eva->current_token.value.fl = value;
+
+ gimp_eevl_lex_accept_to (eva, endptr, GIMP_EEVL_TOKEN_NUM);
+ }
+ else if (gimp_eevl_unit_identifier_start (s[0]))
+ {
+ /* Unit identifier */
+ eva->current_token.value.c = s;
+ eva->current_token.value.size = gimp_eevl_unit_identifier_size (s, 0);
+
+ gimp_eevl_lex_accept_count (eva,
+ eva->current_token.value.size,
+ GIMP_EEVL_TOKEN_IDENTIFIER);
+ }
+ else
+ {
+ /* Everything else is a single character token */
+ gimp_eevl_lex_accept_count (eva, 1, s[0]);
+ }
+ }
+}
+
+static void
+gimp_eevl_lex_accept_count (GimpEevl *eva,
+ gint count,
+ GimpEevlTokenType token_type)
+{
+ eva->current_token.type = token_type;
+ eva->string += count;
+}
+
+static void
+gimp_eevl_lex_accept_to (GimpEevl *eva,
+ gchar *to,
+ GimpEevlTokenType token_type)
+{
+ eva->current_token.type = token_type;
+ eva->string = to;
+}
+
+static void
+gimp_eevl_move_past_whitespace (GimpEevl *eva)
+{
+ if (! eva->string)
+ return;
+
+ while (g_ascii_isspace (*eva->string))
+ eva->string++;
+}
+
+static gboolean
+gimp_eevl_unit_identifier_start (gunichar c)
+{
+ return (g_unichar_isalpha (c) ||
+ c == (gunichar) '%' ||
+ c == (gunichar) '\'');
+}
+
+static gboolean
+gimp_eevl_unit_identifier_continue (gunichar c)
+{
+ return (gimp_eevl_unit_identifier_start (c) ||
+ g_unichar_isdigit (c));
+}
+
+/**
+ * gimp_eevl_unit_identifier_size:
+ * @s:
+ * @start:
+ *
+ * Returns: Size of identifier in bytes (not including NULL
+ * terminator).
+ **/
+static gint
+gimp_eevl_unit_identifier_size (const gchar *string,
+ gint start_offset)
+{
+ const gchar *start = g_utf8_offset_to_pointer (string, start_offset);
+ const gchar *s = start;
+ gunichar c = g_utf8_get_char (s);
+ gint length = 0;
+
+ if (gimp_eevl_unit_identifier_start (c))
+ {
+ s = g_utf8_next_char (s);
+ c = g_utf8_get_char (s);
+ length++;
+
+ while (gimp_eevl_unit_identifier_continue (c))
+ {
+ s = g_utf8_next_char (s);
+ c = g_utf8_get_char (s);
+ length++;
+ }
+ }
+
+ return g_utf8_offset_to_pointer (start, length) - start;
+}
+
+static void
+gimp_eevl_expect (GimpEevl *eva,
+ GimpEevlTokenType token_type,
+ GimpEevlToken *value)
+{
+ if (! gimp_eevl_accept (eva, token_type, value))
+ gimp_eevl_error (eva, "Unexpected token");
+}
+
+static void
+gimp_eevl_error (GimpEevl *eva,
+ const char *msg)
+{
+ throw EvaluatorException(msg, eva->start_of_current_token);
+}
+
+} // namespace Util
+} // namespace Inkscape
diff --git a/src/util/expression-evaluator.h b/src/util/expression-evaluator.h
new file mode 100644
index 000000000..90789a25f
--- /dev/null
+++ b/src/util/expression-evaluator.h
@@ -0,0 +1,80 @@
+/* LIBGIMP - The GIMP Library
+ * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
+ *
+ * Original file from libgimpwidgets: gimpeevl.h
+ * Copyright (C) 2008-2009 Fredrik Alstromer <roe@excu.se>
+ * Copyright (C) 2008-2009 Martin Nordholts <martinn@svn.gnome.org>
+ * Modified for Inkscape by Johan Engelen
+ * Copyright (C) 2011 Johan Engelen
+ *
+ * This library is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GIMP_EEVL_H__
+#define __GIMP_EEVL_H__
+
+#include "util/units.h"
+
+#include <exception>
+#include <sstream>
+#include <string>
+
+namespace Inkscape {
+namespace Util {
+
+class Unit;
+
+/**
+* GimpEevlQuantity:
+* @value: In reference units.
+* @dimension: in has a dimension of 1, in^2 has a dimension of 2 etc
+*/
+typedef struct
+{
+ double value;
+ gint dimension;
+} GimpEevlQuantity;
+
+typedef bool (* GimpEevlUnitResolverProc) (const gchar *identifier,
+ GimpEevlQuantity *result,
+ Unit* unit);
+
+GimpEevlQuantity gimp_eevl_evaluate (const gchar* string, Unit* unit = NULL);
+
+/**
+ * Special exception class for the expression evaluator.
+ */
+class EvaluatorException : public std::exception {
+public:
+ EvaluatorException(const char * message, const char *at_position) {
+ std::ostringstream os;
+ const char* token = at_position ? at_position : "<End of input>";
+ os << "Expression evaluator error: " << message << " at '" << token << "'";
+ msgstr = os.str();
+ }
+
+ virtual ~EvaluatorException() throw() {} // necessary to destroy the string object!!!
+
+ virtual const char* what() const throw () {
+ return msgstr.c_str();
+ }
+protected:
+ std::string msgstr;
+};
+
+}
+}
+
+#endif /* __GIMP_EEVL_H__ */
diff --git a/src/verbs.cpp b/src/verbs.cpp
index 3e0dbf98c..1cdbd71d0 100644
--- a/src/verbs.cpp
+++ b/src/verbs.cpp
@@ -29,7 +29,7 @@
#endif
#include <cstring>
-#include <gtk/gtkstock.h>
+#include <gtk/gtk.h>
#include <gtkmm/filechooserdialog.h>
#include <gtkmm/messagedialog.h>
#include <gtkmm/stock.h>
@@ -1463,6 +1463,9 @@ ContextVerb::perform(SPAction *action, void *data, void */*pdata*/)
case SP_VERB_CONTEXT_ZOOM:
tools_switch(dt, TOOLS_ZOOM);
break;
+ case SP_VERB_CONTEXT_MEASURE:
+ tools_switch(dt, TOOLS_MEASURE);
+ break;
case SP_VERB_CONTEXT_DROPPER:
tools_switch(dt, TOOLS_DROPPER);
break;
@@ -1539,6 +1542,10 @@ ContextVerb::perform(SPAction *action, void *data, void */*pdata*/)
prefs->setInt("/dialogs/preferences/page", PREFS_PAGE_TOOLS_ZOOM);
dt->_dlg_mgr->showDialog("InkscapePreferences");
break;
+ case SP_VERB_CONTEXT_MEASURE_PREFS:
+ prefs->setInt("/dialogs/preferences/page", PREFS_PAGE_TOOLS_MEASURE);
+ dt->_dlg_mgr->showDialog("InkscapePreferences");
+ break;
case SP_VERB_CONTEXT_DROPPER_PREFS:
prefs->setInt("/dialogs/preferences/page", PREFS_PAGE_TOOLS_DROPPER);
dt->_dlg_mgr->showDialog("InkscapePreferences");
@@ -2293,7 +2300,7 @@ Verb *Verb::_base_verbs[] = {
N_("Apply the path effect of the copied object to selection"), NULL),
new EditVerb(SP_VERB_EDIT_REMOVE_LIVEPATHEFFECT, "RemoveLivePathEffect", N_("Remove Path _Effect"),
N_("Remove any path effects from selected objects"), NULL),
- new EditVerb(SP_VERB_EDIT_REMOVE_FILTER, "RemoveFilter", N_("Remove Filters"),
+ new EditVerb(SP_VERB_EDIT_REMOVE_FILTER, "RemoveFilter", N_("_Remove Filters"),
N_("Remove any filters from selected objects"), NULL),
new EditVerb(SP_VERB_EDIT_DELETE, "EditDelete", N_("_Delete"),
N_("Delete selection"), GTK_STOCK_DELETE),
@@ -2517,6 +2524,8 @@ Verb *Verb::_base_verbs[] = {
N_("Create and edit gradients"), INKSCAPE_ICON_COLOR_GRADIENT),
new ContextVerb(SP_VERB_CONTEXT_ZOOM, "ToolZoom", N_("Zoom"),
N_("Zoom in or out"), INKSCAPE_ICON_ZOOM),
+ new ContextVerb(SP_VERB_CONTEXT_MEASURE, "ToolMeasure", N_("Measure"),
+ N_("Measurement tool"), INKSCAPE_ICON_MEASURE),
new ContextVerb(SP_VERB_CONTEXT_DROPPER, "ToolDropper", N_("Dropper"),
N_("Pick colors from image"), INKSCAPE_ICON_COLOR_PICKER),
new ContextVerb(SP_VERB_CONTEXT_CONNECTOR, "ToolConnector", N_("Connector"),
@@ -2560,6 +2569,8 @@ Verb *Verb::_base_verbs[] = {
N_("Open Preferences for the Gradient tool"), NULL),
new ContextVerb(SP_VERB_CONTEXT_ZOOM_PREFS, "ZoomPrefs", N_("Zoom Preferences"),
N_("Open Preferences for the Zoom tool"), NULL),
+ new ContextVerb(SP_VERB_CONTEXT_MEASURE_PREFS, "MeasurePrefs", N_("Measure Preferences"),
+ N_("Open Preferences for the Measure tool"), NULL),
new ContextVerb(SP_VERB_CONTEXT_DROPPER_PREFS, "DropperPrefs", N_("Dropper Preferences"),
N_("Open Preferences for the Dropper tool"), NULL),
new ContextVerb(SP_VERB_CONTEXT_CONNECTOR_PREFS, "ConnectorPrefs", N_("Connector Preferences"),
@@ -2640,7 +2651,7 @@ Verb *Verb::_base_verbs[] = {
N_("Edit document metadata (to be saved with the document)"), INKSCAPE_ICON_DOCUMENT_METADATA ),
new DialogVerb(SP_VERB_DIALOG_FILL_STROKE, "DialogFillStroke", N_("_Fill and Stroke..."),
N_("Edit objects' colors, gradients, arrowheads, and other fill and stroke properties..."), INKSCAPE_ICON_DIALOG_FILL_AND_STROKE),
- new DialogVerb(SP_VERB_DIALOG_GLYPHS, "DialogGlyphs", N_("Glyphs..."),
+ new DialogVerb(SP_VERB_DIALOG_GLYPHS, "DialogGlyphs", N_("Gl_yphs..."),
N_("Select characters from a glyphs palette"), GTK_STOCK_SELECT_FONT),
// TRANSLATORS: "Swatches" means: color samples
new DialogVerb(SP_VERB_DIALOG_SWATCHES, "DialogSwatches", N_("S_watches..."),
@@ -2685,7 +2696,7 @@ Verb *Verb::_base_verbs[] = {
N_("View Layers"), INKSCAPE_ICON_DIALOG_LAYERS),
new DialogVerb(SP_VERB_DIALOG_LIVE_PATH_EFFECT, "DialogLivePathEffect", N_("Path E_ffect Editor..."),
N_("Manage, edit, and apply path effects"), NULL),
- new DialogVerb(SP_VERB_DIALOG_FILTER_EFFECTS, "DialogFilterEffects", N_("Filter Editor..."),
+ new DialogVerb(SP_VERB_DIALOG_FILTER_EFFECTS, "DialogFilterEffects", N_("Filter _Editor..."),
N_("Manage, edit, and apply SVG filters"), NULL),
new DialogVerb(SP_VERB_DIALOG_SVG_FONTS, "DialogSVGFonts", N_("SVG Font Editor..."),
N_("Edit SVG fonts"), NULL),
@@ -2722,9 +2733,9 @@ Verb *Verb::_base_verbs[] = {
N_("Miscellaneous tips and tricks"), NULL/*"tutorial_tips"*/),
/* Effect -- renamed Extension */
- new EffectLastVerb(SP_VERB_EFFECT_LAST, "EffectLast", N_("Previous Extension"),
+ new EffectLastVerb(SP_VERB_EFFECT_LAST, "EffectLast", N_("Previous Exte_nsion"),
N_("Repeat the last extension with the same settings"), NULL),
- new EffectLastVerb(SP_VERB_EFFECT_LAST_PREF, "EffectLastPref", N_("Previous Extension Settings..."),
+ new EffectLastVerb(SP_VERB_EFFECT_LAST_PREF, "EffectLastPref", N_("_Previous Extension Settings..."),
N_("Repeat the last extension with new settings"), NULL),
/* Fit Page */
diff --git a/src/verbs.h b/src/verbs.h
index 91e00c307..5387b57c2 100644
--- a/src/verbs.h
+++ b/src/verbs.h
@@ -164,6 +164,7 @@ enum {
SP_VERB_CONTEXT_TEXT,
SP_VERB_CONTEXT_GRADIENT,
SP_VERB_CONTEXT_ZOOM,
+ SP_VERB_CONTEXT_MEASURE,
SP_VERB_CONTEXT_DROPPER,
SP_VERB_CONTEXT_CONNECTOR,
SP_VERB_CONTEXT_PAINTBUCKET,
@@ -186,6 +187,7 @@ enum {
SP_VERB_CONTEXT_TEXT_PREFS,
SP_VERB_CONTEXT_GRADIENT_PREFS,
SP_VERB_CONTEXT_ZOOM_PREFS,
+ SP_VERB_CONTEXT_MEASURE_PREFS,
SP_VERB_CONTEXT_DROPPER_PREFS,
SP_VERB_CONTEXT_CONNECTOR_PREFS,
SP_VERB_CONTEXT_PAINTBUCKET_PREFS,
@@ -286,7 +288,10 @@ enum {
SP_VERB_EDIT_REMOVE_COLOR_PROFILE,
/*Scripting*/
SP_VERB_EDIT_ADD_EXTERNAL_SCRIPT,
+ SP_VERB_EDIT_ADD_EMBEDDED_SCRIPT,
+ SP_VERB_EDIT_EMBEDDED_SCRIPT,
SP_VERB_EDIT_REMOVE_EXTERNAL_SCRIPT,
+ SP_VERB_EDIT_REMOVE_EMBEDDED_SCRIPT,
/* Footer */
SP_VERB_LAST
};
diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt
index f3c0e70fa..d9e05f06a 100644
--- a/src/widgets/CMakeLists.txt
+++ b/src/widgets/CMakeLists.txt
@@ -1,36 +1,77 @@
-SET(widgets_SRC
-button.cpp
-calligraphic-profile-rename.cpp
-dash-selector.cpp
-desktop-widget.cpp
-font-selector.cpp
-gradient-image.cpp
-gradient-selector.cpp
-gradient-toolbar.cpp
-gradient-vector.cpp
-icon.cpp
-layer-selector.cpp
-paint-selector.cpp
-ruler.cpp
-select-toolbar.cpp
-shrink-wrap-button.cpp
-sp-color-gtkselector.cpp
-sp-color-icc-selector.cpp
-sp-color-notebook.cpp
-sp-color-preview.cpp
-sp-color-scales.cpp
-sp-color-selector.cpp
-sp-color-slider.cpp
-sp-color-wheel-selector.cpp
-spinbutton-events.cpp
-sp-widget.cpp
-spw-utilities.cpp
-sp-xmlview-attr-list.cpp
-sp-xmlview-content.cpp
-sp-xmlview-tree.cpp
-swatch-selector.cpp
-toolbox.cpp
+
+set(widgets_SRC
+ button.cpp
+ dash-selector.cpp
+ desktop-widget.cpp
+ eek-preview.cpp
+ ege-paint-def.cpp
+ fill-style.cpp
+ font-selector.cpp
+ gradient-image.cpp
+ gradient-selector.cpp
+ gradient-toolbar.cpp
+ gradient-vector.cpp
+ icon.cpp
+ paint-selector.cpp
+ ruler.cpp
+ select-toolbar.cpp
+ shrink-wrap-button.cpp
+ sp-attribute-widget.cpp
+ sp-color-gtkselector.cpp
+ sp-color-icc-selector.cpp
+ sp-color-notebook.cpp
+ sp-color-preview.cpp
+ sp-color-scales.cpp
+ sp-color-selector.cpp
+ sp-color-slider.cpp
+ sp-color-wheel-selector.cpp
+ sp-widget.cpp
+ sp-xmlview-attr-list.cpp
+ sp-xmlview-content.cpp
+ sp-xmlview-tree.cpp
+ spinbutton-events.cpp
+ spw-utilities.cpp
+ stroke-style.cpp
+ swatch-selector.cpp
+ toolbox.cpp
+
+ button.h
+ dash-selector.h
+ desktop-widget.h
+ eek-preview.h
+ ege-paint-def.h
+ fill-n-stroke-factory.h
+ fill-style.h
+ font-selector.h
+ gradient-image.h
+ gradient-selector.h
+ gradient-toolbar.h
+ gradient-vector.h
+ icon.h
+ paint-selector.h
+ ruler.h
+ select-toolbar.h
+ shrink-wrap-button.h
+ sp-attribute-widget.h
+ sp-color-gtkselector.h
+ sp-color-icc-selector.h
+ sp-color-notebook.h
+ sp-color-preview.h
+ sp-color-scales.h
+ sp-color-selector.h
+ sp-color-slider.h
+ sp-color-wheel-selector.h
+ sp-widget.h
+ sp-xmlview-attr-list.h
+ sp-xmlview-content.h
+ sp-xmlview-tree.h
+ spinbutton-events.h
+ spw-utilities.h
+ stroke-style.h
+ swatch-selector.h
+ toolbox.h
+ widget-sizes.h
)
-ADD_LIBRARY(widgets STATIC ${widgets_SRC})
-TARGET_LINK_LIBRARIES(widgets
-2geom ${INKSCAPE_LIBS})
+
+# add_inkscape_lib(widgets_LIB "${widgets_SRC}")
+add_inkscape_source("${widgets_SRC}")
diff --git a/src/widgets/button.cpp b/src/widgets/button.cpp
index dc830d096..e0b3a0fb9 100644
--- a/src/widgets/button.cpp
+++ b/src/widgets/button.cpp
@@ -46,7 +46,7 @@ static void sp_button_set_doubleclick_action (SPButton *button, SPAction *action
static void sp_button_action_set_active (SPAction *action, unsigned int active, void *data);
static void sp_button_action_set_sensitive (SPAction *action, unsigned int sensitive, void *data);
static void sp_button_action_set_shortcut (SPAction *action, unsigned int shortcut, void *data);
-static void sp_button_set_composed_tooltip (GtkTooltips *tooltips, GtkWidget *widget, SPAction *action);
+static void sp_button_set_composed_tooltip (GtkWidget *widget, SPAction *action);
static GtkToggleButtonClass *parent_class;
SPActionEventVector button_event_vector = {
@@ -98,12 +98,11 @@ sp_button_init (SPButton *button)
{
button->action = NULL;
button->doubleclick_action = NULL;
- button->tooltips = NULL;
gtk_container_set_border_width (GTK_CONTAINER (button), 0);
- GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (button), GTK_CAN_FOCUS);
- GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (button), GTK_CAN_DEFAULT);
+ gtk_widget_set_can_focus (GTK_WIDGET (button), FALSE);
+ gtk_widget_set_can_default (GTK_WIDGET (button), FALSE);
g_signal_connect_after (G_OBJECT (button), "clicked", G_CALLBACK (sp_button_perform_action), NULL);
g_signal_connect_after (G_OBJECT (button), "event", G_CALLBACK (sp_button_process_event), NULL);
@@ -116,11 +115,6 @@ sp_button_destroy (GtkObject *object)
button = SP_BUTTON (object);
- if (button->tooltips) {
- g_object_unref (G_OBJECT (button->tooltips));
- button->tooltips = NULL;
- }
-
if (button->action) {
sp_button_set_action (button, NULL);
}
@@ -186,7 +180,7 @@ sp_button_perform_action (SPButton *button, gpointer /*data*/)
GtkWidget *
-sp_button_new( Inkscape::IconSize size, SPButtonType type, SPAction *action, SPAction *doubleclick_action, GtkTooltips *tooltips )
+sp_button_new( Inkscape::IconSize size, SPButtonType type, SPAction *action, SPAction *doubleclick_action )
{
SPButton *button;
@@ -194,9 +188,6 @@ sp_button_new( Inkscape::IconSize size, SPButtonType type, SPAction *action, SPA
button->type = type;
button->lsize = CLAMP( size, Inkscape::ICON_SIZE_MENU, Inkscape::ICON_SIZE_DECORATION );
- button->tooltips = tooltips;
-
- if (tooltips) g_object_ref ((GObject *) tooltips);
sp_button_set_action (button, action);
if (doubleclick_action)
@@ -253,9 +244,7 @@ sp_button_set_action (SPButton *button, SPAction *action)
}
}
- if (button->tooltips) {
- sp_button_set_composed_tooltip (button->tooltips, (GtkWidget *) button, action);
- }
+ sp_button_set_composed_tooltip ((GtkWidget *) button, action);
}
static void
@@ -283,12 +272,10 @@ static void
sp_button_action_set_shortcut (SPAction *action, unsigned int /*shortcut*/, void *data)
{
SPButton *button=SP_BUTTON (data);
- if (button->tooltips) {
- sp_button_set_composed_tooltip (button->tooltips, GTK_WIDGET (button), action);
- }
+ sp_button_set_composed_tooltip (GTK_WIDGET (button), action);
}
-static void sp_button_set_composed_tooltip(GtkTooltips *tooltips, GtkWidget *widget, SPAction *action)
+static void sp_button_set_composed_tooltip(GtkWidget *widget, SPAction *action)
{
if (action) {
unsigned int shortcut = sp_shortcut_get_primary (action->verb);
@@ -298,16 +285,16 @@ static void sp_button_set_composed_tooltip(GtkTooltips *tooltips, GtkWidget *wid
gchar *key = sp_shortcut_get_label(shortcut);
gchar *tip = g_strdup_printf ("%s (%s)", action->tip, key);
- gtk_tooltips_set_tip(tooltips, widget, tip, NULL);
+ gtk_widget_set_tooltip_text(widget, tip);
g_free(tip);
g_free(key);
} else {
// action has no shortcut
- gtk_tooltips_set_tip(tooltips, widget, action->tip, NULL);
+ gtk_widget_set_tooltip_text(widget, action->tip);
}
} else {
// no action
- gtk_tooltips_set_tip(tooltips, widget, NULL, NULL);
+ gtk_widget_set_tooltip_text(widget, NULL);
}
}
@@ -316,12 +303,11 @@ sp_button_new_from_data( Inkscape::IconSize size,
SPButtonType type,
Inkscape::UI::View::View *view,
const gchar *name,
- const gchar *tip,
- GtkTooltips *tooltips )
+ const gchar *tip )
{
GtkWidget *button;
SPAction *action=sp_action_new(view, name, name, tip, name, 0);
- button = sp_button_new (size, type, action, NULL, tooltips);
+ button = sp_button_new (size, type, action, NULL);
nr_object_unref ((NRObject *) action);
return button;
}
diff --git a/src/widgets/button.h b/src/widgets/button.h
index f14af94d1..759096443 100644
--- a/src/widgets/button.h
+++ b/src/widgets/button.h
@@ -13,12 +13,10 @@
*/
#define SP_TYPE_BUTTON (sp_button_get_type ())
-#define SP_BUTTON(o) (GTK_CHECK_CAST ((o), SP_TYPE_BUTTON, SPButton))
-#define SP_IS_BUTTON(o) (GTK_CHECK_TYPE ((o), SP_TYPE_BUTTON))
+#define SP_BUTTON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_BUTTON, SPButton))
+#define SP_IS_BUTTON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_BUTTON))
-#include <gtk/gtkwidget.h>
-#include <gtk/gtktogglebutton.h>
-#include <gtk/gtktooltips.h>
+#include <gtk/gtk.h>
#include "helper/action.h"
#include "icon-size.h"
@@ -40,7 +38,6 @@ struct SPButton {
unsigned int psize;
SPAction *action;
SPAction *doubleclick_action;
- GtkTooltips *tooltips;
};
struct SPButtonClass {
@@ -51,7 +48,7 @@ struct SPButtonClass {
GType sp_button_get_type (void);
-GtkWidget *sp_button_new (Inkscape::IconSize size, SPButtonType type, SPAction *action, SPAction *doubleclick_action, GtkTooltips *tooltips);
+GtkWidget *sp_button_new (Inkscape::IconSize size, SPButtonType type, SPAction *action, SPAction *doubleclick_action);
void sp_button_toggle_set_down (SPButton *button, gboolean down);
@@ -59,8 +56,7 @@ GtkWidget *sp_button_new_from_data (Inkscape::IconSize size,
SPButtonType type,
Inkscape::UI::View::View *view,
const gchar *name,
- const gchar *tip,
- GtkTooltips *tooltips);
+ const gchar *tip);
diff --git a/src/widgets/dash-selector.cpp b/src/widgets/dash-selector.cpp
index e7e029334..dead653de 100644
--- a/src/widgets/dash-selector.cpp
+++ b/src/widgets/dash-selector.cpp
@@ -32,7 +32,7 @@
#include <gtkmm/optionmenu.h>
#include <gtkmm/adjustment.h>
-#include <gtkmm/spinbutton.h>
+#include "ui/widget/spinbutton.h"
#include "dash-selector.h"
@@ -73,7 +73,7 @@ SPDashSelector::SPDashSelector() {
dash->set_menu(*m);
offset = new Gtk::Adjustment(0.0, 0.0, 10.0, 0.1, 1.0, 0.0);
- Gtk::SpinButton *sb = new Gtk::SpinButton(*offset, 0.1, 2);
+ Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton(*offset, 0.1, 2);
tt->set_tip(*sb, _("Pattern offset"));
sp_dialog_defocus_on_enter_cpp(sb);
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index 63fdc5930..0d890fa86 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -58,6 +58,7 @@
#include "ui/widget/selected-style.h"
#include "ui/uxmanager.h"
#include "util/ege-appear-time-tracker.h"
+#include "sp-root.h"
// We're in the "widgets" directory, so no need to explicitly prefix these:
#include "button.h"
@@ -212,7 +213,7 @@ void CMSPrefWatcher::_setCmsSensitive(bool enabled)
#if ENABLE_LCMS
for ( std::list<SPDesktopWidget*>::iterator it = _widget_list.begin(); it != _widget_list.end(); ++it ) {
SPDesktopWidget *dtw = *it;
- if ( GTK_WIDGET_SENSITIVE( dtw->cms_adjust ) != enabled ) {
+ if ( gtk_widget_get_sensitive( dtw->cms_adjust ) != enabled ) {
cms_adjust_set_sensitive( dtw, enabled );
}
}
@@ -230,12 +231,12 @@ SPDesktopWidget::setMessage (Inkscape::MessageType type, const gchar *message)
gtk_label_set_markup (sb, message ? message : "");
// make sure the important messages are displayed immediately!
- if (type == Inkscape::IMMEDIATE_MESSAGE && GTK_WIDGET_DRAWABLE (GTK_WIDGET(sb))) {
+ if (type == Inkscape::IMMEDIATE_MESSAGE && gtk_widget_is_drawable (GTK_WIDGET(sb))) {
gtk_widget_queue_draw(GTK_WIDGET(sb));
gdk_window_process_updates(GTK_WIDGET(sb)->window, TRUE);
}
- gtk_tooltips_set_tip (this->tt, this->select_status_eventbox, gtk_label_get_text (sb) , NULL);
+ gtk_widget_set_tooltip_text (this->select_status_eventbox, gtk_label_get_text (sb));
}
Geom::Point
@@ -312,7 +313,6 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
dtw->window = 0;
dtw->desktop = NULL;
dtw->_interaction_disabled_counter = 0;
- dtw->tt = gtk_tooltips_new ();
/* Main table */
dtw->vbox = gtk_vbox_new (FALSE, 0);
@@ -358,7 +358,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
dtw->hruler = sp_hruler_new ();
dtw->hruler_box = eventbox;
sp_ruler_set_metric (GTK_RULER (dtw->hruler), SP_PT);
- gtk_tooltips_set_tip (dtw->tt, dtw->hruler_box, gettext(sp_unit_get_plural (&sp_unit_get_by_id(SP_UNIT_PT))), NULL);
+ gtk_widget_set_tooltip_text (dtw->hruler_box, gettext(sp_unit_get_plural (&sp_unit_get_by_id(SP_UNIT_PT))));
gtk_container_add (GTK_CONTAINER (eventbox), dtw->hruler);
gtk_table_attach (GTK_TABLE (canvas_tbl), eventbox, 1, 2, 0, 1, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(GTK_FILL), widget->style->xthickness, 0);
g_signal_connect (G_OBJECT (eventbox), "button_press_event", G_CALLBACK (sp_dt_hruler_event), dtw);
@@ -370,7 +370,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
dtw->vruler = sp_vruler_new ();
dtw->vruler_box = eventbox;
sp_ruler_set_metric (GTK_RULER (dtw->vruler), SP_PT);
- gtk_tooltips_set_tip (dtw->tt, dtw->vruler_box, gettext(sp_unit_get_plural (&sp_unit_get_by_id(SP_UNIT_PT))), NULL);
+ gtk_widget_set_tooltip_text (dtw->vruler_box, gettext(sp_unit_get_plural (&sp_unit_get_by_id(SP_UNIT_PT))));
gtk_container_add (GTK_CONTAINER (eventbox), GTK_WIDGET (dtw->vruler));
gtk_table_attach (GTK_TABLE (canvas_tbl), eventbox, 0, 1, 1, 2, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(GTK_FILL), 0, widget->style->ythickness);
g_signal_connect (G_OBJECT (eventbox), "button_press_event", G_CALLBACK (sp_dt_vruler_event), dtw);
@@ -388,8 +388,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
SP_BUTTON_TYPE_TOGGLE,
NULL,
INKSCAPE_ICON_ZOOM_ORIGINAL,
- _("Zoom drawing if window size changes"),
- dtw->tt);
+ _("Zoom drawing if window size changes"));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dtw->sticky_zoom), prefs->getBool("/options/stickyzoom/value"));
gtk_box_pack_start (GTK_BOX (dtw->vscrollbar_box), dtw->sticky_zoom, FALSE, FALSE, 0);
g_signal_connect (G_OBJECT (dtw->sticky_zoom), "toggled", G_CALLBACK (sp_dtw_sticky_zoom_toggled), dtw);
@@ -411,8 +410,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
SP_BUTTON_TYPE_TOGGLE,
NULL,
INKSCAPE_ICON_COLOR_MANAGEMENT,
- tip,
- dtw->tt );
+ tip );
#if ENABLE_LCMS
{
Glib::ustring current = prefs->getString("/options/displayprofile/uri");
@@ -442,7 +440,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
#if ENABLE_LCMS
dtw->canvas->enable_cms_display_adj = prefs->getBool("/options/displayprofile/enable");
#endif // ENABLE_LCMS
- GTK_WIDGET_SET_FLAGS (GTK_WIDGET (dtw->canvas), GTK_CAN_FOCUS);
+ gtk_widget_set_can_focus (GTK_WIDGET (dtw->canvas), TRUE);
style = gtk_style_copy (GTK_WIDGET (dtw->canvas)->style);
style->bg[GTK_STATE_NORMAL] = style->white;
gtk_widget_set_style (GTK_WIDGET (dtw->canvas), style);
@@ -492,7 +490,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
// zoom status spinbutton
dtw->zoom_status = gtk_spin_button_new_with_range (log(SP_DESKTOP_ZOOM_MIN)/log(2), log(SP_DESKTOP_ZOOM_MAX)/log(2), 0.1);
- gtk_tooltips_set_tip (dtw->tt, dtw->zoom_status, _("Zoom"), NULL);
+ gtk_widget_set_tooltip_text (dtw->zoom_status, _("Zoom"));
gtk_widget_set_size_request (dtw->zoom_status, STATUS_ZOOM_WIDTH, -1);
gtk_entry_set_width_chars (GTK_ENTRY (dtw->zoom_status), 6);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (dtw->zoom_status), FALSE);
@@ -500,8 +498,8 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
g_signal_connect (G_OBJECT (dtw->zoom_status), "input", G_CALLBACK (sp_dtw_zoom_input), dtw);
g_signal_connect (G_OBJECT (dtw->zoom_status), "output", G_CALLBACK (sp_dtw_zoom_output), dtw);
gtk_object_set_data (GTK_OBJECT (dtw->zoom_status), "dtw", dtw->canvas);
- gtk_signal_connect (GTK_OBJECT (dtw->zoom_status), "focus-in-event", GTK_SIGNAL_FUNC (spinbutton_focus_in), dtw->zoom_status);
- gtk_signal_connect (GTK_OBJECT (dtw->zoom_status), "key-press-event", GTK_SIGNAL_FUNC (spinbutton_keypress), dtw->zoom_status);
+ g_signal_connect (G_OBJECT (dtw->zoom_status), "focus-in-event", G_CALLBACK (spinbutton_focus_in), dtw->zoom_status);
+ g_signal_connect (G_OBJECT (dtw->zoom_status), "key-press-event", G_CALLBACK (spinbutton_keypress), dtw->zoom_status);
dtw->zoom_update = g_signal_connect (G_OBJECT (dtw->zoom_status), "value_changed", G_CALLBACK (sp_dtw_zoom_value_changed), dtw);
dtw->zoom_update = g_signal_connect (G_OBJECT (dtw->zoom_status), "populate_popup", G_CALLBACK (sp_dtw_zoom_populate_popup), dtw);
@@ -512,7 +510,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
gtk_table_attach(GTK_TABLE(dtw->coord_status), gtk_vseparator_new(), 0,1, 0,2, GTK_FILL, GTK_FILL, 0, 0);
eventbox = gtk_event_box_new ();
gtk_container_add (GTK_CONTAINER (eventbox), dtw->coord_status);
- gtk_tooltips_set_tip (dtw->tt, eventbox, _("Cursor coordinates"), NULL);
+ gtk_widget_set_tooltip_text (eventbox, _("Cursor coordinates"));
GtkWidget *label_x = gtk_label_new(_("X:"));
gtk_misc_set_alignment (GTK_MISC(label_x), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(dtw->coord_status), label_x, 1,2, 0,1, GTK_FILL, GTK_FILL, 0, 0);
@@ -601,7 +599,7 @@ sp_desktop_widget_destroy (GtkObject *object)
}
g_signal_handlers_disconnect_by_func(G_OBJECT (dtw->zoom_status), (gpointer) G_CALLBACK(sp_dtw_zoom_input), dtw);
g_signal_handlers_disconnect_by_func(G_OBJECT (dtw->zoom_status), (gpointer) G_CALLBACK(sp_dtw_zoom_output), dtw);
- gtk_signal_disconnect_by_data (GTK_OBJECT (dtw->zoom_status), dtw->zoom_status);
+ g_signal_handlers_disconnect_matched (G_OBJECT (dtw->zoom_status), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, dtw->zoom_status);
g_signal_handlers_disconnect_by_func (G_OBJECT (dtw->zoom_status), (gpointer) G_CALLBACK (sp_dtw_zoom_value_changed), dtw);
g_signal_handlers_disconnect_by_func (G_OBJECT (dtw->zoom_status), (gpointer) G_CALLBACK (sp_dtw_zoom_populate_popup), dtw);
g_signal_handlers_disconnect_by_func (G_OBJECT (dtw->canvas), (gpointer) G_CALLBACK (sp_desktop_widget_event), dtw);
@@ -699,7 +697,7 @@ sp_desktop_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
return;
}
- if (GTK_WIDGET_REALIZED (widget)) {
+ if (gtk_widget_get_realized (widget)) {
Geom::Rect const area = dtw->desktop->get_display_area();
double zoom = dtw->desktop->current_zoom();
@@ -891,7 +889,7 @@ SPDesktopWidget::shutdown()
"If you close without saving, your changes will be discarded."),
doc->getName());
// fix for bug 1767940:
- GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(GTK_MESSAGE_DIALOG(dialog)->label), GTK_CAN_FOCUS);
+ gtk_widget_set_can_focus(GTK_WIDGET(GTK_MESSAGE_DIALOG(dialog)->label), FALSE);
GtkWidget *close_button;
close_button = gtk_button_new_with_mnemonic(_("Close _without saving"));
@@ -947,7 +945,7 @@ SPDesktopWidget::shutdown()
"Do you want to save this file as Inkscape SVG?"),
doc->getName() ? doc->getName() : "Unnamed");
// fix for bug 1767940:
- GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(GTK_MESSAGE_DIALOG(dialog)->label), GTK_CAN_FOCUS);
+ gtk_widget_set_can_focus(GTK_WIDGET(GTK_MESSAGE_DIALOG(dialog)->label), FALSE);
GtkWidget *close_button;
close_button = gtk_button_new_with_mnemonic(_("Close _without saving"));
@@ -1079,7 +1077,7 @@ SPDesktopWidget::letZoomGrabFocus()
void
SPDesktopWidget::getWindowGeometry (gint &x, gint &y, gint &w, gint &h)
{
- gboolean vis = GTK_WIDGET_VISIBLE (this);
+ gboolean vis = gtk_widget_get_visible (GTK_WIDGET(this));
(void)vis; // TODO figure out why it is here but not used.
Gtk::Window *window = (Gtk::Window*)gtk_object_get_data (GTK_OBJECT(this), "window");
@@ -1150,6 +1148,25 @@ SPDesktopWidget::presentWindow()
gtk_window_present (w);
}
+bool SPDesktopWidget::showInfoDialog( Glib::ustring const &message )
+{
+ bool result = false;
+ GtkWindow *window = GTK_WINDOW( gtk_widget_get_toplevel( GTK_WIDGET(this) ) );
+ if (window)
+ {
+ GtkWidget *dialog = gtk_message_dialog_new(
+ window,
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_OK,
+ "%s", message.c_str());
+ gtk_window_set_title( GTK_WINDOW(dialog), _("Note:")); // probably want to take this as a parameter.
+ gint response = gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+ }
+ return result;
+}
+
bool
SPDesktopWidget::warnDialog (gchar* text)
{
@@ -1575,8 +1592,8 @@ void SPDesktopWidget::namedviewModified(SPObject *obj, guint flags)
} // children
} // if aux_toolbox is a container
- gtk_tooltips_set_tip(this->tt, this->hruler_box, gettext(sp_unit_get_plural (nv->doc_units)), NULL);
- gtk_tooltips_set_tip(this->tt, this->vruler_box, gettext(sp_unit_get_plural (nv->doc_units)), NULL);
+ gtk_widget_set_tooltip_text(this->hruler_box, gettext(sp_unit_get_plural (nv->doc_units)));
+ gtk_widget_set_tooltip_text(this->vruler_box, gettext(sp_unit_get_plural (nv->doc_units)));
sp_desktop_widget_update_rulers(this);
ToolboxFactory::updateSnapToolbox(this->desktop, 0, this->snap_toolbox);
@@ -1786,7 +1803,7 @@ void
sp_desktop_widget_toggle_rulers (SPDesktopWidget *dtw)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- if (GTK_WIDGET_VISIBLE (dtw->hruler)) {
+ if (gtk_widget_get_visible (dtw->hruler)) {
gtk_widget_hide_all (dtw->hruler);
gtk_widget_hide_all (dtw->vruler);
prefs->setBool(dtw->desktop->is_fullscreen() ? "/fullscreen/rulers/state" : "/window/rulers/state", false);
@@ -1801,7 +1818,7 @@ void
sp_desktop_widget_toggle_scrollbars (SPDesktopWidget *dtw)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- if (GTK_WIDGET_VISIBLE (dtw->hscrollbar)) {
+ if (gtk_widget_get_visible (dtw->hscrollbar)) {
gtk_widget_hide_all (dtw->hscrollbar);
gtk_widget_hide_all (dtw->vscrollbar_box);
gtk_widget_hide_all( dtw->cms_adjust );
@@ -1817,7 +1834,7 @@ sp_desktop_widget_toggle_scrollbars (SPDesktopWidget *dtw)
void sp_desktop_widget_toggle_color_prof_adj( SPDesktopWidget *dtw )
{
- if ( GTK_WIDGET_SENSITIVE( dtw->cms_adjust ) ) {
+ if ( gtk_widget_get_sensitive( dtw->cms_adjust ) ) {
if ( SP_BUTTON_IS_DOWN(dtw->cms_adjust) ) {
sp_button_toggle_set_down( SP_BUTTON(dtw->cms_adjust), FALSE );
} else {
@@ -1831,7 +1848,7 @@ void
sp_spw_toggle_menubar (SPDesktopWidget *dtw, bool is_fullscreen)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- if (GTK_WIDGET_VISIBLE (dtw->menubar)) {
+ if (gtk_widget_get_visible (dtw->menubar)) {
gtk_widget_hide_all (dtw->menubar);
prefs->setBool(is_fullscreen ? "/fullscreen/menu/state" : "/window/menu/state", false);
} else {
@@ -1869,9 +1886,8 @@ sp_desktop_widget_update_scrollbars (SPDesktopWidget *dtw, double scale)
SPDocument *doc = dtw->desktop->doc();
Geom::Rect darea ( Geom::Point(-doc->getWidth(), -doc->getHeight()),
Geom::Point(2 * doc->getWidth(), 2 * doc->getHeight()) );
- SPObject* root = doc->root;
- SPItem* item = SP_ITEM(root);
- Geom::OptRect deskarea = Geom::unify(darea, item->getBboxDesktop());
+
+ Geom::OptRect deskarea = Geom::unify(darea, doc->getRoot()->getBboxDesktop());
/* Canvas region we always show unconditionally */
Geom::Rect carea( Geom::Point(deskarea->min()[Geom::X] * scale - 64, deskarea->max()[Geom::Y] * -scale - 64),
diff --git a/src/widgets/desktop-widget.h b/src/widgets/desktop-widget.h
index 0102897e5..6c5af0aac 100644
--- a/src/widgets/desktop-widget.h
+++ b/src/widgets/desktop-widget.h
@@ -12,8 +12,7 @@
* ? -2004
*/
-#include <gtk/gtktooltips.h>
-#include <gtk/gtkwindow.h>
+#include <gtk/gtk.h>
#include "libnr/nr-point.h"
#include "forward.h"
@@ -31,10 +30,10 @@ struct SPCanvas;
#define SP_TYPE_DESKTOP_WIDGET SPDesktopWidget::getType()
-#define SP_DESKTOP_WIDGET(o) (GTK_CHECK_CAST ((o), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidget))
-#define SP_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidgetClass))
-#define SP_IS_DESKTOP_WIDGET(o) (GTK_CHECK_TYPE ((o), SP_TYPE_DESKTOP_WIDGET))
-#define SP_IS_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_DESKTOP_WIDGET))
+#define SP_DESKTOP_WIDGET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidget))
+#define SP_DESKTOP_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidgetClass))
+#define SP_IS_DESKTOP_WIDGET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_DESKTOP_WIDGET))
+#define SP_IS_DESKTOP_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_DESKTOP_WIDGET))
void sp_desktop_widget_destroy (SPDesktopWidget* dtw);
@@ -70,8 +69,6 @@ struct SPDesktopWidget {
sigc::connection modified_connection;
- GtkTooltips *tt;
-
SPDesktop *desktop;
Gtk::Window *window;
@@ -200,8 +197,14 @@ struct SPDesktopWidget {
{ _dtw->setCoordinateStatus (p); }
virtual void setMessage (Inkscape::MessageType type, gchar const* msg)
{ _dtw->setMessage (type, msg); }
+
+ virtual bool showInfoDialog( Glib::ustring const &message ) {
+ return _dtw->showInfoDialog( message );
+ }
+
virtual bool warnDialog (gchar* text)
{ return _dtw->warnDialog (text); }
+
virtual Inkscape::UI::Widget::Dock* getDock ()
{ return _dtw->getDock(); }
};
@@ -218,6 +221,7 @@ struct SPDesktopWidget {
void setWindowSize (gint w, gint h);
void setWindowTransient (void *p, int transient_policy);
void presentWindow();
+ bool showInfoDialog( Glib::ustring const &message );
bool warnDialog (gchar *text);
void setToolboxFocusTo (gchar const *);
void setToolboxAdjustmentValue (gchar const * id, double value);
diff --git a/src/widgets/eek-preview.cpp b/src/widgets/eek-preview.cpp
index 8fefbe75c..1ca656ae1 100644
--- a/src/widgets/eek-preview.cpp
+++ b/src/widgets/eek-preview.cpp
@@ -192,7 +192,7 @@ static guint eek_preview_signals[LAST_SIGNAL] = { 0 };
gboolean eek_preview_expose_event( GtkWidget* widget, GdkEventExpose* event )
{
-/* g_message("Exposed!!! %s", GTK_WIDGET_HAS_FOCUS(widget) ? "XXX" : "---" ); */
+/* g_message("Exposed!!! %s", gtk_widget_has_focus(widget) ? "XXX" : "---" ); */
gint insetX = 0;
gint insetY = 0;
@@ -218,13 +218,13 @@ gboolean eek_preview_expose_event( GtkWidget* widget, GdkEventExpose* event )
}
*/
- if ( GTK_WIDGET_DRAWABLE( widget ) ) {
+ if ( gtk_widget_is_drawable( widget ) ) {
GtkStyle* style = gtk_widget_get_style( widget );
if ( insetX > 0 || insetY > 0 ) {
gtk_paint_flat_box( style,
widget->window,
- (GtkStateType)GTK_WIDGET_STATE(widget),
+ (GtkStateType)gtk_widget_get_state(widget),
GTK_SHADOW_NONE,
NULL,
widget,
@@ -379,7 +379,7 @@ gboolean eek_preview_expose_event( GtkWidget* widget, GdkEventExpose* event )
}
- if ( GTK_WIDGET_HAS_FOCUS(widget) ) {
+ if ( gtk_widget_has_focus(widget) ) {
gtk_paint_focus( style,
widget->window,
GTK_STATE_NORMAL,
@@ -437,7 +437,7 @@ static gboolean eek_preview_button_press_cb( GtkWidget* widget, GdkEventButton*
if ( gtk_get_event_widget( (GdkEvent*)event ) == widget ) {
EekPreview* preview = EEK_PREVIEW(widget);
- if ( preview->_takesFocus && !GTK_WIDGET_HAS_FOCUS(widget) ) {
+ if ( preview->_takesFocus && !gtk_widget_has_focus(widget) ) {
gtk_widget_grab_focus(widget);
}
@@ -684,8 +684,8 @@ void eek_preview_set_details( EekPreview* preview, PreviewStyle prevstyle, ViewT
static void eek_preview_init( EekPreview *preview )
{
GtkWidget* widg = GTK_WIDGET(preview);
- GTK_WIDGET_SET_FLAGS( widg, GTK_CAN_FOCUS );
- GTK_WIDGET_SET_FLAGS( widg, GTK_RECEIVES_DEFAULT );
+ gtk_widget_set_can_focus( widg, TRUE );
+ gtk_widget_set_receives_default( widg, TRUE );
gtk_widget_set_sensitive( widg, TRUE );
diff --git a/src/widgets/eek-preview.h b/src/widgets/eek-preview.h
index 49fe8e660..c15f25eb6 100644
--- a/src/widgets/eek-preview.h
+++ b/src/widgets/eek-preview.h
@@ -40,8 +40,8 @@
#ifndef SEEN_EEK_PREVIEW_H
#define SEEN_EEK_PREVIEW_H
-#include <gdk/gdkpixbuf.h>
-#include <gtk/gtkdrawingarea.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
G_BEGIN_DECLS
diff --git a/src/widgets/ege-paint-def.cpp b/src/widgets/ege-paint-def.cpp
index 2fc6927df..9eb54b039 100644
--- a/src/widgets/ege-paint-def.cpp
+++ b/src/widgets/ege-paint-def.cpp
@@ -50,6 +50,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
+#include <glibmm/i18n.h>
#include <glibmm/stringutils.h>
#if !defined(_)
diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp
index b4272a3a4..c6e97666a 100644
--- a/src/widgets/fill-style.cpp
+++ b/src/widgets/fill-style.cpp
@@ -23,7 +23,7 @@
#include <glibmm/i18n.h>
#include <gtkmm/box.h>
-#include <gtk/gtkvbox.h>
+#include <gtk/gtk.h>
#include "desktop.h"
#include "selection.h"
diff --git a/src/widgets/gradient-image.h b/src/widgets/gradient-image.h
index e098beab4..ae5d40f56 100644
--- a/src/widgets/gradient-image.h
+++ b/src/widgets/gradient-image.h
@@ -13,7 +13,8 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
+
class SPGradient;
#include <glib.h>
@@ -22,10 +23,10 @@ class SPGradient;
#include <sigc++/connection.h>
#define SP_TYPE_GRADIENT_IMAGE (sp_gradient_image_get_type ())
-#define SP_GRADIENT_IMAGE(o) (GTK_CHECK_CAST ((o), SP_TYPE_GRADIENT_IMAGE, SPGradientImage))
-#define SP_GRADIENT_IMAGE_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_GRADIENT_IMAGE, SPGradientImageClass))
-#define SP_IS_GRADIENT_IMAGE(o) (GTK_CHECK_TYPE ((o), SP_TYPE_GRADIENT_IMAGE))
-#define SP_IS_GRADIENT_IMAGE_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_GRADIENT_IMAGE))
+#define SP_GRADIENT_IMAGE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_GRADIENT_IMAGE, SPGradientImage))
+#define SP_GRADIENT_IMAGE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_GRADIENT_IMAGE, SPGradientImageClass))
+#define SP_IS_GRADIENT_IMAGE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_GRADIENT_IMAGE))
+#define SP_IS_GRADIENT_IMAGE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_GRADIENT_IMAGE))
struct SPGradientImage {
GtkWidget widget;
@@ -44,6 +45,4 @@ GtkType sp_gradient_image_get_type (void);
GtkWidget *sp_gradient_image_new (SPGradient *gradient);
void sp_gradient_image_set_gradient (SPGradientImage *gi, SPGradient *gr);
-
-
#endif
diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp
index f7a981c9f..a3110ed5b 100644
--- a/src/widgets/gradient-selector.cpp
+++ b/src/widgets/gradient-selector.cpp
@@ -16,11 +16,7 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include <gtk/gtkhbox.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkoptionmenu.h>
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtktooltips.h>
+#include <gtk/gtk.h>
#include "document.h"
#include "../document-private.h"
@@ -89,30 +85,34 @@ sp_gradient_selector_class_init (SPGradientSelectorClass *klass)
parent_class = (GtkVBoxClass*)gtk_type_class (GTK_TYPE_VBOX);
- signals[GRABBED] = gtk_signal_new ("grabbed",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPGradientSelectorClass, grabbed),
+ signals[GRABBED] = g_signal_new ("grabbed",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET (SPGradientSelectorClass, grabbed),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- signals[DRAGGED] = gtk_signal_new ("dragged",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPGradientSelectorClass, dragged),
+ G_TYPE_NONE, 0);
+ signals[DRAGGED] = g_signal_new ("dragged",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET (SPGradientSelectorClass, dragged),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- signals[RELEASED] = gtk_signal_new ("released",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPGradientSelectorClass, released),
+ G_TYPE_NONE, 0);
+ signals[RELEASED] = g_signal_new ("released",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET (SPGradientSelectorClass, released),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- signals[CHANGED] = gtk_signal_new ("changed",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPGradientSelectorClass, changed),
+ G_TYPE_NONE, 0);
+ signals[CHANGED] = g_signal_new ("changed",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET (SPGradientSelectorClass, changed),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
+ G_TYPE_NONE, 0);
object_class->destroy = sp_gradient_selector_destroy;
}
@@ -137,7 +137,6 @@ static void sp_gradient_selector_init(SPGradientSelector *sel)
GtkWidget *hb = gtk_hbox_new( FALSE, 0 );
sel->nonsolid.push_back(hb);
gtk_box_pack_start( GTK_BOX(sel), hb, FALSE, FALSE, 0 );
- GtkTooltips *ttips = gtk_tooltips_new ();
sel->add = gtk_button_new_with_label (_("Duplicate"));
sel->nonsolid.push_back(sel->add);
@@ -163,12 +162,12 @@ static void sp_gradient_selector_init(SPGradientSelector *sel)
sel->nonsolid.push_back(sel->spread);
gtk_widget_show(sel->spread);
gtk_box_pack_end( GTK_BOX(hb), sel->spread, FALSE, FALSE, 0 );
- gtk_tooltips_set_tip( ttips, sel->spread,
+ gtk_widget_set_tooltip_text( sel->spread,
// TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/pservers.html#LinearGradientSpreadMethodAttribute
_("Whether to fill with flat color beyond the ends of the gradient vector "
"(spreadMethod=\"pad\"), or repeat the gradient in the same direction "
"(spreadMethod=\"repeat\"), or repeat the gradient in alternating opposite "
- "directions (spreadMethod=\"reflect\")"), NULL);
+ "directions (spreadMethod=\"reflect\")"));
GtkWidget *m = gtk_menu_new();
GtkWidget *mi = gtk_menu_item_new_with_label(_("none"));
@@ -360,7 +359,7 @@ sp_gradient_selector_add_vector_clicked (GtkWidget */*w*/, SPGradientSelector *s
Inkscape::GC::release(stop);
}
- SP_DOCUMENT_DEFS(doc)->getRepr()->addChild(repr, NULL);
+ doc->getDefs()->getRepr()->addChild(repr, NULL);
gr = (SPGradient *) doc->getObjectByRepr(repr);
sp_gradient_vector_selector_set_gradient(
diff --git a/src/widgets/gradient-selector.h b/src/widgets/gradient-selector.h
index 860804ec6..d957f7baf 100644
--- a/src/widgets/gradient-selector.h
+++ b/src/widgets/gradient-selector.h
@@ -16,7 +16,7 @@
*/
#include <glib.h>
-#include <gtk/gtkvbox.h>
+#include <gtk/gtk.h>
#include <vector>
#include "sp-gradient.h"
#include "sp-gradient-spread.h"
@@ -25,10 +25,10 @@
class SPGradient;
#define SP_TYPE_GRADIENT_SELECTOR (sp_gradient_selector_get_type ())
-#define SP_GRADIENT_SELECTOR(o) (GTK_CHECK_CAST ((o), SP_TYPE_GRADIENT_SELECTOR, SPGradientSelector))
-#define SP_GRADIENT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_GRADIENT_SELECTOR, SPGradientSelectorClass))
-#define SP_IS_GRADIENT_SELECTOR(o) (GTK_CHECK_TYPE ((o), SP_TYPE_GRADIENT_SELECTOR))
-#define SP_IS_GRADIENT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_GRADIENT_SELECTOR))
+#define SP_GRADIENT_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_GRADIENT_SELECTOR, SPGradientSelector))
+#define SP_GRADIENT_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_GRADIENT_SELECTOR, SPGradientSelectorClass))
+#define SP_IS_GRADIENT_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_GRADIENT_SELECTOR))
+#define SP_IS_GRADIENT_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_GRADIENT_SELECTOR))
diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp
index e7596ead4..9186044de 100644
--- a/src/widgets/gradient-toolbar.cpp
+++ b/src/widgets/gradient-toolbar.cpp
@@ -464,8 +464,6 @@ GtkWidget * gr_change_widget(SPDesktop *desktop)
SPGradientSpread spr_selected = (SPGradientSpread) INT_MAX; // meaning undefined
bool spr_multi = false;
- GtkTooltips *tt = gtk_tooltips_new();
-
gr_read_selection (selection, ev? ev->get_drag() : 0, gr_selected, gr_multi, spr_selected, spr_multi);
GtkWidget *widget = gtk_hbox_new(FALSE, FALSE);
@@ -484,10 +482,10 @@ GtkWidget * gr_change_widget(SPDesktop *desktop)
{
GtkWidget *hb = gtk_hbox_new(FALSE, 1);
GtkWidget *b = gtk_button_new_with_label(_("Edit..."));
- gtk_tooltips_set_tip(tt, b, _("Edit the stops of the gradient"), NULL);
+ gtk_widget_set_tooltip_text(b, _("Edit the stops of the gradient"));
gtk_widget_show(b);
gtk_container_add(GTK_CONTAINER(hb), b);
- gtk_signal_connect(GTK_OBJECT(b), "clicked", GTK_SIGNAL_FUNC(gr_edit), widget);
+ g_signal_connect(G_OBJECT(b), "clicked", G_CALLBACK(gr_edit), widget);
gtk_box_pack_start (GTK_BOX(buttons), hb, FALSE, FALSE, 0);
}
@@ -521,9 +519,9 @@ GtkWidget * gr_change_widget(SPDesktop *desktop)
// connect to release and modified signals of the defs (i.e. when someone changes gradient)
sigc::connection *release_connection = new sigc::connection();
- *release_connection = SP_DOCUMENT_DEFS(document)->connectRelease(sigc::bind<1>(sigc::ptr_fun(&gr_defs_release), widget));
+ *release_connection = document->getDefs()->connectRelease(sigc::bind<1>(sigc::ptr_fun(&gr_defs_release), widget));
sigc::connection *modified_connection = new sigc::connection();
- *modified_connection = SP_DOCUMENT_DEFS(document)->connectModified(sigc::bind<2>(sigc::ptr_fun(&gr_defs_modified), widget));
+ *modified_connection = document->getDefs()->connectModified(sigc::bind<2>(sigc::ptr_fun(&gr_defs_modified), widget));
// when widget is destroyed, disconnect
g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(gr_disconnect_sigc), release_connection);
@@ -542,8 +540,6 @@ sp_gradient_toolbox_new(SPDesktop *desktop)
gtk_object_set_data(GTK_OBJECT(tbl), "dtw", desktop->canvas);
gtk_object_set_data(GTK_OBJECT(tbl), "desktop", desktop);
- GtkTooltips *tt = gtk_tooltips_new();
-
sp_toolbox_add_label(tbl, _("<b>New:</b>"));
// TODO replace aux_toolbox_space(tbl, AUX_SPACING);
@@ -557,8 +553,7 @@ sp_gradient_toolbox_new(SPDesktop *desktop)
SP_BUTTON_TYPE_TOGGLE,
NULL,
INKSCAPE_ICON_PAINT_GRADIENT_LINEAR,
- _("Create linear gradient"),
- tt);
+ _("Create linear gradient") );
g_signal_connect_after (G_OBJECT (button), "clicked", G_CALLBACK (gr_toggle_type), tbl);
g_object_set_data(G_OBJECT(tbl), "linear", button);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
@@ -571,8 +566,7 @@ sp_gradient_toolbox_new(SPDesktop *desktop)
SP_BUTTON_TYPE_TOGGLE,
NULL,
INKSCAPE_ICON_PAINT_GRADIENT_RADIAL,
- _("Create radial (elliptic or circular) gradient"),
- tt);
+ _("Create radial (elliptic or circular) gradient"));
g_signal_connect_after (G_OBJECT (button), "clicked", G_CALLBACK (gr_toggle_type), tbl);
g_object_set_data(G_OBJECT(tbl), "radial", button);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
@@ -599,8 +593,7 @@ sp_gradient_toolbox_new(SPDesktop *desktop)
SP_BUTTON_TYPE_TOGGLE,
NULL,
INKSCAPE_ICON_OBJECT_FILL,
- _("Create gradient in the fill"),
- tt);
+ _("Create gradient in the fill"));
g_signal_connect_after (G_OBJECT (button), "clicked", G_CALLBACK (gr_toggle_fillstroke), tbl);
g_object_set_data(G_OBJECT(tbl), "fill", button);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
@@ -613,8 +606,7 @@ sp_gradient_toolbox_new(SPDesktop *desktop)
SP_BUTTON_TYPE_TOGGLE,
NULL,
INKSCAPE_ICON_OBJECT_STROKE,
- _("Create gradient in the stroke"),
- tt);
+ _("Create gradient in the stroke"));
g_signal_connect_after (G_OBJECT (button), "clicked", G_CALLBACK (gr_toggle_fillstroke), tbl);
g_object_set_data(G_OBJECT(tbl), "stroke", button);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
diff --git a/src/widgets/gradient-toolbar.h b/src/widgets/gradient-toolbar.h
index 41138724a..f1e258f6b 100644
--- a/src/widgets/gradient-toolbar.h
+++ b/src/widgets/gradient-toolbar.h
@@ -12,7 +12,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
struct SPDesktop;
GtkWidget *sp_gradient_toolbox_new (SPDesktop *desktop);
diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp
index 737b3d7bb..a58b22d7c 100644
--- a/src/widgets/gradient-vector.cpp
+++ b/src/widgets/gradient-vector.cpp
@@ -104,13 +104,14 @@ static void sp_gradient_vector_selector_class_init(SPGradientVectorSelectorClass
parent_class = static_cast<GtkVBoxClass*>(gtk_type_class(GTK_TYPE_VBOX));
- signals[VECTOR_SET] = gtk_signal_new( "vector_set",
- GTK_RUN_LAST,
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET(SPGradientVectorSelectorClass, vector_set),
- gtk_marshal_NONE__POINTER,
- GTK_TYPE_NONE, 1,
- GTK_TYPE_POINTER);
+ signals[VECTOR_SET] = g_signal_new( "vector_set",
+ G_TYPE_FROM_CLASS(object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(SPGradientVectorSelectorClass, vector_set),
+ NULL, NULL,
+ gtk_marshal_NONE__POINTER,
+ G_TYPE_NONE, 1,
+ GTK_TYPE_POINTER);
object_class->destroy = sp_gradient_vector_selector_destroy;
}
@@ -204,8 +205,8 @@ void sp_gradient_vector_selector_set_gradient(SPGradientVectorSelector *gvs, SPD
// Connect signals
if (doc) {
- gvs->defs_release_connection = SP_DOCUMENT_DEFS(doc)->connectRelease(sigc::bind<1>(sigc::ptr_fun(&sp_gvs_defs_release), gvs));
- gvs->defs_modified_connection = SP_DOCUMENT_DEFS(doc)->connectModified(sigc::bind<2>(sigc::ptr_fun(&sp_gvs_defs_modified), gvs));
+ gvs->defs_release_connection = doc->getDefs()->connectRelease(sigc::bind<1>(sigc::ptr_fun(&sp_gvs_defs_release), gvs));
+ gvs->defs_modified_connection = doc->getDefs()->connectModified(sigc::bind<2>(sigc::ptr_fun(&sp_gvs_defs_modified), gvs));
}
if (gr) {
gvs->gradient_release_connection = gr->connectRelease(sigc::bind<1>(sigc::ptr_fun(&sp_gvs_gradient_release), gvs));
@@ -789,13 +790,12 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s
gtk_box_pack_start(GTK_BOX(vb), w, TRUE, TRUE, PAD);
sp_repr_add_listener(gradient->getRepr(), &grad_edit_dia_repr_events, vb);
- GtkTooltips *tt = gtk_tooltips_new();
/* Stop list */
GtkWidget *mnu = gtk_option_menu_new();
/* Create new menu widget */
update_stop_list(GTK_WIDGET(mnu), gradient, NULL);
- gtk_signal_connect(GTK_OBJECT(mnu), "changed", GTK_SIGNAL_FUNC(sp_grad_edit_select), vb);
+ g_signal_connect(G_OBJECT(mnu), "changed", G_CALLBACK(sp_grad_edit_select), vb);
gtk_widget_show(mnu);
gtk_object_set_data(GTK_OBJECT(vb), "stopmenu", mnu);
gtk_box_pack_start(GTK_BOX(vb), mnu, FALSE, FALSE, 0);
@@ -806,13 +806,13 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s
GtkWidget *b = gtk_button_new_with_label(_("Add stop"));
gtk_widget_show(b);
gtk_container_add(GTK_CONTAINER(hb), b);
- gtk_tooltips_set_tip(tt, b, _("Add another control stop to gradient"), NULL);
- gtk_signal_connect(GTK_OBJECT(b), "clicked", GTK_SIGNAL_FUNC(sp_grd_ed_add_stop), vb);
+ gtk_widget_set_tooltip_text(b, _("Add another control stop to gradient"));
+ g_signal_connect(G_OBJECT(b), "clicked", G_CALLBACK(sp_grd_ed_add_stop), vb);
b = gtk_button_new_with_label(_("Delete stop"));
gtk_widget_show(b);
gtk_container_add(GTK_CONTAINER(hb), b);
- gtk_tooltips_set_tip(tt, b, _("Delete current control stop from gradient"), NULL);
- gtk_signal_connect(GTK_OBJECT(b), "clicked", GTK_SIGNAL_FUNC(sp_grd_ed_del_stop), vb);
+ gtk_widget_set_tooltip_text(b, _("Delete current control stop from gradient"));
+ g_signal_connect(G_OBJECT(b), "clicked", G_CALLBACK(sp_grd_ed_del_stop), vb);
gtk_widget_show(hb);
gtk_box_pack_start(GTK_BOX(vb),hb, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS);
@@ -859,10 +859,10 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s
/* Signals */
- gtk_signal_connect(GTK_OBJECT(Offset_adj), "value_changed",
- GTK_SIGNAL_FUNC(offadjustmentChanged), vb);
+ g_signal_connect(G_OBJECT(Offset_adj), "value_changed",
+ G_CALLBACK(offadjustmentChanged), vb);
- // gtk_signal_connect(GTK_OBJECT(slider), "changed", GTK_SIGNAL_FUNC(offsliderChanged), vb);
+ // g_signal_connect(G_OBJECT(slider), "changed", G_CALLBACK(offsliderChanged), vb);
gtk_widget_show(hb);
gtk_box_pack_start(GTK_BOX(vb), hb, FALSE, FALSE, PAD);
@@ -926,9 +926,9 @@ GtkWidget * sp_gradient_vector_editor_new(SPGradient *gradient, SPStop *stop)
wd.win = dlg;
wd.stop = 0;
g_signal_connect(G_OBJECT(INKSCAPE), "activate_desktop", G_CALLBACK(sp_transientize_callback), &wd);
- gtk_signal_connect(GTK_OBJECT(dlg), "event", GTK_SIGNAL_FUNC(sp_dialog_event_handler), dlg);
- gtk_signal_connect(GTK_OBJECT(dlg), "destroy", G_CALLBACK(sp_gradient_vector_dialog_destroy), dlg);
- gtk_signal_connect(GTK_OBJECT(dlg), "delete_event", G_CALLBACK(sp_gradient_vector_dialog_delete), dlg);
+ g_signal_connect(G_OBJECT(dlg), "event", G_CALLBACK(sp_dialog_event_handler), dlg);
+ g_signal_connect(G_OBJECT(dlg), "destroy", G_CALLBACK(sp_gradient_vector_dialog_destroy), dlg);
+ g_signal_connect(G_OBJECT(dlg), "delete_event", G_CALLBACK(sp_gradient_vector_dialog_delete), dlg);
g_signal_connect(G_OBJECT(INKSCAPE), "shut_down", G_CALLBACK(sp_gradient_vector_dialog_delete), dlg);
g_signal_connect( G_OBJECT(INKSCAPE), "dialogs_hide", G_CALLBACK(sp_dialog_hide), dlg );
g_signal_connect( G_OBJECT(INKSCAPE), "dialogs_unhide", G_CALLBACK(sp_dialog_unhide), dlg );
diff --git a/src/widgets/gradient-vector.h b/src/widgets/gradient-vector.h
index 012d4e9a3..6b165aca2 100644
--- a/src/widgets/gradient-vector.h
+++ b/src/widgets/gradient-vector.h
@@ -20,14 +20,14 @@
#include <stddef.h>
#include <sigc++/connection.h>
-#include <gtk/gtkvbox.h>
+#include <gtk/gtk.h>
#include "../forward.h"
#define SP_TYPE_GRADIENT_VECTOR_SELECTOR (sp_gradient_vector_selector_get_type ())
-#define SP_GRADIENT_VECTOR_SELECTOR(o) (GTK_CHECK_CAST ((o), SP_TYPE_GRADIENT_VECTOR_SELECTOR, SPGradientVectorSelector))
-#define SP_GRADIENT_VECTOR_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_GRADIENT_VECTOR_SELECTOR, SPGradientVectorSelectorClass))
-#define SP_IS_GRADIENT_VECTOR_SELECTOR(o) (GTK_CHECK_TYPE ((o), SP_TYPE_GRADIENT_VECTOR_SELECTOR))
-#define SP_IS_GRADIENT_VECTOR_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_GRADIENT_VECTOR_SELECTOR))
+#define SP_GRADIENT_VECTOR_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_GRADIENT_VECTOR_SELECTOR, SPGradientVectorSelector))
+#define SP_GRADIENT_VECTOR_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_GRADIENT_VECTOR_SELECTOR, SPGradientVectorSelectorClass))
+#define SP_IS_GRADIENT_VECTOR_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_GRADIENT_VECTOR_SELECTOR))
+#define SP_IS_GRADIENT_VECTOR_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_GRADIENT_VECTOR_SELECTOR))
struct SPGradientVectorSelector {
GtkVBox vbox;
diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp
index 88cf43588..450c5f0d9 100644
--- a/src/widgets/icon.cpp
+++ b/src/widgets/icon.cpp
@@ -177,7 +177,7 @@ void IconImpl::classInit(SPIconClass *klass)
void IconImpl::init(SPIcon *icon)
{
- GTK_WIDGET_FLAGS(icon) |= GTK_NO_WINDOW;
+ gtk_widget_set_has_window (GTK_WIDGET (icon), FALSE);
icon->lsize = Inkscape::ICON_SIZE_BUTTON;
icon->psize = 0;
icon->name = 0;
@@ -225,14 +225,14 @@ void IconImpl::sizeAllocate(GtkWidget *widget, GtkAllocation *allocation)
{
widget->allocation = *allocation;
- if (GTK_WIDGET_DRAWABLE(widget)) {
+ if (gtk_widget_is_drawable(widget)) {
gtk_widget_queue_draw(widget);
}
}
int IconImpl::expose(GtkWidget *widget, GdkEventExpose *event)
{
- if ( GTK_WIDGET_DRAWABLE(widget) ) {
+ if ( gtk_widget_is_drawable(widget) ) {
SPIcon *icon = SP_ICON(widget);
if ( !icon->pb ) {
fetchPixbuf( icon );
@@ -996,13 +996,13 @@ void IconImpl::paint(SPIcon *icon, GdkRectangle const */*area*/)
bool unref_image = false;
/* copied from the expose function of GtkImage */
- if (GTK_WIDGET_STATE (icon) != GTK_STATE_NORMAL && image) {
+ if (gtk_widget_get_state (GTK_WIDGET(icon)) != GTK_STATE_NORMAL && image) {
GtkIconSource *source = gtk_icon_source_new();
gtk_icon_source_set_pixbuf(source, icon->pb);
gtk_icon_source_set_size(source, GTK_ICON_SIZE_SMALL_TOOLBAR); // note: this is boilerplate and not used
gtk_icon_source_set_size_wildcarded(source, FALSE);
image = gtk_style_render_icon (widget.style, source, gtk_widget_get_direction(&widget),
- (GtkStateType) GTK_WIDGET_STATE(&widget), (GtkIconSize)-1, &widget, "gtk-image");
+ (GtkStateType) gtk_widget_get_state(&widget), (GtkIconSize)-1, &widget, "gtk-image");
gtk_icon_source_free(source);
unref_image = true;
}
diff --git a/src/widgets/icon.h b/src/widgets/icon.h
index a20fad73a..f04d2f8da 100644
--- a/src/widgets/icon.h
+++ b/src/widgets/icon.h
@@ -19,10 +19,10 @@
#include "icon-size.h"
#define SP_TYPE_ICON SPIcon::getType()
-#define SP_ICON(o) (GTK_CHECK_CAST ((o), SP_TYPE_ICON, SPIcon))
-#define SP_IS_ICON(o) (GTK_CHECK_TYPE ((o), SP_TYPE_ICON))
+#define SP_ICON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_ICON, SPIcon))
+#define SP_IS_ICON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_ICON))
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
struct SPIconClass {
GtkWidgetClass parent_class;
diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp
index f0b55cf13..642837e61 100644
--- a/src/widgets/paint-selector.cpp
+++ b/src/widgets/paint-selector.cpp
@@ -23,14 +23,7 @@
#include <cstring>
#include <string>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtkradiobutton.h>
-#include <gtk/gtkframe.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkoptionmenu.h>
-#include <gtk/gtktooltips.h>
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtkseparatormenuitem.h>
+#include <gtk/gtk.h>
#include "../sp-pattern.h"
#include <glibmm/i18n.h>
@@ -78,7 +71,7 @@ static void sp_paint_selector_class_init(SPPaintSelectorClass *klass);
static void sp_paint_selector_init(SPPaintSelector *slider);
static void sp_paint_selector_destroy(GtkObject *object);
-static GtkWidget *sp_paint_selector_style_button_add(SPPaintSelector *psel, gchar const *px, SPPaintSelector::Mode mode, GtkTooltips *tt, gchar const *tip);
+static GtkWidget *sp_paint_selector_style_button_add(SPPaintSelector *psel, gchar const *px, SPPaintSelector::Mode mode, gchar const *tip);
static void sp_paint_selector_style_button_toggled(GtkToggleButton *tb, SPPaintSelector *psel);
static void sp_paint_selector_fillrule_toggled(GtkToggleButton *tb, SPPaintSelector *psel);
@@ -171,42 +164,48 @@ sp_paint_selector_class_init(SPPaintSelectorClass *klass)
parent_class = (GtkVBoxClass*)gtk_type_class(GTK_TYPE_VBOX);
- psel_signals[MODE_CHANGED] = gtk_signal_new("mode_changed",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET(SPPaintSelectorClass, mode_changed),
+ psel_signals[MODE_CHANGED] = g_signal_new("mode_changed",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET(SPPaintSelectorClass, mode_changed),
+ NULL, NULL,
gtk_marshal_NONE__UINT,
- GTK_TYPE_NONE, 1, GTK_TYPE_UINT);
- psel_signals[GRABBED] = gtk_signal_new("grabbed",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET(SPPaintSelectorClass, grabbed),
+ G_TYPE_NONE, 1, GTK_TYPE_UINT);
+ psel_signals[GRABBED] = g_signal_new("grabbed",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET(SPPaintSelectorClass, grabbed),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- psel_signals[DRAGGED] = gtk_signal_new("dragged",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET(SPPaintSelectorClass, dragged),
+ G_TYPE_NONE, 0);
+ psel_signals[DRAGGED] = g_signal_new("dragged",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET(SPPaintSelectorClass, dragged),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- psel_signals[RELEASED] = gtk_signal_new("released",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET(SPPaintSelectorClass, released),
+ G_TYPE_NONE, 0);
+ psel_signals[RELEASED] = g_signal_new("released",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET(SPPaintSelectorClass, released),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- psel_signals[CHANGED] = gtk_signal_new("changed",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET(SPPaintSelectorClass, changed),
+ G_TYPE_NONE, 0);
+ psel_signals[CHANGED] = g_signal_new("changed",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET(SPPaintSelectorClass, changed),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- psel_signals[FILLRULE_CHANGED] = gtk_signal_new("fillrule_changed",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET(SPPaintSelectorClass, fillrule_changed),
+ G_TYPE_NONE, 0);
+ psel_signals[FILLRULE_CHANGED] = g_signal_new("fillrule_changed",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET(SPPaintSelectorClass, fillrule_changed),
+ NULL, NULL,
gtk_marshal_NONE__UINT,
- GTK_TYPE_NONE, 1, GTK_TYPE_UINT);
+ G_TYPE_NONE, 1, GTK_TYPE_UINT);
object_class->destroy = sp_paint_selector_destroy;
}
@@ -217,8 +216,6 @@ sp_paint_selector_class_init(SPPaintSelectorClass *klass)
static void
sp_paint_selector_init(SPPaintSelector *psel)
{
- GtkTooltips *tt = gtk_tooltips_new();
-
psel->mode = static_cast<SPPaintSelector::Mode>(-1); // huh? do you mean 0xff? -- I think this means "not in the enum"
/* Paint style button box */
@@ -229,19 +226,19 @@ sp_paint_selector_init(SPPaintSelector *psel)
/* Buttons */
psel->none = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_NONE,
- SPPaintSelector::MODE_NONE, tt, _("No paint"));
+ SPPaintSelector::MODE_NONE, _("No paint"));
psel->solid = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_SOLID,
- SPPaintSelector::MODE_COLOR_RGB, tt, _("Flat color"));
+ SPPaintSelector::MODE_COLOR_RGB, _("Flat color"));
psel->gradient = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_GRADIENT_LINEAR,
- SPPaintSelector::MODE_GRADIENT_LINEAR, tt, _("Linear gradient"));
+ SPPaintSelector::MODE_GRADIENT_LINEAR, _("Linear gradient"));
psel->radial = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_GRADIENT_RADIAL,
- SPPaintSelector::MODE_GRADIENT_RADIAL, tt, _("Radial gradient"));
+ SPPaintSelector::MODE_GRADIENT_RADIAL, _("Radial gradient"));
psel->pattern = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_PATTERN,
- SPPaintSelector::MODE_PATTERN, tt, _("Pattern"));
+ SPPaintSelector::MODE_PATTERN, _("Pattern"));
psel->swatch = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_SWATCH,
- SPPaintSelector::MODE_SWATCH, tt, _("Swatch"));
+ SPPaintSelector::MODE_SWATCH, _("Swatch"));
psel->unset = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_UNKNOWN,
- SPPaintSelector::MODE_UNSET, tt, _("Unset paint (make it undefined so it can be inherited)"));
+ SPPaintSelector::MODE_UNSET, _("Unset paint (make it undefined so it can be inherited)"));
/* Fillrule */
{
@@ -253,23 +250,23 @@ sp_paint_selector_init(SPPaintSelector *psel)
gtk_button_set_relief(GTK_BUTTON(psel->evenodd), GTK_RELIEF_NONE);
gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(psel->evenodd), FALSE);
// TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty
- gtk_tooltips_set_tip(tt, psel->evenodd, _("Any path self-intersections or subpaths create holes in the fill (fill-rule: evenodd)"), NULL);
+ gtk_widget_set_tooltip_text(psel->evenodd, _("Any path self-intersections or subpaths create holes in the fill (fill-rule: evenodd)"));
gtk_object_set_data(GTK_OBJECT(psel->evenodd), "mode", GUINT_TO_POINTER(SPPaintSelector::FILLRULE_EVENODD));
w = sp_icon_new(Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON_FILL_RULE_EVEN_ODD);
gtk_container_add(GTK_CONTAINER(psel->evenodd), w);
gtk_box_pack_start(GTK_BOX(psel->fillrulebox), psel->evenodd, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(psel->evenodd), "toggled", GTK_SIGNAL_FUNC(sp_paint_selector_fillrule_toggled), psel);
+ g_signal_connect(G_OBJECT(psel->evenodd), "toggled", G_CALLBACK(sp_paint_selector_fillrule_toggled), psel);
psel->nonzero = gtk_radio_button_new(gtk_radio_button_group(GTK_RADIO_BUTTON(psel->evenodd)));
gtk_button_set_relief(GTK_BUTTON(psel->nonzero), GTK_RELIEF_NONE);
gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(psel->nonzero), FALSE);
// TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty
- gtk_tooltips_set_tip(tt, psel->nonzero, _("Fill is solid unless a subpath is counterdirectional (fill-rule: nonzero)"), NULL);
+ gtk_widget_set_tooltip_text(psel->nonzero, _("Fill is solid unless a subpath is counterdirectional (fill-rule: nonzero)"));
gtk_object_set_data(GTK_OBJECT(psel->nonzero), "mode", GUINT_TO_POINTER(SPPaintSelector::FILLRULE_NONZERO));
w = sp_icon_new(Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON_FILL_RULE_NONZERO);
gtk_container_add(GTK_CONTAINER(psel->nonzero), w);
gtk_box_pack_start(GTK_BOX(psel->fillrulebox), psel->nonzero, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(psel->nonzero), "toggled", GTK_SIGNAL_FUNC(sp_paint_selector_fillrule_toggled), psel);
+ g_signal_connect(G_OBJECT(psel->nonzero), "toggled", G_CALLBACK(sp_paint_selector_fillrule_toggled), psel);
}
/* Frame */
@@ -297,12 +294,12 @@ sp_paint_selector_destroy(GtkObject *object)
static GtkWidget *sp_paint_selector_style_button_add(SPPaintSelector *psel,
gchar const *pixmap, SPPaintSelector::Mode mode,
- GtkTooltips *tt, gchar const *tip)
+ gchar const *tip)
{
GtkWidget *b, *w;
b = gtk_toggle_button_new();
- gtk_tooltips_set_tip(tt, b, tip, NULL);
+ gtk_widget_set_tooltip_text(b, tip);
gtk_widget_show(b);
gtk_container_set_border_width(GTK_CONTAINER(b), 0);
@@ -317,7 +314,7 @@ static GtkWidget *sp_paint_selector_style_button_add(SPPaintSelector *psel,
gtk_container_add(GTK_CONTAINER(b), w);
gtk_box_pack_start(GTK_BOX(psel->style), b, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(b), "toggled", GTK_SIGNAL_FUNC(sp_paint_selector_style_button_toggled), psel);
+ g_signal_connect(G_OBJECT(b), "toggled", G_CALLBACK(sp_paint_selector_style_button_toggled), psel);
return b;
}
@@ -335,7 +332,7 @@ sp_paint_selector_fillrule_toggled(GtkToggleButton *tb, SPPaintSelector *psel)
{
if (!psel->update && gtk_toggle_button_get_active(tb)) {
SPPaintSelector::FillRule fr = static_cast<SPPaintSelector::FillRule>(GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(tb), "mode")));
- gtk_signal_emit(GTK_OBJECT(psel), psel_signals[FILLRULE_CHANGED], fr);
+ g_signal_emit(G_OBJECT(psel), psel_signals[FILLRULE_CHANGED], 0, fr);
}
}
@@ -406,7 +403,7 @@ void SPPaintSelector::setMode(Mode mode)
break;
}
this->mode = mode;
- gtk_signal_emit(GTK_OBJECT(this), psel_signals[MODE_CHANGED], this->mode);
+ g_signal_emit(G_OBJECT(this), psel_signals[MODE_CHANGED], 0, this->mode);
update = FALSE;
}
}
@@ -619,17 +616,17 @@ sp_paint_selector_set_mode_none(SPPaintSelector *psel)
static void sp_paint_selector_color_grabbed(SPColorSelector * /*csel*/, SPPaintSelector *psel)
{
- gtk_signal_emit(GTK_OBJECT(psel), psel_signals[GRABBED]);
+ g_signal_emit(G_OBJECT(psel), psel_signals[GRABBED], 0);
}
static void sp_paint_selector_color_dragged(SPColorSelector * /*csel*/, SPPaintSelector *psel)
{
- gtk_signal_emit(GTK_OBJECT(psel), psel_signals[DRAGGED]);
+ g_signal_emit(G_OBJECT(psel), psel_signals[DRAGGED], 0);
}
static void sp_paint_selector_color_released(SPColorSelector * /*csel*/, SPPaintSelector *psel)
{
- gtk_signal_emit(GTK_OBJECT(psel), psel_signals[RELEASED]);
+ g_signal_emit(G_OBJECT(psel), psel_signals[RELEASED], 0);
}
static void
@@ -637,7 +634,7 @@ sp_paint_selector_color_changed(SPColorSelector *csel, SPPaintSelector *psel)
{
csel->base->getColorAlpha( psel->color, psel->alpha );
- gtk_signal_emit(GTK_OBJECT(psel), psel_signals[CHANGED]);
+ g_signal_emit(G_OBJECT(psel), psel_signals[CHANGED], 0);
}
static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelector::Mode /*mode*/)
@@ -663,10 +660,10 @@ static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelec
gtk_widget_show(csel);
gtk_object_set_data(GTK_OBJECT(vb), "color-selector", csel);
gtk_box_pack_start(GTK_BOX(vb), csel, TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(csel), "grabbed", GTK_SIGNAL_FUNC(sp_paint_selector_color_grabbed), psel);
- gtk_signal_connect(GTK_OBJECT(csel), "dragged", GTK_SIGNAL_FUNC(sp_paint_selector_color_dragged), psel);
- gtk_signal_connect(GTK_OBJECT(csel), "released", GTK_SIGNAL_FUNC(sp_paint_selector_color_released), psel);
- gtk_signal_connect(GTK_OBJECT(csel), "changed", GTK_SIGNAL_FUNC(sp_paint_selector_color_changed), psel);
+ g_signal_connect(G_OBJECT(csel), "grabbed", G_CALLBACK(sp_paint_selector_color_grabbed), psel);
+ g_signal_connect(G_OBJECT(csel), "dragged", G_CALLBACK(sp_paint_selector_color_dragged), psel);
+ g_signal_connect(G_OBJECT(csel), "released", G_CALLBACK(sp_paint_selector_color_released), psel);
+ g_signal_connect(G_OBJECT(csel), "changed", G_CALLBACK(sp_paint_selector_color_changed), psel);
/* Pack everything to frame */
gtk_container_add(GTK_CONTAINER(psel->frame), vb);
psel->selector = vb;
@@ -686,22 +683,22 @@ static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelec
static void sp_paint_selector_gradient_grabbed(SPColorSelector * /*csel*/, SPPaintSelector *psel)
{
- gtk_signal_emit(GTK_OBJECT(psel), psel_signals[GRABBED]);
+ g_signal_emit(G_OBJECT(psel), psel_signals[GRABBED], 0);
}
static void sp_paint_selector_gradient_dragged(SPColorSelector * /*csel*/, SPPaintSelector *psel)
{
- gtk_signal_emit(GTK_OBJECT(psel), psel_signals[DRAGGED]);
+ g_signal_emit(G_OBJECT(psel), psel_signals[DRAGGED], 0);
}
static void sp_paint_selector_gradient_released(SPColorSelector * /*csel*/, SPPaintSelector *psel)
{
- gtk_signal_emit(GTK_OBJECT(psel), psel_signals[RELEASED]);
+ g_signal_emit(G_OBJECT(psel), psel_signals[RELEASED], 0);
}
static void sp_paint_selector_gradient_changed(SPColorSelector * /*csel*/, SPPaintSelector *psel)
{
- gtk_signal_emit(GTK_OBJECT(psel), psel_signals[CHANGED]);
+ g_signal_emit(G_OBJECT(psel), psel_signals[CHANGED], 0);
}
static void sp_paint_selector_set_mode_gradient(SPPaintSelector *psel, SPPaintSelector::Mode mode)
@@ -725,10 +722,10 @@ static void sp_paint_selector_set_mode_gradient(SPPaintSelector *psel, SPPaintSe
/* Create new gradient selector */
gsel = sp_gradient_selector_new();
gtk_widget_show(gsel);
- gtk_signal_connect(GTK_OBJECT(gsel), "grabbed", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_grabbed), psel);
- gtk_signal_connect(GTK_OBJECT(gsel), "dragged", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_dragged), psel);
- gtk_signal_connect(GTK_OBJECT(gsel), "released", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_released), psel);
- gtk_signal_connect(GTK_OBJECT(gsel), "changed", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_changed), psel);
+ g_signal_connect(G_OBJECT(gsel), "grabbed", G_CALLBACK(sp_paint_selector_gradient_grabbed), psel);
+ g_signal_connect(G_OBJECT(gsel), "dragged", G_CALLBACK(sp_paint_selector_gradient_dragged), psel);
+ g_signal_connect(G_OBJECT(gsel), "released", G_CALLBACK(sp_paint_selector_gradient_released), psel);
+ g_signal_connect(G_OBJECT(gsel), "changed", G_CALLBACK(sp_paint_selector_gradient_changed), psel);
/* Pack everything to frame */
gtk_container_add(GTK_CONTAINER(psel->frame), gsel);
psel->selector = gsel;
@@ -769,7 +766,7 @@ static void sp_psel_pattern_destroy(GtkWidget *widget, SPPaintSelector * /*psel*
static void sp_psel_pattern_change(GtkWidget * /*widget*/, SPPaintSelector *psel)
{
- gtk_signal_emit(GTK_OBJECT(psel), psel_signals[CHANGED]);
+ g_signal_emit(G_OBJECT(psel), psel_signals[CHANGED], 0);
}
@@ -1000,8 +997,8 @@ static void sp_paint_selector_set_mode_pattern(SPPaintSelector *psel, SPPaintSel
GtkWidget *mnu = gtk_option_menu_new();
ink_pattern_menu(mnu);
- gtk_signal_connect(GTK_OBJECT(mnu), "changed", GTK_SIGNAL_FUNC(sp_psel_pattern_change), psel);
- gtk_signal_connect(GTK_OBJECT(mnu), "destroy", GTK_SIGNAL_FUNC(sp_psel_pattern_destroy), psel);
+ g_signal_connect(G_OBJECT(mnu), "changed", G_CALLBACK(sp_psel_pattern_change), psel);
+ g_signal_connect(G_OBJECT(mnu), "destroy", G_CALLBACK(sp_psel_pattern_destroy), psel);
gtk_object_set_data(GTK_OBJECT(psel), "patternmenu", mnu);
g_object_ref( G_OBJECT(mnu));
diff --git a/src/widgets/paint-selector.h b/src/widgets/paint-selector.h
index f3aff5a68..c0e44683b 100644
--- a/src/widgets/paint-selector.h
+++ b/src/widgets/paint-selector.h
@@ -22,12 +22,12 @@
class SPGradient;
#define SP_TYPE_PAINT_SELECTOR (sp_paint_selector_get_type ())
-#define SP_PAINT_SELECTOR(o) (GTK_CHECK_CAST ((o), SP_TYPE_PAINT_SELECTOR, SPPaintSelector))
-#define SP_PAINT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_PAINT_SELECTOR, SPPaintSelectorClass))
-#define SP_IS_PAINT_SELECTOR(o) (GTK_CHECK_TYPE ((o), SP_TYPE_PAINT_SELECTOR))
-#define SP_IS_PAINT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_PAINT_SELECTOR))
+#define SP_PAINT_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_PAINT_SELECTOR, SPPaintSelector))
+#define SP_PAINT_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_PAINT_SELECTOR, SPPaintSelectorClass))
+#define SP_IS_PAINT_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_PAINT_SELECTOR))
+#define SP_IS_PAINT_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_PAINT_SELECTOR))
-#include <gtk/gtkvbox.h>
+#include <gtk/gtk.h>
#include "../forward.h"
#include <color.h>
diff --git a/src/widgets/ruler.cpp b/src/widgets/ruler.cpp
index dd0336413..704d395f7 100644
--- a/src/widgets/ruler.cpp
+++ b/src/widgets/ruler.cpp
@@ -246,7 +246,7 @@ sp_ruler_common_draw_ticks (GtkRuler *ruler)
g_return_if_fail (ruler != NULL);
- if (!GTK_WIDGET_DRAWABLE (ruler))
+ if (!gtk_widget_is_drawable (GTK_WIDGET (ruler)))
return;
g_object_get(G_OBJECT(ruler), "orientation", &orientation, NULL);
@@ -425,6 +425,6 @@ sp_ruler_set_metric (GtkRuler *ruler,
ruler->metric = const_cast<GtkRulerMetric *>(&sp_ruler_metrics[metric]);
- if (GTK_WIDGET_DRAWABLE (ruler))
+ if (gtk_widget_is_drawable (GTK_WIDGET (ruler)))
gtk_widget_queue_draw (GTK_WIDGET (ruler));
}
diff --git a/src/widgets/ruler.h b/src/widgets/ruler.h
index 7a3509325..3c55b39c4 100644
--- a/src/widgets/ruler.h
+++ b/src/widgets/ruler.h
@@ -13,7 +13,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtkruler.h>
+#include <gtk/gtk.h>
#include "sp-metric.h"
#include <iostream>
#include <glib.h>
@@ -22,9 +22,9 @@
void sp_ruler_set_metric (GtkRuler * ruler, SPMetric metric);
-#define SP_HRULER(obj) GTK_CHECK_CAST (obj, sp_hruler_get_type (), SPHRuler)
-#define SP_HRULER_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, sp_hruler_get_type (), SPHRulerClass)
-#define SP_IS_HRULER(obj) GTK_CHECK_TYPE (obj, sp_hruler_get_type ())
+#define SP_HRULER(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, sp_hruler_get_type (), SPHRuler)
+#define SP_HRULER_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, sp_hruler_get_type (), SPHRulerClass)
+#define SP_IS_HRULER(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, sp_hruler_get_type ())
struct SPHRuler
@@ -47,9 +47,9 @@ GtkWidget* sp_hruler_new (void);
-#define SP_VRULER(obj) GTK_CHECK_CAST (obj, sp_vruler_get_type (), SPVRuler)
-#define SP_VRULER_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, sp_vruler_get_type (), SPVRulerClass)
-#define SP_IS_VRULER(obj) GTK_CHECK_TYPE (obj, sp_vruler_get_type ())
+#define SP_VRULER(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, sp_vruler_get_type (), SPVRuler)
+#define SP_VRULER_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, sp_vruler_get_type (), SPVRulerClass)
+#define SP_IS_VRULER(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, sp_vruler_get_type ())
struct SPVRuler
diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp
index 89253983b..7012badf8 100644
--- a/src/widgets/select-toolbar.cpp
+++ b/src/widgets/select-toolbar.cpp
@@ -17,12 +17,12 @@
#endif
#include <gtk/gtk.h>
-#include <gtk/gtkaction.h>
#include "widgets/button.h"
#include "widgets/spw-utilities.h"
#include "widgets/widget-sizes.h"
#include "widgets/spinbutton-events.h"
+#include "ui/widget/spinbutton.h"
#include "widgets/icon.h"
#include "widgets/sp-widget.h"
@@ -255,6 +255,16 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, SPWidget *spw)
g_object_set_data(G_OBJECT(spw), "update", GINT_TO_POINTER(FALSE));
}
+static GtkWidget* createCustomSlider( GtkAdjustment *adjustment, gdouble climbRate, guint digits )
+{
+ Inkscape::UI::Widget::SpinButton *inkSpinner = new Inkscape::UI::Widget::SpinButton(*Glib::wrap(adjustment, true), climbRate, digits);
+ inkSpinner = Gtk::manage( inkSpinner );
+ GtkWidget *widget = GTK_WIDGET( inkSpinner->gobj() );
+ return widget;
+}
+
+// TODO create_adjustment_action appears to be a rogue tile copy from toolbox.cpp. Resolve it to be unified:
+
static EgeAdjustmentAction * create_adjustment_action( gchar const *name,
gchar const *label,
gchar const *shortLabel,
@@ -266,6 +276,12 @@ static EgeAdjustmentAction * create_adjustment_action( gchar const *name,
gchar const *tooltip,
gboolean altx )
{
+ static bool init = false;
+ if ( !init ) {
+ init = true;
+ ege_adjustment_action_set_compact_tool_factory( createCustomSlider );
+ }
+
GtkAdjustment* adj = GTK_ADJUSTMENT( gtk_adjustment_new( 0.0, lower, 1e6, SPIN_STEP, SPIN_PAGE_STEP, 0 ) );
if (tracker) {
tracker->addAdjustment(adj);
@@ -279,7 +295,7 @@ static EgeAdjustmentAction * create_adjustment_action( gchar const *name,
g_object_set( act, "short_label", Q_(shortLabel), NULL );
}
- gtk_signal_connect( GTK_OBJECT(adj), "value_changed", GTK_SIGNAL_FUNC(sp_object_layout_any_value_changed), spw );
+ g_signal_connect( G_OBJECT(adj), "value_changed", G_CALLBACK(sp_object_layout_any_value_changed), spw );
if ( focusTarget ) {
ege_adjustment_action_set_focuswidget( act, focusTarget );
}
@@ -382,7 +398,7 @@ static GtkAction* create_action_for_verb( Inkscape::Verb* verb, Inkscape::UI::Vi
InkAction* inky = ink_action_new( verb->get_id(), verb->get_name(), verb->get_tip(), verb->get_image(), size );
act = GTK_ACTION(inky);
- g_signal_connect( G_OBJECT(inky), "activate", GTK_SIGNAL_FUNC(trigger_sp_action), targetAction );
+ g_signal_connect( G_OBJECT(inky), "activate", G_CALLBACK(trigger_sp_action), targetAction );
Inkscape::queueIconPrerender( verb->get_image(), size );
@@ -502,8 +518,8 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb
g_object_set_data( G_OBJECT(spw), "contextActions", contextActions );
// Force update when selection changes.
- gtk_signal_connect(GTK_OBJECT(spw), "modify_selection", GTK_SIGNAL_FUNC(sp_selection_layout_widget_modify_selection), desktop);
- gtk_signal_connect(GTK_OBJECT(spw), "change_selection", GTK_SIGNAL_FUNC(sp_selection_layout_widget_change_selection), desktop);
+ g_signal_connect(G_OBJECT(spw), "modify_selection", G_CALLBACK(sp_selection_layout_widget_modify_selection), desktop);
+ g_signal_connect(G_OBJECT(spw), "change_selection", G_CALLBACK(sp_selection_layout_widget_change_selection), desktop);
// Update now.
sp_selection_layout_widget_update(SP_WIDGET(spw), SP_ACTIVE_DESKTOP ? sp_desktop_selection(SP_ACTIVE_DESKTOP) : NULL);
diff --git a/src/widgets/select-toolbar.h b/src/widgets/select-toolbar.h
index dbab1975a..a4c42880f 100644
--- a/src/widgets/select-toolbar.h
+++ b/src/widgets/select-toolbar.h
@@ -14,8 +14,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtkactiongroup.h>
-#include <gtk/gtkstyle.h>
+#include <gtk/gtk.h>
struct SPDesktop;
void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
diff --git a/src/widgets/shrink-wrap-button.cpp b/src/widgets/shrink-wrap-button.cpp
index d73f972d9..e0c9e3cd1 100644
--- a/src/widgets/shrink-wrap-button.cpp
+++ b/src/widgets/shrink-wrap-button.cpp
@@ -10,7 +10,7 @@
*/
#include <gtkmm/button.h>
-#include <gtk/gtkbin.h>
+#include <gtk/gtk.h>
namespace Inkscape {
namespace Widgets {
diff --git a/src/widgets/sp-attribute-widget.cpp b/src/widgets/sp-attribute-widget.cpp
index a64a03f4e..66ccb27f2 100644
--- a/src/widgets/sp-attribute-widget.cpp
+++ b/src/widgets/sp-attribute-widget.cpp
@@ -9,8 +9,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtktable.h>
-#include <gtk/gtklabel.h>
+#include <gtk/gtk.h>
#include "xml/repr.h"
#include "macros.h"
#include "document.h"
diff --git a/src/widgets/sp-attribute-widget.h b/src/widgets/sp-attribute-widget.h
index 617c5b012..5d23e6754 100644
--- a/src/widgets/sp-attribute-widget.h
+++ b/src/widgets/sp-attribute-widget.h
@@ -18,16 +18,16 @@
#include <sigc++/connection.h>
#define SP_TYPE_ATTRIBUTE_WIDGET (sp_attribute_widget_get_type ())
-#define SP_ATTRIBUTE_WIDGET(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_ATTRIBUTE_WIDGET, SPAttributeWidget))
-#define SP_ATTRIBUTE_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_ATTRIBUTE_WIDGET, SPAttributeWidgetClass))
-#define SP_IS_ATTRIBUTE_WIDGET(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_ATTRIBUTE_WIDGET))
-#define SP_IS_ATTRIBUTE_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_ATTRIBUTE_WIDGET))
+#define SP_ATTRIBUTE_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_ATTRIBUTE_WIDGET, SPAttributeWidget))
+#define SP_ATTRIBUTE_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_ATTRIBUTE_WIDGET, SPAttributeWidgetClass))
+#define SP_IS_ATTRIBUTE_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_ATTRIBUTE_WIDGET))
+#define SP_IS_ATTRIBUTE_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_ATTRIBUTE_WIDGET))
#define SP_TYPE_ATTRIBUTE_TABLE (sp_attribute_table_get_type ())
-#define SP_ATTRIBUTE_TABLE(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_ATTRIBUTE_TABLE, SPAttributeTable))
-#define SP_ATTRIBUTE_TABLE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_ATTRIBUTE_TABLE, SPAttributeTableClass))
-#define SP_IS_ATTRIBUTE_TABLE(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_ATTRIBUTE_TABLE))
-#define SP_IS_ATTRIBUTE_TABLE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_ATTRIBUTE_TABLE))
+#define SP_ATTRIBUTE_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_ATTRIBUTE_TABLE, SPAttributeTable))
+#define SP_ATTRIBUTE_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_ATTRIBUTE_TABLE, SPAttributeTableClass))
+#define SP_IS_ATTRIBUTE_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_ATTRIBUTE_TABLE))
+#define SP_IS_ATTRIBUTE_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_ATTRIBUTE_TABLE))
namespace Inkscape {
namespace XML {
@@ -42,8 +42,7 @@ struct SPAttributeWidgetClass;
struct SPAttributeTable;
struct SPAttributeTableClass;
-#include <gtk/gtkentry.h>
-#include <gtk/gtkvbox.h>
+#include <gtk/gtk.h>
#include <forward.h>
diff --git a/src/widgets/sp-color-gtkselector.h b/src/widgets/sp-color-gtkselector.h
index b9b2b0862..3142406c1 100644
--- a/src/widgets/sp-color-gtkselector.h
+++ b/src/widgets/sp-color-gtkselector.h
@@ -1,7 +1,7 @@
#ifndef SEEN_SP_COLOR_GTKSELECTOR_H
#define SEEN_SP_COLOR_GTKSELECTOR_H
-#include <gtk/gtkcolorsel.h>
+#include <gtk/gtk.h>
#include "../color.h"
#include "sp-color-selector.h"
@@ -33,10 +33,10 @@ protected:
#define SP_TYPE_COLOR_GTKSELECTOR (sp_color_gtkselector_get_type ())
-#define SP_COLOR_GTKSELECTOR(o) (GTK_CHECK_CAST ((o), SP_TYPE_COLOR_GTKSELECTOR, SPColorGtkselector))
-#define SP_COLOR_GTKSELECTOR_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_GTKSELECTOR, SPColorGtkselectorClass))
-#define SP_IS_COLOR_GTKSELECTOR(o) (GTK_CHECK_TYPE ((o), SP_TYPE_COLOR_GTKSELECTOR))
-#define SP_IS_COLOR_GTKSELECTOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_GTKSELECTOR))
+#define SP_COLOR_GTKSELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_COLOR_GTKSELECTOR, SPColorGtkselector))
+#define SP_COLOR_GTKSELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_GTKSELECTOR, SPColorGtkselectorClass))
+#define SP_IS_COLOR_GTKSELECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_COLOR_GTKSELECTOR))
+#define SP_IS_COLOR_GTKSELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_GTKSELECTOR))
struct SPColorGtkselector {
SPColorSelector base;
diff --git a/src/widgets/sp-color-icc-selector.cpp b/src/widgets/sp-color-icc-selector.cpp
index 12467041c..3a2c7fbed 100644
--- a/src/widgets/sp-color-icc-selector.cpp
+++ b/src/widgets/sp-color-icc-selector.cpp
@@ -2,12 +2,7 @@
# include "config.h"
#endif
#include <math.h>
-#include <gtk/gtkbutton.h>
#include <gtk/gtk.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtktable.h>
-#include <gtk/gtkspinbutton.h>
#include <glibmm/i18n.h>
#include "../dialogs/dialog-events.h"
#include "sp-color-icc-selector.h"
@@ -25,7 +20,6 @@
#ifdef DEBUG_LCMS
#include "preferences.h"
-#include <gtk/gtkmessagedialog.h>
#endif // DEBUG_LCMS
#endif // ENABLE_LCMS
@@ -143,8 +137,7 @@ ColorICCSelector::ColorICCSelector( SPColorSelector* csel )
_fooMap(0),
_adj(0),
_sbtn(0),
- _label(0),
- _tt(0)
+ _label(0)
#if ENABLE_LCMS
,
_profileName(""),
@@ -276,8 +269,6 @@ void ColorICCSelector::init()
_updating = FALSE;
_dragging = FALSE;
- _tt = gtk_tooltips_new();
-
t = gtk_table_new (5, 3, FALSE);
gtk_widget_show (t);
gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 0);
@@ -296,7 +287,7 @@ void ColorICCSelector::init()
_fixupBtn = gtk_button_new_with_label(_("Fix"));
g_signal_connect( G_OBJECT(_fixupBtn), "clicked", G_CALLBACK(_fixupHit), (gpointer)this );
gtk_widget_set_sensitive( _fixupBtn, FALSE );
- gtk_tooltips_set_tip( _tt, _fixupBtn, _("Fix RGB fallback to match icc-color() value."), NULL );
+ gtk_widget_set_tooltip_text( _fixupBtn, _("Fix RGB fallback to match icc-color() value.") );
//gtk_misc_set_alignment( GTK_MISC (_fixupBtn), 1.0, 0.5 );
gtk_widget_show( _fixupBtn );
gtk_table_attach( GTK_TABLE (t), _fixupBtn, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD );
@@ -344,18 +335,18 @@ void ColorICCSelector::init()
/* Slider */
_fooSlider[i] = sp_color_slider_new( _fooAdj[i] );
#if ENABLE_LCMS
- gtk_tooltips_set_tip( _tt, _fooSlider[i], tips[i], NULL );
+ gtk_widget_set_tooltip_text( _fooSlider[i], tips[i] );
#else
- gtk_tooltips_set_tip( _tt, _fooSlider[i], ".", NULL );
+ gtk_widget_set_tooltip_text( _fooSlider[i], "." );
#endif // ENABLE_LCMS
gtk_widget_show( _fooSlider[i] );
gtk_table_attach( GTK_TABLE (t), _fooSlider[i], 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)GTK_FILL, XPAD, YPAD );
_fooBtn[i] = gtk_spin_button_new( _fooAdj[i], step, digits );
#if ENABLE_LCMS
- gtk_tooltips_set_tip( _tt, _fooBtn[i], tips[i], NULL );
+ gtk_widget_set_tooltip_text( _fooBtn[i], tips[i] );
#else
- gtk_tooltips_set_tip( _tt, _fooBtn[i], ".", NULL );
+ gtk_widget_set_tooltip_text( _fooBtn[i], "." );
#endif // ENABLE_LCMS
sp_dialog_defocus_on_enter( _fooBtn[i] );
gtk_label_set_mnemonic_widget( GTK_LABEL(_fooLabel[i]), _fooBtn[i] );
@@ -367,11 +358,11 @@ void ColorICCSelector::init()
/* Signals */
- gtk_signal_connect( GTK_OBJECT( _fooAdj[i] ), "value_changed", GTK_SIGNAL_FUNC( _adjustmentChanged ), _csel );
+ g_signal_connect( G_OBJECT( _fooAdj[i] ), "value_changed", G_CALLBACK( _adjustmentChanged ), _csel );
- gtk_signal_connect( GTK_OBJECT( _fooSlider[i] ), "grabbed", GTK_SIGNAL_FUNC( _sliderGrabbed ), _csel );
- gtk_signal_connect( GTK_OBJECT( _fooSlider[i] ), "released", GTK_SIGNAL_FUNC( _sliderReleased ), _csel );
- gtk_signal_connect( GTK_OBJECT( _fooSlider[i] ), "changed", GTK_SIGNAL_FUNC( _sliderChanged ), _csel );
+ g_signal_connect( G_OBJECT( _fooSlider[i] ), "grabbed", G_CALLBACK( _sliderGrabbed ), _csel );
+ g_signal_connect( G_OBJECT( _fooSlider[i] ), "released", G_CALLBACK( _sliderReleased ), _csel );
+ g_signal_connect( G_OBJECT( _fooSlider[i] ), "changed", G_CALLBACK( _sliderChanged ), _csel );
row++;
}
@@ -387,7 +378,7 @@ void ColorICCSelector::init()
/* Slider */
_slider = sp_color_slider_new (_adj);
- gtk_tooltips_set_tip (_tt, _slider, _("Alpha (opacity)"), NULL);
+ gtk_widget_set_tooltip_text (_slider, _("Alpha (opacity)"));
gtk_widget_show (_slider);
gtk_table_attach (GTK_TABLE (t), _slider, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)GTK_FILL, XPAD, YPAD);
@@ -399,22 +390,22 @@ void ColorICCSelector::init()
/* Spinbutton */
_sbtn = gtk_spin_button_new (GTK_ADJUSTMENT (_adj), 1.0, 0);
- gtk_tooltips_set_tip (_tt, _sbtn, _("Alpha (opacity)"), NULL);
+ gtk_widget_set_tooltip_text (_sbtn, _("Alpha (opacity)"));
sp_dialog_defocus_on_enter (_sbtn);
gtk_label_set_mnemonic_widget (GTK_LABEL(_label), _sbtn);
gtk_widget_show (_sbtn);
gtk_table_attach (GTK_TABLE (t), _sbtn, 2, 3, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD);
/* Signals */
- gtk_signal_connect (GTK_OBJECT (_adj), "value_changed",
- GTK_SIGNAL_FUNC (_adjustmentChanged), _csel);
-
- gtk_signal_connect (GTK_OBJECT (_slider), "grabbed",
- GTK_SIGNAL_FUNC (_sliderGrabbed), _csel);
- gtk_signal_connect (GTK_OBJECT (_slider), "released",
- GTK_SIGNAL_FUNC (_sliderReleased), _csel);
- gtk_signal_connect (GTK_OBJECT (_slider), "changed",
- GTK_SIGNAL_FUNC (_sliderChanged), _csel);
+ g_signal_connect (G_OBJECT (_adj), "value_changed",
+ G_CALLBACK (_adjustmentChanged), _csel);
+
+ g_signal_connect (G_OBJECT (_slider), "grabbed",
+ G_CALLBACK (_sliderGrabbed), _csel);
+ g_signal_connect (G_OBJECT (_slider), "released",
+ G_CALLBACK (_sliderReleased), _csel);
+ g_signal_connect (G_OBJECT (_slider), "changed",
+ G_CALLBACK (_sliderChanged), _csel);
}
static void
@@ -700,8 +691,8 @@ void ColorICCSelector::_setProfile( SVGICCColor* profile )
for ( guint i = 0; i < _profChannelCount; i++ ) {
gtk_label_set_text_with_mnemonic( GTK_LABEL(_fooLabel[i]), names[i]);
- gtk_tooltips_set_tip( _tt, _fooSlider[i], tips[i], NULL );
- gtk_tooltips_set_tip( _tt, _fooBtn[i], tips[i], NULL );
+ gtk_widget_set_tooltip_text( _fooSlider[i], tips[i] );
+ gtk_widget_set_tooltip_text( _fooBtn[i], tips[i] );
sp_color_slider_set_colors( SP_COLOR_SLIDER(_fooSlider[i]),
SPColor(0.0, 0.0, 0.0).toRGBA32(0xff),
@@ -709,7 +700,7 @@ void ColorICCSelector::_setProfile( SVGICCColor* profile )
SPColor(1.0, 1.0, 1.0).toRGBA32(0xff) );
/*
_fooAdj[i] = GTK_ADJUSTMENT( gtk_adjustment_new( val, 0.0, _fooScales[i], step, page, page ) );
- gtk_signal_connect( GTK_OBJECT( _fooAdj[i] ), "value_changed", GTK_SIGNAL_FUNC( _adjustmentChanged ), _csel );
+ g_signal_connect( G_OBJECT( _fooAdj[i] ), "value_changed", G_CALLBACK( _adjustmentChanged ), _csel );
sp_color_slider_set_adjustment( SP_COLOR_SLIDER(_fooSlider[i]), _fooAdj[i] );
gtk_spin_button_set_adjustment( GTK_SPIN_BUTTON(_fooBtn[i]), _fooAdj[i] );
diff --git a/src/widgets/sp-color-icc-selector.h b/src/widgets/sp-color-icc-selector.h
index 9fd80c04a..9238e3f68 100644
--- a/src/widgets/sp-color-icc-selector.h
+++ b/src/widgets/sp-color-icc-selector.h
@@ -2,8 +2,7 @@
#define SEEN_SP_COLOR_ICC_SELECTOR_H
#include <glib/gtypes.h>
-#include <gtk/gtktooltips.h>
-#include <gtk/gtkvbox.h>
+#include <gtk/gtk.h>
#include "../color.h"
#include "sp-color-slider.h"
@@ -67,8 +66,6 @@ protected:
GtkWidget* _sbtn; /* Spinbutton */
GtkWidget* _label; /* Label */
- GtkTooltips* _tt; /* tooltip container */
-
#if ENABLE_LCMS
std::string _profileName;
Inkscape::ColorProfile* _prof;
@@ -85,10 +82,10 @@ private:
#define SP_TYPE_COLOR_ICC_SELECTOR (sp_color_icc_selector_get_type ())
-#define SP_COLOR_ICC_SELECTOR(o) (GTK_CHECK_CAST ((o), SP_TYPE_COLOR_ICC_SELECTOR, SPColorICCSelector))
-#define SP_COLOR_ICC_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_ICC_SELECTOR, SPColorICCSelectorClass))
-#define SP_IS_COLOR_ICC_SELECTOR(o) (GTK_CHECK_TYPE ((o), SP_TYPE_COLOR_ICC_SELECTOR))
-#define SP_IS_COLOR_ICC_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_ICC_SELECTOR))
+#define SP_COLOR_ICC_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_COLOR_ICC_SELECTOR, SPColorICCSelector))
+#define SP_COLOR_ICC_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_ICC_SELECTOR, SPColorICCSelectorClass))
+#define SP_IS_COLOR_ICC_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_COLOR_ICC_SELECTOR))
+#define SP_IS_COLOR_ICC_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_ICC_SELECTOR))
struct SPColorICCSelector {
SPColorSelector parent;
diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp
index 174971555..06e990dfb 100644
--- a/src/widgets/sp-color-notebook.cpp
+++ b/src/widgets/sp-color-notebook.cpp
@@ -203,8 +203,6 @@ void ColorNotebook::init()
GType *selector_types = 0;
guint selector_type_count = 0;
- GtkTooltips *tt = gtk_tooltips_new ();
-
/* tempory hardcoding to get types loaded */
SP_TYPE_COLOR_SCALES;
SP_TYPE_COLOR_WHEEL_SELECTOR;
@@ -320,7 +318,7 @@ void ColorNotebook::init()
// but first fix it so it remembers its settings in prefs and does not take that much space (entire vertical column!)
//gtk_table_attach (GTK_TABLE (table), align, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD);
- gtk_signal_connect_object(GTK_OBJECT(_btn), "event", GTK_SIGNAL_FUNC (sp_color_notebook_menu_handler), GTK_OBJECT(_csel));
+ g_signal_connect_swapped(G_OBJECT(_btn), "event", G_CALLBACK (sp_color_notebook_menu_handler), G_OBJECT(_csel));
if ( !found )
{
gtk_widget_set_sensitive (_btn, FALSE);
@@ -336,24 +334,21 @@ void ColorNotebook::init()
_box_colormanaged = gtk_event_box_new ();
GtkWidget *colormanaged = gtk_image_new_from_icon_name ("color-management-icon", GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_container_add (GTK_CONTAINER (_box_colormanaged), colormanaged);
- GtkTooltips *tooltips_colormanaged = gtk_tooltips_new ();
- gtk_tooltips_set_tip (tooltips_colormanaged, _box_colormanaged, _("Color Managed"), "");
+ gtk_widget_set_tooltip_text (_box_colormanaged, _("Color Managed"));
gtk_widget_set_sensitive (_box_colormanaged, false);
gtk_box_pack_start(GTK_BOX(rgbabox), _box_colormanaged, FALSE, FALSE, 2);
_box_outofgamut = gtk_event_box_new ();
GtkWidget *outofgamut = gtk_image_new_from_icon_name ("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_container_add (GTK_CONTAINER (_box_outofgamut), outofgamut);
- GtkTooltips *tooltips_outofgamut = gtk_tooltips_new ();
- gtk_tooltips_set_tip (tooltips_outofgamut, _box_outofgamut, _("Out of gamut!"), "");
+ gtk_widget_set_tooltip_text (_box_outofgamut, _("Out of gamut!"));
gtk_widget_set_sensitive (_box_outofgamut, false);
gtk_box_pack_start(GTK_BOX(rgbabox), _box_outofgamut, FALSE, FALSE, 2);
_box_toomuchink = gtk_event_box_new ();
GtkWidget *toomuchink = gtk_image_new_from_icon_name ("too-much-ink-icon", GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_container_add (GTK_CONTAINER (_box_toomuchink), toomuchink);
- GtkTooltips *tooltips_toomuchink = gtk_tooltips_new ();
- gtk_tooltips_set_tip (tooltips_toomuchink, _box_toomuchink, _("Too much ink!"), "");
+ gtk_widget_set_tooltip_text (_box_toomuchink, _("Too much ink!"));
gtk_widget_set_sensitive (_box_toomuchink, false);
gtk_box_pack_start(GTK_BOX(rgbabox), _box_toomuchink, FALSE, FALSE, 2);
@@ -368,7 +363,7 @@ void ColorNotebook::init()
sp_dialog_defocus_on_enter (_rgbae);
gtk_entry_set_max_length (GTK_ENTRY (_rgbae), 8);
gtk_entry_set_width_chars (GTK_ENTRY (_rgbae), 8);
- gtk_tooltips_set_tip (tt, _rgbae, _("Hexadecimal RGBA value of the color"), NULL);
+ gtk_widget_set_tooltip_text (_rgbae, _("Hexadecimal RGBA value of the color"));
gtk_box_pack_start(GTK_BOX(rgbabox), _rgbae, FALSE, FALSE, 0);
gtk_label_set_mnemonic_widget (GTK_LABEL(_rgbal), _rgbae);
@@ -388,10 +383,10 @@ void ColorNotebook::init()
gtk_table_attach (GTK_TABLE (table), _p, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD);
#endif
- _switchId = g_signal_connect(GTK_OBJECT (_book), "switch-page",
- GTK_SIGNAL_FUNC (sp_color_notebook_switch_page), SP_COLOR_NOTEBOOK(_csel));
+ _switchId = g_signal_connect(G_OBJECT (_book), "switch-page",
+ G_CALLBACK (sp_color_notebook_switch_page), SP_COLOR_NOTEBOOK(_csel));
- _entryId = gtk_signal_connect (GTK_OBJECT (_rgbae), "changed", GTK_SIGNAL_FUNC (ColorNotebook::_rgbaEntryChangedHook), _csel);
+ _entryId = g_signal_connect (G_OBJECT (_rgbae), "changed", G_CALLBACK (ColorNotebook::_rgbaEntryChangedHook), _csel);
}
static void
@@ -653,10 +648,10 @@ GtkWidget* ColorNotebook::addPage(GType page_type, guint submode)
// g_message( "Hitting up for tab for '%s'", str );
tab_label = gtk_label_new(_(str));
gtk_notebook_append_page( GTK_NOTEBOOK (_book), page, tab_label );
- gtk_signal_connect (GTK_OBJECT (page), "grabbed", GTK_SIGNAL_FUNC (_entryGrabbed), _csel);
- gtk_signal_connect (GTK_OBJECT (page), "dragged", GTK_SIGNAL_FUNC (_entryDragged), _csel);
- gtk_signal_connect (GTK_OBJECT (page), "released", GTK_SIGNAL_FUNC (_entryReleased), _csel);
- gtk_signal_connect (GTK_OBJECT (page), "changed", GTK_SIGNAL_FUNC (_entryChanged), _csel);
+ g_signal_connect (G_OBJECT (page), "grabbed", G_CALLBACK (_entryGrabbed), _csel);
+ g_signal_connect (G_OBJECT (page), "dragged", G_CALLBACK (_entryDragged), _csel);
+ g_signal_connect (G_OBJECT (page), "released", G_CALLBACK (_entryReleased), _csel);
+ g_signal_connect (G_OBJECT (page), "changed", G_CALLBACK (_entryChanged), _csel);
}
return page;
diff --git a/src/widgets/sp-color-notebook.h b/src/widgets/sp-color-notebook.h
index 0b9b2ed87..8d2988636 100644
--- a/src/widgets/sp-color-notebook.h
+++ b/src/widgets/sp-color-notebook.h
@@ -12,9 +12,7 @@
* This code is in public domain
*/
-#include <gtk/gtkvbox.h>
-#include <gtk/gtknotebook.h>
-#include <gtk/gtkentry.h>
+#include <gtk/gtk.h>
#include "../color.h"
#include "sp-color-selector.h"
@@ -78,10 +76,10 @@ private:
#define SP_TYPE_COLOR_NOTEBOOK (sp_color_notebook_get_type ())
-#define SP_COLOR_NOTEBOOK(o) (GTK_CHECK_CAST ((o), SP_TYPE_COLOR_NOTEBOOK, SPColorNotebook))
-#define SP_COLOR_NOTEBOOK_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_NOTEBOOK, SPColorNotebookClass))
-#define SP_IS_COLOR_NOTEBOOK(o) (GTK_CHECK_TYPE ((o), SP_TYPE_COLOR_NOTEBOOK))
-#define SP_IS_COLOR_NOTEBOOK_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_NOTEBOOK))
+#define SP_COLOR_NOTEBOOK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_COLOR_NOTEBOOK, SPColorNotebook))
+#define SP_COLOR_NOTEBOOK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_NOTEBOOK, SPColorNotebookClass))
+#define SP_IS_COLOR_NOTEBOOK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_COLOR_NOTEBOOK))
+#define SP_IS_COLOR_NOTEBOOK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_NOTEBOOK))
struct SPColorNotebook {
SPColorSelector parent; /* Parent */
diff --git a/src/widgets/sp-color-scales.cpp b/src/widgets/sp-color-scales.cpp
index fb8bb0795..25162dead 100644
--- a/src/widgets/sp-color-scales.cpp
+++ b/src/widgets/sp-color-scales.cpp
@@ -140,8 +140,6 @@ void ColorScales::init()
_updating = FALSE;
_dragging = FALSE;
- _tt = gtk_tooltips_new();
-
t = gtk_table_new (5, 3, FALSE);
gtk_widget_show (t);
gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 0);
@@ -170,14 +168,14 @@ void ColorScales::init()
/* Attach channel value to adjustment */
gtk_object_set_data (GTK_OBJECT (_a[i]), "channel", GINT_TO_POINTER (i));
/* Signals */
- gtk_signal_connect (GTK_OBJECT (_a[i]), "value_changed",
- GTK_SIGNAL_FUNC (_adjustmentAnyChanged), _csel);
- gtk_signal_connect (GTK_OBJECT (_s[i]), "grabbed",
- GTK_SIGNAL_FUNC (_sliderAnyGrabbed), _csel);
- gtk_signal_connect (GTK_OBJECT (_s[i]), "released",
- GTK_SIGNAL_FUNC (_sliderAnyReleased), _csel);
- gtk_signal_connect (GTK_OBJECT (_s[i]), "changed",
- GTK_SIGNAL_FUNC (_sliderAnyChanged), _csel);
+ g_signal_connect (G_OBJECT (_a[i]), "value_changed",
+ G_CALLBACK (_adjustmentAnyChanged), _csel);
+ g_signal_connect (G_OBJECT (_s[i]), "grabbed",
+ G_CALLBACK (_sliderAnyGrabbed), _csel);
+ g_signal_connect (G_OBJECT (_s[i]), "released",
+ G_CALLBACK (_sliderAnyReleased), _csel);
+ g_signal_connect (G_OBJECT (_s[i]), "changed",
+ G_CALLBACK (_sliderAnyChanged), _csel);
}
/* Initial mode is none, so it works */
@@ -402,17 +400,17 @@ void ColorScales::setMode(SPColorScalesMode mode)
case SP_COLOR_SCALES_MODE_RGB:
_setRangeLimit(255.0);
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[0]), _("_R:"));
- gtk_tooltips_set_tip (_tt, _s[0], _("Red"), NULL);
- gtk_tooltips_set_tip (_tt, _b[0], _("Red"), NULL);
+ gtk_widget_set_tooltip_text (_s[0], _("Red"));
+ gtk_widget_set_tooltip_text (_b[0], _("Red"));
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[1]), _("_G:"));
- gtk_tooltips_set_tip (_tt, _s[1], _("Green"), NULL);
- gtk_tooltips_set_tip (_tt, _b[1], _("Green"), NULL);
+ gtk_widget_set_tooltip_text (_s[1], _("Green"));
+ gtk_widget_set_tooltip_text (_b[1], _("Green"));
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[2]), _("_B:"));
- gtk_tooltips_set_tip (_tt, _s[2], _("Blue"), NULL);
- gtk_tooltips_set_tip (_tt, _b[2], _("Blue"), NULL);
+ gtk_widget_set_tooltip_text (_s[2], _("Blue"));
+ gtk_widget_set_tooltip_text (_b[2], _("Blue"));
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[3]), _("_A:"));
- gtk_tooltips_set_tip (_tt, _s[3], _("Alpha (opacity)"), NULL);
- gtk_tooltips_set_tip (_tt, _b[3], _("Alpha (opacity)"), NULL);
+ gtk_widget_set_tooltip_text (_s[3], _("Alpha (opacity)"));
+ gtk_widget_set_tooltip_text (_b[3], _("Alpha (opacity)"));
sp_color_slider_set_map (SP_COLOR_SLIDER (_s[0]), NULL);
gtk_widget_hide (_l[4]);
gtk_widget_hide (_s[4]);
@@ -428,17 +426,17 @@ void ColorScales::setMode(SPColorScalesMode mode)
case SP_COLOR_SCALES_MODE_HSV:
_setRangeLimit(255.0);
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[0]), _("_H:"));
- gtk_tooltips_set_tip (_tt, _s[0], _("Hue"), NULL);
- gtk_tooltips_set_tip (_tt, _b[0], _("Hue"), NULL);
+ gtk_widget_set_tooltip_text (_s[0], _("Hue"));
+ gtk_widget_set_tooltip_text (_b[0], _("Hue"));
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[1]), _("_S:"));
- gtk_tooltips_set_tip (_tt, _s[1], _("Saturation"), NULL);
- gtk_tooltips_set_tip (_tt, _b[1], _("Saturation"), NULL);
+ gtk_widget_set_tooltip_text (_s[1], _("Saturation"));
+ gtk_widget_set_tooltip_text (_b[1], _("Saturation"));
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[2]), _("_L:"));
- gtk_tooltips_set_tip (_tt, _s[2], _("Lightness"), NULL);
- gtk_tooltips_set_tip (_tt, _b[2], _("Lightness"), NULL);
+ gtk_widget_set_tooltip_text (_s[2], _("Lightness"));
+ gtk_widget_set_tooltip_text (_b[2], _("Lightness"));
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[3]), _("_A:"));
- gtk_tooltips_set_tip (_tt, _s[3], _("Alpha (opacity)"), NULL);
- gtk_tooltips_set_tip (_tt, _b[3], _("Alpha (opacity)"), NULL);
+ gtk_widget_set_tooltip_text (_s[3], _("Alpha (opacity)"));
+ gtk_widget_set_tooltip_text (_b[3], _("Alpha (opacity)"));
sp_color_slider_set_map (SP_COLOR_SLIDER (_s[0]), (guchar*)sp_color_scales_hue_map ());
gtk_widget_hide (_l[4]);
gtk_widget_hide (_s[4]);
@@ -456,20 +454,20 @@ void ColorScales::setMode(SPColorScalesMode mode)
case SP_COLOR_SCALES_MODE_CMYK:
_setRangeLimit(100.0);
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[0]), _("_C:"));
- gtk_tooltips_set_tip (_tt, _s[0], _("Cyan"), NULL);
- gtk_tooltips_set_tip (_tt, _b[0], _("Cyan"), NULL);
+ gtk_widget_set_tooltip_text (_s[0], _("Cyan"));
+ gtk_widget_set_tooltip_text (_b[0], _("Cyan"));
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[1]), _("_M:"));
- gtk_tooltips_set_tip (_tt, _s[1], _("Magenta"), NULL);
- gtk_tooltips_set_tip (_tt, _b[1], _("Magenta"), NULL);
+ gtk_widget_set_tooltip_text (_s[1], _("Magenta"));
+ gtk_widget_set_tooltip_text (_b[1], _("Magenta"));
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[2]), _("_Y:"));
- gtk_tooltips_set_tip (_tt, _s[2], _("Yellow"), NULL);
- gtk_tooltips_set_tip (_tt, _b[2], _("Yellow"), NULL);
+ gtk_widget_set_tooltip_text (_s[2], _("Yellow"));
+ gtk_widget_set_tooltip_text (_b[2], _("Yellow"));
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[3]), _("_K:"));
- gtk_tooltips_set_tip (_tt, _s[3], _("Black"), NULL);
- gtk_tooltips_set_tip (_tt, _b[3], _("Black"), NULL);
+ gtk_widget_set_tooltip_text (_s[3], _("Black"));
+ gtk_widget_set_tooltip_text (_b[3], _("Black"));
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[4]), _("_A:"));
- gtk_tooltips_set_tip (_tt, _s[4], _("Alpha (opacity)"), NULL);
- gtk_tooltips_set_tip (_tt, _b[4], _("Alpha (opacity)"), NULL);
+ gtk_widget_set_tooltip_text (_s[4], _("Alpha (opacity)"));
+ gtk_widget_set_tooltip_text (_b[4], _("Alpha (opacity)"));
sp_color_slider_set_map (SP_COLOR_SLIDER (_s[0]), NULL);
gtk_widget_show (_l[4]);
gtk_widget_show (_s[4]);
diff --git a/src/widgets/sp-color-scales.h b/src/widgets/sp-color-scales.h
index 21a85a08e..8ffe5e7a8 100644
--- a/src/widgets/sp-color-scales.h
+++ b/src/widgets/sp-color-scales.h
@@ -2,8 +2,7 @@
#define SEEN_SP_COLOR_SCALES_H
#include <glib/gtypes.h>
-#include <gtk/gtktooltips.h>
-#include <gtk/gtkvbox.h>
+#include <gtk/gtk.h>
#include <color.h>
#include <widgets/sp-color-slider.h>
@@ -66,8 +65,6 @@ protected:
GtkWidget *_b[5]; /* Spinbuttons */
GtkWidget *_l[5]; /* Labels */
- GtkTooltips *_tt; /* tooltip container */
-
private:
// By default, disallow copy constructor and assignment operator
ColorScales(ColorScales const &obj);
@@ -77,10 +74,10 @@ private:
#define SP_TYPE_COLOR_SCALES (sp_color_scales_get_type())
-#define SP_COLOR_SCALES(o) (GTK_CHECK_CAST((o), SP_TYPE_COLOR_SCALES, SPColorScales))
-#define SP_COLOR_SCALES_CLASS(k) (GTK_CHECK_CLASS_CAST((k), SP_TYPE_COLOR_SCALES, SPColorScalesClass))
-#define SP_IS_COLOR_SCALES(o) (GTK_CHECK_TYPE((o), SP_TYPE_COLOR_SCALES))
-#define SP_IS_COLOR_SCALES_CLASS(k) (GTK_CHECK_CLASS_TYPE((k), SP_TYPE_COLOR_SCALES))
+#define SP_COLOR_SCALES(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_COLOR_SCALES, SPColorScales))
+#define SP_COLOR_SCALES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_COLOR_SCALES, SPColorScalesClass))
+#define SP_IS_COLOR_SCALES(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_COLOR_SCALES))
+#define SP_IS_COLOR_SCALES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_COLOR_SCALES))
struct SPColorScales {
SPColorSelector parent;
diff --git a/src/widgets/sp-color-selector.cpp b/src/widgets/sp-color-selector.cpp
index c6f13b391..bf3564d2e 100644
--- a/src/widgets/sp-color-selector.cpp
+++ b/src/widgets/sp-color-selector.cpp
@@ -7,7 +7,7 @@
# include "config.h"
#endif
#include <math.h>
-#include <gtk/gtksignal.h>
+#include <gtk/gtk.h>
#include <glibmm/i18n.h>
#include "sp-color-selector.h"
@@ -70,28 +70,32 @@ void sp_color_selector_class_init( SPColorSelectorClass *klass )
parent_class = GTK_VBOX_CLASS( gtk_type_class(GTK_TYPE_VBOX) );
- csel_signals[GRABBED] = gtk_signal_new( "grabbed",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET(SPColorSelectorClass, grabbed),
+ csel_signals[GRABBED] = g_signal_new( "grabbed",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET(SPColorSelectorClass, grabbed),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0 );
- csel_signals[DRAGGED] = gtk_signal_new( "dragged",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET(SPColorSelectorClass, dragged),
+ csel_signals[DRAGGED] = g_signal_new( "dragged",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET(SPColorSelectorClass, dragged),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0 );
- csel_signals[RELEASED] = gtk_signal_new( "released",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET(SPColorSelectorClass, released),
+ csel_signals[RELEASED] = g_signal_new( "released",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET(SPColorSelectorClass, released),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0 );
- csel_signals[CHANGED] = gtk_signal_new( "changed",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET(SPColorSelectorClass, changed),
+ csel_signals[CHANGED] = g_signal_new( "changed",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET(SPColorSelectorClass, changed),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0 );
@@ -111,7 +115,7 @@ void sp_color_selector_init( SPColorSelector *csel )
{
csel->base->init();
}
-/* gtk_signal_connect(GTK_OBJECT(csel->rgbae), "changed", GTK_SIGNAL_FUNC(sp_color_selector_rgba_entry_changed), csel); */
+/* g_signal_connect(G_OBJECT(csel->rgbae), "changed", G_CALLBACK(sp_color_selector_rgba_entry_changed), csel); */
}
void sp_color_selector_destroy( GtkObject *object )
@@ -230,7 +234,7 @@ void ColorSelector::setColorAlpha( const SPColor& color, gfloat alpha, bool emit
_colorChanged();
if (emit) {
- gtk_signal_emit(GTK_OBJECT(_csel), csel_signals[CHANGED]);
+ g_signal_emit(G_OBJECT(_csel), csel_signals[CHANGED], 0);
}
#ifdef DUMP_CHANGE_INFO
} else {
@@ -248,7 +252,7 @@ void ColorSelector::_grabbed()
"GRABBED",
FOO_NAME(_csel));
#endif
- gtk_signal_emit(GTK_OBJECT(_csel), csel_signals[GRABBED]);
+ g_signal_emit(G_OBJECT(_csel), csel_signals[GRABBED], 0);
}
void ColorSelector::_released()
@@ -259,8 +263,8 @@ void ColorSelector::_released()
"RELEASED",
FOO_NAME(_csel));
#endif
- gtk_signal_emit(GTK_OBJECT(_csel), csel_signals[RELEASED]);
- gtk_signal_emit(GTK_OBJECT(_csel), csel_signals[CHANGED]);
+ g_signal_emit(G_OBJECT(_csel), csel_signals[RELEASED], 0);
+ g_signal_emit(G_OBJECT(_csel), csel_signals[CHANGED], 0);
}
// Called from subclasses to update color and broadcast if needed
@@ -288,7 +292,7 @@ void ColorSelector::_updateInternals( const SPColor& color, gfloat alpha, gboole
"GRABBED",
color.toRGBA32( alpha ), (color.icc?color.icc->colorProfile.c_str():"<null>"), FOO_NAME(_csel));
#endif
- gtk_signal_emit(GTK_OBJECT(_csel), csel_signals[GRABBED]);
+ g_signal_emit(G_OBJECT(_csel), csel_signals[GRABBED], 0);
}
else if ( released )
{
@@ -297,7 +301,7 @@ void ColorSelector::_updateInternals( const SPColor& color, gfloat alpha, gboole
"RELEASED",
color.toRGBA32( alpha ), (color.icc?color.icc->colorProfile.c_str():"<null>"), FOO_NAME(_csel));
#endif
- gtk_signal_emit(GTK_OBJECT(_csel), csel_signals[RELEASED]);
+ g_signal_emit(G_OBJECT(_csel), csel_signals[RELEASED], 0);
}
if ( colorDifferent || released )
@@ -307,7 +311,7 @@ void ColorSelector::_updateInternals( const SPColor& color, gfloat alpha, gboole
(_held ? "CHANGED" : "DRAGGED" ),
color.toRGBA32( alpha ), (color.icc?color.icc->colorProfile.c_str():"<null>"), FOO_NAME(_csel));
#endif
- gtk_signal_emit(GTK_OBJECT(_csel), csel_signals[_held ? CHANGED : DRAGGED]);
+ g_signal_emit(G_OBJECT(_csel), csel_signals[_held ? CHANGED : DRAGGED], 0);
}
}
diff --git a/src/widgets/sp-color-selector.h b/src/widgets/sp-color-selector.h
index 3b35140ed..c27cad45f 100644
--- a/src/widgets/sp-color-selector.h
+++ b/src/widgets/sp-color-selector.h
@@ -1,7 +1,7 @@
#ifndef SEEN_SP_COLOR_SELECTOR_H
#define SEEN_SP_COLOR_SELECTOR_H
-#include <gtk/gtkvbox.h>
+#include <gtk/gtk.h>
#include "../color.h"
#include <glib.h>
@@ -58,10 +58,10 @@ private:
#define SP_TYPE_COLOR_SELECTOR (sp_color_selector_get_type ())
-#define SP_COLOR_SELECTOR(o) (GTK_CHECK_CAST ((o), SP_TYPE_COLOR_SELECTOR, SPColorSelector))
-#define SP_COLOR_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_SELECTOR, SPColorSelectorClass))
-#define SP_IS_COLOR_SELECTOR(o) (GTK_CHECK_TYPE ((o), SP_TYPE_COLOR_SELECTOR))
-#define SP_IS_COLOR_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_SELECTOR))
+#define SP_COLOR_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_COLOR_SELECTOR, SPColorSelector))
+#define SP_COLOR_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_SELECTOR, SPColorSelectorClass))
+#define SP_IS_COLOR_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_COLOR_SELECTOR))
+#define SP_IS_COLOR_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_SELECTOR))
#define SP_COLOR_SELECTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SP_TYPE_COLOR_SELECTOR, SPColorSelectorClass))
struct SPColorSelector {
diff --git a/src/widgets/sp-color-slider.cpp b/src/widgets/sp-color-slider.cpp
index 0e30b1ce6..7b365bc73 100644
--- a/src/widgets/sp-color-slider.cpp
+++ b/src/widgets/sp-color-slider.cpp
@@ -1,5 +1,3 @@
-#define __SP_COLOR_SLIDER_C__
-
/*
* A slider with colored background
*
@@ -12,8 +10,7 @@
* This code is in public domain
*/
-#include <gtk/gtkversion.h>
-#include <gtk/gtksignal.h>
+#include <gtk/gtk.h>
#include "sp-color-scales.h"
#include "preferences.h"
@@ -90,30 +87,34 @@ sp_color_slider_class_init (SPColorSliderClass *klass)
parent_class = (GtkWidgetClass*)gtk_type_class (GTK_TYPE_WIDGET);
- slider_signals[GRABBED] = gtk_signal_new ("grabbed",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPColorSliderClass, grabbed),
+ slider_signals[GRABBED] = g_signal_new ("grabbed",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET (SPColorSliderClass, grabbed),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- slider_signals[DRAGGED] = gtk_signal_new ("dragged",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPColorSliderClass, dragged),
+ G_TYPE_NONE, 0);
+ slider_signals[DRAGGED] = g_signal_new ("dragged",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET (SPColorSliderClass, dragged),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- slider_signals[RELEASED] = gtk_signal_new ("released",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPColorSliderClass, released),
+ G_TYPE_NONE, 0);
+ slider_signals[RELEASED] = g_signal_new ("released",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET (SPColorSliderClass, released),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- slider_signals[CHANGED] = gtk_signal_new ("changed",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPColorSliderClass, changed),
+ G_TYPE_NONE, 0);
+ slider_signals[CHANGED] = g_signal_new ("changed",
+ G_TYPE_FROM_CLASS(object_class),
+ (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE),
+ G_STRUCT_OFFSET (SPColorSliderClass, changed),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
+ G_TYPE_NONE, 0);
object_class->destroy = sp_color_slider_destroy;
@@ -134,7 +135,7 @@ static void
sp_color_slider_init (SPColorSlider *slider)
{
/* We are widget with window */
- GTK_WIDGET_UNSET_FLAGS (slider, GTK_NO_WINDOW);
+ gtk_widget_set_has_window (GTK_WIDGET(slider), TRUE);
slider->dragging = FALSE;
@@ -171,7 +172,7 @@ sp_color_slider_destroy (GtkObject *object)
slider = SP_COLOR_SLIDER (object);
if (slider->adjustment) {
- gtk_signal_disconnect_by_data (GTK_OBJECT (slider->adjustment), slider);
+ g_signal_handlers_disconnect_matched (G_OBJECT (slider->adjustment), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, slider);
gtk_object_unref (GTK_OBJECT (slider->adjustment));
slider->adjustment = NULL;
}
@@ -189,7 +190,7 @@ sp_color_slider_realize (GtkWidget *widget)
slider = SP_COLOR_SLIDER (widget);
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+ gtk_widget_set_realized (widget, TRUE);
attributes.window_type = GDK_WINDOW_CHILD;
attributes.x = widget->allocation.x;
@@ -234,7 +235,7 @@ sp_color_slider_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
widget->allocation = *allocation;
- if (GTK_WIDGET_REALIZED (widget)) {
+ if (gtk_widget_get_realized (widget)) {
/* Resize GdkWindow */
gdk_window_move_resize (widget->window, allocation->x, allocation->y, allocation->width, allocation->height);
}
@@ -247,7 +248,7 @@ sp_color_slider_expose (GtkWidget *widget, GdkEventExpose *event)
slider = SP_COLOR_SLIDER (widget);
- if (GTK_WIDGET_DRAWABLE (widget)) {
+ if (gtk_widget_is_drawable (widget)) {
gint width, height;
width = widget->allocation.width;
height = widget->allocation.height;
@@ -268,11 +269,11 @@ sp_color_slider_button_press (GtkWidget *widget, GdkEventButton *event)
gint cx, cw;
cx = widget->style->xthickness;
cw = widget->allocation.width - 2 * cx;
- gtk_signal_emit (GTK_OBJECT (slider), slider_signals[GRABBED]);
+ g_signal_emit (G_OBJECT (slider), slider_signals[GRABBED], 0);
slider->dragging = TRUE;
slider->oldvalue = slider->value;
ColorScales::setScaled( slider->adjustment, CLAMP ((gfloat) (event->x - cx) / cw, 0.0, 1.0) );
- gtk_signal_emit (GTK_OBJECT (slider), slider_signals[DRAGGED]);
+ g_signal_emit (G_OBJECT (slider), slider_signals[DRAGGED], 0);
gdk_pointer_grab (widget->window, FALSE,
(GdkEventMask)(GDK_POINTER_MOTION_MASK |
GDK_BUTTON_RELEASE_MASK),
@@ -292,8 +293,8 @@ sp_color_slider_button_release (GtkWidget *widget, GdkEventButton *event)
if (event->button == 1) {
gdk_pointer_ungrab (event->time);
slider->dragging = FALSE;
- gtk_signal_emit (GTK_OBJECT (slider), slider_signals[RELEASED]);
- if (slider->value != slider->oldvalue) gtk_signal_emit (GTK_OBJECT (slider), slider_signals[CHANGED]);
+ g_signal_emit (G_OBJECT (slider), slider_signals[RELEASED], 0);
+ if (slider->value != slider->oldvalue) g_signal_emit (G_OBJECT (slider), slider_signals[CHANGED], 0);
}
return FALSE;
@@ -311,7 +312,7 @@ sp_color_slider_motion_notify (GtkWidget *widget, GdkEventMotion *event)
cx = widget->style->xthickness;
cw = widget->allocation.width - 2 * cx;
ColorScales::setScaled( slider->adjustment, CLAMP ((gfloat) (event->x - cx) / cw, 0.0, 1.0) );
- gtk_signal_emit (GTK_OBJECT (slider), slider_signals[DRAGGED]);
+ g_signal_emit (G_OBJECT (slider), slider_signals[DRAGGED], 0);
}
return FALSE;
@@ -329,25 +330,21 @@ sp_color_slider_new (GtkAdjustment *adjustment)
return GTK_WIDGET (slider);
}
-void
-sp_color_slider_set_adjustment (SPColorSlider *slider, GtkAdjustment *adjustment)
+void sp_color_slider_set_adjustment(SPColorSlider *slider, GtkAdjustment *adjustment)
{
- g_return_if_fail (slider != NULL);
- g_return_if_fail (SP_IS_COLOR_SLIDER (slider));
+ g_return_if_fail (slider != NULL);
+ g_return_if_fail (SP_IS_COLOR_SLIDER (slider));
- if (!adjustment) {
- adjustment = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 1.0, 0.01, 0.0, 0.0);
- }
-#if GTK_CHECK_VERSION (2,14,0)
- else {
+ if (!adjustment) {
+ adjustment = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 1.0, 0.01, 0.0, 0.0);
+ } else {
gtk_adjustment_set_page_increment(adjustment, 0.0);
gtk_adjustment_set_page_size(adjustment, 0.0);
}
-#endif
if (slider->adjustment != adjustment) {
if (slider->adjustment) {
- gtk_signal_disconnect_by_data (GTK_OBJECT (slider->adjustment), slider);
+ g_signal_handlers_disconnect_matched (G_OBJECT (slider->adjustment), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, slider);
gtk_object_unref (GTK_OBJECT (slider->adjustment));
}
@@ -355,10 +352,10 @@ sp_color_slider_set_adjustment (SPColorSlider *slider, GtkAdjustment *adjustment
gtk_object_ref (GTK_OBJECT (adjustment));
gtk_object_sink (GTK_OBJECT (adjustment));
- gtk_signal_connect (GTK_OBJECT (adjustment), "changed",
- GTK_SIGNAL_FUNC (sp_color_slider_adjustment_changed), slider);
- gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
- GTK_SIGNAL_FUNC (sp_color_slider_adjustment_value_changed), slider);
+ g_signal_connect (G_OBJECT (adjustment), "changed",
+ G_CALLBACK (sp_color_slider_adjustment_changed), slider);
+ g_signal_connect (G_OBJECT (adjustment), "value_changed",
+ G_CALLBACK (sp_color_slider_adjustment_value_changed), slider);
slider->value = ColorScales::getScaled( adjustment );
diff --git a/src/widgets/sp-color-slider.h b/src/widgets/sp-color-slider.h
index bdeb3e4b6..b8cfaf869 100644
--- a/src/widgets/sp-color-slider.h
+++ b/src/widgets/sp-color-slider.h
@@ -12,7 +12,7 @@
* This code is in public domain
*/
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
#include <glib.h>
@@ -22,10 +22,10 @@ struct SPColorSlider;
struct SPColorSliderClass;
#define SP_TYPE_COLOR_SLIDER (sp_color_slider_get_type ())
-#define SP_COLOR_SLIDER(o) (GTK_CHECK_CAST ((o), SP_TYPE_COLOR_SLIDER, SPColorSlider))
-#define SP_COLOR_SLIDER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_SLIDER, SPColorSliderClass))
-#define SP_IS_COLOR_SLIDER(o) (GTK_CHECK_TYPE ((o), SP_TYPE_COLOR_SLIDER))
-#define SP_IS_COLOR_SLIDER_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_SLIDER))
+#define SP_COLOR_SLIDER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_COLOR_SLIDER, SPColorSlider))
+#define SP_COLOR_SLIDER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_SLIDER, SPColorSliderClass))
+#define SP_IS_COLOR_SLIDER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_COLOR_SLIDER))
+#define SP_IS_COLOR_SLIDER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_SLIDER))
struct SPColorSlider {
GtkWidget widget;
diff --git a/src/widgets/sp-color-wheel-selector.cpp b/src/widgets/sp-color-wheel-selector.cpp
index 2e36a024e..4bbda79a6 100644
--- a/src/widgets/sp-color-wheel-selector.cpp
+++ b/src/widgets/sp-color-wheel-selector.cpp
@@ -2,10 +2,7 @@
# include "config.h"
#endif
#include <math.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtktable.h>
-#include <gtk/gtkspinbutton.h>
+#include <gtk/gtk.h>
#include <glibmm/i18n.h>
#include "../dialogs/dialog-events.h"
#include "sp-color-wheel-selector.h"
@@ -135,14 +132,12 @@ static void resizeHSVWheel( GtkHSV *hsv, GtkAllocation *allocation )
gtk_hsv_set_metrics( hsv, diam, ring );
}
-#if GTK_CHECK_VERSION(2,18,0)
static void handleWheelStyleSet(GtkHSV *hsv, GtkStyle* /*previous*/, gpointer /*userData*/)
{
GtkAllocation allocation = {0, 0, 0, 0};
gtk_widget_get_allocation( GTK_WIDGET(hsv), &allocation );
resizeHSVWheel( hsv, &allocation );
}
-#endif // GTK_CHECK_VERSION(2,18,0)
static void handleWheelAllocation(GtkHSV *hsv, GtkAllocation *allocation, gpointer /*userData*/)
{
@@ -157,8 +152,6 @@ void ColorWheelSelector::init()
_updating = FALSE;
_dragging = FALSE;
- _tt = gtk_tooltips_new();
-
t = gtk_table_new (5, 3, FALSE);
gtk_widget_show (t);
gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 0);
@@ -184,7 +177,7 @@ void ColorWheelSelector::init()
/* Slider */
_slider = sp_color_slider_new (_adj);
- gtk_tooltips_set_tip (_tt, _slider, _("Alpha (opacity)"), NULL);
+ gtk_widget_set_tooltip_text (_slider, _("Alpha (opacity)"));
gtk_widget_show (_slider);
gtk_table_attach (GTK_TABLE (t), _slider, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)GTK_FILL, XPAD, YPAD);
@@ -196,34 +189,32 @@ void ColorWheelSelector::init()
/* Spinbutton */
_sbtn = gtk_spin_button_new (GTK_ADJUSTMENT (_adj), 1.0, 0);
- gtk_tooltips_set_tip (_tt, _sbtn, _("Alpha (opacity)"), NULL);
+ gtk_widget_set_tooltip_text (_sbtn, _("Alpha (opacity)"));
sp_dialog_defocus_on_enter (_sbtn);
gtk_label_set_mnemonic_widget (GTK_LABEL(_label), _sbtn);
gtk_widget_show (_sbtn);
gtk_table_attach (GTK_TABLE (t), _sbtn, 2, 3, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD);
/* Signals */
- gtk_signal_connect (GTK_OBJECT (_adj), "value_changed",
- GTK_SIGNAL_FUNC (_adjustmentChanged), _csel);
+ g_signal_connect (G_OBJECT (_adj), "value_changed",
+ G_CALLBACK (_adjustmentChanged), _csel);
- gtk_signal_connect (GTK_OBJECT (_slider), "grabbed",
- GTK_SIGNAL_FUNC (_sliderGrabbed), _csel);
- gtk_signal_connect (GTK_OBJECT (_slider), "released",
- GTK_SIGNAL_FUNC (_sliderReleased), _csel);
- gtk_signal_connect (GTK_OBJECT (_slider), "changed",
- GTK_SIGNAL_FUNC (_sliderChanged), _csel);
+ g_signal_connect (G_OBJECT (_slider), "grabbed",
+ G_CALLBACK (_sliderGrabbed), _csel);
+ g_signal_connect (G_OBJECT (_slider), "released",
+ G_CALLBACK (_sliderReleased), _csel);
+ g_signal_connect (G_OBJECT (_slider), "changed",
+ G_CALLBACK (_sliderChanged), _csel);
- gtk_signal_connect( GTK_OBJECT(_wheel), "changed",
- GTK_SIGNAL_FUNC(_wheelChanged), _csel );
+ g_signal_connect( G_OBJECT(_wheel), "changed",
+ G_CALLBACK (_wheelChanged), _csel );
// GTK does not automatically scale the color wheel, so we have to add that in:
- gtk_signal_connect( GTK_OBJECT(_wheel), "size-allocate",
- GTK_SIGNAL_FUNC(handleWheelAllocation), _csel );
-#if GTK_CHECK_VERSION(2,18,0)
- gtk_signal_connect( GTK_OBJECT(_wheel), "style-set",
- GTK_SIGNAL_FUNC(handleWheelStyleSet), _csel );
-#endif // GTK_CHECK_VERSION(2,18,0)
+ g_signal_connect( G_OBJECT (_wheel), "size-allocate",
+ G_CALLBACK (handleWheelAllocation), _csel );
+ g_signal_connect( G_OBJECT (_wheel), "style-set",
+ G_CALLBACK (handleWheelStyleSet), _csel );
}
static void
diff --git a/src/widgets/sp-color-wheel-selector.h b/src/widgets/sp-color-wheel-selector.h
index 34a5f4cd0..d8bcb730b 100644
--- a/src/widgets/sp-color-wheel-selector.h
+++ b/src/widgets/sp-color-wheel-selector.h
@@ -2,8 +2,7 @@
#define SEEN_SP_COLOR_WHEEL_SELECTOR_H
#include <glib/gtypes.h>
-#include <gtk/gtktooltips.h>
-#include <gtk/gtkvbox.h>
+#include <gtk/gtk.h>
#include "../color.h"
#include "sp-color-slider.h"
@@ -45,8 +44,6 @@ protected:
GtkWidget* _sbtn; /* Spinbutton */
GtkWidget* _label; /* Label */
- GtkTooltips* _tt; /* tooltip container */
-
private:
// By default, disallow copy constructor and assignment operator
ColorWheelSelector( const ColorWheelSelector& obj );
@@ -56,10 +53,10 @@ private:
#define SP_TYPE_COLOR_WHEEL_SELECTOR (sp_color_wheel_selector_get_type ())
-#define SP_COLOR_WHEEL_SELECTOR(o) (GTK_CHECK_CAST ((o), SP_TYPE_COLOR_WHEEL_SELECTOR, SPColorWheelSelector))
-#define SP_COLOR_WHEEL_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_WHEEL_SELECTOR, SPColorWheelSelectorClass))
-#define SP_IS_COLOR_WHEEL_SELECTOR(o) (GTK_CHECK_TYPE ((o), SP_TYPE_COLOR_WHEEL_SELECTOR))
-#define SP_IS_COLOR_WHEEL_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_WHEEL_SELECTOR))
+#define SP_COLOR_WHEEL_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_COLOR_WHEEL_SELECTOR, SPColorWheelSelector))
+#define SP_COLOR_WHEEL_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_WHEEL_SELECTOR, SPColorWheelSelectorClass))
+#define SP_IS_COLOR_WHEEL_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_COLOR_WHEEL_SELECTOR))
+#define SP_IS_COLOR_WHEEL_SELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_WHEEL_SELECTOR))
struct SPColorWheelSelector {
SPColorSelector parent;
diff --git a/src/widgets/sp-widget.cpp b/src/widgets/sp-widget.cpp
index f694c461c..d5877db99 100644
--- a/src/widgets/sp-widget.cpp
+++ b/src/widgets/sp-widget.cpp
@@ -78,32 +78,36 @@ sp_widget_class_init (SPWidgetClass *klass)
object_class->destroy = sp_widget_destroy;
- signals[CONSTRUCT] = gtk_signal_new ("construct",
- GTK_RUN_FIRST,
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPWidgetClass, construct),
+ signals[CONSTRUCT] = g_signal_new ("construct",
+ G_TYPE_FROM_CLASS(object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (SPWidgetClass, construct),
+ NULL, NULL,
gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- signals[CHANGE_SELECTION] = gtk_signal_new ("change_selection",
- GTK_RUN_FIRST,
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPWidgetClass, change_selection),
+ G_TYPE_NONE, 0);
+ signals[CHANGE_SELECTION] = g_signal_new ("change_selection",
+ G_TYPE_FROM_CLASS(object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (SPWidgetClass, change_selection),
+ NULL, NULL,
gtk_marshal_NONE__POINTER,
- GTK_TYPE_NONE, 1,
+ G_TYPE_NONE, 1,
GTK_TYPE_POINTER);
- signals[MODIFY_SELECTION] = gtk_signal_new ("modify_selection",
- GTK_RUN_FIRST,
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPWidgetClass, modify_selection),
+ signals[MODIFY_SELECTION] = g_signal_new ("modify_selection",
+ G_TYPE_FROM_CLASS(object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (SPWidgetClass, modify_selection),
+ NULL, NULL,
gtk_marshal_NONE__POINTER_UINT,
- GTK_TYPE_NONE, 2,
+ G_TYPE_NONE, 2,
GTK_TYPE_POINTER, GTK_TYPE_UINT);
- signals[SET_SELECTION] = gtk_signal_new ("set_selection",
- GTK_RUN_FIRST,
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPWidgetClass, set_selection),
+ signals[SET_SELECTION] = g_signal_new ("set_selection",
+ G_TYPE_FROM_CLASS(object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (SPWidgetClass, set_selection),
+ NULL, NULL,
gtk_marshal_NONE__POINTER,
- GTK_TYPE_NONE, 1,
+ G_TYPE_NONE, 1,
GTK_TYPE_POINTER);
widget_class->show = sp_widget_show;
@@ -184,7 +188,7 @@ sp_widget_expose (GtkWidget *widget, GdkEventExpose *event)
gtk_container_propagate_expose (GTK_CONTAINER(widget), bin->child, event);
}
/*
- if ((bin->child) && (GTK_WIDGET_NO_WINDOW (bin->child))) {
+ if ((bin->child) && (!gtk_widget_get_has_window (bin->child))) {
GdkEventExpose ce;
ce = *event;
gtk_widget_event (bin->child, (GdkEvent *) &ce);
@@ -233,7 +237,7 @@ sp_widget_construct_global (SPWidget *spw, Inkscape::Application *inkscape)
g_return_val_if_fail (!spw->inkscape, NULL);
spw->inkscape = inkscape;
- if (GTK_WIDGET_VISIBLE (spw)) {
+ if (gtk_widget_get_visible (GTK_WIDGET(spw))) {
g_signal_connect (G_OBJECT (inkscape), "modify_selection", G_CALLBACK (sp_widget_modify_selection), spw);
g_signal_connect (G_OBJECT (inkscape), "change_selection", G_CALLBACK (sp_widget_change_selection), spw);
g_signal_connect (G_OBJECT (inkscape), "set_selection", G_CALLBACK (sp_widget_set_selection), spw);
diff --git a/src/widgets/sp-widget.h b/src/widgets/sp-widget.h
index e9f9cfe73..decd9c056 100644
--- a/src/widgets/sp-widget.h
+++ b/src/widgets/sp-widget.h
@@ -16,12 +16,12 @@
#include <glib.h>
#define SP_TYPE_WIDGET (sp_widget_get_type ())
-#define SP_WIDGET(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_WIDGET, SPWidget))
-#define SP_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_WIDGET, SPWidgetClass))
-#define SP_IS_WIDGET(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_WIDGET))
-#define SP_IS_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_WIDGET))
+#define SP_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_WIDGET, SPWidget))
+#define SP_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_WIDGET, SPWidgetClass))
+#define SP_IS_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_WIDGET))
+#define SP_IS_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_WIDGET))
-#include <gtk/gtkbin.h>
+#include <gtk/gtk.h>
namespace Inkscape {
class Application;
diff --git a/src/widgets/sp-xmlview-attr-list.h b/src/widgets/sp-xmlview-attr-list.h
index 8e7b844d0..de79c7a37 100644
--- a/src/widgets/sp-xmlview-attr-list.h
+++ b/src/widgets/sp-xmlview-attr-list.h
@@ -13,7 +13,6 @@
*/
#include <stdio.h>
-#include <gtk/gtkctree.h>
#include <gtk/gtk.h>
#include "../xml/repr.h"
@@ -21,9 +20,9 @@
#define SP_TYPE_XMLVIEW_ATTR_LIST (sp_xmlview_attr_list_get_type ())
-#define SP_XMLVIEW_ATTR_LIST(o) (GTK_CHECK_CAST ((o), SP_TYPE_XMLVIEW_ATTR_LIST, SPXMLViewAttrList))
-#define SP_IS_XMLVIEW_ATTR_LIST(o) (GTK_CHECK_TYPE ((o), SP_TYPE_XMLVIEW_ATTR_LIST))
-#define SP_XMLVIEW_ATTR_LIST_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_XMLVIEW_ATTR_LIST))
+#define SP_XMLVIEW_ATTR_LIST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_XMLVIEW_ATTR_LIST, SPXMLViewAttrList))
+#define SP_IS_XMLVIEW_ATTR_LIST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_XMLVIEW_ATTR_LIST))
+#define SP_XMLVIEW_ATTR_LIST_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_XMLVIEW_ATTR_LIST))
struct SPXMLViewAttrList
{
diff --git a/src/widgets/sp-xmlview-content.h b/src/widgets/sp-xmlview-content.h
index 3077b2251..fe26891d0 100644
--- a/src/widgets/sp-xmlview-content.h
+++ b/src/widgets/sp-xmlview-content.h
@@ -16,7 +16,7 @@
#include <stdio.h>
-#include <gtk/gtktextview.h>
+#include <gtk/gtk.h>
#include "../xml/repr.h"
#include <glib.h>
@@ -24,9 +24,9 @@
#define SP_TYPE_XMLVIEW_CONTENT (sp_xmlview_content_get_type ())
-#define SP_XMLVIEW_CONTENT(o) (GTK_CHECK_CAST ((o), SP_TYPE_XMLVIEW_CONTENT, SPXMLViewContent))
-#define SP_IS_XMLVIEW_CONTENT(o) (GTK_CHECK_TYPE ((o), SP_TYPE_XMLVIEW_CONTENT))
-#define SP_XMLVIEW_CONTENT_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_XMLVIEW_CONTENT))
+#define SP_XMLVIEW_CONTENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_XMLVIEW_CONTENT, SPXMLViewContent))
+#define SP_IS_XMLVIEW_CONTENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_XMLVIEW_CONTENT))
+#define SP_XMLVIEW_CONTENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_XMLVIEW_CONTENT))
struct SPXMLViewContent
{
diff --git a/src/widgets/sp-xmlview-tree.h b/src/widgets/sp-xmlview-tree.h
index a5dadbb61..2b04e79eb 100644
--- a/src/widgets/sp-xmlview-tree.h
+++ b/src/widgets/sp-xmlview-tree.h
@@ -12,7 +12,7 @@
* Released under the GNU GPL; see COPYING for details
*/
-#include <gtk/gtkctree.h>
+#include <gtk/gtk.h>
#include "../xml/repr.h"
#include <glib.h>
@@ -20,9 +20,9 @@
#define SP_TYPE_XMLVIEW_TREE (sp_xmlview_tree_get_type ())
-#define SP_XMLVIEW_TREE(o) (GTK_CHECK_CAST ((o), SP_TYPE_XMLVIEW_TREE, SPXMLViewTree))
-#define SP_IS_XMLVIEW_TREE(o) (GTK_CHECK_TYPE ((o), SP_TYPE_XMLVIEW_TREE))
-#define SP_XMLVIEW_TREE_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_XMLVIEW_TREE))
+#define SP_XMLVIEW_TREE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_XMLVIEW_TREE, SPXMLViewTree))
+#define SP_IS_XMLVIEW_TREE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_XMLVIEW_TREE))
+#define SP_XMLVIEW_TREE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_XMLVIEW_TREE))
struct SPXMLViewTree;
struct SPXMLViewTreeClass;
diff --git a/src/widgets/spinbutton-events.h b/src/widgets/spinbutton-events.h
index 683748d0a..46652a346 100644
--- a/src/widgets/spinbutton-events.h
+++ b/src/widgets/spinbutton-events.h
@@ -10,8 +10,7 @@
*/
#include <glib/gtypes.h>
-#include <gtk/gtkstyle.h> /* GtkWidget */
-#include <gtk/gtktypeutils.h> /* GtkObject */
+#include <gtk/gtk.h> /* GtkWidget */
gboolean spinbutton_focus_in (GtkWidget *w, GdkEventKey *event, gpointer data);
void spinbutton_undo (GtkWidget *w);
diff --git a/src/widgets/spw-utilities.cpp b/src/widgets/spw-utilities.cpp
index 49e3a7495..aec1e2e11 100644
--- a/src/widgets/spw-utilities.cpp
+++ b/src/widgets/spw-utilities.cpp
@@ -92,10 +92,8 @@ GtkWidget *spw_vbox_checkbutton(GtkWidget *dialog, GtkWidget *vbox,
g_assert (dialog != NULL);
g_assert (vbox != NULL);
- GtkTooltips *tt = gtk_tooltips_new ();
-
GtkWidget *b = gtk_check_button_new_with_label (label);
- gtk_tooltips_set_tip(tt, b, tip, NULL);
+ gtk_widget_set_tooltip_text(b, tip);
g_assert (b != NULL);
gtk_widget_show (b);
gtk_box_pack_start (GTK_BOX (vbox), b, FALSE, FALSE, 0);
diff --git a/src/widgets/spw-utilities.h b/src/widgets/spw-utilities.h
index 9a387454f..443831353 100644
--- a/src/widgets/spw-utilities.h
+++ b/src/widgets/spw-utilities.h
@@ -19,7 +19,7 @@
*/
#include <glib/gtypes.h>
-#include <gtk/gtkstyle.h> /* GtkWidget */
+#include <gtk/gtk.h> /* GtkWidget */
#include <gtkmm/widget.h>
namespace Gtk {
diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp
index 5288b5102..9da39bac4 100644
--- a/src/widgets/stroke-style.cpp
+++ b/src/widgets/stroke-style.cpp
@@ -55,6 +55,7 @@
#include "widgets/paint-selector.h"
#include "widgets/sp-widget.h"
#include "widgets/spw-utilities.h"
+#include "ui/widget/spinbutton.h"
#include "xml/repr.h"
#include "stroke-style.h"
@@ -224,7 +225,7 @@ ink_marker_list_get (SPDocument *source)
return NULL;
GSList *ml = NULL;
- SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS (source);
+ SPDefs *defs = source->getDefs();
for ( SPObject *child = defs->firstChild(); child; child = child->getNext() )
{
if (SP_IS_MARKER(child)) {
@@ -653,7 +654,7 @@ sp_stroke_style_line_widget_new(void)
Gtk::Container *spw;
Gtk::Table *t;
Gtk::Adjustment *a;
- Gtk::SpinButton *sb;
+ Inkscape::UI::Widget::SpinButton *sb;
Gtk::RadioButton *tb;
Gtk::HBox *f, *hb;
@@ -688,7 +689,7 @@ sp_stroke_style_line_widget_new(void)
a = new Gtk::Adjustment(1.0, 0.0, 1000.0, 0.1, 10.0, 0.0);
spw->set_data("width", a);
- sb = new Gtk::SpinButton(*a, 0.1, 3);
+ sb = new Inkscape::UI::Widget::SpinButton(*a, 0.1, 3);
tt->set_tip(*sb, _("Stroke width"));
sb->show();
spw_label(t, C_("Stroke width", "_Width:"), 0, i, sb);
@@ -765,7 +766,7 @@ sp_stroke_style_line_widget_new(void)
a = new Gtk::Adjustment(4.0, 0.0, 100.0, 0.1, 10.0, 0.0);
spw->set_data("miterlimit", a);
- sb = new Gtk::SpinButton(*a, 0.1, 2);
+ sb = new Inkscape::UI::Widget::SpinButton(*a, 0.1, 2);
tt->set_tip(*sb, _("Maximum length of the miter (in units of stroke width)"));
sb->show();
spw_label(t, _("Miter _limit:"), 0, i, sb);
@@ -1057,8 +1058,8 @@ sp_stroke_style_line_update(Gtk::Container *spw, Inkscape::Selection *sel)
tb = static_cast<Gtk::RadioButton *>(spw->get_data("bevel join"));
tb->set_sensitive(enabled);
- Gtk::SpinButton* sb = NULL;
- sb = static_cast<Gtk::SpinButton *>(spw->get_data("miterlimit_sb"));
+ Inkscape::UI::Widget::SpinButton* sb = NULL;
+ sb = static_cast<Inkscape::UI::Widget::SpinButton *>(spw->get_data("miterlimit_sb"));
sb->set_sensitive(enabled);
tb = static_cast<Gtk::RadioButton *>(spw->get_data("cap butt"));
diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp
index db86ff8a0..90d8f61b4 100644
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
@@ -100,6 +100,7 @@
#include "../verbs.h"
#include "../widgets/button.h"
#include "../widgets/spinbutton-events.h"
+#include "ui/widget/spinbutton.h"
#include "../widgets/spw-utilities.h"
#include "../widgets/widget-sizes.h"
#include "../xml/attribute-record.h"
@@ -132,6 +133,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainA
static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
static void sp_zoom_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
+static void sp_measure_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
static void sp_star_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
static void sp_arc_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
static void sp_rect_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
@@ -173,6 +175,7 @@ static struct {
{ "SPTweakContext", "tweak_tool", SP_VERB_CONTEXT_TWEAK, SP_VERB_CONTEXT_TWEAK_PREFS },
{ "SPSprayContext", "spray_tool", SP_VERB_CONTEXT_SPRAY, SP_VERB_CONTEXT_SPRAY_PREFS },
{ "SPZoomContext", "zoom_tool", SP_VERB_CONTEXT_ZOOM, SP_VERB_CONTEXT_ZOOM_PREFS },
+ { "SPMeasureContext", "measure_tool", SP_VERB_CONTEXT_MEASURE, SP_VERB_CONTEXT_MEASURE_PREFS },
{ "SPRectContext", "rect_tool", SP_VERB_CONTEXT_RECT, SP_VERB_CONTEXT_RECT_PREFS },
{ "Box3DContext", "3dbox_tool", SP_VERB_CONTEXT_3DBOX, SP_VERB_CONTEXT_3DBOX_PREFS },
{ "SPArcContext", "arc_tool", SP_VERB_CONTEXT_ARC, SP_VERB_CONTEXT_ARC_PREFS },
@@ -211,6 +214,8 @@ static struct {
SP_VERB_INVALID, 0, 0},
{ "SPZoomContext", "zoom_toolbox", 0, sp_zoom_toolbox_prep, "ZoomToolbar",
SP_VERB_INVALID, 0, 0},
+ { "SPMeasureContext", "measure_toolbox", 0, sp_measure_toolbox_prep, "MeasureToolbar",
+ SP_VERB_INVALID, 0, 0},
{ "SPStarContext", "star_toolbox", 0, sp_star_toolbox_prep, "StarToolbar",
SP_VERB_CONTEXT_STAR_PREFS, "/tools/shapes/star", N_("Style of new stars")},
{ "SPRectContext", "rect_toolbox", 0, sp_rect_toolbox_prep, "RectToolbar",
@@ -360,6 +365,11 @@ static gchar const * ui_descr =
" <toolitem action='ZoomNext' />"
" </toolbar>"
+ " <toolbar name='MeasureToolbar'>"
+ " <toolitem action='MeasureFontSizeAction' />"
+ " <toolitem action='MeasureUnitsAction' />"
+ " </toolbar>"
+
" <toolbar name='StarToolbar'>"
" <separator />"
" <toolitem action='StarStateAction' />"
@@ -547,11 +557,11 @@ static void update_commands_toolbox(SPDesktop *desktop, SPEventContext *eventcon
static GtkWidget * sp_toolbox_button_new_from_verb_with_doubleclick( GtkWidget *t, Inkscape::IconSize size, SPButtonType type,
Inkscape::Verb *verb, Inkscape::Verb *doubleclick_verb,
- Inkscape::UI::View::View *view, GtkTooltips *tt);
+ Inkscape::UI::View::View *view);
class VerbAction : public Gtk::Action {
public:
- static Glib::RefPtr<VerbAction> create(Inkscape::Verb* verb, Inkscape::Verb* verb2, Inkscape::UI::View::View *view, GtkTooltips *tooltips);
+ static Glib::RefPtr<VerbAction> create(Inkscape::Verb* verb, Inkscape::Verb* verb2, Inkscape::UI::View::View *view);
virtual ~VerbAction();
virtual void set_active(bool active = true);
@@ -569,31 +579,29 @@ private:
Inkscape::Verb* verb;
Inkscape::Verb* verb2;
Inkscape::UI::View::View *view;
- GtkTooltips *tooltips;
bool active;
- VerbAction(Inkscape::Verb* verb, Inkscape::Verb* verb2, Inkscape::UI::View::View *view, GtkTooltips *tooltips);
+ VerbAction(Inkscape::Verb* verb, Inkscape::Verb* verb2, Inkscape::UI::View::View *view);
};
-Glib::RefPtr<VerbAction> VerbAction::create(Inkscape::Verb* verb, Inkscape::Verb* verb2, Inkscape::UI::View::View *view, GtkTooltips *tooltips)
+Glib::RefPtr<VerbAction> VerbAction::create(Inkscape::Verb* verb, Inkscape::Verb* verb2, Inkscape::UI::View::View *view)
{
Glib::RefPtr<VerbAction> result;
SPAction *action = verb->get_action(view);
if ( action ) {
//SPAction* action2 = verb2 ? verb2->get_action(view) : 0;
- result = Glib::RefPtr<VerbAction>(new VerbAction(verb, verb2, view, tooltips));
+ result = Glib::RefPtr<VerbAction>(new VerbAction(verb, verb2, view));
}
return result;
}
-VerbAction::VerbAction(Inkscape::Verb* verb, Inkscape::Verb* verb2, Inkscape::UI::View::View *view, GtkTooltips *tooltips) :
+VerbAction::VerbAction(Inkscape::Verb* verb, Inkscape::Verb* verb2, Inkscape::UI::View::View *view) :
Gtk::Action(Glib::ustring(verb->get_id()), Gtk::StockID(verb->get_image()), Glib::ustring(_(verb->get_name())), Glib::ustring(_(verb->get_tip()))),
verb(verb),
verb2(verb2),
view(view),
- tooltips(tooltips),
active(false)
{
}
@@ -623,8 +631,7 @@ Gtk::Widget* VerbAction::create_tool_item_vfunc()
SP_BUTTON_TYPE_TOGGLE,
verb,
verb2,
- view,
- tooltips );
+ view );
if ( active ) {
sp_button_toggle_set_down( SP_BUTTON(button), active);
}
@@ -807,7 +814,7 @@ static void delete_prefspusher(GtkObject * /*obj*/, PrefPusher *watcher )
GtkWidget * sp_toolbox_button_new_from_verb_with_doubleclick(GtkWidget *t, Inkscape::IconSize size, SPButtonType type,
Inkscape::Verb *verb, Inkscape::Verb *doubleclick_verb,
- Inkscape::UI::View::View *view, GtkTooltips *tt)
+ Inkscape::UI::View::View *view)
{
SPAction *action = verb->get_action(view);
if (!action) {
@@ -823,7 +830,7 @@ GtkWidget * sp_toolbox_button_new_from_verb_with_doubleclick(GtkWidget *t, Inksc
/* fixme: Handle sensitive/unsensitive */
/* fixme: Implement sp_button_new_from_action */
- GtkWidget *b = sp_button_new(size, type, action, doubleclick_action, tt);
+ GtkWidget *b = sp_button_new(size, type, action, doubleclick_action);
gtk_widget_show(b);
@@ -880,7 +887,7 @@ static GtkAction* create_action_for_verb( Inkscape::Verb* verb, Inkscape::UI::Vi
act = GTK_ACTION(inky);
gtk_action_set_sensitive( act, targetAction->sensitive );
- g_signal_connect( G_OBJECT(inky), "activate", GTK_SIGNAL_FUNC(trigger_sp_action), targetAction );
+ g_signal_connect( G_OBJECT(inky), "activate", G_CALLBACK(trigger_sp_action), targetAction );
SPAction*rebound = dynamic_cast<SPAction *>( nr_object_ref( dynamic_cast<NRObject *>(targetAction) ) );
nr_active_object_add_listener( (NRActiveObject *)rebound, (NRObjectEventVector *)&action_event_vector, sizeof(SPActionEventVector), inky );
@@ -931,7 +938,7 @@ static Glib::RefPtr<Gtk::ActionGroup> create_or_fetch_actions( SPDesktop* deskto
SP_VERB_ZOOM_PAGE,
SP_VERB_ZOOM_PAGE_WIDTH,
SP_VERB_ZOOM_PREV,
- SP_VERB_ZOOM_SELECTION,
+ SP_VERB_ZOOM_SELECTION
};
Inkscape::IconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/small");
@@ -958,9 +965,8 @@ static Glib::RefPtr<Gtk::ActionGroup> create_or_fetch_actions( SPDesktop* deskto
}
if ( !mainActions->get_action("ToolZoom") ) {
- GtkTooltips *tt = gtk_tooltips_new();
for ( guint i = 0; i < G_N_ELEMENTS(tools) && tools[i].type_name; i++ ) {
- Glib::RefPtr<VerbAction> va = VerbAction::create(Inkscape::Verb::get(tools[i].verb), Inkscape::Verb::get(tools[i].doubleclick_verb), view, tt);
+ Glib::RefPtr<VerbAction> va = VerbAction::create(Inkscape::Verb::get(tools[i].verb), Inkscape::Verb::get(tools[i].doubleclick_verb), view);
if ( va ) {
mainActions->add(va);
if ( i == 0 ) {
@@ -1052,6 +1058,14 @@ GtkWidget *ToolboxFactory::createSnapToolbox()
return toolboxNewCommon( tb, BAR_SNAP, GTK_POS_LEFT );
}
+static GtkWidget* createCustomSlider( GtkAdjustment *adjustment, gdouble climbRate, guint digits )
+{
+ Inkscape::UI::Widget::SpinButton *inkSpinner = new Inkscape::UI::Widget::SpinButton(*Glib::wrap(adjustment, true), climbRate, digits);
+ inkSpinner = Gtk::manage( inkSpinner );
+ GtkWidget *widget = GTK_WIDGET( inkSpinner->gobj() );
+ return widget;
+}
+
static EgeAdjustmentAction * create_adjustment_action( gchar const *name,
gchar const *label, gchar const *shortLabel, gchar const *tooltip,
Glib::ustring const &path, gdouble def,
@@ -1064,6 +1078,12 @@ static EgeAdjustmentAction * create_adjustment_action( gchar const *name,
void (*callback)(GtkAdjustment *, GObject *),
gdouble climb = 0.1, guint digits = 3, double factor = 1.0 )
{
+ static bool init = false;
+ if ( !init ) {
+ init = true;
+ ege_adjustment_action_set_compact_tool_factory( createCustomSlider );
+ }
+
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
GtkAdjustment* adj = GTK_ADJUSTMENT( gtk_adjustment_new( prefs->getDouble(path, def) * factor,
lower, upper, step, page, 0 ) );
@@ -1071,7 +1091,7 @@ static EgeAdjustmentAction * create_adjustment_action( gchar const *name,
sp_unit_selector_add_adjustment( SP_UNIT_SELECTOR(us), adj );
}
- gtk_signal_connect( GTK_OBJECT(adj), "value-changed", GTK_SIGNAL_FUNC(callback), dataKludge );
+ g_signal_connect( G_OBJECT(adj), "value-changed", G_CALLBACK(callback), dataKludge );
EgeAdjustmentAction* act = ege_adjustment_action_new( adj, name, label, tooltip, 0, climb, digits );
if ( shortLabel ) {
@@ -1612,6 +1632,54 @@ static void sp_zoom_toolbox_prep(SPDesktop * /*desktop*/, GtkActionGroup* /*main
// no custom GtkAction setup needed
} // end of sp_zoom_toolbox_prep()
+static void
+sp_measure_fontsize_value_changed(GtkAdjustment *adj, GObject *tbl)
+{
+ SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
+
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setInt(Glib::ustring("/tools/measure/fontsize"), adj->value);
+ }
+}
+
+static void measure_unit_changed(GtkAction* /*act*/, GObject* tbl)
+{
+ UnitTracker* tracker = reinterpret_cast<UnitTracker*>(g_object_get_data(tbl, "tracker"));
+ SPUnit const *unit = tracker->getActiveUnit();
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setInt("/tools/measure/unitid", unit->unit_id);
+}
+
+static void sp_measure_toolbox_prep(SPDesktop * desktop, GtkActionGroup* mainActions, GObject* holder)
+{
+ UnitTracker* tracker = new UnitTracker( SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE );
+ tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
+ g_object_set_data( holder, "tracker", tracker );
+
+ EgeAdjustmentAction *eact = 0;
+
+ /* Font Size */
+ {
+ eact = create_adjustment_action( "MeasureFontSizeAction",
+ _("Font Size"), _("Font Size:"),
+ _("The font size to be used in the measurement labels"),
+ "/tools/measure/fontsize", 0.0,
+ GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
+ 10, 36, 1.0, 4.0,
+ 0, 0, 0,
+ sp_measure_fontsize_value_changed);
+ gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
+ }
+
+ // add the units menu
+ {
+ GtkAction* act = tracker->createAction( "MeasureUnitsAction", _("Units"), _("Units:") );
+ g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(measure_unit_changed), (GObject*)holder );
+ gtk_action_group_add_action( mainActions, act );
+ }
+} // end of sp_measure_toolbox_prep()
+
void ToolboxFactory::setToolboxDesktop(GtkWidget *toolbox, SPDesktop *desktop)
{
sigc::connection *conn = static_cast<sigc::connection*>(g_object_get_data(G_OBJECT(toolbox),
@@ -1726,7 +1794,7 @@ void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientati
{
#if DUMP_DETAILS
g_message("Set orientation for %p to be %d", toolbox, orientation);
- GType type = GTK_WIDGET_TYPE(toolbox);
+ GType type = G_OBJECT_TYPE(toolbox);
g_message(" [%s]", g_type_name(type));
g_message(" %p", g_object_get_data(G_OBJECT(toolbox), BAR_ID_KEY));
#endif
@@ -1741,7 +1809,7 @@ void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientati
GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox));
if (child) {
#if DUMP_DETAILS
- GType type2 = GTK_WIDGET_TYPE(child);
+ GType type2 = G_OBJECT_TYPE(child);
g_message(" child [%s]", g_type_name(type2));
#endif // DUMP_DETAILS
@@ -1755,7 +1823,7 @@ void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientati
for (GList* curr = children; curr; curr = g_list_next(curr)) {
GtkWidget* child2 = GTK_WIDGET(curr->data);
#if DUMP_DETAILS
- GType type3 = GTK_WIDGET_TYPE(child2);
+ GType type3 = G_OBJECT_TYPE(child2);
g_message(" child2 [%s]", g_type_name(type3));
#endif // DUMP_DETAILS
@@ -1765,7 +1833,7 @@ void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientati
for (GList* curr2 = children2; curr2; curr2 = g_list_next(curr2)) {
GtkWidget* child3 = GTK_WIDGET(curr2->data);
#if DUMP_DETAILS
- GType type4 = GTK_WIDGET_TYPE(child3);
+ GType type4 = G_OBJECT_TYPE(child3);
g_message(" child3 [%s]", g_type_name(type4));
#endif // DUMP_DETAILS
if (GTK_IS_TOOLBAR(child3)) {
@@ -1823,6 +1891,7 @@ void setup_tool_toolbox(GtkWidget *toolbox, SPDesktop *desktop)
" <toolitem action='ToolNode' />"
" <toolitem action='ToolTweak' />"
" <toolitem action='ToolZoom' />"
+ " <toolitem action='ToolMeasure' />"
" <!-- Shapes -->"
" <toolitem action='ToolRect' />"
@@ -8362,7 +8431,9 @@ static void paintbucket_offset_changed(GtkAdjustment *adj, GObject *tbl)
SPUnit const *unit = tracker->getActiveUnit();
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("/tools/paintbucket/offset", (gdouble)sp_units_get_pixels(adj->value, *unit));
+ // Don't adjust the offset value because we're saving the
+ // unit and it'll be correctly handled on load.
+ prefs->setDouble("/tools/paintbucket/offset", (gdouble)adj->value);
prefs->setString("/tools/paintbucket/offsetunits", sp_unit_get_abbreviation(unit));
}
diff --git a/src/widgets/toolbox.h b/src/widgets/toolbox.h
index a25705536..0f3ce83c5 100644
--- a/src/widgets/toolbox.h
+++ b/src/widgets/toolbox.h
@@ -15,8 +15,7 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include <gtk/gtkstyle.h>
-#include <gtk/gtktooltips.h>
+#include <gtk/gtk.h>
#include <glibmm/ustring.h>
#include "forward.h"
diff --git a/src/xml/CMakeLists.txt b/src/xml/CMakeLists.txt
index 775a4e72f..d7a0e197d 100644
--- a/src/xml/CMakeLists.txt
+++ b/src/xml/CMakeLists.txt
@@ -1,21 +1,53 @@
-SET(xml_SRC
-composite-node-observer.cpp
-croco-node-iface.cpp
-event.cpp
-log-builder.cpp
-node-fns.cpp
-quote.cpp
-#quote-test.cpp
-repr.cpp
-#repr-action-test.cpp
-repr-css.cpp
-repr-io.cpp
-repr-sorting.cpp
-repr-util.cpp
-simple-document.cpp
-simple-node.cpp
-subtree.cpp
+
+set(xml_SRC
+ composite-node-observer.cpp
+ croco-node-iface.cpp
+ event.cpp
+ log-builder.cpp
+ node-fns.cpp
+ quote.cpp
+ repr.cpp
+ repr-css.cpp
+ repr-io.cpp
+ repr-sorting.cpp
+ repr-util.cpp
+ simple-document.cpp
+ simple-node.cpp
+ subtree.cpp
+ helper-observer.cpp
+ rebase-hrefs.cpp
+
+ attribute-record.h
+ comment-node.h
+ composite-node-observer.h
+ croco-node-iface.h
+ document.h
+ element-node.h
+ event-fns.h
+ event.h
+ helper-observer.h
+ invalid-operation-exception.h
+ log-builder.h
+ node-event-vector.h
+ node-fns.h
+ node-iterators.h
+ node-observer.h
+ node.h
+ pi-node.h
+ quote-test.h
+ quote.h
+ rebase-hrefs-test.h
+ rebase-hrefs.h
+ repr-action-test.h
+ repr-sorting.h
+ repr.h
+ simple-document.h
+ simple-node.h
+ sp-css-attr.h
+ subtree.h
+ text-node.h
+ xml-forward.h
)
-ADD_LIBRARY(xml STATIC ${xml_SRC})
-TARGET_LINK_LIBRARIES(xml
-2geom ${INKSCAPE_LIBS}) \ No newline at end of file
+
+# add_inkscape_lib(xml_LIB "${xml_SRC}")
+add_inkscape_source("${xml_SRC}")
diff --git a/src/xml/Makefile_insert b/src/xml/Makefile_insert
index 7190b7948..b10f2448b 100644
--- a/src/xml/Makefile_insert
+++ b/src/xml/Makefile_insert
@@ -47,5 +47,6 @@ ink_common_sources += \
# ### CxxTest stuff ####
# ######################
CXXTEST_TESTSUITES += \
+ $(srcdir)/xml/rebase-hrefs-test.h \
$(srcdir)/xml/repr-action-test.h \
$(srcdir)/xml/quote-test.h
diff --git a/src/xml/rebase-hrefs-test.h b/src/xml/rebase-hrefs-test.h
new file mode 100644
index 000000000..e00337836
--- /dev/null
+++ b/src/xml/rebase-hrefs-test.h
@@ -0,0 +1,126 @@
+#include <cxxtest/TestSuite.h>
+
+#include <cstdlib>
+#include <glib.h>
+
+#include "uri.h"
+
+
+class RebaseHrefsTest : public CxxTest::TestSuite
+{
+ Inkscape::XML::Document *document;
+ Inkscape::XML::Node *a, *b, *c, *root;
+
+public:
+
+ RebaseHrefsTest()
+ {
+ Inkscape::GC::init();
+
+ document = sp_repr_document_new("test");
+ root = document->root();
+
+ a = document->createElement("a");
+ b = document->createElement("b");
+ c = document->createElement("c");
+ }
+ virtual ~RebaseHrefsTest() {}
+
+// createSuite and destroySuite get us per-suite setup and teardown
+// without us having to worry about static initialization order, etc.
+ static RebaseHrefsTest *createSuite() { return new RebaseHrefsTest(); }
+ static void destroySuite( RebaseHrefsTest *suite ) { delete suite; }
+
+
+ void dump_str(gchar const *str, gchar const *prefix)
+ {
+ Glib::ustring tmp;
+ tmp = prefix;
+ tmp += " [";
+ size_t const total = strlen(str);
+ for (unsigned i = 0; i < total; i++) {
+ gchar *const tmp2 = g_strdup_printf(" %02x", (0x0ff & str[i]));
+ tmp += tmp2;
+ g_free(tmp2);
+ }
+
+ tmp += "]";
+ g_message("%s", tmp.c_str());
+ }
+
+ void testFlipples()
+ {
+ using Inkscape::URI;
+ using Inkscape::MalformedURIException;
+
+ gchar const* things[] = {
+ "data:foo,bar",
+ "http://www.google.com/image.png",
+ "ftp://ssd.com/doo",
+ "/foo/dee/bar.svg",
+ "foo.svg",
+ "file:/foo/dee/bar.svg",
+ "file:///foo/dee/bar.svg",
+ "file:foo.svg",
+ "/foo/bar\xe1\x84\x92.svg",
+ "file:///foo/bar\xe1\x84\x92.svg",
+ "file:///foo/bar%e1%84%92.svg",
+ "/foo/bar%e1%84%92.svg",
+ "bar\xe1\x84\x92.svg",
+ "bar%e1%84%92.svg",
+ NULL
+ };
+ g_message("+------");
+ for ( int i = 0; things[i]; i++ )
+ {
+ try
+ {
+ URI uri(things[i]);
+ gboolean isAbs = g_path_is_absolute( things[i] );
+ gchar *str = uri.toString();
+ g_message( "abs:%d isRel:%d scheme:[%s] path:[%s][%s] uri[%s] / [%s]", (int)isAbs,
+ (int)uri.isRelative(),
+ uri.getScheme(),
+ uri.getPath(),
+ uri.getOpaque(),
+ things[i],
+ str );
+ g_free(str);
+ }
+ catch ( MalformedURIException err )
+ {
+ dump_str( things[i], "MalformedURIException" );
+ xmlChar *redo = xmlURIEscape((xmlChar const *)things[i]);
+ g_message(" gone from [%s] to [%s]", things[i], redo );
+ if ( redo == NULL )
+ {
+ URI again = URI::fromUtf8( things[i] );
+ g_message(" uri from [%s] to [%s]", things[i], again.toString() );
+ gboolean isAbs = g_path_is_absolute( things[i] );
+ gchar *str = again.toString();
+ g_message( "abs:%d isRel:%d scheme:[%s] path:[%s][%s] uri[%s] / [%s]", (int)isAbs,
+ (int)again.isRelative(),
+ again.getScheme(),
+ again.getPath(),
+ again.getOpaque(),
+ things[i],
+ str );
+ g_free(str);
+ g_message(" ----");
+ }
+ }
+ }
+ g_message("+------");
+ }
+};
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
diff --git a/src/xml/rebase-hrefs.cpp b/src/xml/rebase-hrefs.cpp
index 33b31685d..4a7e050fa 100644
--- a/src/xml/rebase-hrefs.cpp
+++ b/src/xml/rebase-hrefs.cpp
@@ -10,68 +10,64 @@
#include <glib/gmem.h>
#include <glib/gurifuncs.h>
#include <glib/gutils.h>
-using Inkscape::XML::AttributeRecord;
+#include <glibmm/miscutils.h>
+#include <glibmm/convert.h>
+#include <glibmm/uriutils.h>
+using Inkscape::XML::AttributeRecord;
/**
- * \pre href.
+ * Determine if a href needs rebasing.
*/
-static bool
-href_needs_rebasing(char const *const href)
+static bool href_needs_rebasing(std::string const &href)
{
- g_return_val_if_fail(href, false);
+ bool ret = true;
- if (!*href || *href == '#') {
- return false;
+ if ( href.empty() || (href[0] == '#') ) {
+ ret = false;
/* False (no change) is the right behaviour even when the base URI differs from the
* document URI: RFC 3986 defines empty string relative URL as referring to the containing
* document, rather than referring to the base URI. */
- }
-
- /* Don't change data or http hrefs. */
- {
- char *const scheme = g_uri_parse_scheme(href);
- if (scheme) {
+ } else {
+ /* Don't change data or http hrefs. */
+ std::string scheme = Glib::uri_parse_scheme(href);
+ if ( !scheme.empty() ) {
/* Assume it shouldn't be changed. This is probably wrong if the scheme is `file'
* (or if the scheme of the new base is non-file, though I believe that never
* happens at the time of writing), but that's rare, and we won't try too hard to
* handle this now: wait until after the freeze, then add liburiparser (or similar)
* as a dependency and do it properly. For now we'll just try to be simple (while
* at least still correctly handling data hrefs). */
- free(scheme);
- return false;
+ ret = false;
+ } else if (Glib::path_is_absolute(href)) {
+ /* If absolute then keep it as is.
+ *
+ * Even in the following borderline cases:
+ *
+ * - We keep it absolute even if it is in new_base (directly or indirectly).
+ *
+ * - We assume that if xlink:href is absolute then we honour it in preference to
+ * sodipodi:absref even if sodipodi:absref points to an existing file while xlink:href
+ * doesn't. This is because we aren't aware of any bugs in xlink:href handling when
+ * it's absolute, so we assume that it's the best value to use even in this case.)
+ */
+ /* No strong preference on what we do for sodipodi:absref. Once we're
+ * confident of our handling of xlink:href and xlink:base, we should clear it.
+ * Though for the moment we do the simple thing: neither clear nor set it. */
+ ret = false;
}
}
- /* If absolute then keep it as is.
- *
- * Even in the following borderline cases:
- *
- * - We keep it absolute even if it is in new_base (directly or indirectly).
- *
- * - We assume that if xlink:href is absolute then we honour it in preference to
- * sodipodi:absref even if sodipodi:absref points to an existing file while xlink:href
- * doesn't. This is because we aren't aware of any bugs in xlink:href handling when
- * it's absolute, so we assume that it's the best value to use even in this case.)
- */
- if (g_path_is_absolute(href)) {
- /* No strong preference on what we do for sodipodi:absref. Once we're
- * confident of our handling of xlink:href and xlink:base, we should clear it.
- * Though for the moment we do the simple thing: neither clear nor set it. */
- return false;
- }
-
- return true;
+ return ret;
}
-static gchar *
-calc_abs_href(gchar const *const abs_base_dir, gchar const *const href,
- gchar const *const sp_absref)
+static std::string calc_abs_href(std::string const &abs_base_dir, std::string const &href,
+ gchar const *const sp_absref)
{
- gchar *ret = g_build_filename(abs_base_dir, href, NULL);
+ std::string ret = Glib::build_filename(abs_base_dir, href);
if ( sp_absref
- && !Inkscape::IO::file_test(ret, G_FILE_TEST_EXISTS)
+ && !Inkscape::IO::file_test(ret.c_str(), G_FILE_TEST_EXISTS)
&& Inkscape::IO::file_test(sp_absref, G_FILE_TEST_EXISTS) )
{
/* sodipodi:absref points to an existing file while xlink:href doesn't.
@@ -93,18 +89,12 @@ calc_abs_href(gchar const *const abs_base_dir, gchar const *const href,
* effic: Once we no longer consult sodipodi:absref, we can do
* `if (base unchanged) { return; }' at the start of rebase_hrefs.
*/
- g_free(ret);
- ret = g_strdup(sp_absref);
+ ret = sp_absref;
}
return ret;
}
-/**
- * Change relative xlink:href attributes to be relative to \a new_abs_base instead of old_abs_base.
- *
- * Note that old_abs_base and new_abs_base must each be non-NULL, absolute directory paths.
- */
Inkscape::Util::List<AttributeRecord const>
Inkscape::XML::rebase_href_attrs(gchar const *const old_abs_base,
gchar const *const new_abs_base,
@@ -115,6 +105,7 @@ Inkscape::XML::rebase_href_attrs(gchar const *const old_abs_base,
using Inkscape::Util::ptr_shared;
using Inkscape::Util::share_string;
+
if (old_abs_base == new_abs_base) {
return attributes;
}
@@ -133,7 +124,7 @@ Inkscape::XML::rebase_href_attrs(gchar const *const old_abs_base,
for (List<AttributeRecord const> ai(attributes); ai; ++ai) {
if (ai->key == href_key) {
old_href = ai->value;
- if (!href_needs_rebasing(old_href)) {
+ if (!href_needs_rebasing(static_cast<char const *>(old_href))) {
return attributes;
}
} else if (ai->key == absref_key) {
@@ -153,23 +144,33 @@ Inkscape::XML::rebase_href_attrs(gchar const *const old_abs_base,
* reversed.) */
}
- gchar *const abs_href(calc_abs_href(old_abs_base, old_href, sp_absref));
- gchar const *const new_href = sp_relative_path_from_path(abs_href, new_abs_base);
- ret = cons(AttributeRecord(href_key, share_string(new_href)), ret);
+ std::string abs_href = calc_abs_href(old_abs_base, static_cast<char const *>(old_href), sp_absref);
+ std::string new_href = sp_relative_path_from_path(abs_href, new_abs_base);
+ ret = cons(AttributeRecord(href_key, share_string(new_href.c_str())), ret); // Check if this is safe/copied or if it is only held.
if (sp_absref) {
/* We assume that if there wasn't previously a sodipodi:absref attribute
* then we shouldn't create one. */
- ret = cons(AttributeRecord(absref_key, ( streq(abs_href, sp_absref)
+ ret = cons(AttributeRecord(absref_key, ( streq(abs_href.c_str(), sp_absref)
? sp_absref
- : share_string(abs_href) )),
+ : share_string(abs_href.c_str()) )),
ret);
}
- g_free(abs_href);
+
return ret;
}
-gchar *
-Inkscape::XML::calc_abs_doc_base(gchar const *const doc_base)
+// std::string Inkscape::XML::rebase_href_attrs( std::string const &oldAbsBase, std::string const &newAbsBase, gchar const * /*href*/, gchar const */*absref*/ )
+// {
+// std::string ret;
+// //g_message( "XX need to flip from [%s] to [%s]", oldAbsBase.c_str(), newAbsBase.c_str() );
+
+// if ( oldAbsBase != newAbsBase ) {
+// }
+
+// return ret;
+// }
+
+std::string Inkscape::XML::calc_abs_doc_base(gchar const *doc_base)
{
/* Note that we don't currently try to handle the case of doc_base containing
* `..' or `.' path components. This non-handling means that sometimes
@@ -179,34 +180,27 @@ Inkscape::XML::calc_abs_doc_base(gchar const *const doc_base)
* relative URL/IRI href processing (with liburiparser).
*
* (Note that one possibile difficulty with `..' is symlinks.) */
+ std::string ret;
if (!doc_base) {
- return g_get_current_dir();
- } else if (g_path_is_absolute(doc_base)) {
- return g_strdup(doc_base);
+ ret = Glib::get_current_dir();
+ } else if (Glib::path_is_absolute(doc_base)) {
+ ret = doc_base;
} else {
- gchar *const cwd = g_get_current_dir();
- gchar *const ret = g_build_filename(cwd, doc_base, NULL);
- g_free(cwd);
- return ret;
+ ret = Glib::build_filename( Glib::get_current_dir(), doc_base );
}
+
+ return ret;
}
-/**
- * Change relative hrefs in doc to be relative to \a new_base instead of doc.base.
- *
- * (NULL doc base or new_base is interpreted as current working directory.)
- *
- * \param spns True iff doc should contain sodipodi:absref attributes.
- */
void Inkscape::XML::rebase_hrefs(SPDocument *const doc, gchar const *const new_base, bool const spns)
{
if (!doc->getBase()) {
return;
}
- gchar *const old_abs_base = calc_abs_doc_base(doc->getBase());
- gchar *const new_abs_base = calc_abs_doc_base(new_base);
+ std::string old_abs_base = calc_abs_doc_base(doc->getBase());
+ std::string new_abs_base = calc_abs_doc_base(new_base);
/* TODO: Should handle not just image but also:
*
@@ -232,30 +226,34 @@ void Inkscape::XML::rebase_hrefs(SPDocument *const doc, gchar const *const new_b
for (GSList const *l = images; l != NULL; l = l->next) {
Inkscape::XML::Node *ir = static_cast<SPObject *>(l->data)->getRepr();
- gchar * uri = g_strdup(ir->attribute("xlink:href"));
- if (!uri) {
- continue;
+ std::string uri;
+ {
+ gchar const *tmp = ir->attribute("xlink:href");
+ if ( !tmp ) {
+ continue;
+ }
+ uri = tmp;
}
- if (!strncmp(uri, "file://", 7)) {
- uri = g_strdup(g_filename_from_uri(ir->attribute("xlink:href"), NULL, NULL));
+ if ( uri.substr(0, 7) == "file://" ) {
+ uri = Glib::filename_from_uri(uri);
}
// The following two cases are for absolute hrefs that can be converted to relative.
// Imported images, first time rebased, need an old base.
- gchar * href = uri;
- if (g_path_is_absolute(href)) {
- href = (gchar *) sp_relative_path_from_path(uri, old_abs_base);
+ std::string href = uri;
+ if ( Glib::path_is_absolute(href) ) {
+ href = sp_relative_path_from_path(uri, old_abs_base);
}
// Files moved from a absolute path need a new one.
- if (g_path_is_absolute(href)) {
- href = (gchar *) sp_relative_path_from_path(uri, new_abs_base);
+ if ( Glib::path_is_absolute(href) ) {
+ href = sp_relative_path_from_path(uri, new_abs_base);
}
// Other bitmaps are either really absolute, or already relative.
#ifdef WIN32
/* Windows relative path needs their native separators before we
* compare it to native baserefs. */
- if (!g_path_is_absolute(href)) {
- g_strdelimit(href, "/", '\\');
+ if ( !Glib::path_is_absolute(href) ) {
+ std::replace(href.begin(), href.end(), '/', '\\');
}
#endif
@@ -264,52 +262,40 @@ void Inkscape::XML::rebase_hrefs(SPDocument *const doc, gchar const *const new_b
* changing non-file hrefs), which breaks if href starts with a scheme or if href contains
* any escaping. */
- if (!href || !href_needs_rebasing(href)) {
- g_free(uri);
- continue;
- }
-
- gchar *const abs_href(calc_abs_href(old_abs_base, href, ir->attribute("sodipodi:absref")));
-
- /* todo: One difficult case once we support writing to non-file locations is where
- * existing hrefs in the document point to local files. In this case, we should
- * probably copy those referenced files to the new location at the same time. It's
- * less clear what to do when copying from one non-file location to another. We may
- * need to ask the user in some way (even if it's as a checkbox), but we'd like to
- * bother the user as little as possible yet also want to warn the user about the case
- * of file hrefs. */
-
- gchar const *const new_href = sp_relative_path_from_path(abs_href, new_abs_base);
- ir->setAttribute("sodipodi:absref", ( spns
- ? abs_href
- : NULL ));
- if (!g_path_is_absolute(new_href)) {
+ if ( href_needs_rebasing(href) ) {
+ std::string abs_href = calc_abs_href(old_abs_base, href, ir->attribute("sodipodi:absref"));
+
+ /* todo: One difficult case once we support writing to non-file locations is where
+ * existing hrefs in the document point to local files. In this case, we should
+ * probably copy those referenced files to the new location at the same time. It's
+ * less clear what to do when copying from one non-file location to another. We may
+ * need to ask the user in some way (even if it's as a checkbox), but we'd like to
+ * bother the user as little as possible yet also want to warn the user about the case
+ * of file hrefs. */
+
+ std::string new_href = sp_relative_path_from_path(abs_href, new_abs_base);
+ ir->setAttribute("sodipodi:absref", ( spns
+ ? abs_href.c_str()
+ : NULL ));
+ if (!Glib::path_is_absolute(new_href)) {
#ifdef WIN32
- /* Native Windows path separators are replaced with / so that the href
- * also works on Gnu/Linux and OSX */
- ir->setAttribute("xlink:href", g_strdelimit((gchar *) new_href, "\\", '/'));
-#else
- ir->setAttribute("xlink:href", new_href);
+ /* Native Windows path separators are replaced with / so that the href
+ * also works on Gnu/Linux and OSX */
+ std::replace(href.begin(), href.end(), '\\', '/');
#endif
- } else {
- ir->setAttribute("xlink:href", g_filename_to_uri((gchar *) new_href, NULL, NULL));
- }
+ ir->setAttribute("xlink:href", new_href.c_str());
+ } else {
+ ir->setAttribute("xlink:href", g_filename_to_uri(new_href.c_str(), NULL, NULL));
+ }
- /* impl: I assume that if !spns then any existing sodipodi:absref is about to get
- * cleared (or is already cleared) anyway, in which case it doesn't matter whether we
- * clear or leave any existing sodipodi:absref value. If that assumption turns out to
- * be wrong, then leaving it means risking leaving the wrong value (if xlink:href
- * referred to a different file than sodipodi:absref) while clearing it means risking
- * losing information. */
-
- g_free(uri);
- // (No need to free href, it's guaranteed to point into uri.)
- g_free(abs_href);
- // (No need to free new_href, it's guaranteed to point into abs_href.)
+ /* impl: I assume that if !spns then any existing sodipodi:absref is about to get
+ * cleared (or is already cleared) anyway, in which case it doesn't matter whether we
+ * clear or leave any existing sodipodi:absref value. If that assumption turns out to
+ * be wrong, then leaving it means risking leaving the wrong value (if xlink:href
+ * referred to a different file than sodipodi:absref) while clearing it means risking
+ * losing information. */
+ }
}
-
- g_free(new_abs_base);
- g_free(old_abs_base);
}
diff --git a/src/xml/rebase-hrefs.h b/src/xml/rebase-hrefs.h
index b4f288c4d..4cbdec9a5 100644
--- a/src/xml/rebase-hrefs.h
+++ b/src/xml/rebase-hrefs.h
@@ -9,17 +9,36 @@ struct SPDocument;
namespace Inkscape {
namespace XML {
-gchar *calc_abs_doc_base(gchar const *doc_base);
-
+std::string calc_abs_doc_base(gchar const *doc_base);
+
+/**
+ * Change relative hrefs in doc to be relative to \a new_base instead of doc.base.
+ *
+ * (NULL doc base or new_base is interpreted as current working directory.)
+ *
+ * @param spns True if doc should contain sodipodi:absref attributes.
+ */
void rebase_hrefs(SPDocument *doc, gchar const *new_base, bool spns);
+/**
+ * Change relative xlink:href attributes to be relative to \a new_abs_base instead of old_abs_base.
+ *
+ * Note that old_abs_base and new_abs_base must each be non-NULL, absolute directory paths.
+ */
Inkscape::Util::List<AttributeRecord const> rebase_href_attrs(
gchar const *old_abs_base,
gchar const *new_abs_base,
Inkscape::Util::List<AttributeRecord const> attributes);
-}
-}
+
+// /**
+// * .
+// * @return a non-empty replacement href if needed, empty otherwise.
+// */
+// std::string rebase_href_attrs( std::string const &oldAbsBase, std::string const &newAbsBase, gchar const *href, gchar const *absref = 0 );
+
+} // namespace XML
+} // namespace Inkscape
#endif /* !REBASE_HREFS_H_SEEN */
diff --git a/src/xml/repr-action-test.h b/src/xml/repr-action-test.h
index afc9b2c46..ae4291397 100644
--- a/src/xml/repr-action-test.h
+++ b/src/xml/repr-action-test.h
@@ -88,7 +88,6 @@ public:
}
/* lots more tests needed ... */
-
};
/*
diff --git a/src/xml/repr-io.cpp b/src/xml/repr-io.cpp
index 5f7654ba8..2a0bb6ce8 100644
--- a/src/xml/repr-io.cpp
+++ b/src/xml/repr-io.cpp
@@ -52,6 +52,7 @@ static void sp_repr_write_stream_root_element(Node *repr, Writer &out,
int inlineattrs, int indent,
gchar const *old_href_abs_base,
gchar const *new_href_abs_base);
+
static void sp_repr_write_stream_element(Node *repr, Writer &out,
gint indent_level, bool add_whitespace,
Glib::QueryQuark elide_prefix,
@@ -644,7 +645,7 @@ sp_repr_save_rebased_file(Document *doc, gchar const *const filename, gchar cons
return false;
}
- gchar *old_href_abs_base = NULL;
+ std::string old_href_abs_base;
gchar *new_href_abs_base = NULL;
if (for_filename) {
old_href_abs_base = calc_abs_doc_base(old_base);
@@ -662,9 +663,8 @@ sp_repr_save_rebased_file(Document *doc, gchar const *const filename, gchar cons
* to using sodipodi:absref instead of the xlink:href value,
* then we should do `if streq() { free them and set both to NULL; }'. */
}
- sp_repr_save_stream(doc, file, default_ns, compress, old_href_abs_base, new_href_abs_base);
+ sp_repr_save_stream(doc, file, default_ns, compress, old_href_abs_base.c_str(), new_href_abs_base);
- g_free(old_href_abs_base);
g_free(new_href_abs_base);
if (fclose (file) != 0) {
@@ -879,17 +879,16 @@ void sp_repr_write_stream( Node *repr, Writer &out, gint indent_level,
}
-static void
-sp_repr_write_stream_element (Node * repr, Writer & out, gint indent_level,
- bool add_whitespace,
- Glib::QueryQuark elide_prefix,
- List<AttributeRecord const> attributes,
- int inlineattrs, int indent,
- gchar const *const old_href_base,
- gchar const *const new_href_base)
+void sp_repr_write_stream_element( Node * repr, Writer & out,
+ gint indent_level, bool add_whitespace,
+ Glib::QueryQuark elide_prefix,
+ List<AttributeRecord const> attributes,
+ int inlineattrs, int indent,
+ gchar const *old_href_base,
+ gchar const *new_href_base )
{
- Node *child;
- bool loose;
+ Node *child = 0;
+ bool loose = false;
g_return_if_fail (repr != NULL);
@@ -921,6 +920,28 @@ sp_repr_write_stream_element (Node * repr, Writer & out, gint indent_level,
add_whitespace = false;
}
+
+ {
+ GQuark const href_key = g_quark_from_static_string("xlink:href");
+ GQuark const absref_key = g_quark_from_static_string("sodipodi:absref");
+
+ gchar const *xxHref = 0;
+ gchar const *xxAbsref = 0;
+ for ( List<AttributeRecord const> ai(attributes); ai; ++ai ) {
+ if ( ai->key == href_key ) {
+ xxHref = ai->value;
+ } else if ( ai->key == absref_key ) {
+ xxAbsref = ai->value;
+ }
+ }
+
+ // Might add a special case for absref but no href.
+ if ( old_href_base && new_href_base && xxHref ) {
+ //g_message("href rebase test with [%s] and [%s]", xxHref, xxAbsref);
+ //std::string newOne = rebase_href_attrs( old_href_base, new_href_base, xxHref, xxAbsref );
+ }
+ }
+
for ( List<AttributeRecord const> iter = rebase_href_attrs(old_href_base, new_href_base,
attributes);
iter ; ++iter )
diff --git a/src/xml/repr.h b/src/xml/repr.h
index bde3e533f..5fa9387c7 100644
--- a/src/xml/repr.h
+++ b/src/xml/repr.h
@@ -79,10 +79,13 @@ void sp_repr_write_stream(Inkscape::XML::Node *repr, Inkscape::IO::Writer &out,
gchar const *new_href_base = NULL);
Inkscape::XML::Document *sp_repr_read_buf (const Glib::ustring &buf, const gchar *default_ns);
Glib::ustring sp_repr_save_buf(Inkscape::XML::Document *doc);
+
+// TODO convert to std::string
void sp_repr_save_stream(Inkscape::XML::Document *doc, FILE *to_file,
gchar const *default_ns = NULL, bool compress = false,
gchar const *old_href_base = NULL,
gchar const *new_href_base = NULL);
+
bool sp_repr_save_file(Inkscape::XML::Document *doc, gchar const *filename, gchar const *default_ns=NULL);
bool sp_repr_save_rebased_file(Inkscape::XML::Document *doc, gchar const *filename_utf8,
gchar const *default_ns,
diff --git a/src/zoom-context.h b/src/zoom-context.h
index 133267135..e36dc3fbe 100644
--- a/src/zoom-context.h
+++ b/src/zoom-context.h
@@ -16,8 +16,8 @@
#include "event-context.h"
#define SP_TYPE_ZOOM_CONTEXT (sp_zoom_context_get_type ())
-#define SP_ZOOM_CONTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_ZOOM_CONTEXT, SPZoomContext))
-#define SP_IS_ZOOM_CONTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_ZOOM_CONTEXT))
+#define SP_ZOOM_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_ZOOM_CONTEXT, SPZoomContext))
+#define SP_IS_ZOOM_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_ZOOM_CONTEXT))
class SPZoomContext;
class SPZoomContextClass;