void UnitTracker::_fixupAdjustments( SPUnit const* oldUnit, SPUnit const *newUnit ) { _isUpdating = true; for ( GSList* cur = _adjList; cur; cur = g_slist_next(cur) ) { GtkAdjustment* adj = GTK_ADJUSTMENT(cur->data); gdouble oldVal = gtk_adjustment_get_value(adj); gdouble val = oldVal; if ((oldUnit->base == SP_UNIT_ABSOLUTE || oldUnit->base == SP_UNIT_DEVICE) && (newUnit->base == SP_UNIT_DIMENSIONLESS)) { val = 1.0 / newUnit->unittobase; _priorValues[adj] = sp_units_get_pixels( oldVal, *oldUnit ); } else if ((oldUnit->base == SP_UNIT_DIMENSIONLESS) && (newUnit->base == SP_UNIT_ABSOLUTE || newUnit->base == SP_UNIT_DEVICE)) { if ( _priorValues.find(adj) != _priorValues.end() ) { val = sp_pixels_get_units( _priorValues[adj], *newUnit ); } } else { val = sp_convert_distance_full( oldVal, *oldUnit, *newUnit ); } gtk_adjustment_set_value( adj, val ); } _isUpdating = false; }
void GuidelinePropertiesDialog::_modeChanged() { _mode = !_relative_toggle.get_active(); if (!_mode) { // relative _spin_angle.set_value(0); _spin_button_y.set_value(0); _spin_button_x.set_value(0); } else { // absolute _spin_angle.set_value(_oldangle); 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); } }