Commit 6d7b23e7 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

wire up the root data context

parent c976d909
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -100,7 +100,14 @@ ReturnCode document_load(
    const auto& elem_config = plist[i].next.get();

    ElementRef elem;
    if (auto rc = buildElement(*doc, elem_name, *elem_config, &elem); !rc.isSuccess()) {
    auto rc = buildElement(
        elem_name,
        *elem_config,
        doc->data,
        *doc,
        &elem);

    if (!rc) {
      return rc;
    }

+2 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#pragma once
#include "utils/return_code.h"
#include "common/color_scheme.h"
#include "common/data_frame.h"
#include "graphics/measure.h"
#include "graphics/color.h"
#include "graphics/text.h"
@@ -50,6 +51,7 @@ struct Document {
  FontInfo font_sans;
  FontInfo font_mono;
  std::vector<ElementRef> roots;
  DataContext data;
  double dpi;
  Measure font_size;
};
+6 −1
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ namespace plotfx {
struct Layer;
struct Rectangle;
struct Document;
struct DataContext;

using plist::PropertyList;

@@ -48,7 +49,11 @@ template <typename T>
using ElementDrawAsFn = std::function<ReturnCode (const T&, const Rectangle&, Layer*)>;

template <typename T>
using ElementConfigureAsFn = std::function<ReturnCode (const plist::PropertyList&, const Document&, T*)>;
using ElementConfigureAsFn = std::function<ReturnCode (
    const plist::PropertyList&,
    const DataContext&,
    const Document&,
    T*)>;

struct Element {
  ElementDrawFn draw;
+4 −3
Original line number Diff line number Diff line
@@ -40,16 +40,17 @@ static std::unordered_map<std::string, ElementBuilder> elems = {
};

ReturnCode buildElement(
    const Document& doc,
    const std::string& name,
    const PropertyList& plist,
    const plist::PropertyList& plist,
    const DataContext& ctx,
    const Document& doc,
    ElementRef* elem) {
  const auto& elem_entry = elems.find(name);
  if (elem_entry == elems.end()) {
    return ReturnCode::errorf("NOTFOUND", "no such element: $0", name);
  }

  return elem_entry->second(doc, plist, elem);
  return elem_entry->second(plist, ctx, doc, elem);
}

} // namespace plotfx
+7 −2
Original line number Diff line number Diff line
@@ -34,7 +34,11 @@
namespace plotfx {
struct Document;

using ElementBuilder = std::function<ReturnCode (const Document&, const plist::PropertyList&, ElementRef* elem)>;
using ElementBuilder = std::function<ReturnCode (
    const plist::PropertyList&,
    const DataContext&,
    const Document&,
    ElementRef* elem)>;

template <typename T>
ElementBuilder elem_builder(
@@ -42,9 +46,10 @@ ElementBuilder elem_builder(
    ElementDrawAsFn<T> draw_fn);

ReturnCode buildElement(
    const Document& doc,
    const std::string& name,
    const plist::PropertyList& plist,
    const DataContext& ctx,
    const Document& doc,
    ElementRef* elem);

} // namespace plotfx
Loading