/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/*
 *  Copyright © 2003 Christian Persch
 *
 *  This file is part of Epiphany.
 *
 *  Epiphany is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  Epiphany is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with Epiphany.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "config.h"
#include "ephy-zoom.h"

#include <math.h>

int
ephy_zoom_get_zoom_level_index (float level)
{
  guint i;
  float previous, current, mean;

  previous = zoom_levels[0].level;

  for (i = 1; i < n_zoom_levels; i++) {
    current = zoom_levels[i].level;
    mean = sqrt (previous * current);

    if (level <= mean) return i - 1;

    previous = current;
  }

  return n_zoom_levels - 1;
}


float
ephy_zoom_get_changed_zoom_level (float level, int steps)
{
  int index;

  index = ephy_zoom_get_zoom_level_index (level);
  return zoom_levels[CLAMP (index + steps, 0, (int)n_zoom_levels - 1)].level;
}

float
ephy_zoom_get_nearest_zoom_level (float level)
{
  return ephy_zoom_get_changed_zoom_level (level, 0);
}

const char *
ephy_zoom_get_zoom_level_name (float level)
{
  unsigned int i;

  for (i = 0; i < n_zoom_levels; i++) {
    if (zoom_levels[i].level == level)
      return zoom_levels[i].name;
  }

  return "";
}
