audio recording is now better integrated

presentation
morro 7 years ago
parent 9d9aa20665
commit caa0e279b7
  1. 2
      arecord-launcher-scripts/README
  2. 20
      arecord-launcher-scripts/usr/local/bin/xournalpp-ts-launcher.sh
  3. 44
      arecord-launcher-scripts/usr/local/bin/xournalpp-ts-recorder.sh
  4. 23
      launcher/usr/local/bin/xopp-recording.sh
  5. 3
      launcher/usr/local/bin/xournalpp-ts-launcher.sh
  6. 3
      src/.vscode/settings.json
  7. 4
      src/control/Actions.h
  8. 60
      src/control/Control.cpp
  9. 7
      src/control/Control.h
  10. 2
      src/control/Tool.cpp
  11. 3
      src/control/Tool.h
  12. 6
      src/control/ToolHandler.cpp
  13. 5
      src/gui/MainWindow.cpp
  14. 61
      src/gui/PageView.cpp
  15. 1
      src/gui/PageView.h
  16. 6
      src/gui/toolbarMenubar/ToolMenuHandler.cpp
  17. 17
      src/gui/toolbarMenubar/ToolSelectCombocontrol.cpp
  18. 1
      src/gui/toolbarMenubar/ToolSelectCombocontrol.h
  19. 22
      ui/main.glade
  20. 17
      ui/pixmaps/object-play.svg
  21. 5
      ui/pixmaps/rec.svg
  22. 5
      ui/pixmaps/stop.svg
  23. 4
      ui/toolbar.ini

@ -1,2 +0,0 @@
For the moment we can use those two scritps in order to record while writing or just view and listen to the recorded files..
A more integrated solution would be better, but I haven't got much time now.

@ -1,20 +0,0 @@
#!/bin/bash
record_audio()
{
directory="$HOME/Musica/recordings/"
if ! [ -d "$directory" ];
then
mkdir "$directory"
fi
xournalpp-ts -f $directory $1
}
main()
{
record_audio $1
}
main "$@"

@ -1,44 +0,0 @@
#!/bin/bash
#!/bin/bash
# Author: Serg Kolo
# Date: Dec 1, 2016
# Purpose: simple script for recording audio with arecord
# Written for: https://askubuntu.com/q/855893/295286
record_audio()
{
# Set up some variables to control arecord here
# Please remember to quote the variables
# and pay attention to slashes in file paths
filetype="wav"
filename="record_$(date +%H_%M_%m_%d_%Y)"
directory="$HOME/Musica/recordings/"
if ! [ -d "$directory" ];
then
mkdir "$directory"
fi
# This part will initiate recording of timestamped
# please see arecord's man page for other options
notify-send "Recording started"
exec arecord -f cd -d 3600 -t wav |lame --preset 56 -mm - "$directory""$filename".mp3 &
xournalpp-ts -a $filename.mp3 -f $directory $1
pkill -f "arecord" && notify-send "Recording stopped"
}
main()
{
# if pgrep -f "arecord" ;
# then
# pkill -f "arecord" && notify-send "Recording stopped"
# else
record_audio $1
# fi
}
main "$@"

@ -0,0 +1,23 @@
#!/bin/bash
filetype="wav"
#filename="record_$(date +%H_%M_%m_%d_%Y)"
directory="$HOME/Musica/recordings/"
if ! [ -d "$directory" ];
then
mkdir "$directory"
fi
if [[ $1 == "start" ]] && [[ $# -eq 2 ]]
then
filename=$2
notify-send "Recording started"
amixer sset 'Capture' 35%
exec arecord -f cd -d 3600 -t wav |lame --preset 56 -mm - "$directory""$filename" &
elif [[ $1 == "stop" ]]
then
pkill -f "arecord" && notify-send "Recording stopped"
fi

@ -0,0 +1,3 @@
#!/bin/bash
xournalpp -f /home/morro/Musica/recordings/

@ -55,6 +55,7 @@
"typeindex": "cpp",
"typeinfo": "cpp",
"utility": "cpp",
"variant": "cpp"
"variant": "cpp",
"hash_map": "cpp"
}
}

@ -89,6 +89,8 @@ enum ActionType
ACTION_TOOL_SELECT_OBJECT,
ACTION_TOOL_VERTICAL_SPACE,
ACTION_TOOL_HAND,
ACTION_TOOL_PLAY_OBJECT,
//ACTION_TOOL_DRAW_RECT,
//ACTION_TOOL_DRAW_CIRCLE,
//ACTION_TOOL_DRAW_ARROW,
@ -142,6 +144,7 @@ enum ActionType
ACTION_VIEW_PRESENTATION_MODE,
ACTION_MANAGE_TOOLBAR,
ACTION_CUSTOMIZE_TOOLBAR,
ACTION_RECSTOP,
// Menu Help
ACTION_ABOUT = 800,
@ -153,7 +156,6 @@ enum ActionType
ACTION_FOOTER_ZOOM_SLIDER,
ACTION_FOOTER_LAYER,
// Used to select no item in a group...
ACTION_NOT_SELECTED = 1
};

@ -61,6 +61,8 @@ using std::endl;
#include <vector>
using std::vector;
extern gint sttime;
// TODO Check for error log on startup, also check for emergency save document!
Control::Control(GladeSearchpath* gladeSearchPath)
@ -612,6 +614,12 @@ void Control::actionPerformed(ActionType type, ActionGroup group, GdkEvent* even
selectTool(TOOL_SELECT_OBJECT);
}
break;
case ACTION_TOOL_PLAY_OBJECT:
if (enabled)
{
selectTool(TOOL_PLAY_OBJECT);
}
break;
case ACTION_TOOL_VERTICAL_SPACE:
clearSelection();
if (enabled)
@ -828,6 +836,10 @@ void Control::actionPerformed(ActionType type, ActionGroup group, GdkEvent* even
enableFullscreen(enabled);
break;
case ACTION_RECSTOP:
recToggle();
break;
// Footer, not really an action, but need an identifier to
case ACTION_FOOTER_PAGESPIN:
case ACTION_FOOTER_ZOOM_SLIDER:
@ -1156,6 +1168,53 @@ void Control::setShapeRecognizerEnabled(bool enabled)
}
}
#include <iostream>
#include<time.h>
using namespace std;
void Control::recStartStop(bool rec)
{
string command = "";
if(rec){
char buffer [50];
time_t secs=time(0);
tm *t=localtime(&secs);
//This prints the date and time in ISO format.
sprintf(buffer, "%04d-%02d-%02d_%02d:%02d:%02d",
t->tm_year+1900,t->tm_mon+1,t->tm_mday,
t->tm_hour,t->tm_min,t->tm_sec);
string data(buffer);
data +=".mp3";
audioFilename = data;
printf("Start recording\n");
command="xopp-recording.sh start "+data;
}else{
printf("Stop recording\n");
command="xopp-recording.sh stop";
}
system(command.c_str());
}
void Control::recToggle()
{
XOJ_CHECK_TYPE(Control);
if(!this->recording){
sttime = (g_get_monotonic_time()/1000000);
this->recording = true;
recStartStop(true);
}else{
this->recording = false;
recStartStop(false);
}
}
void Control::enableFullscreen(bool enabled, bool presentation)
{
XOJ_CHECK_TYPE(Control);
@ -2812,6 +2871,7 @@ void Control::quit()
this->scheduler->lock();
recStartStop(false);
settings->save();
this->scheduler->removeAllJobs();

@ -33,6 +33,9 @@
#include <vector>
extern string audioFilename;
extern string audioFolder;
class Sidebar;
class CallbackData;
class PageView;
@ -107,6 +110,8 @@ public:
void manageToolbars();
void customizeToolbars();
void enableFullscreen(bool enabled, bool presentation = false);
void recToggle();
void recStartStop(bool record);
void gotoPage();
@ -316,6 +321,8 @@ private:
MetadataManager* metadata;
bool recording = false;
};
class CallbackData

@ -205,6 +205,7 @@ string toolTypeToString(ToolType type)
case TOOL_SELECT_RECT: return "selectRect";
case TOOL_SELECT_REGION: return "selectRegion";
case TOOL_SELECT_OBJECT: return "selectObject";
case TOOL_PLAY_OBJECT: return "PlayObject";
case TOOL_VERTICAL_SPACE: return "verticalSpace";
case TOOL_HAND: return "hand";
/*
@ -226,6 +227,7 @@ ToolType toolTypeFromString(string type)
else if (type == "selectRect") return TOOL_SELECT_RECT;
else if (type == "selectRegion") return TOOL_SELECT_REGION;
else if (type == "selectObject") return TOOL_SELECT_OBJECT;
else if (type == "playObject") return TOOL_PLAY_OBJECT;
else if (type == "verticalSpace") return TOOL_VERTICAL_SPACE;
else if (type == "hand") return TOOL_HAND;
/*

@ -30,6 +30,7 @@ enum ToolType
TOOL_SELECT_OBJECT = 8,
TOOL_VERTICAL_SPACE = 9,
TOOL_HAND = 10,
TOOL_PLAY_OBJECT = 11,
/*
TOOL_DRAW_RECT = 11,
TOOL_DRAW_CIRCLE = 12,
@ -38,7 +39,7 @@ enum ToolType
};
// The count of tools
#define TOOL_COUNT 10
#define TOOL_COUNT 11
//#define TOOL_COUNT 13

@ -82,6 +82,9 @@ void ToolHandler::initTools()
t = new Tool("hand", TOOL_HAND, 0x000000, false, false, false, false, false, false, false, NULL);
tools[TOOL_HAND - TOOL_PEN] = t;
t = new Tool("playObject", TOOL_PLAY_OBJECT, 0x000000, false, false, false, false, false, false, false, NULL);
tools[TOOL_PLAY_OBJECT - TOOL_PEN] = t;
/*
t = new Tool("drawRect", TOOL_DRAW_RECT, 0x000000, false, false, false, false, false, false, false, NULL);
tools[TOOL_DRAW_RECT - TOOL_PEN] = t;
@ -684,7 +687,8 @@ void ToolHandler::setSelectionEditTools(bool setColor, bool setSize)
if (this->current->type == TOOL_SELECT_RECT ||
this->current->type == TOOL_SELECT_REGION ||
this->current->type == TOOL_SELECT_OBJECT)
this->current->type == TOOL_SELECT_OBJECT ||
this->current->type == TOOL_PLAY_OBJECT)
{
this->listener->toolColorChanged();
this->listener->toolSizeChanged();

@ -25,7 +25,7 @@ using std::cout;
using std::endl;
//those two have to be moved somewhere else in the future
gint sttime;
gint sttime = 0;
string audioFilename = "";
string audioFolder = "";
//gchar* audioFilename;
@ -697,9 +697,6 @@ void MainWindow::createToolbarAndMenu(bool initial)
{
XOJ_CHECK_TYPE(MainWindow);
/** this will be moved to a "start" button */
sttime = (g_get_monotonic_time()/1000000);
GtkMenuShell* menubar = GTK_MENU_SHELL(get("menuViewToolbar"));
g_return_if_fail(menubar != NULL);

@ -336,6 +336,60 @@ void PageView::selectObjectAt(double x, double y)
// clear old selection anyway
this->xournal->getControl()->clearSelection();
for (Layer* l : *this->page->getLayers())
{
for (Element* e : *l->getElements())
{
if (e->intersectsArea(&matchRect))
{
if (e->getType() == ELEMENT_STROKE)
{
Stroke* s = (Stroke*) e;
double tmpGap = 0;
if ((s->intersects(x, y, 5, &tmpGap)) && (gap > tmpGap))
{
gap = tmpGap;
strokeMatch = s;
}
}
else
{
elementMatch = e;
}
}
}
selected--;
}
if (strokeMatch)
{
elementMatch = strokeMatch;
}
if (elementMatch)
{
xournal->setSelection(new EditSelection(xournal->getControl()->getUndoRedoHandler(), elementMatch, this, page));
repaintPage();
}
}
void PageView::playObjectAt(double x, double y)
{
XOJ_CHECK_TYPE(PageView);
int selected = this->page->getSelectedLayerId();
GdkRectangle matchRect = { gint(x - 10), gint(y - 10), 20, 20 };
Stroke* strokeMatch = NULL;
double gap = 1000000000;
Element* elementMatch = NULL;
// clear old selection anyway
this->xournal->getControl()->clearSelection();
for (Layer* l : *this->page->getLayers())
{
for (Element* e : *l->getElements())
@ -482,7 +536,8 @@ bool PageView::onButtonPressEvent(GtkWidget* widget, GdkEventButton* event)
*/
else if (h->getToolType() == TOOL_SELECT_RECT ||
h->getToolType() == TOOL_SELECT_REGION ||
h->getToolType() == TOOL_SELECT_OBJECT)
h->getToolType() == TOOL_SELECT_OBJECT ||
h->getToolType() == TOOL_PLAY_OBJECT)
{
if (h->getToolType() == TOOL_SELECT_RECT)
{
@ -508,6 +563,10 @@ bool PageView::onButtonPressEvent(GtkWidget* widget, GdkEventButton* event)
{
selectObjectAt(x, y);
}
else if (h->getToolType() == TOOL_PLAY_OBJECT)
{
playObjectAt(x, y);
}
}
else if (h->getToolType() == TOOL_TEXT)
{

@ -156,6 +156,7 @@ private:
void startText(double x, double y);
void selectObjectAt(double x, double y);
void playObjectAt(double x, double y);
void addRerenderRect(double x, double y, double width, double height);

@ -345,6 +345,9 @@ void ToolMenuHandler::initToolItems()
addToolItem(new ToolButton(listener, gui, "FULLSCREEN", ACTION_FULLSCREEN, GROUP_FULLSCREEN, false,
"fullscreen.svg", _C("Toggle fullscreen"), gui->get("menuViewFullScreen")));
addToolItem(new ToolButton(listener, gui, "RECSTOP", ACTION_RECSTOP, GROUP_FULLSCREEN, false,
"rec.svg", _C("Rec / Stop"), gui->get("menuRecStop")));
addToolItem(new ColorToolItem(listener, toolHandler, this->parent, 0xff0000, true));
addToolItem(new ToolButton(listener, gui, "PEN", ACTION_TOOL_PEN, GROUP_TOOL, true, "tool_pencil.svg", _C("Pen"),
@ -421,6 +424,9 @@ void ToolMenuHandler::initToolItems()
addToolItem(new ToolButton(listener, gui, "SELECT_OBJECT", ACTION_TOOL_SELECT_OBJECT, GROUP_TOOL, true,
"object-select.svg", _C("Select Object"), gui->get("menuToolsSelectObject")));
addToolItem(new ToolButton(listener, gui, "PLAY_OBJECT", ACTION_TOOL_PLAY_OBJECT, GROUP_TOOL, true,
"object-play.svg", _C("Play Object"), gui->get("menuToolsPlayObject")));
addToolItem(new ToolButton(listener, gui, "DRAW_CIRCLE", ACTION_TOOL_DRAW_CIRCLE, GROUP_RULER, false,
"circle-draw.svg", _C("Draw Circle"), gui->get("menuToolsDrawCircle")));
addToolItem(new ToolButton(listener, gui, "DRAW_RECTANGLE", ACTION_TOOL_DRAW_RECT, GROUP_RULER, false,

@ -22,9 +22,11 @@ ToolSelectCombocontrol::ToolSelectCombocontrol(ToolMenuHandler* th, ActionHandle
this->iconSelectRect = gui->loadIconPixbuf("rect-select.svg");
this->iconSelectRgion = gui->loadIconPixbuf("lasso.svg");
this->iconSelectObject = gui->loadIconPixbuf("object-select.svg");
this->iconPlayObject = gui->loadIconPixbuf("object-play.svg");
g_object_ref(this->iconSelectRect);
g_object_ref(this->iconSelectRgion);
g_object_ref(this->iconSelectObject);
g_object_ref(this->iconPlayObject);
menuItem = gtk_image_menu_item_new_with_label(_C("Select Rectangle"));
gtk_container_add(GTK_CONTAINER(popup), menuItem);
@ -47,6 +49,13 @@ ToolSelectCombocontrol::ToolSelectCombocontrol(ToolMenuHandler* th, ActionHandle
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuItem), gui->loadIcon("object-select.svg"));
gtk_widget_show_all(menuItem);
menuItem = gtk_image_menu_item_new_with_label(_C("Play Object"));
gtk_container_add(GTK_CONTAINER(popup),menuItem);
th->registerMenupoint(menuItem,ACTION_TOOL_PLAY_OBJECT, GROUP_TOOL);
gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(menuItem), true);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuItem), gui->loadIcon("object-play.svg"));
gtk_widget_show_all(menuItem);
setPopupMenu(popup);
}
@ -57,6 +66,7 @@ ToolSelectCombocontrol::~ToolSelectCombocontrol()
g_object_unref(this->iconSelectRect);
g_object_unref(this->iconSelectRgion);
g_object_unref(this->iconSelectObject);
g_object_unref(this->iconPlayObject);
XOJ_RELEASE_TYPE(ToolSelectCombocontrol);
}
@ -96,6 +106,13 @@ void ToolSelectCombocontrol::selected(ActionGroup group, ActionType action)
description = _("Select Object");
}
else if (action == ACTION_TOOL_PLAY_OBJECT && this->action != ACTION_TOOL_PLAY_OBJECT)
{
this->action = ACTION_TOOL_PLAY_OBJECT;
gtk_image_set_from_pixbuf(GTK_IMAGE(iconWidget), this->iconPlayObject);
description = _("Play Object");
}
gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(item), description.c_str());

@ -39,4 +39,5 @@ private:
GdkPixbuf* iconSelectRect;
GdkPixbuf* iconSelectRgion;
GdkPixbuf* iconSelectObject;
GdkPixbuf* iconPlayObject;
};

@ -307,6 +307,16 @@
<property name="use_underline">True</property>
</widget>
</child>
<child>
<widget class="GtkCheckMenuItem" id="menuRecStop">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_action_appearance">False</property>
<property name="label" translatable="yes">Rec-Stop</property>
</widget>
</child>
<child>
<widget class="GtkCheckMenuItem" id="menuViewFullScreen">
<property name="visible">True</property>
@ -931,6 +941,18 @@
<accelerator key="O" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
</widget>
</child>
<child>
<widget class="GtkCheckMenuItem" id="menuToolsPlayObject">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_action_appearance">False</property>
<property name="label" translatable="yes">Play Object</property>
<property name="use_underline">True</property>
<property name="draw_as_radio">True</property>
</widget>
</child>
<child>
<widget class="GtkCheckMenuItem" id="menuToolsVerticalSpace">
<property name="visible">True</property>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="22pt" height="22pt" viewBox="0 0 22 22" version="1.1">
<g id="surface1">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.196078%,90.196078%,90.196078%);fill-opacity:1;" d="M 12.171875 7.066406 C 11.953125 6.574219 11.460938 5.964844 10.320312 6.464844 L 9.316406 6.90625 L 8.359375 4.730469 C 7.785156 3.417969 6.351562 3.320312 5.625 4.015625 C 5.101562 4.515625 4.863281 5.316406 5.207031 6.105469 L 8.601562 13.871094 C 7.773438 13.246094 6.195312 13.253906 5.488281 13.980469 L 5.507812 13.953125 C 4.757812 14.726562 4.882812 15.820312 6.019531 16.777344 L 12.097656 21.5625 L 20.804688 17.734375 L 20.851562 16.976562 C 20.976562 15 20.625 13.027344 19.828125 11.214844 L 19.171875 9.71875 C 19.136719 9.640625 19.097656 9.5625 19.058594 9.488281 C 18.597656 8.648438 17.570312 8.304688 16.691406 8.683594 L 16.039062 8.96875 L 15.296875 7.289062 C 14.972656 6.550781 14.113281 6.214844 13.378906 6.546875 Z M 12.171875 7.066406 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 20.230469 11.039062 L 19.570312 9.539062 C 19.53125 9.453125 19.488281 9.363281 19.441406 9.28125 C 19.167969 8.777344 18.71875 8.398438 18.171875 8.214844 C 17.628906 8.03125 17.042969 8.054688 16.515625 8.28125 L 16.261719 8.394531 L 15.9375 7.65625 L 15.699219 7.109375 C 15.496094 6.644531 15.121094 6.289062 14.648438 6.105469 C 14.175781 5.925781 13.664062 5.9375 13.203125 6.144531 L 12.359375 6.507812 C 12.203125 6.289062 12.015625 6.117188 11.792969 6.003906 C 11.332031 5.765625 10.777344 5.785156 10.144531 6.0625 L 9.542969 6.328125 L 8.761719 4.554688 C 8.441406 3.832031 7.851562 3.335938 7.144531 3.191406 C 6.476562 3.058594 5.796875 3.25 5.324219 3.699219 C 4.617188 4.371094 4.414062 5.386719 4.804688 6.277344 L 7.761719 13.046875 C 7.515625 12.996094 7.253906 12.972656 6.988281 12.980469 C 6.300781 12.996094 5.683594 13.214844 5.269531 13.585938 C 5.242188 13.601562 5.214844 13.625 5.191406 13.648438 C 4.777344 14.074219 4.570312 14.59375 4.601562 15.144531 C 4.632812 15.835938 5.027344 16.515625 5.738281 17.113281 C 5.742188 17.117188 5.746094 17.121094 5.75 17.121094 L 11.828125 21.90625 C 11.90625 21.96875 12.003906 22 12.097656 22 C 12.160156 22 12.21875 21.988281 12.277344 21.964844 L 20.980469 18.136719 C 21.132812 18.070312 21.234375 17.925781 21.242188 17.761719 L 21.289062 17.003906 C 21.417969 14.96875 21.050781 12.90625 20.230469 11.039062 Z M 16.679688 11.519531 C 16.753906 11.683594 16.914062 11.78125 17.082031 11.78125 C 17.140625 11.78125 17.199219 11.769531 17.257812 11.746094 C 17.480469 11.648438 17.578125 11.390625 17.484375 11.167969 L 16.617188 9.195312 L 16.867188 9.085938 C 17.542969 8.792969 18.320312 9.054688 18.675781 9.699219 C 18.707031 9.761719 18.742188 9.828125 18.769531 9.894531 L 19.429688 11.394531 C 20.191406 13.132812 20.535156 15.050781 20.414062 16.949219 L 20.386719 17.441406 L 12.164062 21.054688 L 6.296875 16.4375 C 5.789062 16.007812 5.496094 15.535156 5.476562 15.101562 C 5.460938 14.820312 5.558594 14.558594 5.761719 14.324219 C 5.777344 14.3125 5.789062 14.300781 5.804688 14.285156 C 6.328125 13.746094 7.636719 13.707031 8.320312 14.210938 L 9.828125 15.660156 C 9.914062 15.742188 10.023438 15.78125 10.132812 15.78125 C 10.246094 15.78125 10.363281 15.734375 10.449219 15.648438 C 10.617188 15.472656 10.609375 15.195312 10.4375 15.027344 L 8.96875 13.617188 L 5.609375 5.925781 C 5.3125 5.257812 5.582031 4.664062 5.929688 4.332031 C 6.191406 4.082031 6.589844 3.976562 6.972656 4.050781 C 7.402344 4.136719 7.753906 4.441406 7.957031 4.90625 L 10.503906 10.695312 C 10.574219 10.859375 10.734375 10.957031 10.90625 10.957031 C 10.964844 10.957031 11.023438 10.945312 11.082031 10.917969 C 11.300781 10.820312 11.402344 10.5625 11.304688 10.339844 L 9.894531 7.132812 L 10.496094 6.867188 C 10.875 6.699219 11.175781 6.671875 11.390625 6.78125 C 11.542969 6.859375 11.667969 7.015625 11.769531 7.246094 L 13.269531 10.65625 C 13.34375 10.824219 13.503906 10.921875 13.671875 10.921875 C 13.730469 10.921875 13.789062 10.90625 13.847656 10.882812 C 14.070312 10.785156 14.171875 10.527344 14.074219 10.304688 L 12.75 7.296875 L 13.550781 6.949219 C 13.554688 6.945312 13.554688 6.945312 13.558594 6.945312 C 13.804688 6.835938 14.078125 6.828125 14.332031 6.925781 C 14.585938 7.023438 14.789062 7.214844 14.898438 7.464844 Z M 16.679688 11.519531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 18.4375 17.859375 C 18.269531 17.859375 18.109375 17.761719 18.035156 17.597656 C 17.9375 17.378906 18.039062 17.117188 18.261719 17.023438 L 18.695312 16.832031 C 18.914062 16.734375 19.175781 16.835938 19.269531 17.058594 C 19.367188 17.277344 19.269531 17.539062 19.046875 17.632812 L 18.613281 17.824219 C 18.554688 17.847656 18.496094 17.859375 18.4375 17.859375 Z M 18.4375 17.859375 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 12.507812 20.472656 C 12.339844 20.472656 12.179688 20.375 12.109375 20.210938 C 12.011719 19.988281 12.113281 19.730469 12.332031 19.632812 L 16.949219 17.605469 C 17.171875 17.507812 17.429688 17.609375 17.527344 17.832031 C 17.625 18.054688 17.523438 18.3125 17.300781 18.410156 L 12.683594 20.433594 C 12.628906 20.460938 12.566406 20.472656 12.507812 20.472656 Z M 12.507812 20.472656 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 5.996094 2.332031 C 5.792969 2.332031 5.609375 2.1875 5.566406 1.980469 L 5.265625 0.527344 C 5.21875 0.289062 5.371094 0.0585938 5.605469 0.0078125 C 5.84375 -0.0390625 6.074219 0.113281 6.125 0.351562 L 6.425781 1.804688 C 6.472656 2.039062 6.320312 2.273438 6.085938 2.320312 C 6.054688 2.328125 6.023438 2.332031 5.996094 2.332031 Z M 5.996094 2.332031 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1.425781 2.261719 C 1.347656 2.261719 1.265625 2.242188 1.195312 2.199219 L 0.890625 2.011719 C 0.6875 1.882812 0.621094 1.613281 0.75 1.40625 C 0.878906 1.203125 1.148438 1.136719 1.355469 1.265625 L 1.65625 1.453125 C 1.863281 1.578125 1.925781 1.851562 1.796875 2.054688 C 1.714844 2.191406 1.570312 2.261719 1.425781 2.261719 Z M 1.425781 2.261719 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 3.824219 3.851562 C 3.742188 3.851562 3.660156 3.828125 3.585938 3.78125 L 2.648438 3.167969 C 2.445312 3.03125 2.390625 2.761719 2.523438 2.558594 C 2.65625 2.355469 2.929688 2.300781 3.132812 2.433594 L 4.066406 3.046875 C 4.269531 3.183594 4.324219 3.453125 4.191406 3.65625 C 4.105469 3.785156 3.96875 3.851562 3.824219 3.851562 Z M 3.824219 3.851562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 1.914062 6.765625 C 1.710938 6.765625 1.527344 6.621094 1.484375 6.414062 C 1.433594 6.179688 1.585938 5.945312 1.824219 5.898438 L 3.277344 5.597656 C 3.515625 5.546875 3.746094 5.699219 3.796875 5.9375 C 3.84375 6.175781 3.691406 6.40625 3.457031 6.457031 L 2 6.757812 C 1.972656 6.761719 1.941406 6.765625 1.914062 6.765625 Z M 1.914062 6.765625 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 3.839844 10.238281 C 3.757812 10.238281 3.675781 10.214844 3.601562 10.167969 C 3.398438 10.035156 3.34375 9.761719 3.476562 9.558594 L 4.292969 8.320312 C 4.425781 8.117188 4.695312 8.0625 4.898438 8.195312 C 5.101562 8.328125 5.15625 8.597656 5.023438 8.800781 L 4.207031 10.042969 C 4.125 10.167969 3.984375 10.238281 3.839844 10.238281 Z M 3.839844 10.238281 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 10.128906 4.960938 C 9.925781 4.960938 9.742188 4.816406 9.699219 4.609375 C 9.652344 4.371094 9.804688 4.140625 10.042969 4.089844 L 11.011719 3.890625 C 11.246094 3.84375 11.480469 3.996094 11.527344 4.230469 C 11.578125 4.46875 11.425781 4.699219 11.1875 4.75 L 10.21875 4.949219 C 10.1875 4.957031 10.160156 4.960938 10.128906 4.960938 Z M 10.128906 4.960938 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 12.855469 4.394531 C 12.652344 4.394531 12.46875 4.253906 12.425781 4.046875 C 12.378906 3.808594 12.53125 3.578125 12.765625 3.527344 L 13.070312 3.464844 C 13.308594 3.417969 13.539062 3.570312 13.589844 3.808594 C 13.636719 4.042969 13.484375 4.277344 13.246094 4.324219 L 12.945312 4.386719 C 12.914062 4.394531 12.886719 4.394531 12.855469 4.394531 Z M 12.855469 4.394531 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.605469 2.789062 C 8.523438 2.789062 8.441406 2.765625 8.367188 2.714844 C 8.164062 2.582031 8.109375 2.3125 8.242188 2.109375 L 9.058594 0.867188 C 9.191406 0.667969 9.460938 0.609375 9.664062 0.742188 C 9.867188 0.875 9.921875 1.148438 9.789062 1.351562 L 8.972656 2.589844 C 8.890625 2.71875 8.75 2.789062 8.605469 2.789062 Z M 8.605469 2.789062 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.8 KiB

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="22" height="22">
<circle r="11" cx="11" cy="11" style="fill:red;stroke:gray;stroke-width:0.1" />
</svg>

After

Width:  |  Height:  |  Size: 320 B

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<rect x="10" y="10" width='80' height='80' fill="#808080"/>
</svg>

After

Width:  |  Height:  |  Size: 347 B

@ -47,9 +47,9 @@ toolbarBottom1 = PAGE_SPIN,SEPARATOR,LAYER,GOTO_FIRST,GOTO_NEXT_ANNOTATED_PAGE,G
[Toolbar Left]
name = Toolbar Left
name[de] = Toolbar Links
toolbarTop1 = SAVE,NEW,OPEN,SEPARATOR, CUT,COPY,PASTE,SEPARATOR, UNDO,REDO,SEPARATOR, PEN,ERASER,HILIGHTER,IMAGE,TEXT,SEPARATOR, DEFAULT_TOOL,SEPARATOR, PAGE_SPIN,SEPARATOR,INSERT_NEW_PAGE,DELETE_CURRENT_PAGE,SEPARATOR,GOTO_BACK,GOTO_NEXT,SEPARATOR,FULLSCREEN
toolbarTop1 = SAVE,NEW,OPEN,SEPARATOR, CUT,COPY,PASTE,SEPARATOR, UNDO,REDO,SEPARATOR, PEN,ERASER,HILIGHTER,IMAGE,TEXT,SEPARATOR, DEFAULT_TOOL,SEPARATOR, PAGE_SPIN,SEPARATOR,INSERT_NEW_PAGE,DELETE_CURRENT_PAGE,SEPARATOR,GOTO_BACK,GOTO_NEXT,SEPARATOR,FULLSCREEN,RECSTOP
toolbarLeft1 = COLOR(0xffff00),COLOR(0xff8000),COLOR(0xff00ff),COLOR(0x00ff00),COLOR(0x00c0ff),COLOR(0x808080),COLOR(0x008000),COLOR(0xff0000),COLOR(0x3333cc),COLOR(0x000000),COLOR_SELECT,SEPARATOR,ZOOM_100,ZOOM_FIT,ZOOM_IN,ZOOM_SLIDER,ZOOM_OUT
toolbarLeft2 = FINE,MEDIUM,THICK, SEPARATOR,ZOOM_100,ZOOM_FIT,ZOOM_OUT,ZOOM_SLIDER,ZOOM_IN,DRAW_CIRCLE,DRAW_RECTANGLE,DRAW_ARROW,RULER,DRAW_RECTANGLE,SEPARATOR,VERTICAL_SPACE,SELECT_REGION,SELECT_RECTANGLE,SELECT_OBJECT
toolbarLeft2 = FINE,MEDIUM,THICK, SEPARATOR,ZOOM_100,ZOOM_FIT,ZOOM_OUT,ZOOM_SLIDER,ZOOM_IN,DRAW_CIRCLE,DRAW_RECTANGLE,DRAW_ARROW,RULER,DRAW_RECTANGLE,SEPARATOR,VERTICAL_SPACE,SELECT_REGION,SELECT_RECTANGLE,SELECT_OBJECT,PLAY_OBJECT
[Toolbar Right]

Loading…
Cancel
Save