Eric Seidel 518ecd24e5 Add support for text styles.
This is a completion of Hans's WIP patch:
https://codereview.chromium.org/1176133002/

Makes it possible for us to style text in fn2 apps.

The title style in the toolbar doesn't look quite right
but as far as I can tell its the same color as the
old typography code produced.  Will need further investigation.

Fixes #213

R=abarth@chromium.org, jackson@google.com

Review URL: https://codereview.chromium.org/1178913003.
2015-06-12 12:28:52 -07:00

91 lines
2.4 KiB
C++

// Copyright 2015 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 "sky/engine/config.h"
#include "sky/engine/core/painting/LayoutRoot.h"
#include "sky/engine/core/dom/Document.h"
#include "sky/engine/core/dom/Element.h"
#include "sky/engine/core/frame/FrameView.h"
#include "sky/engine/core/frame/LocalFrame.h"
#include "sky/engine/core/frame/Settings.h"
#include "sky/engine/core/painting/PaintingTasks.h"
#include "sky/engine/platform/geometry/IntRect.h"
#include "third_party/skia/include/core/SkCanvas.h"
namespace blink {
PassRefPtr<LayoutRoot> LayoutRoot::create()
{
return adoptRef(new LayoutRoot);
}
LayoutRoot::LayoutRoot()
: m_minWidth(0)
, m_maxWidth(0)
, m_minHeight(0)
, m_maxHeight(0)
{
m_settings = Settings::create();
// Using 14px default to match Material Design English Body1:
// http://www.google.com/design/spec/style/typography.html#typography-typeface
m_settings->setDefaultFixedFontSize(14);
m_settings->setDefaultFontSize(14);
m_frameHost = FrameHost::createDummy(m_settings.get());
m_frame = LocalFrame::create(nullptr, m_frameHost.get());
m_frame->createView(IntSize(), Color::white, false);
}
LayoutRoot::~LayoutRoot()
{
if (!m_document->needsAttach())
m_document->detach();
}
Element* LayoutRoot::rootElement() const
{
if (!m_document)
return nullptr;
return m_document->firstElementChild();
}
void LayoutRoot::setRootElement(Element* root)
{
m_document = &root->document();
m_frame->setDocument(m_document.get());
m_document->setFrame(m_frame.get());
m_document->attach();
m_document->setChild(root, ASSERT_NO_EXCEPTION);
m_document->setFrame(nullptr);
m_frame->setDocument(nullptr);
}
void LayoutRoot::layout()
{
m_frame->setDocument(m_document.get());
m_document->setFrame(m_frame.get());
LayoutUnit maxWidth = std::max(m_minWidth, m_maxWidth);
LayoutUnit maxHeight = std::max(m_minHeight, m_maxHeight);
IntSize maxSize(maxWidth, maxHeight);
m_frame->view()->setFrameRect(IntRect(IntPoint(), maxSize));
m_frame->view()->setLayoutSize(maxSize);
m_document->updateLayout();
m_document->setFrame(nullptr);
m_frame->setDocument(nullptr);
}
void LayoutRoot::paint(Canvas* canvas)
{
if (m_document)
rootElement()->paint(canvas);
}
} // namespace blink