Sfoglia il codice sorgente

Exposed the Window's modal shade color as property to Script and as attribute. Adjusted the shade color to match the default style theme.

Wei Tjong Yao 12 anni fa
parent
commit
ca227d27f3
4 ha cambiato i file con 36 aggiunte e 20 eliminazioni
  1. 1 0
      Bin/Data/UI/DefaultStyle.xml
  2. 18 16
      Engine/Engine/UIAPI.cpp
  3. 11 4
      Engine/UI/Window.cpp
  4. 6 0
      Engine/UI/Window.h

+ 1 - 0
Bin/Data/UI/DefaultStyle.xml

@@ -428,6 +428,7 @@
         <attribute name="Layout Spacing" value="4" />
         <attribute name="Layout Border" value="6 6 6 6" />
         <attribute name="Is Modal" value="true" />
+        <attribute name="Modal Shade Color" value="0.45 0.70 0.45 0.1" />
         <attribute name="Modal Frame Color" value="0.45 0.70 0.45" />
         <attribute name="Modal Frame Size" value="2 2" />
     </element>

+ 18 - 16
Engine/Engine/UIAPI.cpp

@@ -43,7 +43,7 @@ static bool FontSaveXML(const String& fileName, int pointSize, bool usedGlyphs,
 {
     if (fileName.Empty())
         return false;
-    
+
     File file(ptr->GetContext(), fileName, FILE_WRITE);
     return ptr->SaveXML(file, pointSize, usedGlyphs);
 }
@@ -61,33 +61,33 @@ static void RegisterUIElement(asIScriptEngine* engine)
     engine->RegisterEnumValue("HorizontalAlignment", "HA_LEFT", HA_LEFT);
     engine->RegisterEnumValue("HorizontalAlignment", "HA_CENTER", HA_CENTER);
     engine->RegisterEnumValue("HorizontalAlignment", "HA_RIGHT", HA_RIGHT);
-    
+
     engine->RegisterEnum("VerticalAlignment");
     engine->RegisterEnumValue("VerticalAlignment", "VA_TOP", VA_TOP);
     engine->RegisterEnumValue("VerticalAlignment", "VA_CENTER", VA_CENTER);
     engine->RegisterEnumValue("VerticalAlignment", "VA_BOTTOM", VA_BOTTOM);
-    
+
     engine->RegisterEnum("Corner");
     engine->RegisterEnumValue("Corner", "C_TOPLEFT", C_TOPLEFT);
     engine->RegisterEnumValue("Corner", "C_TOPRIGHT", C_TOPRIGHT);
     engine->RegisterEnumValue("Corner", "C_BOTTOMLEFT", C_BOTTOMLEFT);
     engine->RegisterEnumValue("Corner", "C_BOTTOMRIGHT", C_BOTTOMRIGHT);
-    
+
     engine->RegisterEnum("Orientation");
     engine->RegisterEnumValue("Orientation", "O_HORIZONTAL", O_HORIZONTAL);
     engine->RegisterEnumValue("Orientation", "O_VERTICAL", O_VERTICAL);
-    
+
     engine->RegisterEnum("FocusMode");
     engine->RegisterEnumValue("FocusMode", "FM_NOTFOCUSABLE", FM_NOTFOCUSABLE);
     engine->RegisterEnumValue("FocusMode", "FM_RESETFOCUS", FM_RESETFOCUS);
     engine->RegisterEnumValue("FocusMode", "FM_FOCUSABLE", FM_FOCUSABLE);
     engine->RegisterEnumValue("FocusMode", "FM_FOCUSABLE_DEFOCUSABLE", FM_FOCUSABLE_DEFOCUSABLE);
-    
+
     engine->RegisterEnum("LayoutMode");
     engine->RegisterEnumValue("LayoutMode", "LM_FREE", LM_FREE);
     engine->RegisterEnumValue("LayoutMode", "LM_HORIZONTAL", LM_HORIZONTAL);
     engine->RegisterEnumValue("LayoutMode", "LM_VERTICAL", LM_VERTICAL);
-    
+
     engine->RegisterEnum("TraversalMode");
     engine->RegisterEnumValue("TraversalMode", "TM_BREADTH_FIRST", TM_BREADTH_FIRST);
     engine->RegisterEnumValue("TraversalMode", "TM_DEPTH_FIRST", TM_DEPTH_FIRST);
@@ -96,9 +96,9 @@ static void RegisterUIElement(asIScriptEngine* engine)
     engine->RegisterGlobalProperty("const uint DD_SOURCE", (void*)&DD_SOURCE);
     engine->RegisterGlobalProperty("const uint DD_TARGET", (void*)&DD_TARGET);
     engine->RegisterGlobalProperty("const uint DD_SOURCE_AND_TARGET", (void*)&DD_SOURCE_AND_TARGET);
-    
+
     RegisterUIElement<UIElement>(engine, "UIElement");
-    
+
     // Register Variant GetPtr() for UIElement
     engine->RegisterObjectMethod("Variant", "UIElement@+ GetUIElement() const", asFUNCTION(GetVariantPtr<UIElement>), asCALL_CDECL_OBJLAST);
 }
@@ -143,7 +143,7 @@ static void RegisterCursor(asIScriptEngine* engine)
     engine->RegisterEnumValue("CursorShape", "CS_ACCEPTDROP", CS_ACCEPTDROP);
     engine->RegisterEnumValue("CursorShape", "CS_REJECTDROP", CS_REJECTDROP);
     engine->RegisterEnumValue("CursorShape", "CS_BUSY", CS_BUSY);
-    
+
     RegisterBorderImage<Cursor>(engine, "Cursor");
     engine->RegisterObjectMethod("Cursor", "void DefineShape(CursorShape, Texture@+, const IntRect&in, const IntVector2&in, bool arg4 = false)", asMETHOD(Cursor, DefineShape), asCALL_THISCALL);
     engine->RegisterObjectMethod("Cursor", "void set_shape(CursorShape)", asMETHOD(Cursor, SetShape), asCALL_THISCALL);
@@ -227,10 +227,10 @@ void ListViewSetSelections(CScriptArray* selections, ListView* ptr)
     unsigned numItems = selections->GetSize();
     PODVector<unsigned> dest;
     dest.Reserve(numItems);
-    
+
     for (unsigned i = 0; i < numItems; ++i)
         dest.Push(*((unsigned*)selections->At(i)));
-    
+
     ptr->SetSelections(dest);
 }
 
@@ -257,7 +257,7 @@ static void RegisterListView(asIScriptEngine* engine)
     engine->RegisterEnumValue("HighlightMode", "HM_NEVER", HM_NEVER);
     engine->RegisterEnumValue("HighlightMode", "HM_FOCUS", HM_FOCUS);
     engine->RegisterEnumValue("HighlightMode", "HM_ALWAYS", HM_ALWAYS);
-    
+
     RegisterUIElement<ListView>(engine, "ListView");
     engine->RegisterObjectMethod("ListView", "void SetViewPosition(int, int)", asMETHODPR(ListView, SetViewPosition, (int, int), void), asCALL_THISCALL);
     engine->RegisterObjectMethod("ListView", "void SetScrollBarsVisible(bool, bool)", asMETHOD(ListView, SetScrollBarsVisible), asCALL_THISCALL);
@@ -421,6 +421,8 @@ static void RegisterWindow(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Window", "const IntRect& get_resizeBorder() const", asMETHOD(Window, GetResizeBorder), asCALL_THISCALL);
     engine->RegisterObjectMethod("Window", "void set_modal(bool)", asMETHOD(Window, SetModal), asCALL_THISCALL);
     engine->RegisterObjectMethod("Window", "bool get_modal() const", asMETHOD(Window, IsModal), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Window", "void set_modalShadeColor(const Color&in)", asMETHOD(Window, SetModalShadeColor), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Window", "const Color& get_modalShadeColor() const", asMETHOD(Window, GetModalShadeColor), asCALL_THISCALL);
     engine->RegisterObjectMethod("Window", "void set_modalFrameColor(const Color&in)", asMETHOD(Window, SetModalFrameColor), asCALL_THISCALL);
     engine->RegisterObjectMethod("Window", "const Color& get_modalFrameColor() const", asMETHOD(Window, GetModalFrameColor), asCALL_THISCALL);
     engine->RegisterObjectMethod("Window", "void set_modalFrameSize(const IntVector2&in)", asMETHOD(Window, SetModalFrameSize), asCALL_THISCALL);
@@ -431,13 +433,13 @@ static void FileSelectorSetFilters(CScriptArray* filters, unsigned defaultIndex,
 {
     if (!filters)
         return;
-    
+
     unsigned numFilters = filters->GetSize();
     Vector<String> destFilters(numFilters);
-    
+
     for (unsigned i = 0; i < numFilters; ++i)
         destFilters[i] = *(static_cast<String*>(filters->At(i)));
-    
+
     ptr->SetFilters(destFilters, defaultIndex);
 }
 

+ 11 - 4
Engine/UI/Window.cpp

@@ -43,6 +43,7 @@ Window::Window(Context* context) :
     resizeBorder_(DEFAULT_RESIZE_BORDER, DEFAULT_RESIZE_BORDER, DEFAULT_RESIZE_BORDER, DEFAULT_RESIZE_BORDER),
     dragMode_(DRAG_NONE),
     modal_(false),
+    modalShadeColor_(Color::TRANSPARENT),
     modalFrameColor_(Color::TRANSPARENT),
     modalFrameSize_(IntVector2::ZERO)
 
@@ -65,6 +66,7 @@ void Window::RegisterObject(Context* context)
     ACCESSOR_ATTRIBUTE(Window, VAR_BOOL, "Is Movable", IsMovable, SetMovable, bool, false, AM_FILE);
     ACCESSOR_ATTRIBUTE(Window, VAR_BOOL, "Is Resizable", IsResizable, SetResizable, bool, false, AM_FILE);
     ACCESSOR_ATTRIBUTE(Window, VAR_BOOL, "Is Modal", IsModal, SetModal, bool, false, AM_FILE);
+    REF_ACCESSOR_ATTRIBUTE(Window, VAR_COLOR, "Modal Shade Color", GetModalShadeColor, SetModalShadeColor, Color, Color::TRANSPARENT, AM_FILE);
     REF_ACCESSOR_ATTRIBUTE(Window, VAR_COLOR, "Modal Frame Color", GetModalFrameColor, SetModalFrameColor, Color, Color::TRANSPARENT, AM_FILE);
     REF_ACCESSOR_ATTRIBUTE(Window, VAR_INTVECTOR2, "Modal Frame Size", GetModalFrameSize, SetModalFrameSize, IntVector2, IntVector2::ZERO, AM_FILE);
     COPY_BASE_ATTRIBUTES(Window, BorderImage);
@@ -72,20 +74,20 @@ void Window::RegisterObject(Context* context)
 
 void Window::GetBatches(PODVector<UIBatch>& batches, PODVector<float>& vertexData, const IntRect& currentScissor)
 {
-    if (modal_)
+    if (modal_ && modalShadeColor_ != Color::TRANSPARENT)
     {
-        // Shade
+        // Modal shade
         UIElement* rootElement = GetRoot();
         const IntVector2& rootSize = rootElement->GetSize();
         IntRect currentScissor(0, 0, rootSize.x_, rootSize.y_);
         UIBatch batch(rootElement, BLEND_ALPHA, IntRect(0, 0, rootSize.x_, rootSize.y_), 0, &vertexData);
-        batch.AddQuad(0, 0, rootSize.x_, rootSize.y_, 0, 0, 0, 0, Color(0.0f, 0.0f, 0.0f, 0.25f));
+        batch.AddQuad(0, 0, rootSize.x_, rootSize.y_, 0, 0, 0, 0, modalShadeColor_);
         UIBatch::AddOrMerge(batch, batches);
     }
 
     BorderImage::GetBatches(batches, vertexData, currentScissor);
 
-    if (modal_)
+    if (modal_ && modalFrameColor_ != Color::TRANSPARENT && modalFrameSize_ != IntVector2::ZERO)
     {
         // Modal frame
         UIBatch batch(this, BLEND_ALPHA, currentScissor, 0, &vertexData);
@@ -227,6 +229,11 @@ void Window::SetModal(bool modal)
         modal_ = modal;
 }
 
+void Window::SetModalShadeColor(const Color& color)
+{
+    modalShadeColor_ = color;
+}
+
 void Window::SetModalFrameColor(const Color& color)
 {
     modalFrameColor_ = color;

+ 6 - 0
Engine/UI/Window.h

@@ -75,6 +75,8 @@ public:
     void SetResizeBorder(const IntRect& rect);
     /// Set modal flag. When the modal flag is set, the focused window needs to be dismissed first to allow other UI elements to gain focus.
     void SetModal(bool modal);
+    /// Set modal shade color.
+    void SetModalShadeColor(const Color& color);
     /// Set modal frame color.
     void SetModalFrameColor(const Color& color);
     /// Set modal frame size.
@@ -88,6 +90,8 @@ public:
     const IntRect& GetResizeBorder() const { return resizeBorder_; }
     /// Return modal flag.
     bool IsModal() const { return modal_; }
+    /// Get modal shade color.
+    const Color& GetModalShadeColor() const { return modalShadeColor_; }
     /// Get modal frame color.
     const Color& GetModalFrameColor() const { return modalFrameColor_; }
     /// Get modal frame size.
@@ -119,6 +123,8 @@ protected:
     IntVector2 dragBeginSize_;
     /// Modal flag.
     bool modal_;
+    /// Modal shade color, used when modal flag is set.
+    Color modalShadeColor_;
     /// Modal frame color, used when modal flag is set.
     Color modalFrameColor_;
     /// Modal frame size, used when modal flag is set.