diff --git a/src/control/Actions.h b/src/control/Actions.h index d22a7183..91097272 100644 --- a/src/control/Actions.h +++ b/src/control/Actions.h @@ -118,6 +118,8 @@ enum ActionType ACTION_TOOL_HILIGHTER_FILL, ACTION_TOOL_HILIGHTER_FILL_TRANSPARENCY, + ACTION_TOOL_FILL, + ACTION_ROTATION_SNAPPING, ACTION_GRID_SNAPPING, @@ -182,6 +184,8 @@ enum ActionGroup GROUP_SNAPPING, GROUP_GRID_SNAPPING, + + GROUP_FILL, }; class ActionHandler; diff --git a/src/control/Control.cpp b/src/control/Control.cpp index d8467e67..7f526f7b 100644 --- a/src/control/Control.cpp +++ b/src/control/Control.cpp @@ -661,6 +661,9 @@ void Control::actionPerformed(ActionType type, ActionGroup group, GdkEvent* even selectDefaultTool(); } break; + case ACTION_TOOL_FILL: + setFill(enabled); + break; case ACTION_SIZE_VERY_THIN: if (enabled) @@ -1646,6 +1649,12 @@ void Control::toolChanged() fireEnableAction(ACTION_SIZE_VERY_THICK, enableSize); fireEnableAction(ACTION_SIZE_VERY_THIN, enableSize); + bool enableFill = toolHandler->hasCapability(TOOL_CAP_FILL); + + fireEnableAction(ACTION_TOOL_FILL, enableFill); + + + if (enableSize) { toolSizeChanged(); @@ -1802,6 +1811,20 @@ void Control::toolSizeChanged() } } +void Control::toolFillChanged() +{ + XOJ_CHECK_TYPE(Control); + + if (toolHandler->getFill()) + { + fireActionSelected(GROUP_FILL, ACTION_TOOL_FILL); + } + else + { + fireActionSelected(GROUP_FILL, ACTION_NONE); + } +} + /** * Select the color for the tool * @@ -2887,6 +2910,22 @@ void Control::setCopyPasteEnabled(bool enabled) this->clipboardHandler->setCopyPasteEnabled(enabled); } +void Control::setFill(bool fill) +{ + XOJ_CHECK_TYPE(Control); + + if (toolHandler->getToolType() == TOOL_PEN) + { + fireActionSelected(GROUP_PEN_FILL, fill ? ACTION_TOOL_PEN_FILL : ACTION_NONE); + this->toolHandler->setPenFillEnabled(fill, false); + } + else if (toolHandler->getToolType() == TOOL_HILIGHTER) + { + fireActionSelected(GROUP_HILIGHTER_FILL, fill ? ACTION_TOOL_HILIGHTER_FILL : ACTION_NONE); + this->toolHandler->setHilighterFillEnabled(fill, false); + } +} + void Control::setToolSize(ToolSize size) { XOJ_CHECK_TYPE(Control); diff --git a/src/control/Control.h b/src/control/Control.h index 9d5d7465..eb2863c8 100644 --- a/src/control/Control.h +++ b/src/control/Control.h @@ -108,6 +108,7 @@ public: virtual void setCustomColorSelected(); virtual void toolChanged(); virtual void toolSizeChanged(); + virtual void toolFillChanged(); void selectTool(ToolType type); void selectDefaultTool(); @@ -177,6 +178,8 @@ public: void setToolSize(ToolSize size); + void setFill(bool fill); + TextEditor* getTextEditor(); GladeSearchpath* getGladeSearchPath(); diff --git a/src/control/ToolHandler.cpp b/src/control/ToolHandler.cpp index dbd6d236..00bea8b9 100644 --- a/src/control/ToolHandler.cpp +++ b/src/control/ToolHandler.cpp @@ -277,18 +277,16 @@ void ToolHandler::setHilighterSize(ToolSize size) } } -void ToolHandler::setPenFillEnabled(bool fill) +void ToolHandler::setPenFillEnabled(bool fill, bool fireEvent) { XOJ_CHECK_TYPE(ToolHandler); this->tools[TOOL_PEN - TOOL_PEN]->fill = fill; - // TODO: Currently no toolbar event to send, but if there is a toolbar, here the event should be sent - // Ticket #598 -// if (this->current->type == TOOL_PEN) -// { -// this->listener->toolSizeChanged(); -// } + if (this->current->type == TOOL_PEN && fireEvent) + { + this->listener->toolFillChanged(); + } } bool ToolHandler::getPenFillEnabled() @@ -312,18 +310,16 @@ int ToolHandler::getPenFill() return this->tools[TOOL_PEN - TOOL_PEN]->fillAlpha; } -void ToolHandler::setHilighterFillEnabled(bool fill) +void ToolHandler::setHilighterFillEnabled(bool fill, bool fireEvent) { XOJ_CHECK_TYPE(ToolHandler); this->tools[TOOL_HILIGHTER - TOOL_PEN]->fill = fill; - // TODO: Currently no toolbar event to send, but if there is a toolbar, here the event should be sent - // Ticket #598 -// if (this->current->type == TOOL_HILIGHTER) -// { -// this->listener->toolSizeChanged(); -// } + if (this->current->type == TOOL_HILIGHTER && fireEvent) + { + this->listener->toolFillChanged(); + } } bool ToolHandler::getHilighterFillEnabled() diff --git a/src/control/ToolHandler.h b/src/control/ToolHandler.h index 16fa147f..6f7a19f8 100644 --- a/src/control/ToolHandler.h +++ b/src/control/ToolHandler.h @@ -25,6 +25,7 @@ public: virtual void toolColorChanged(bool userSelection) = 0; virtual void setCustomColorSelected() = 0; virtual void toolSizeChanged() = 0; + virtual void toolFillChanged() = 0; virtual void toolChanged() = 0; virtual ~ToolListener(); @@ -71,12 +72,12 @@ public: void setEraserSize(ToolSize size); void setHilighterSize(ToolSize size); - void setPenFillEnabled(bool fill); + void setPenFillEnabled(bool fill, bool fireEvent = true); bool getPenFillEnabled(); void setPenFill(int alpha); int getPenFill(); - void setHilighterFillEnabled(bool fill); + void setHilighterFillEnabled(bool fill, bool fireEvent = true); bool getHilighterFillEnabled(); void setHilighterFill(int alpha); int getHilighterFill(); diff --git a/src/gui/toolbarMenubar/ToolMenuHandler.cpp b/src/gui/toolbarMenubar/ToolMenuHandler.cpp index 317f8bce..01e00ead 100644 --- a/src/gui/toolbarMenubar/ToolMenuHandler.cpp +++ b/src/gui/toolbarMenubar/ToolMenuHandler.cpp @@ -441,6 +441,9 @@ void ToolMenuHandler::initToolItems() addToolItem(new ToolButton(listener, gui, "DEFAULT_TOOL", ACTION_TOOL_DEFAULT, GROUP_NOGROUP, false, "default.svg", _("Default Tool"), gui->get("menuToolsDefault"))); + addToolItem(new ToolButton(listener, gui, "TOOL_FILL", ACTION_TOOL_FILL, GROUP_FILL, false, + "fill.svg", _("Fill"))); + fontButton = new FontButton(listener, gui, "SELECT_FONT", ACTION_FONT_BUTTON_CHANGED, _("Select Font")); addToolItem(fontButton); diff --git a/ui/pixmaps/fill.svg b/ui/pixmaps/fill.svg new file mode 100644 index 00000000..5ab4748f --- /dev/null +++ b/ui/pixmaps/fill.svg @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/ui/toolbar.ini b/ui/toolbar.ini index e0985386..38035c0a 100755 --- a/ui/toolbar.ini +++ b/ui/toolbar.ini @@ -35,7 +35,7 @@ name = Portrait # Translated names name[de] = Hochformat toolbarTop1 = SAVE,NEW,OPEN,SEPARATOR, CUT,COPY,PASTE,SEPARATOR, UNDO,REDO,SEPARATOR, GOTO_FIRST,GOTO_BACK,GOTO_NEXT_ANNOTATED_PAGE,GOTO_NEXT,GOTO_LAST,INSERT_NEW_PAGE,DELETE_CURRENT_PAGE,SEPARATOR ,FULLSCREEN, SEPARATOR, SELECT_FONT -toolbarTop2 = PEN,ERASER,HILIGHTER,IMAGE,TEXT,DRAW,SEPARATOR, SELECT,VERTICAL_SPACE,HAND,SEPARATOR, DEFAULT_TOOL,SEPARATOR, FINE,MEDIUM,THICK,SEPARATOR,COLOR(0x000000),COLOR(0x008000),COLOR(0x00c0ff),COLOR(0x00ff00),COLOR(0x3333cc),COLOR(0x808080),COLOR(0xff0000),COLOR(0xff00ff),COLOR(0xff8000),COLOR(0xffff00),COLOR(0xffffff),COLOR_SELECT +toolbarTop2 = PEN,ERASER,HILIGHTER,IMAGE,TEXT,DRAW,SEPARATOR, SELECT,VERTICAL_SPACE,HAND,SEPARATOR, DEFAULT_TOOL,SEPARATOR, FINE,MEDIUM,THICK,SEPARATOR,TOOL_FILL,SEPARATOR,COLOR(0x000000),COLOR(0x008000),COLOR(0x00c0ff),COLOR(0x00ff00),COLOR(0x3333cc),COLOR(0x808080),COLOR(0xff0000),COLOR(0xff00ff),COLOR(0xff8000),COLOR(0xffff00),COLOR(0xffffff),COLOR_SELECT toolbarBottom1 = PAGE_SPIN,SEPARATOR,LAYER, SPACER, TWO_PAGES,ZOOM_100,ZOOM_FIT,ZOOM_OUT,ZOOM_SLIDER,ZOOM_IN [Xournal++]