diff --git a/libinterp/corefcn/graphics.cc b/libinterp/corefcn/graphics.cc --- a/libinterp/corefcn/graphics.cc +++ b/libinterp/corefcn/graphics.cc @@ -5068,18 +5068,29 @@ axes::properties::set_defaults (base_gra { delete_children (true); + xlabel.invalidate (); + ylabel.invalidate (); + zlabel.invalidate (); + title.invalidate (); + xlabel = gh_manager::make_graphics_handle ("text", __myhandle__, - false, false); + false, false, false); ylabel = gh_manager::make_graphics_handle ("text", __myhandle__, - false, false); + false, false, false); zlabel = gh_manager::make_graphics_handle ("text", __myhandle__, - false, false); + false, false, false); title = gh_manager::make_graphics_handle ("text", __myhandle__, - false, false); + false, false, false); + adopt (xlabel.handle_value ()); adopt (ylabel.handle_value ()); adopt (zlabel.handle_value ()); adopt (title.handle_value ()); + + update_xlabel_position (); + update_ylabel_position (); + update_zlabel_position (); + update_title_position (); } else { @@ -5774,9 +5785,15 @@ axes::properties::update_xlabel_position if (updating_xlabel_position) return; + graphics_handle gh = get_xlabel (); + + graphics_object obj = gh_manager::get_object (get_xlabel ()); + + if (! obj.valid_object ()) + return; + text::properties& xlabel_props - = reinterpret_cast - (gh_manager::get_object (get_xlabel ()).get_properties ()); + = reinterpret_cast (obj.get_properties ()); bool is_empty = xlabel_props.get_string ().is_empty (); @@ -5868,9 +5885,13 @@ axes::properties::update_ylabel_position if (updating_ylabel_position) return; + graphics_object obj = gh_manager::get_object (get_ylabel ()); + + if (! obj.valid_object ()) + return; + text::properties& ylabel_props - = reinterpret_cast - (gh_manager::get_object (get_ylabel ()).get_properties ()); + = reinterpret_cast (obj.get_properties ()); bool is_empty = ylabel_props.get_string ().is_empty (); @@ -5971,9 +5992,13 @@ axes::properties::update_zlabel_position if (updating_zlabel_position) return; + graphics_object obj = gh_manager::get_object (get_zlabel ()); + + if (! obj.valid_object ()) + return; + text::properties& zlabel_props - = reinterpret_cast - (gh_manager::get_object (get_zlabel ()).get_properties ()); + = reinterpret_cast (obj.get_properties ()); bool camAuto = cameraupvectormode_is ("auto"); bool is_empty = zlabel_props.get_string ().is_empty (); @@ -6087,9 +6112,13 @@ axes::properties::update_title_position if (updating_title_position) return; + graphics_object obj = gh_manager::get_object (get_title ()); + + if (! obj.valid_object ()) + return; + text::properties& title_props - = reinterpret_cast - (gh_manager::get_object (get_title ()).get_properties ()); + = reinterpret_cast (obj.get_properties ()); unwind_protect frame; frame.protect_var (updating_title_position); @@ -9097,6 +9126,10 @@ gh_manager::do_make_graphics_handle (con graphics_object obj (go); handle_map[h] = obj; + + // Now safe to do this because the handle is valid... + go->override_defaults (*go); + if (do_createfcn) go->get_properties ().execute_createfcn (); diff --git a/libinterp/corefcn/graphics.in.h b/libinterp/corefcn/graphics.in.h --- a/libinterp/corefcn/graphics.in.h +++ b/libinterp/corefcn/graphics.in.h @@ -1577,6 +1577,8 @@ public: return *this; } + void invalidate (void) { current_val = octave_NaN; } + base_property* clone (void) const { return new handle_property (*this); } protected: @@ -3536,7 +3538,7 @@ public: figure (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p), default_properties () { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~figure (void) { } @@ -4290,7 +4292,7 @@ public: : base_graphics_object (), xproperties (mh, p), default_properties () { xproperties.update_transform (); - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~axes (void) { } @@ -4441,7 +4443,7 @@ public: line (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p) { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~line (void) { } @@ -4617,7 +4619,7 @@ public: : base_graphics_object (), xproperties (mh, p) { xproperties.set_clipping ("off"); - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~text (void) { } @@ -4825,7 +4827,7 @@ public: image (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p) { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); xproperties.initialize_data (); } @@ -5016,7 +5018,7 @@ public: patch (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p) { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~patch (void) { } @@ -5180,7 +5182,7 @@ public: surface (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p) { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~surface (void) { } @@ -5260,7 +5262,7 @@ public: hggroup (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p) { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~hggroup (void) { } @@ -5334,7 +5336,7 @@ public: uimenu (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p) { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~uimenu (void) { } @@ -5389,7 +5391,7 @@ public: uicontextmenu (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p) { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~uicontextmenu (void) { } @@ -5490,7 +5492,7 @@ public: uicontrol (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p) { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~uicontrol (void) { } @@ -5565,7 +5567,7 @@ public: uipanel (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p) { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~uipanel (void) { } @@ -5613,7 +5615,7 @@ public: uitoolbar (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p), default_properties () { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~uitoolbar (void) { } @@ -5724,7 +5726,7 @@ public: uipushtool (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p) { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~uipushtool (void) { } @@ -5785,7 +5787,7 @@ public: uitoggletool (const graphics_handle& mh, const graphics_handle& p) : base_graphics_object (), xproperties (mh, p) { - xproperties.override_defaults (*this); + // xproperties.override_defaults (*this); } ~uitoggletool (void) { }