Bläddra i källkod

Fixed ScrollView position not being correctly applied after deserialization.

Lasse Öörni 13 år sedan
förälder
incheckning
59ad97a04b
3 ändrade filer med 19 tillägg och 3 borttagningar
  1. 3 2
      Engine/UI/DropDownList.cpp
  2. 11 1
      Engine/UI/ScrollView.cpp
  3. 5 0
      Engine/UI/ScrollView.h

+ 3 - 2
Engine/UI/DropDownList.cpp

@@ -37,7 +37,8 @@ OBJECTTYPESTATIC(DropDownList);
 
 
 DropDownList::DropDownList(Context* context) :
 DropDownList::DropDownList(Context* context) :
     Menu(context),
     Menu(context),
-    resizePopup_(false)
+    resizePopup_(false),
+    selectionAttr_(0)
 {
 {
     Window* window = new Window(context_);
     Window* window = new Window(context_);
     window->SetInternal(true);
     window->SetInternal(true);
@@ -64,7 +65,7 @@ void DropDownList::RegisterObject(Context* context)
     context->RegisterFactory<DropDownList>();
     context->RegisterFactory<DropDownList>();
     
     
     COPY_BASE_ATTRIBUTES(DropDownList, Menu);
     COPY_BASE_ATTRIBUTES(DropDownList, Menu);
-    ACCESSOR_ATTRIBUTE(DropDownList, VAR_INT, "Selection", GetSelection, SetSelectionAttr, unsigned, M_MAX_UNSIGNED, AM_FILE);
+    ACCESSOR_ATTRIBUTE(DropDownList, VAR_INT, "Selection", GetSelection, SetSelectionAttr, unsigned, 0, AM_FILE);
     ACCESSOR_ATTRIBUTE(DropDownList, VAR_BOOL, "Resize Popup", GetResizePopup, SetResizePopup, bool, false, AM_FILE);
     ACCESSOR_ATTRIBUTE(DropDownList, VAR_BOOL, "Resize Popup", GetResizePopup, SetResizePopup, bool, false, AM_FILE);
 }
 }
 
 

+ 11 - 1
Engine/UI/ScrollView.cpp

@@ -42,6 +42,7 @@ ScrollView::ScrollView(Context* context) :
     UIElement(context),
     UIElement(context),
     viewPosition_(IntVector2::ZERO),
     viewPosition_(IntVector2::ZERO),
     viewSize_(IntVector2::ZERO),
     viewSize_(IntVector2::ZERO),
+    viewPositionAttr_(IntVector2::ZERO),
     pageStep_(1.0f)
     pageStep_(1.0f)
 {
 {
     clipChildren_ = true;
     clipChildren_ = true;
@@ -75,7 +76,7 @@ void ScrollView::RegisterObject(Context* context)
 {
 {
     context->RegisterFactory<ScrollView>();
     context->RegisterFactory<ScrollView>();
     
     
-    REF_ACCESSOR_ATTRIBUTE(ScrollView, VAR_INTVECTOR2, "View Position", GetViewPosition, SetViewPosition, IntVector2, IntVector2::ZERO, AM_FILE);
+    REF_ACCESSOR_ATTRIBUTE(ScrollView, VAR_INTVECTOR2, "View Position", GetViewPosition, SetViewPositionAttr, IntVector2, IntVector2::ZERO, AM_FILE);
     ACCESSOR_ATTRIBUTE(ScrollView, VAR_FLOAT, "Scroll Step", GetScrollStep, SetScrollStep, float, 0.1f, AM_FILE);
     ACCESSOR_ATTRIBUTE(ScrollView, VAR_FLOAT, "Scroll Step", GetScrollStep, SetScrollStep, float, 0.1f, AM_FILE);
     ACCESSOR_ATTRIBUTE(ScrollView, VAR_FLOAT, "Page Step", GetPageStep, SetPageStep, float, 1.0f, AM_FILE);
     ACCESSOR_ATTRIBUTE(ScrollView, VAR_FLOAT, "Page Step", GetPageStep, SetPageStep, float, 1.0f, AM_FILE);
     COPY_BASE_ATTRIBUTES(ScrollView, UIElement);
     COPY_BASE_ATTRIBUTES(ScrollView, UIElement);
@@ -94,6 +95,9 @@ void ScrollView::ApplyAttributes()
         SetContentElement(scrollPanel_->GetChild(0));
         SetContentElement(scrollPanel_->GetChild(0));
     
     
     OnResize();
     OnResize();
+    
+    // Reapply view position with proper content element and size
+    SetViewPosition(viewPositionAttr_);
 }
 }
 
 
 void ScrollView::OnWheel(int delta, int buttons, int qualifiers)
 void ScrollView::OnWheel(int delta, int buttons, int qualifiers)
@@ -238,6 +242,12 @@ float ScrollView::GetScrollStep() const
     return horizontalScrollBar_->GetScrollStep();
     return horizontalScrollBar_->GetScrollStep();
 }
 }
 
 
+void ScrollView::SetViewPositionAttr(const IntVector2& value)
+{
+    viewPositionAttr_ = value;
+    SetViewPosition(value);
+}
+
 void ScrollView::UpdateViewSize()
 void ScrollView::UpdateViewSize()
 {
 {
     IntVector2 size(IntVector2::ZERO);
     IntVector2 size(IntVector2::ZERO);

+ 5 - 0
Engine/UI/ScrollView.h

@@ -81,6 +81,9 @@ public:
     /// Return arrow key page step.
     /// Return arrow key page step.
     float GetPageStep() const { return pageStep_; }
     float GetPageStep() const { return pageStep_; }
     
     
+    /// Set view position attribut.
+    void SetViewPositionAttr(const IntVector2& value);
+    
 protected:
 protected:
     /// Update view size from the content element.
     /// Update view size from the content element.
     void UpdateViewSize();
     void UpdateViewSize();
@@ -101,6 +104,8 @@ protected:
     IntVector2 viewPosition_;
     IntVector2 viewPosition_;
     /// Total view size.
     /// Total view size.
     IntVector2 viewSize_;
     IntVector2 viewSize_;
+    /// View offset attribute.
+    IntVector2 viewPositionAttr_;
     /// Arrow key page step.
     /// Arrow key page step.
     float pageStep_;
     float pageStep_;
     /// Ignore scrollbar events flag. Used to prevent possible endless loop when setting position.
     /// Ignore scrollbar events flag. Used to prevent possible endless loop when setting position.