15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_GFX_PANGO_UTIL_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_GFX_PANGO_UTIL_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cairo/cairo.h>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <pango/pango.h>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/i18n/rtl.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
135e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string16.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/gfx_export.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass FontList;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Utility class to ensure that PangoFontDescription is freed.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScopedPangoFontDescription {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ScopedPangoFontDescription(PangoFontDescription* description)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : description_(description) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(description);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  explicit ScopedPangoFontDescription(const std::string& str)
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      : description_(pango_font_description_from_string(str.c_str())) {
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    DCHECK(description_);
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~ScopedPangoFontDescription() {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pango_font_description_free(description_);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PangoFontDescription* get() { return description_; }
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PangoFontDescription* description_;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ScopedPangoFontDescription);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ----------------------------------------------------------------------------
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// All other methods in this file are only to be used within the ui/ directory.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// They are shared with internal skia interfaces.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ----------------------------------------------------------------------------
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Configures |layout| for the passed-in parameters.
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SetUpPangoLayout(
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PangoLayout* layout,
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    const base::string16& text,
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const FontList& font_list,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::i18n::TextDirection text_direction,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int flags);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the size in pixels for the specified |pango_font|.
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint GetPangoFontSizeInPixels(PangoFontDescription* pango_font);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Retrieves the Pango metrics for a Pango font description. Caches the metrics
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and never frees them. The metrics objects are relatively small and very
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// expensive to look up.
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PangoFontMetrics* GetPangoFontMetrics(PangoFontDescription* desc);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gfx
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_GFX_PANGO_UTIL_H_
70