mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
116 lines
3.4 KiB
C++
116 lines
3.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 "flutter/lib/ui/text/paragraph.h"
|
|
|
|
#include "flutter/common/settings.h"
|
|
#include "flutter/common/threads.h"
|
|
#include "flutter/sky/engine/core/rendering/PaintInfo.h"
|
|
#include "flutter/sky/engine/core/rendering/RenderParagraph.h"
|
|
#include "flutter/sky/engine/core/rendering/RenderText.h"
|
|
#include "flutter/sky/engine/core/rendering/style/RenderStyle.h"
|
|
#include "flutter/sky/engine/platform/fonts/FontCache.h"
|
|
#include "flutter/sky/engine/platform/graphics/GraphicsContext.h"
|
|
#include "flutter/sky/engine/platform/text/TextBoundaries.h"
|
|
#include "flutter/sky/engine/wtf/PassOwnPtr.h"
|
|
#include "lib/fxl/logging.h"
|
|
#include "lib/fxl/tasks/task_runner.h"
|
|
#include "lib/tonic/converter/dart_converter.h"
|
|
#include "lib/tonic/dart_args.h"
|
|
#include "lib/tonic/dart_binding_macros.h"
|
|
#include "lib/tonic/dart_library_natives.h"
|
|
|
|
using tonic::ToDart;
|
|
|
|
namespace blink {
|
|
|
|
IMPLEMENT_WRAPPERTYPEINFO(ui, Paragraph);
|
|
|
|
#define FOR_EACH_BINDING(V) \
|
|
V(Paragraph, width) \
|
|
V(Paragraph, height) \
|
|
V(Paragraph, minIntrinsicWidth) \
|
|
V(Paragraph, maxIntrinsicWidth) \
|
|
V(Paragraph, alphabeticBaseline) \
|
|
V(Paragraph, ideographicBaseline) \
|
|
V(Paragraph, didExceedMaxLines) \
|
|
V(Paragraph, layout) \
|
|
V(Paragraph, paint) \
|
|
V(Paragraph, getWordBoundary) \
|
|
V(Paragraph, getRectsForRange) \
|
|
V(Paragraph, getPositionForOffset)
|
|
|
|
DART_BIND_ALL(Paragraph, FOR_EACH_BINDING)
|
|
|
|
Paragraph::Paragraph(PassOwnPtr<RenderView> renderView)
|
|
: m_paragraphImpl(std::make_unique<ParagraphImplBlink>(renderView)) {}
|
|
|
|
Paragraph::Paragraph(std::unique_ptr<txt::Paragraph> paragraph)
|
|
: m_paragraphImpl(
|
|
std::make_unique<ParagraphImplTxt>(std::move(paragraph))) {}
|
|
|
|
Paragraph::~Paragraph() {
|
|
if (m_renderView) {
|
|
RenderView* renderView = m_renderView.leakPtr();
|
|
Threads::UI()->PostTask([renderView]() { renderView->destroy(); });
|
|
}
|
|
}
|
|
|
|
size_t Paragraph::GetAllocationSize() {
|
|
// We don't have an accurate accounting of the paragraph's memory consumption,
|
|
// so return a fixed size to indicate that its impact is more than the size
|
|
// of the Paragraph class.
|
|
return 2000;
|
|
}
|
|
|
|
double Paragraph::width() {
|
|
return m_paragraphImpl->width();
|
|
}
|
|
|
|
double Paragraph::height() {
|
|
return m_paragraphImpl->height();
|
|
}
|
|
|
|
double Paragraph::minIntrinsicWidth() {
|
|
return m_paragraphImpl->minIntrinsicWidth();
|
|
}
|
|
|
|
double Paragraph::maxIntrinsicWidth() {
|
|
return m_paragraphImpl->maxIntrinsicWidth();
|
|
}
|
|
|
|
double Paragraph::alphabeticBaseline() {
|
|
return m_paragraphImpl->alphabeticBaseline();
|
|
}
|
|
|
|
double Paragraph::ideographicBaseline() {
|
|
return m_paragraphImpl->ideographicBaseline();
|
|
}
|
|
|
|
bool Paragraph::didExceedMaxLines() {
|
|
return m_paragraphImpl->didExceedMaxLines();
|
|
}
|
|
|
|
void Paragraph::layout(double width) {
|
|
m_paragraphImpl->layout(width);
|
|
}
|
|
|
|
void Paragraph::paint(Canvas* canvas, double x, double y) {
|
|
m_paragraphImpl->paint(canvas, x, y);
|
|
}
|
|
|
|
std::vector<TextBox> Paragraph::getRectsForRange(unsigned start, unsigned end) {
|
|
return m_paragraphImpl->getRectsForRange(start, end);
|
|
}
|
|
|
|
Dart_Handle Paragraph::getPositionForOffset(double dx, double dy) {
|
|
return m_paragraphImpl->getPositionForOffset(dx, dy);
|
|
}
|
|
|
|
Dart_Handle Paragraph::getWordBoundary(unsigned offset) {
|
|
return m_paragraphImpl->getWordBoundary(offset);
|
|
}
|
|
|
|
} // namespace blink
|