/* * Copyright 2013, Stephan Aßmus . * All rights reserved. Distributed under the terms of the MIT License. */ #include "TextView.h" TextView::TextView(const char* name) : BView(name, B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE | B_FRAME_EVENTS) { BFont font; GetFont(&font); ::ParagraphStyle style; style.SetLineSpacing(ceilf(font.Size() * 0.2)); SetParagraphStyle(style); } TextView::~TextView() { } void TextView::Draw(BRect updateRect) { FillRect(updateRect, B_SOLID_LOW); fTextLayout.SetWidth(Bounds().Width()); fTextLayout.Draw(this, B_ORIGIN); } void TextView::AttachedToWindow() { AdoptParentColors(); } void TextView::FrameResized(float width, float height) { fTextLayout.SetWidth(width); } BSize TextView::MinSize() { return BSize(50.0f, 0.0f); } BSize TextView::MaxSize() { return BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED); } BSize TextView::PreferredSize() { return BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED); } bool TextView::HasHeightForWidth() { return true; } void TextView::GetHeightForWidth(float width, float* min, float* max, float* preferred) { ParagraphLayout layout(fTextLayout); layout.SetWidth(width); float height = layout.Height() + 1; if (min != NULL) *min = height; if (max != NULL) *max = height; if (preferred != NULL) *preferred = height; } void TextView::SetText(const BString& text) { fText.Clear(); CharacterStyle regularStyle; fText.Append(TextSpan(text, regularStyle)); fTextLayout.SetParagraph(fText); InvalidateLayout(); Invalidate(); } void TextView::SetParagraphStyle(const ::ParagraphStyle& style) { fText.SetStyle(style); fTextLayout.SetParagraph(fText); InvalidateLayout(); Invalidate(); }