Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
95ebc67
Initial plan
Copilot Feb 18, 2026
0eaa1ef
Add ICairoShim interface and CairoShimCairo implementation with Item …
Copilot Feb 18, 2026
74e75b5
Add ICairoShim overloads to Lock and DataOp
Copilot Feb 18, 2026
a16b88e
Add ICairoShim overload declarations to all Item subclasses and Wire
Copilot Feb 18, 2026
54bd730
Add ICairoShim overloads for draw() methods in operation, intOp, and …
Copilot Feb 18, 2026
a6dd439
Add ICairoShim draw implementations to remaining model files
Copilot Feb 18, 2026
47e747f
Complete ICairoShim refactoring - all tasks done
Copilot Feb 18, 2026
10c746a
Make ICairoShim methods const, add Pango support, remove cairoContext
Copilot Feb 18, 2026
407b85c
Fix all draw implementations to use _internalGetCairoContext temporarily
Copilot Feb 18, 2026
fb3b692
Add drawTriangle ICairoShim overload and implement SwitchIcon properly
Copilot Feb 19, 2026
15aa917
Implement drawUserFunction and Ravel::draw with ICairoShim (partial)
Copilot Feb 19, 2026
8a4fee1
Fix compilation errors
highperformancecoder Feb 25, 2026
80a78b4
Merge branch 'master' into copilot/refactor-item-draw-method
highperformancecoder Feb 26, 2026
1d965a1
Merge branch 'copilot/refactor-item-draw-method' of github.com:highpe…
highperformancecoder Feb 26, 2026
a00591e
Merge branch 'master' into copilot/refactor-item-draw-method
highperformancecoder Mar 3, 2026
e68a7af
Merge branch 'master' into copilot/refactor-item-draw-method
highperformancecoder Mar 3, 2026
d90e792
Merge branch 'copilot/refactor-item-draw-method' of github.com:highpe…
highperformancecoder Mar 3, 2026
ea302b7
Update RavelCAPI ref
highperformancecoder Mar 3, 2026
822b28c
Update RavelCAPI ref
highperformancecoder Mar 3, 2026
2db4ba5
Merge branch 'copilot/refactor-item-draw-method' of github.com:highpe…
highperformancecoder Mar 3, 2026
6dfcd1b
Add DrawBinOpShim for ICairoShim support and update drawUserFunction
Copilot Mar 3, 2026
84344b2
Implement GodleyIcon and Group draw methods with ICairoShim
Copilot Mar 3, 2026
af551a2
Add SVG rendering support to ICairoShim interface
Copilot Mar 4, 2026
33ae6ec
Fix SVG rendering API to use SVGRenderer& and RsvgHandle& instead of …
Copilot Mar 4, 2026
2ed5d78
Fix compilation issues.
highperformancecoder Mar 5, 2026
ecfeec6
Update ecolab ref.
highperformancecoder Mar 5, 2026
51f3ba7
Remove explicit instantiation
highperformancecoder Mar 5, 2026
91caf2d
Implement PhillipsStock::draw without _internalGetCairoContext
Copilot Mar 5, 2026
8c8b0c2
Merge branch 'master' into copilot/refactor-item-draw-method
highperformancecoder Mar 23, 2026
e77029b
Add ICairoShim iconDraw overloads for all Operation types
Copilot Mar 23, 2026
3d24bdb
Update reference images
highperformancecoder Mar 29, 2026
d1a4318
Merge branch 'copilot/refactor-item-draw-method' of github.com:highpe…
highperformancecoder Mar 29, 2026
161e8f7
iconDraw refactored
highperformancecoder Apr 21, 2026
ee1710c
Dead code removal
highperformancecoder Apr 21, 2026
8a3f1b6
All items now use ICairoShim interface for the draw method. Only
highperformancecoder Apr 22, 2026
6cdadc8
Merge branch 'master' into copilot/refactor-item-draw-method
highperformancecoder Apr 29, 2026
fad0b2a
Added a newPango method to temporarily reset the pango object. But
highperformancecoder Apr 29, 2026
6505172
Dead code removal.
highperformancecoder Apr 30, 2026
212f1d7
Address code review comments
highperformancecoder May 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ PREFIX=/usr/local
# directory
MODLINK=$(LIBMODS:%=$(ECOLAB_HOME)/lib/%)
MODEL_OBJS=autoLayout.o cairoItems.o canvas.o CSVDialog.o dataOp.o equationDisplay.o godleyIcon.o godleyTable.o godleyTableWindow.o grid.o group.o item.o intOp.o lasso.o lock.o minsky.o operation.o operationRS.o operationRS1.o operationRS2.o phillipsDiagram.o plotWidget.o port.o pubTab.o ravelWrap.o renderNativeWindow.o selection.o sheet.o SVGItem.o switchIcon.o userFunction.o userFunction_units.o variableInstanceList.o variable.o variablePane.o windowInformation.o wire.o
ENGINE_OBJS=clipboard.o databaseIngestor.o derivative.o equationDisplayRender.o equations.o evalGodley.o evalOp.o flowCoef.o \
ENGINE_OBJS=clipboard.o cairoShimCairo.o databaseIngestor.o derivative.o equationDisplayRender.o equations.o evalGodley.o evalOp.o flowCoef.o \
godleyExport.o latexMarkup.o valueId.o variableValue.o node_latex.o node_matlab.o CSVParser.o \
minskyTensorOps.o mdlReader.o saver.o rungeKutta.o
SCHEMA_OBJS=schema3.o schema2.o schema1.o schema0.o schemaHelper.o variableType.o \
Expand Down
1 change: 1 addition & 0 deletions RESTService/RESTMinsky.cc
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,4 @@ namespace minsky

}
}

5 changes: 3 additions & 2 deletions RESTService/typescriptAPI.cc
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ int main()
api.addSubclass<IntOp,Item>();
api.addSubclass<Lock,Item>();
api.addSubclass<OperationBase,Item>();
api.addSubclass<PhillipsFlow,Item>();
api.addSubclass<PhillipsFlow,Wire>();
api.addSubclass<PhillipsStock,Item>();
api.addSubclass<PlotWidget,Item>();
api.addSubclass<Ravel,Item>();
Expand Down Expand Up @@ -317,10 +317,11 @@ int main()
cout << "class classdesc__pack_t {}\n";
cout << "class classdesc__RESTProcess_t {}\n";
cout << "class ecolab__cairo__Surface {}\n";
cout << "class ICairoShim {}\n";
cout<<endl;

// these need to be declared in a specific order
vector<string> exportFirst{"EventInterface","Item","OperationBase","RenderNativeWindow","VariableBase"};
vector<string> exportFirst{"EventInterface","Item","OperationBase","RenderNativeWindow","VariableBase","Wire"};
for (auto& i: exportFirst) exportClass(i,api[i]);

cout << "class minsky__Variable<T> extends VariableBase {}\n";
Expand Down
60 changes: 0 additions & 60 deletions engine/cairoShim.h

This file was deleted.

153 changes: 115 additions & 38 deletions engine/cairoShimCairo.cc
Original file line number Diff line number Diff line change
@@ -1,91 +1,168 @@
#include "cairoShim.h"
#include "cairoShimCairo.h"
#include "minsky_epilogue.h"
#define CAIRO_WIN32_STATIC_BUILD
#include <cairo.h>
#undef CAIRO_WIN32_STATIC_BUILD
#include <pango.h>
#include <librsvg/rsvg.h>

// if not #ifdef protected, you get a deprecated warning, which is
// made fatal by -Werror
#ifndef RSVG_CAIRO_H
#include <librsvg/rsvg-cairo.h>
#endif

using namespace std;

namespace ravel
namespace minsky
{
void CairoShimCairo::moveTo(double x, double y)
CairoShimCairo::CairoShimCairo(cairo_t* c) : cairo(c) {}

CairoShimCairo::~CairoShimCairo() = default;

// Drawing operations
void CairoShimCairo::moveTo(double x, double y) const
{cairo_move_to(cairo,x,y);}

void CairoShimCairo::lineTo(double x, double y)
void CairoShimCairo::lineTo(double x, double y) const
{cairo_line_to(cairo,x,y);}

void CairoShimCairo::relMoveTo(double x, double y)
void CairoShimCairo::relMoveTo(double x, double y) const
{cairo_rel_move_to(cairo,x,y);}

void CairoShimCairo::relLineTo(double x, double y)
void CairoShimCairo::relLineTo(double x, double y) const
{cairo_rel_line_to(cairo,x,y);}

void CairoShimCairo::arc
(double x, double y, double radius, double start, double end)
void CairoShimCairo::arc(double x, double y, double radius, double start, double end) const
{cairo_arc(cairo,x,y,radius,start,end);}

// paths
void CairoShimCairo::newPath()
void CairoShimCairo::curveTo(double x1, double y1, double x2, double y2, double x3, double y3) const
{cairo_curve_to(cairo,x1,y1,x2,y2,x3,y3);}

void CairoShimCairo::rectangle(double x, double y, double width, double height) const
{cairo_rectangle(cairo,x,y,width,height);}

// Path operations
void CairoShimCairo::newPath() const
{cairo_new_path(cairo);}

void CairoShimCairo::closePath()
void CairoShimCairo::newSubPath() const
{cairo_new_sub_path(cairo);}

void CairoShimCairo::closePath() const
{cairo_close_path(cairo);}

void CairoShimCairo::fill()
void CairoShimCairo::getCurrentPoint(double& x, double& y) const
{cairo_get_current_point(cairo, &x, &y);}

// Fill and stroke operations
void CairoShimCairo::fill() const
{cairo_fill(cairo);}

void CairoShimCairo::fillPreserve() const
{cairo_fill_preserve(cairo);}

void CairoShimCairo::clip()
void CairoShimCairo::clip() const
{cairo_clip(cairo);}

void CairoShimCairo::stroke()
void CairoShimCairo::resetClip() const
{cairo_reset_clip(cairo);}

void CairoShimCairo::stroke() const
{cairo_stroke(cairo);}

void CairoShimCairo::strokePreserve()
void CairoShimCairo::strokePreserve() const
{cairo_stroke_preserve(cairo);}

void CairoShimCairo::setLineWidth(double w)
void CairoShimCairo::paint() const
{cairo_paint(cairo);}

// Line properties
void CairoShimCairo::setLineWidth(double w) const
{cairo_set_line_width(cairo, w);}

// sources
void CairoShimCairo::setSourceRGB
(double r, double g, double b)
double CairoShimCairo::getLineWidth() const
{return cairo_get_line_width(cairo);}

void CairoShimCairo::setDash(const double* dashes, int num_dashes, double offset) const
{cairo_set_dash(cairo, dashes, num_dashes, offset);}

void CairoShimCairo::setFillRule(cairo_fill_rule_t fill_rule) const
{cairo_set_fill_rule(cairo, fill_rule);}

// Color operations
void CairoShimCairo::setSourceRGB(double r, double g, double b) const
{cairo_set_source_rgb(cairo,r,g,b);}

void CairoShimCairo::setSourceRGBA
(double r, double g, double b, double a)
void CairoShimCairo::setSourceRGBA(double r, double g, double b, double a) const
{cairo_set_source_rgba(cairo,r,g,b,a);}

// text. Argument is in UTF8 encoding
void CairoShimCairo::showText(const std::string& text)
// Text operations
void CairoShimCairo::showText(const std::string& text) const
{cairo_show_text(cairo,text.c_str());}

void CairoShimCairo::setTextExtents(const std::string& text)
{cairo_text_extents(cairo,text.c_str(),&extents);}
void CairoShimCairo::setFontSize(double size) const
{cairo_set_font_size(cairo, size);}

double CairoShimCairo::textWidth() const
{return extents.width;}
void CairoShimCairo::selectFontFace(const std::string& family, cairo_font_slant_t slant, cairo_font_weight_t weight) const
Comment thread
highperformancecoder marked this conversation as resolved.
{cairo_select_font_face(cairo, family.c_str(), slant, weight);}

double CairoShimCairo::textHeight() const
{return extents.height;}
void CairoShimCairo::textExtents(const std::string& text, cairo_text_extents_t& extents) const
{cairo_text_extents(cairo,text.c_str(),&extents);}

// matrix transformation
void CairoShimCairo::identityMatrix()
// Transformation operations
void CairoShimCairo::identityMatrix() const
{cairo_identity_matrix(cairo);}

void CairoShimCairo::translate(double x, double y)
void CairoShimCairo::translate(double x, double y) const
{cairo_translate(cairo,x,y);}

void CairoShimCairo::scale(double sx, double sy)
void CairoShimCairo::scale(double sx, double sy) const
{cairo_scale(cairo,sx,sy);}

void CairoShimCairo::rotate(double angle)
void CairoShimCairo::rotate(double angle) const
{cairo_rotate(cairo,angle);}

// context manipulation
void CairoShimCairo::save()
void CairoShimCairo::userToDevice(double& x, double& y) const
{cairo_user_to_device(cairo, &x, &y);}

// Context state operations
void CairoShimCairo::save() const
{cairo_save(cairo);}

void CairoShimCairo::restore()
void CairoShimCairo::restore() const
{cairo_restore(cairo);}


// Tolerance
void CairoShimCairo::setTolerance(double tolerance) const
{cairo_set_tolerance(cairo, tolerance);}

// Pango support
ecolab::Pango& CairoShimCairo::pango() const
{
if (!m_pango) newPango();
return *m_pango;
}
ecolab::Pango& CairoShimCairo::newPango() const
{
m_pango.reset(new ecolab::Pango(cairo));
return *m_pango;
}

// SVG rendering support
void CairoShimCairo::renderSVG(const SVGRenderer& svgRenderer, double width, double height) const
{
#ifdef MXE // MXE doesn't currently have a Rust compiler, so librsvg can be no later than 2.40.21
RsvgDimensionData dims;
rsvg_handle_get_dimensions(svgRenderer.svg, &dims);
cairo_scale(cairo, width/dims.width, height/dims.height);
rsvg_handle_render_cairo(svgRenderer.svg, cairo);
#else
GError* err=nullptr;
const RsvgRectangle rect{0,0,width,height};
rsvg_handle_render_document(svgRenderer.svg, cairo, &rect, &err);
if (err)
g_error_free(err);
#endif
}
}
Loading
Loading