From c3ae5dfa1b834a8ac057943fc2d292044fa251a6 Mon Sep 17 00:00:00 2001 From: twanvl Date: Tue, 19 Dec 2006 17:27:38 +0000 Subject: [PATCH] rendering of git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@127 0fc631ac-6414-0410-93d0-97cfa31319b6 --- src/gui/value/text.cpp | 26 -------------------------- src/mse.vcproj | 3 +++ src/render/text/compound.cpp | 32 ++++++++++++++++++++++++++++++++ src/render/text/element.cpp | 9 +++++---- src/render/text/element.hpp | 2 +- src/render/text/viewer.cpp | 2 +- src/render/value/text.cpp | 6 +++++- 7 files changed, 47 insertions(+), 33 deletions(-) create mode 100644 src/render/text/compound.cpp diff --git a/src/gui/value/text.cpp b/src/gui/value/text.cpp index 8fac6e68..3c8f59d8 100644 --- a/src/gui/value/text.cpp +++ b/src/gui/value/text.cpp @@ -235,24 +235,6 @@ void TextValueEditor::draw(RotatedDC& dc) { fixSelection(); showCaret(); } - // DEBUG, TODO: REMOVEME - Rotater r(dc, style().getRotation()); - /*dc.SetPen(*wxRED_PEN); - dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.SetTextForeground(*wxGREEN); - dc.SetFont(wxFont(6,wxFONTFAMILY_SWISS,wxNORMAL,wxNORMAL)); - for (size_t i = 0 ; i < value().value().size() ; i += 10) { - RealRect r = v.charRect(i); - r.width = max(r.width,1.); - dc.DrawRectangle(r); - dc.DrawText(String()<<(int)i, r.position()+RealSize(1,5)); - }*/ - dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetBrush(*wxWHITE_BRUSH); - dc.SetTextForeground(*wxBLUE); - dc.SetFont(wxFont(6,wxFONTFAMILY_SWISS,wxNORMAL,wxNORMAL)); - dc.DrawRectangle(RealRect(style().width-50,style().height-10,50,10)); - dc.DrawText(String::Format(_("%d - %d"),selection_start, selection_end), RealPoint(style().width-50,style().height-10)); } wxCursor rotated_ibeam; @@ -512,14 +494,6 @@ void TextValueEditor::moveSelection(IndexType t, size_t new_end, bool also_move_ v.drawSelection(rdc, style(), selection_start_i, selection_end_i); // } showCaret(); - // TODO; DEBUG!! - Rotater r(rdc, style().getRotation()); - rdc.SetPen(*wxTRANSPARENT_PEN); - rdc.SetBrush(*wxWHITE_BRUSH); - rdc.SetTextForeground(*wxBLUE); - rdc.SetFont(wxFont(6,wxFONTFAMILY_SWISS,wxNORMAL,wxNORMAL)); - rdc.DrawRectangle(RealRect(style().width-50,style().height-10,50,10)); - rdc.DrawText(String::Format(_("%d - %d"),selection_start, selection_end), RealPoint(style().width-50,style().height-10)); } void TextValueEditor::moveSelectionNoRedraw(IndexType t, size_t new_end, bool also_move_start, Movement dir) { diff --git a/src/mse.vcproj b/src/mse.vcproj index c60dd6ee..5d01d080 100644 --- a/src/mse.vcproj +++ b/src/mse.vcproj @@ -2507,6 +2507,9 @@ + + diff --git a/src/render/text/compound.cpp b/src/render/text/compound.cpp new file mode 100644 index 00000000..274e1b64 --- /dev/null +++ b/src/render/text/compound.cpp @@ -0,0 +1,32 @@ +//+----------------------------------------------------------------------------+ +//| Description: Magic Set Editor - Program to make Magic (tm) cards | +//| Copyright: (C) 2001 - 2006 Twan van Laarhoven | +//| License: GNU General Public License 2 or later (see file COPYING) | +//+----------------------------------------------------------------------------+ + +// ----------------------------------------------------------------------------- : Includes + +#include + +// ----------------------------------------------------------------------------- : CompoundTextElement + +void CompoundTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const { + elements.draw(dc, scale, rect, xs, what, start, end); +} +void CompoundTextElement::getCharInfo(RotatedDC& dc, double scale, vector& out) const { + elements.getCharInfo(dc, scale, start, end, out); +} +double CompoundTextElement::minScale() const { + return elements.minScale(); +} + +// ----------------------------------------------------------------------------- : AtomTextElement + +void AtomTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const { + if (what & DRAW_ACTIVE) { + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(Color(210,210,210)); + dc.DrawRectangle(rect); + } + CompoundTextElement::draw(dc, scale, rect, xs, what, start, end); +} diff --git a/src/render/text/element.cpp b/src/render/text/element.cpp index 310ff4df..76ec59df 100644 --- a/src/render/text/element.cpp +++ b/src/render/text/element.cpp @@ -31,12 +31,12 @@ void TextElements::draw(RotatedDC& dc, double scale, const RealRect& rect, const void TextElements::getCharInfo(RotatedDC& dc, double scale, size_t start, size_t end, vector& out) const { FOR_EACH_CONST(e, elements) { // characters before this element, after the previous - while (start + out.size() < e->start) { + while (out.size() < e->start) { out.push_back(CharInfo(RealSize(0,0), BREAK_NO)); } e->getCharInfo(dc, scale, out); } - while (start + out.size() < end) { + while (out.size() < end) { out.push_back(CharInfo(RealSize(0,0), BREAK_NO)); } } @@ -86,13 +86,14 @@ struct TextElementsFromString { shared_ptr e(new ErrorTextElement(text, pos, end)); fromString(e->elements, text, pos, end, style, ctx); pos = skip_tag(text, end); - } else if (is_substr(text, start, _(" e(new AtomTextElement(text, pos, end)); fromString(e->elements, text, pos, end, style, ctx); + te.elements.push_back(e); pos = skip_tag(text, end); -*/ } else { + } else { // ignore other tags } } else { diff --git a/src/render/text/element.hpp b/src/render/text/element.hpp index e971a8ff..a9572d48 100644 --- a/src/render/text/element.hpp +++ b/src/render/text/element.hpp @@ -25,7 +25,7 @@ class SymbolFontRef; enum DrawWhat { DRAW_NOTHING = 0x00 , DRAW_NORMAL = 0x01 // draw normal things, like the text -, DRAW_EDITOR = 0x02 // draw editor stuff, such as borders/lines +, DRAW_BORDERS = 0x02 // draw editor stuff, such as borders/lines , DRAW_ACTIVE = 0x04 // draw active editor stuff, such as hidden separators and atom highlights }; diff --git a/src/render/text/viewer.cpp b/src/render/text/viewer.cpp index c89e62bb..4c41ac74 100644 --- a/src/render/text/viewer.cpp +++ b/src/render/text/viewer.cpp @@ -67,7 +67,7 @@ TextViewer::~TextViewer() {} void TextViewer::draw(RotatedDC& dc, const TextStyle& style, DrawWhat what) { assert(!lines.empty()); Rotater r(dc, style.getRotation()); - // Draw the text line by line + // Draw the text, line by line FOR_EACH(l, lines) { if (l.visible(dc)) { RealRect rect(l.positions.front(), l.top, l.width(), l.line_height); diff --git a/src/render/value/text.cpp b/src/render/value/text.cpp index 2ca7bdd0..14a26a61 100644 --- a/src/render/value/text.cpp +++ b/src/render/value/text.cpp @@ -14,7 +14,11 @@ void TextValueViewer::draw(RotatedDC& dc) { drawFieldBorder(dc); v.prepare(dc, value().value(), style(), viewer.getContext()); - v.draw(dc, style(), DRAW_NORMAL); + v.draw(dc, style(), (DrawWhat)( + DRAW_NORMAL + | (viewer.drawBorders() ? DRAW_BORDERS : 0) + | (viewer.drawEditing() && isCurrent() ? DRAW_ACTIVE : 0) + )); } void TextValueViewer::onValueChange() {