diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-10-09 09:10:05 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-10-09 09:10:05 +0000 |
| commit | dcf50d59513395c1752df0f0f6d1840de84eaf01 (patch) | |
| tree | 9bed4db23a616ea6a68b124c70af3efc4fdd9d3f /src | |
| parent | Reduce spacing between entries in Unicode Character dialog. Bump up font-size. (diff) | |
| download | inkscape-dcf50d59513395c1752df0f0f6d1840de84eaf01.tar.gz inkscape-dcf50d59513395c1752df0f0f6d1840de84eaf01.zip | |
Fix split and xray changes not always toggled
Diffstat (limited to 'src')
| -rw-r--r-- | src/desktop.cpp | 33 | ||||
| -rw-r--r-- | src/display/sp-canvas.cpp | 22 |
2 files changed, 27 insertions, 28 deletions
diff --git a/src/desktop.cpp b/src/desktop.cpp index a8533ee3b..76d534f50 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -515,11 +515,17 @@ void SPDesktop::_setDisplayMode(Inkscape::RenderMode mode) { canvas->_rendermode = mode; _display_mode = mode; if (_display_mode == Inkscape::RENDERMODE_OUTLINE) { - _split_canvas = false; + if (_split_canvas) { + toggleSplitMode(); + } + if (_xray) { + toggleXRay(); + } } redrawDesktop(); _widget->setTitle( this->getDocument()->getDocumentName() ); } + void SPDesktop::_setDisplayColorMode(Inkscape::ColorMode mode) { // reload grayscale matrix from prefs if (mode == Inkscape::COLORMODE_GRAYSCALE) { @@ -580,9 +586,6 @@ bool SPDesktop::displayModeToggle() _menu_update.emit(verb->get_code(), setDisplayModeNormal()); } } - if (_display_mode == Inkscape::RENDERMODE_OUTLINE) { - _split_canvas = false; - } return true; } bool SPDesktop::displayColorModeToggle() @@ -1661,11 +1664,7 @@ void SPDesktop::toggleSplitMode() if (this->getToplevel()) { _split_canvas = !_split_canvas; if (_split_canvas && _xray) { - _xray = !_xray; - Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_VIEW_TOGGLE_XRAY); - if (verb) { - _menu_update.emit(verb->get_code(), xrayMode()); - } + toggleXRay(); } SPCanvas *canvas = getCanvas(); canvas->requestFullRedraw(); @@ -1673,6 +1672,11 @@ void SPDesktop::toggleSplitMode() if (verb) { _menu_update.emit(verb->get_code(), splitMode()); } + if (_display_mode == Inkscape::RENDERMODE_OUTLINE) { + if (_split_canvas) { + toggleSplitMode(); + } + } } } @@ -1681,11 +1685,7 @@ void SPDesktop::toggleXRay() if (this->getToplevel()) { _xray = !_xray; if (_split_canvas && _xray) { - _split_canvas = !_split_canvas; - Inkscape::Verb *verb = Inkscape::Verb::get(SP_VERB_VIEW_TOGGLE_SPLIT); - if (verb) { - _menu_update.emit(verb->get_code(), splitMode()); - } + toggleSplitMode(); } SPCanvas *canvas = getCanvas(); canvas->requestFullRedraw(); @@ -1693,6 +1693,11 @@ void SPDesktop::toggleXRay() if (verb) { _menu_update.emit(verb->get_code(), xrayMode()); } + if (_display_mode == Inkscape::RENDERMODE_OUTLINE) { + if (_xray) { + toggleXRay(); + } + } } } diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp index 5014343e0..60415d71d 100644 --- a/src/display/sp-canvas.cpp +++ b/src/display/sp-canvas.cpp @@ -1235,8 +1235,7 @@ void SPCanvas::handle_size_allocate(GtkWidget *widget, GtkAllocation *allocation // Schedule redraw of any newly exposed regions canvas->_split_value = 0.5; canvas->_spliter_control_pos = Geom::Point(); - canvas->dirtyAll(); - canvas->addIdle(); + canvas->requestFullRedraw(); } int SPCanvas::emitEvent(GdkEvent *event) @@ -1606,8 +1605,7 @@ gint SPCanvas::handle_button(GtkWidget *widget, GdkEventButton *event) canvas->_split_vertical = true; } if (spliter_clicked) { - canvas->dirtyAll(); - canvas->addIdle(); + canvas->requestFullRedraw(); } } canvas->_split_control_pressed = false; @@ -1725,7 +1723,7 @@ int SPCanvas::handle_motion(GtkWidget *widget, GdkEventMotion *event) } canvas->set_cursor(widget); - if (canvas->_split_pressed) { + if (canvas->_split_pressed && desktop && desktop->event_context && desktop->splitMode()) { GtkAllocation allocation; canvas->_split_dragging = true; gtk_widget_get_allocation(GTK_WIDGET(canvas), &allocation); @@ -1744,14 +1742,11 @@ int SPCanvas::handle_motion(GtkWidget *widget, GdkEventMotion *event) canvas->_spliter_control_pos = cursor_pos - canvas->_spliter_in_control_pos; } } - canvas->dirtyAll(); - canvas->addIdle(); + canvas->requestFullRedraw(); status = 1; } else { if (desktop && desktop->event_context && desktop->xrayMode()) { - if (canvas->_xray) { - sp_reset_spliter(canvas); - } + sp_reset_spliter(canvas); Geom::Point prev_orig = canvas->_xray_orig; canvas->_xray_orig = desktop->point(true); canvas->_xray_orig *= desktop->current_zoom(); @@ -2435,6 +2430,7 @@ int SPCanvas::paint() to_draw = cairo_region_create_rectangle(&crect); to_draw_outline = cairo_region_create_rectangle(&crect_outline); } + cairo_region_get_extents(_clean_region, &crect); draw = cairo_region_create_rectangle(&crect); cairo_region_subtract(draw, _clean_region); @@ -2775,8 +2771,7 @@ void SPCanvas::setBackgroundColor(guint32 rgba) { } _background = cairo_pattern_create_rgb(new_r, new_g, new_b); _background_is_checkerboard = false; - dirtyAll(); - addIdle(); + requestFullRedraw(); } void SPCanvas::setBackgroundCheckerboard(guint32 rgba) @@ -2787,8 +2782,7 @@ void SPCanvas::setBackgroundCheckerboard(guint32 rgba) } _background = ink_cairo_pattern_create_checkerboard(rgba); _background_is_checkerboard = true; - dirtyAll(); - addIdle(); + requestFullRedraw(); } /** |
