// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/base/l10n/l10n_font_util.h"

#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/font.h"

namespace ui {

int GetLocalizedContentsWidthForFont(int col_resource_id,
                                     const gfx::Font& font) {
  double chars = 0;
  base::StringToDouble(l10n_util::GetStringUTF8(col_resource_id), &chars);
  int width = font.GetExpectedTextWidth(static_cast<int>(chars));
  DCHECK_GT(width, 0);
  return width;
}

int GetLocalizedContentsHeightForFont(int row_resource_id,
                                      const gfx::Font& font) {
  double lines = 0;
  base::StringToDouble(l10n_util::GetStringUTF8(row_resource_id), &lines);
  int height = static_cast<int>(font.GetHeight() * lines);
  DCHECK_GT(height, 0);
  return height;
}

gfx::Size GetLocalizedContentsSizeForFont(int col_resource_id,
                                          int row_resource_id,
                                          const gfx::Font& font) {
  return gfx::Size(GetLocalizedContentsWidthForFont(col_resource_id, font),
                   GetLocalizedContentsHeightForFont(row_resource_id, font));
}

}  // namespace ui
