void
QcMapItem::stable_zoom(QPointF position_px, unsigned int new_zoom_level)
{
  if (new_zoom_level == zoom_level())
    return;

  // Fixme: check range
  // Fixme: int
  if (new_zoom_level < 0 or new_zoom_level > 18)
    return;

  m_viewport->stable_zoom(QcVectorDouble(position_px), new_zoom_level);
  emit zoom_levelChanged(new_zoom_level);
}
void
QcMapItem::set_zoom_level(unsigned int new_zoom_level)
{
  // qInfo() << new_zoom_level;

  if (new_zoom_level == zoom_level())
    return;

  // Fixme: check range
  // Fixme: int
  if (new_zoom_level < 0 or new_zoom_level > 18)
    return;

  m_viewport->set_zoom_level(new_zoom_level);
  // update(); // Fixme: signal
  emit zoom_levelChanged(new_zoom_level);
}
double PartitionCamera::zoom_factor() const
{
	return zoom_factor(zoom_level());
}
void
QcMapItem::stable_zoom_by_increment(QPointF position_px, int zoom_increment)
{
  int new_zoom_level = zoom_level() + zoom_increment;
  stable_zoom(position_px, new_zoom_level);
}