#include "grob.h" #include "pad.h" #include "exc.H" #include "frame.h" namespace blop { using namespace std; length &grob::default_x_unit_() { static length l = CM; return l; } length &grob::default_y_unit_() { static length l = CM; return l; } bool grob::default_use_parent_x_unit_ = true; bool grob::default_use_parent_y_unit_ = true; void grob::default_x_unit(length l) {default_x_unit_() = l; default_use_parent_x_unit_ = false; } void grob::default_y_unit(length l) {default_y_unit_() = l; default_use_parent_y_unit_ = false; } void grob::default_unit(length l) { default_x_unit(l); default_y_unit(l); } void grob::default_x_unit(int) { default_use_parent_x_unit_ = true; } void grob::default_y_unit(int) { default_use_parent_y_unit_ = true; } void grob::default_unit(int) { default_x_unit(use_parent); default_y_unit(use_parent); } length grob::x_unit() { return !x_unit_; } grob &grob::x_unit(length x) { x_unit_ = x; return *this; } grob &grob::x_unit(int) { x_unit_ = !parent_cwidth_; return *this; } length grob::y_unit() { return !y_unit_; } grob &grob::y_unit(length x) { y_unit_ = x; return *this; } grob &grob::y_unit(int) { y_unit_ = !parent_cheight_; return *this; } grob &grob::unit(length x) { x_unit(x); y_unit(x); return *this; } grob &grob::unit(int) { x_unit(use_parent); y_unit(use_parent); return *this; } grob::grob(): parent_(0), autodel_(false), print_me_(2), layer_("default") { modified_ = true; parent_cwidth_ = ZERO; parent_cheight_ = ZERO; if(default_use_parent_x_unit_) x_unit_ = !parent_cwidth_; else x_unit_ = default_x_unit_(); if(default_use_parent_y_unit_) y_unit_ = !parent_cheight_; else y_unit_ = default_y_unit_(); } void grob::print_hierarchy(int level) { for(int i=0; i<level*4; ++i) cout<<" "; cout<<name()<<endl; } bool grob::parent(container *p) { if(p == 0) { parent_cwidth_ = ZERO; parent_cheight_ = ZERO; return false; } parent_ = p; parent_cwidth_ = !parent_->cwidth(); parent_cheight_ = !parent_->cheight(); return true; } grob::~grob() { container::remove_from_all(this); } }