NodeView::NodeView(Gtk::Window* window, Ganv::Canvas& canvas, SPtr<machina::client::ClientObject> node, double x, double y) : Ganv::Circle(canvas, "", x, y) , _window(window) , _node(node) , _default_border_color(get_border_color()) , _default_fill_color(get_fill_color()) { set_fit_label(false); set_radius_ems(1.25); signal_event().connect(sigc::mem_fun(this, &NodeView::on_event)); MachinaCanvas* mcanvas = dynamic_cast<MachinaCanvas*>(&canvas); if (is(mcanvas->app()->forge(), URIs::instance().machina_initial)) { set_border_width(4.0); set_is_source(true); const uint8_t alpha[] = { 0xCE, 0xB1, 0 }; set_label((const char*)alpha); } node->signal_property.connect(sigc::mem_fun(this, &NodeView::on_property)); for (const auto& p : node->properties()) { on_property(p.first, p.second); } }
void draw_border(node_t *n, bool focused_node, bool focused_monitor) { if (n == NULL) { return; } uint32_t border_color_pxl = get_border_color(focused_node, focused_monitor); for (node_t *f = first_extrema(n); f != NULL; f = next_leaf(f, n)) { if (f->client->border_width > 0) { window_draw_border(f->id, border_color_pxl); } } }
static HRESULT get_color(uxgtk_theme_t *theme, int part_id, int state_id, int prop_id, GdkRGBA *rgba) { button_theme_t *button_theme = impl_from_uxgtk_theme_t(theme); switch (prop_id) { case TMT_BORDERCOLOR: return get_border_color(button_theme, part_id, state_id, rgba); case TMT_TEXTCOLOR: return get_text_color(button_theme, part_id, state_id, rgba); } FIXME("Unsupported button color %d.\n", prop_id); return E_NOTIMPL; }