Crazy Eddies GUI System 0.7.5
|
00001 /*********************************************************************** 00002 filename: CEGUIWindow.h 00003 created: 21/2/2004 00004 author: Paul D Turner 00005 00006 purpose: Defines abstract base class for Window objects 00007 *************************************************************************/ 00008 /*************************************************************************** 00009 * Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team 00010 * 00011 * Permission is hereby granted, free of charge, to any person obtaining 00012 * a copy of this software and associated documentation files (the 00013 * "Software"), to deal in the Software without restriction, including 00014 * without limitation the rights to use, copy, modify, merge, publish, 00015 * distribute, sublicense, and/or sell copies of the Software, and to 00016 * permit persons to whom the Software is furnished to do so, subject to 00017 * the following conditions: 00018 * 00019 * The above copyright notice and this permission notice shall be 00020 * included in all copies or substantial portions of the Software. 00021 * 00022 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00023 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00024 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 00025 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 00026 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 00027 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 00028 * OTHER DEALINGS IN THE SOFTWARE. 00029 ***************************************************************************/ 00030 #ifndef _CEGUIWindow_h_ 00031 #define _CEGUIWindow_h_ 00032 00033 #include "CEGUIBase.h" 00034 #include "CEGUIString.h" 00035 #include "CEGUIVector.h" 00036 #include "CEGUIRect.h" 00037 #include "CEGUISize.h" 00038 #include "CEGUIEventSet.h" 00039 #include "CEGUIPropertySet.h" 00040 #include "CEGUISystem.h" 00041 #include "CEGUIInputEvent.h" 00042 #include "CEGUIWindowProperties.h" 00043 #include "CEGUIUDim.h" 00044 #include "CEGUIWindowRenderer.h" 00045 #include "CEGUITextUtils.h" 00046 #include "CEGUIBasicRenderedStringParser.h" 00047 #include "CEGUIDefaultRenderedStringParser.h" 00048 #include <vector> 00049 #include <set> 00050 00051 00052 #if defined(_MSC_VER) 00053 # pragma warning(push) 00054 # pragma warning(disable : 4251) 00055 #endif 00056 00057 00058 // Start of CEGUI namespace section 00059 namespace CEGUI 00060 { 00065 enum VerticalAlignment 00066 { 00071 VA_TOP, 00076 VA_CENTRE, 00081 VA_BOTTOM 00082 }; 00083 00088 enum HorizontalAlignment 00089 { 00094 HA_LEFT, 00099 HA_CENTRE, 00104 HA_RIGHT 00105 }; 00106 00115 enum WindowUpdateMode 00116 { 00118 WUM_ALWAYS, 00120 WUM_NEVER, 00122 WUM_VISIBLE 00123 }; 00124 00138 class CEGUIEXPORT Window : public PropertySet, public EventSet 00139 { 00140 public: 00141 /************************************************************************* 00142 Event name constants 00143 *************************************************************************/ 00145 static const String EventNamespace; 00146 00147 // generated internally by Window 00151 static const String EventWindowUpdated; 00157 static const String EventParentSized; 00162 static const String EventSized; 00167 static const String EventMoved; 00172 static const String EventTextChanged; 00177 static const String EventFontChanged; 00182 static const String EventAlphaChanged; 00187 static const String EventIDChanged; 00194 static const String EventActivated; 00201 static const String EventDeactivated; 00206 static const String EventShown; 00211 static const String EventHidden; 00216 static const String EventEnabled; 00222 static const String EventDisabled; 00228 static const String EventClippedByParentChanged; 00234 static const String EventDestroyedByParentChanged; 00240 static const String EventInheritsAlphaChanged; 00246 static const String EventAlwaysOnTopChanged; 00251 static const String EventInputCaptureGained; 00260 static const String EventInputCaptureLost; 00268 static const String EventRenderingStarted; 00276 static const String EventRenderingEnded; 00281 static const String EventChildAdded; 00286 static const String EventChildRemoved; 00291 static const String EventDestructionStarted; 00297 static const String EventZOrderChanged; 00305 static const String EventDragDropItemEnters; 00313 static const String EventDragDropItemLeaves; 00320 static const String EventDragDropItemDropped; 00326 static const String EventVerticalAlignmentChanged; 00332 static const String EventHorizontalAlignmentChanged; 00338 static const String EventWindowRendererAttached; 00344 static const String EventWindowRendererDetached; 00349 static const String EventRotated; 00355 static const String EventNonClientChanged; 00362 static const String EventTextParsingChanged; 00368 static const String EventMarginChanged; 00369 00370 // generated externally (inputs) 00375 static const String EventMouseEntersArea; 00380 static const String EventMouseLeavesArea; 00391 static const String EventMouseEnters; 00402 static const String EventMouseLeaves; 00407 static const String EventMouseMove; 00413 static const String EventMouseWheel; 00418 static const String EventMouseButtonDown; 00423 static const String EventMouseButtonUp; 00430 static const String EventMouseClick; 00436 static const String EventMouseDoubleClick; 00442 static const String EventMouseTripleClick; 00451 static const String EventKeyDown; 00460 static const String EventKeyUp; 00468 static const String EventCharacterKey; 00469 00470 /************************************************************************* 00471 Child Widget name suffix constants 00472 *************************************************************************/ 00474 static const String TooltipNameSuffix; 00476 static const String AutoWidgetNameSuffix; 00477 00478 00489 Window(const String& type, const String& name); 00490 00495 virtual ~Window(void); 00496 00504 const String& getType(void) const; 00505 00513 const String& getName(void) const {return d_name;} 00514 00524 bool isDestroyedByParent(void) const {return d_destroyedByParent;} 00525 00535 bool isAlwaysOnTop(void) const {return d_alwaysOnTop;} 00536 00549 bool isDisabled(bool localOnly = false) const; 00550 00567 bool isVisible(bool localOnly = false) const; 00568 00583 bool isActive(void) const; 00584 00594 bool isClippedByParent(void) const {return d_clippedByParent;} 00595 00603 uint getID(void) const {return d_ID;} 00604 00614 size_t getChildCount(void) const {return d_children.size();} 00615 00628 bool isChild(const String& name) const; 00629 00646 bool isChild(uint ID) const; 00647 00668 bool isChildRecursive(uint ID) const; 00669 00681 bool isChild(const Window* window) const; 00682 00704 Window* getChild(const String& name) const; 00705 00727 Window* getChild(uint ID) const; 00728 00752 Window* getChildRecursive(const String& name) const; 00753 00775 Window* getChildRecursive(uint ID) const; 00776 00790 Window* getChildAtIdx(size_t idx) const {return d_children[idx];} 00791 00804 Window* getActiveChild(void); 00805 const Window* getActiveChild(void) const; 00806 00820 bool isAncestor(const String& name) const; 00821 00835 bool isAncestor(uint ID) const; 00836 00849 bool isAncestor(const Window* window) const; 00850 00864 Font* getFont(bool useDefault = true) const; 00865 00873 const String& getText(void) const {return d_textLogical;} 00874 00876 const String& getTextVisual() const; 00877 00886 bool inheritsAlpha(void) const {return d_inheritsAlpha;} 00887 00905 float getAlpha(void) const {return d_alpha;} 00906 00916 float getEffectiveAlpha(void) const; 00917 00923 Rect getUnclippedOuterRect() const; 00924 00930 Rect getUnclippedInnerRect() const; 00931 00943 Rect getUnclippedRect(const bool inner) const; 00944 00957 Rect getOuterRectClipper() const; 00958 00971 Rect getInnerRectClipper() const; 00972 00991 Rect getClipRect(const bool non_client = false) const; 00992 01003 Rect getHitTestRect() const; 01004 01024 Rect getChildWindowContentArea(const bool non_client = false) const; 01025 01042 virtual Rect getUnclippedInnerRect_impl(void) const; 01043 01052 static Window* getCaptureWindow(void) {return d_captureWindow;} 01053 01062 bool isCapturedByThis(void) const {return getCaptureWindow() == this;} 01063 01073 bool isCapturedByAncestor(void) const 01074 {return isAncestor(getCaptureWindow());} 01075 01084 bool isCapturedByChild(void) const {return isChild(getCaptureWindow());} 01085 01102 virtual bool isHit(const Vector2& position, 01103 const bool allow_disabled = false) const; 01104 01117 Window* getChildAtPosition(const Vector2& position) const; 01118 01136 Window* getTargetChildAtPosition(const Vector2& position, 01137 const bool allow_disabled = false) const; 01138 01147 Window* getParent(void) const {return d_parent;} 01148 01163 const Image* getMouseCursor(bool useDefault = true) const; 01164 01172 Size getPixelSize(void) const { return d_pixelSize; } 01173 01185 void* getUserData(void) const {return d_userData;} 01186 01201 bool restoresOldCapture(void) const {return d_restoreOldCapture;} 01202 01222 bool isZOrderingEnabled(void) const; 01223 01234 bool wantsMultiClickEvents(void) const; 01235 01247 bool isMouseAutoRepeatEnabled(void) const; 01248 01257 float getAutoRepeatDelay(void) const; 01258 01268 float getAutoRepeatRate(void) const; 01269 01279 bool distributesCapturedInputs(void) const; 01280 01290 bool isUsingDefaultTooltip(void) const; 01291 01301 Tooltip* getTooltip(void) const; 01302 01311 String getTooltipType(void) const; 01312 01320 const String& getTooltipText(void) const; 01321 01333 bool inheritsTooltipText(void) const; 01334 01355 bool isRiseOnClickEnabled(void) const { return d_riseOnClick; } 01356 01368 bool testClassName(const String& class_name) const 01369 {return testClassName_impl(class_name);} 01370 01381 VerticalAlignment getVerticalAlignment() const {return d_vertAlign;} 01382 01393 HorizontalAlignment getHorizontalAlignment() const {return d_horzAlign;} 01394 01402 GeometryBuffer& getGeometryBuffer(); 01403 01412 const String& getLookNFeel() const; 01413 01421 bool getModalState(void) const 01422 {return(System::getSingleton().getModalTarget() == this);} 01423 01437 const String& getUserString(const String& name) const; 01438 01450 bool isUserStringDefined(const String& name) const; 01451 01467 Window* getActiveSibling(); 01468 01478 Size getParentPixelSize(void) const; 01479 01489 float getParentPixelWidth(void) const; 01490 01500 float getParentPixelHeight(void) const; 01501 01512 bool isMousePassThroughEnabled(void) const {return d_mousePassThroughEnabled;} 01513 01519 bool isAutoWindow(void) const {return d_autoWindow;} 01520 01525 bool isWritingXMLAllowed(void) const {return d_allowWriteXML;} 01526 01551 EventSet::Iterator getEventIterator() const; 01552 01573 PropertySet::Iterator getPropertyIterator() const; 01574 01584 bool isDragDropTarget() const; 01585 01591 void getRenderingContext(RenderingContext& ctx) const; 01592 01594 virtual void getRenderingContext_impl(RenderingContext& ctx) const; 01595 01601 RenderingSurface* getRenderingSurface() const; 01602 01608 RenderingSurface& getTargetRenderingSurface() const; 01609 01621 bool isUsingAutoRenderingSurface() const; 01622 01633 const Window* getRootWindow() const; 01634 Window* getRootWindow(); 01635 01637 const Vector3& getRotation() const; 01638 01653 bool isNonClientWindow() const; 01654 01665 void rename(const String& new_name); 01666 01678 virtual void initialiseComponents(void) {} 01679 01693 void setDestroyedByParent(bool setting); 01694 01707 void setAlwaysOnTop(bool setting); 01708 01721 void setEnabled(bool setting); 01722 01730 void enable(void) {setEnabled(true);} 01731 01739 void disable(void) {setEnabled(false);} 01740 01758 void setVisible(bool setting); 01759 01772 void show(void) {setVisible(true);} 01773 01784 void hide(void) {setVisible(false);} 01785 01794 void activate(void); 01795 01805 void deactivate(void); 01806 01819 void setClippedByParent(bool setting); 01820 01832 void setID(uint ID); 01833 01844 void setText(const String& text); 01845 01859 void insertText(const String& text, const String::size_type position); 01860 01870 void appendText(const String& text); 01871 01883 void setFont(Font* font); 01884 01899 void setFont(const String& name); 01900 01919 void addChildWindow(const String& name); 01920 01937 void addChildWindow(Window* window); 01938 01950 void removeChildWindow(const String& name); 01951 01963 void removeChildWindow(Window* window); 01964 01978 void removeChildWindow(uint ID); 01979 01993 void moveToFront(); 01994 02009 void moveToBack(); 02010 02024 void moveInFront(const Window* const window); 02025 02040 void moveBehind(const Window* const window); 02041 02051 bool captureInput(void); 02052 02061 void releaseInput(void); 02062 02081 void setRestoreCapture(bool setting); 02082 02103 void setAlpha(float alpha); 02104 02116 void setInheritsAlpha(bool setting); 02117 02129 void invalidate(void); 02130 02146 void invalidate(const bool recursive); 02147 02159 void setMouseCursor(const Image* image) {d_mouseCursor = image;} 02160 02171 void setMouseCursor(MouseCursorImage image) 02172 {d_mouseCursor = (const Image*)image;} 02173 02193 void setMouseCursor(const String& imageset, const String& image_name); 02194 02209 void setUserData(void* user_data) {d_userData = user_data;} 02210 02233 void setZOrderingEnabled(bool setting); 02234 02248 void setWantsMultiClickEvents(bool setting); 02249 02262 void setMouseAutoRepeatEnabled(bool setting); 02263 02275 void setAutoRepeatDelay(float delay); 02276 02289 void setAutoRepeatRate(float rate); 02290 02300 void setDistributesCapturedInputs(bool setting); 02301 02307 void notifyDragDropItemEnters(DragContainer* item); 02308 02314 void notifyDragDropItemLeaves(DragContainer* item); 02315 02321 void notifyDragDropItemDropped(DragContainer* item); 02322 02336 virtual void destroy(void); 02337 02353 void setTooltip(Tooltip* tooltip); 02354 02373 void setTooltipType(const String& tooltipType); 02374 02386 void setTooltipText(const String& tip); 02387 02402 void setInheritsTooltipText(bool setting); 02403 02427 void setRiseOnClickEnabled(bool setting) { d_riseOnClick = setting; } 02428 02442 void setVerticalAlignment(const VerticalAlignment alignment); 02443 02457 void setHorizontalAlignment(const HorizontalAlignment alignment); 02458 02475 virtual void setLookNFeel(const String& look); 02476 02490 void setModalState(bool state); 02491 02502 virtual void performChildWindowLayout(); 02503 02517 void setUserString(const String& name, const String& value); 02518 02545 void setArea(const UDim& xpos, const UDim& ypos, const UDim& width, const UDim& height); 02546 02568 void setArea(const UVector2& pos, const UVector2& size); 02569 02587 void setArea(const URect& area); 02588 02607 void setPosition(const UVector2& pos); 02608 02626 void setXPosition(const UDim& x); 02627 02645 void setYPosition(const UDim& y); 02646 02661 void setSize(const UVector2& size); 02662 02677 void setWidth(const UDim& width); 02678 02693 void setHeight(const UDim& height); 02694 02711 void setMaxSize(const UVector2& size); 02712 02729 void setMinSize(const UVector2& size); 02730 02748 const URect& getArea() const; 02749 02767 const UVector2& getPosition() const; 02768 02786 const UDim& getXPosition() const; 02787 02805 const UDim& getYPosition() const; 02806 02821 UVector2 getSize() const; 02822 02837 UDim getWidth() const; 02838 02853 UDim getHeight() const; 02854 02871 const UVector2& getMaxSize() const; 02872 02889 const UVector2& getMinSize() const; 02890 02899 void render(); 02900 02919 virtual void update(float elapsed); 02920 02931 virtual void writeXMLToStream(XMLSerializer& xml_stream) const; 02932 02941 virtual void beginInitialisation(void) {d_initialising = true;} 02942 02950 virtual void endInitialisation(void) {d_initialising = false;} 02951 02962 void setMousePassThroughEnabled(bool setting) {d_mousePassThroughEnabled = setting;} 02963 02975 void setWindowRenderer(const String& name); 02976 02985 WindowRenderer* getWindowRenderer(void) const; 02986 02996 String getWindowRendererName(void) const; 02997 03002 void setWritingXMLAllowed(bool allow) {d_allowWriteXML = allow;} 03003 03014 void notifyScreenAreaChanged(bool recursive = true); 03015 03027 void setFalagardType(const String& type, const String& rendererType = ""); 03028 03038 void setDragDropTarget(bool setting); 03039 03060 void setRenderingSurface(RenderingSurface* surface); 03061 03068 void invalidateRenderingSurface(); 03069 03111 void setUsingAutoRenderingSurface(bool setting); 03112 03114 void setRotation(const Vector3& rotation); 03115 03130 void setNonClientWindow(const bool setting); 03131 03133 const RenderedString& getRenderedString() const; 03135 RenderedStringParser* getCustomRenderedStringParser() const; 03137 void setCustomRenderedStringParser(RenderedStringParser* parser); 03139 virtual RenderedStringParser& getRenderedStringParser() const; 03141 bool isTextParsingEnabled() const; 03143 void setTextParsingEnabled(const bool setting); 03144 03146 virtual void setMargin(const UBox& margin); 03148 const UBox& getMargin() const; 03149 03151 Vector2 getUnprojectedPosition(const Vector2& pos) const; 03152 03154 const BiDiVisualMapping* getBiDiVisualMapping() const 03155 {return d_bidiVisualMapping;} 03156 03158 void banPropertyFromXML(const String& property_name); 03159 03161 void unbanPropertyFromXML(const String& property_name); 03162 03164 bool isPropertyBannedFromXML(const String& property_name) const; 03165 03167 void banPropertyFromXML(const Property* property); 03168 03170 void unbanPropertyFromXML(const Property* property); 03171 03173 bool isPropertyBannedFromXML(const Property* property) const; 03174 03192 void setUpdateMode(const WindowUpdateMode mode); 03193 03211 WindowUpdateMode getUpdateMode() const; 03212 03223 void setMouseInputPropagationEnabled(const bool enabled); 03224 03235 bool isMouseInputPropagationEnabled() const; 03236 03251 Window* clone(const String& newName, const bool deepCopy = true) const; 03252 03254 virtual void clonePropertiesTo(Window& target) const; 03256 virtual void cloneChildWidgetsTo(Window& target) const; 03257 03258 protected: 03259 // friend classes for construction / initialisation purposes (for now) 03260 friend class System; 03261 friend class WindowManager; 03262 03263 /************************************************************************* 03264 Event trigger methods 03265 *************************************************************************/ 03275 virtual void onSized(WindowEventArgs& e); 03276 03286 virtual void onMoved(WindowEventArgs& e); 03287 03297 virtual void onTextChanged(WindowEventArgs& e); 03298 03308 virtual void onFontChanged(WindowEventArgs& e); 03309 03319 virtual void onAlphaChanged(WindowEventArgs& e); 03320 03330 virtual void onIDChanged(WindowEventArgs& e); 03331 03341 virtual void onShown(WindowEventArgs& e); 03342 03352 virtual void onHidden(WindowEventArgs& e); 03353 03363 virtual void onEnabled(WindowEventArgs& e); 03364 03374 virtual void onDisabled(WindowEventArgs& e); 03375 03386 virtual void onClippingChanged(WindowEventArgs& e); 03387 03398 virtual void onParentDestroyChanged(WindowEventArgs& e); 03399 03410 virtual void onInheritsAlphaChanged(WindowEventArgs& e); 03411 03421 virtual void onAlwaysOnTopChanged(WindowEventArgs& e); 03422 03432 virtual void onCaptureGained(WindowEventArgs& e); 03433 03443 virtual void onCaptureLost(WindowEventArgs& e); 03444 03454 virtual void onRenderingStarted(WindowEventArgs& e); 03455 03465 virtual void onRenderingEnded(WindowEventArgs& e); 03466 03476 virtual void onZChanged(WindowEventArgs& e); 03477 03487 virtual void onDestructionStarted(WindowEventArgs& e); 03488 03497 virtual void onActivated(ActivationEventArgs& e); 03498 03508 virtual void onDeactivated(ActivationEventArgs& e); 03509 03521 virtual void onParentSized(WindowEventArgs& e); 03522 03531 virtual void onChildAdded(WindowEventArgs& e); 03532 03541 virtual void onChildRemoved(WindowEventArgs& e); 03542 03550 virtual void onMouseEntersArea(MouseEventArgs& e); 03551 03559 virtual void onMouseLeavesArea(MouseEventArgs& e); 03560 03575 virtual void onMouseEnters(MouseEventArgs& e); 03576 03591 virtual void onMouseLeaves(MouseEventArgs& e); 03592 03601 virtual void onMouseMove(MouseEventArgs& e); 03602 03611 virtual void onMouseWheel(MouseEventArgs& e); 03612 03621 virtual void onMouseButtonDown(MouseEventArgs& e); 03622 03631 virtual void onMouseButtonUp(MouseEventArgs& e); 03632 03641 virtual void onMouseClicked(MouseEventArgs& e); 03642 03651 virtual void onMouseDoubleClicked(MouseEventArgs& e); 03652 03661 virtual void onMouseTripleClicked(MouseEventArgs& e); 03662 03674 virtual void onKeyDown(KeyEventArgs& e); 03675 03687 virtual void onKeyUp(KeyEventArgs& e); 03688 03700 virtual void onCharacter(KeyEventArgs& e); 03701 03712 virtual void onDragDropItemEnters(DragDropEventArgs& e); 03713 03724 virtual void onDragDropItemLeaves(DragDropEventArgs& e); 03725 03736 virtual void onDragDropItemDropped(DragDropEventArgs& e); 03737 03748 virtual void onVerticalAlignmentChanged(WindowEventArgs& e); 03749 03760 virtual void onHorizontalAlignmentChanged(WindowEventArgs& e); 03761 03771 virtual void onWindowRendererAttached(WindowEventArgs& e); 03772 03782 virtual void onWindowRendererDetached(WindowEventArgs& e); 03783 03793 virtual void onRotated(WindowEventArgs& e); 03794 03805 virtual void onNonClientChanged(WindowEventArgs& e); 03806 03817 virtual void onTextParsingChanged(WindowEventArgs& e); 03818 03819 virtual void onMarginChanged(WindowEventArgs& e); 03820 03821 /************************************************************************* 03822 Implementation Functions 03823 *************************************************************************/ 03835 virtual void updateSelf(float elapsed); 03836 03848 virtual void drawSelf(const RenderingContext& ctx); 03849 03860 void bufferGeometry(const RenderingContext& ctx); 03861 03872 void queueGeometry(const RenderingContext& ctx); 03873 03880 virtual void populateGeometryBuffer() {} 03881 03893 virtual bool testClassName_impl(const String& class_name) const 03894 { 03895 if (class_name == "Window") return true; 03896 return false; 03897 } 03898 03910 void setParent(Window* parent); 03911 03912 Size getSize_impl(const Window* window) const; 03913 03918 void generateAutoRepeatEvent(MouseButton button); 03919 03928 virtual bool validateWindowRenderer(const String& name) const; 03929 03936 bool isPropertyAtDefault(const Property* property) const; 03937 03943 void notifyClippingChanged(void); 03944 03946 void allocateRenderingWindow(); 03947 03949 void releaseRenderingWindow(); 03950 03952 void initialiseClippers(const RenderingContext& ctx); 03953 03958 virtual void cleanupChildren(void); 03959 03964 virtual void addChild_impl(Window* wnd); 03965 03970 virtual void removeChild_impl(Window* wnd); 03971 03976 virtual void onZChange_impl(void); 03977 03982 void addStandardProperties(void); 03983 03992 virtual bool moveToFront_impl(bool wasClicked); 03993 04024 void setArea_impl(const UVector2& pos, const UVector2& size, 04025 bool topLeftSizing = false, bool fireEvents = true); 04026 04046 void addWindowToDrawList(Window& wnd, bool at_back = false); 04047 04059 void removeWindowFromDrawList(const Window& wnd); 04060 04072 bool isTopOfZOrder() const; 04073 04079 void updateGeometryRenderSettings(); 04080 04082 void transferChildSurfaces(); 04083 04085 Rect getParentElementClipIntersection(const Rect& unclipped_area) const; 04086 04088 void invalidate_impl(const bool recursive); 04089 04091 bool isInnerRectSizeChanged() const; 04092 04094 virtual Rect getUnclippedOuterRect_impl() const; 04096 virtual Rect getOuterRectClipper_impl() const; 04098 virtual Rect getInnerRectClipper_impl() const; 04100 virtual Rect getHitTestRect_impl() const; 04102 virtual Rect getNonClientChildWindowContentArea_impl() const; 04104 virtual Rect getClientChildWindowContentArea_impl() const; 04105 04106 virtual int writePropertiesXML(XMLSerializer& xml_stream) const; 04107 virtual int writeChildWindowsXML(XMLSerializer& xml_stream) const; 04108 virtual bool writeAutoChildWindowXML(XMLSerializer& xml_stream) const; 04109 04110 // constrain given UVector2 to window's min size, return if size changed. 04111 bool constrainUVector2ToMinSize(const Size& base_sz, UVector2& sz); 04112 // constrain given UVector2 to window's max size, return if size changed. 04113 bool constrainUVector2ToMaxSize(const Size& base_sz, UVector2& sz); 04114 04115 /************************************************************************* 04116 Properties for Window base class 04117 *************************************************************************/ 04118 static WindowProperties::Alpha d_alphaProperty; 04119 static WindowProperties::AlwaysOnTop d_alwaysOnTopProperty; 04120 static WindowProperties::ClippedByParent d_clippedByParentProperty; 04121 static WindowProperties::DestroyedByParent d_destroyedByParentProperty; 04122 static WindowProperties::Disabled d_disabledProperty; 04123 static WindowProperties::Font d_fontProperty; 04124 static WindowProperties::ID d_IDProperty; 04125 static WindowProperties::InheritsAlpha d_inheritsAlphaProperty; 04126 static WindowProperties::MouseCursorImage d_mouseCursorProperty; 04127 static WindowProperties::RestoreOldCapture d_restoreOldCaptureProperty; 04128 static WindowProperties::Text d_textProperty; 04129 static WindowProperties::Visible d_visibleProperty; 04130 static WindowProperties::ZOrderChangeEnabled d_zOrderChangeProperty; 04131 static WindowProperties::WantsMultiClickEvents d_wantsMultiClicksProperty; 04132 static WindowProperties::MouseButtonDownAutoRepeat d_autoRepeatProperty; 04133 static WindowProperties::AutoRepeatDelay d_autoRepeatDelayProperty; 04134 static WindowProperties::AutoRepeatRate d_autoRepeatRateProperty; 04135 static WindowProperties::DistributeCapturedInputs d_distInputsProperty; 04136 static WindowProperties::CustomTooltipType d_tooltipTypeProperty; 04137 static WindowProperties::Tooltip d_tooltipProperty; 04138 static WindowProperties::InheritsTooltipText d_inheritsTooltipProperty; 04139 static WindowProperties::RiseOnClick d_riseOnClickProperty; 04140 static WindowProperties::VerticalAlignment d_vertAlignProperty; 04141 static WindowProperties::HorizontalAlignment d_horzAlignProperty; 04142 static WindowProperties::UnifiedAreaRect d_unifiedAreaRectProperty; 04143 static WindowProperties::UnifiedPosition d_unifiedPositionProperty; 04144 static WindowProperties::UnifiedXPosition d_unifiedXPositionProperty; 04145 static WindowProperties::UnifiedYPosition d_unifiedYPositionProperty; 04146 static WindowProperties::UnifiedSize d_unifiedSizeProperty; 04147 static WindowProperties::UnifiedWidth d_unifiedWidthProperty; 04148 static WindowProperties::UnifiedHeight d_unifiedHeightProperty; 04149 static WindowProperties::UnifiedMinSize d_unifiedMinSizeProperty; 04150 static WindowProperties::UnifiedMaxSize d_unifiedMaxSizeProperty; 04151 static WindowProperties::MousePassThroughEnabled d_mousePassThroughEnabledProperty; 04152 static WindowProperties::WindowRenderer d_windowRendererProperty; 04153 static WindowProperties::LookNFeel d_lookNFeelProperty; 04154 static WindowProperties::DragDropTarget d_dragDropTargetProperty; 04155 static WindowProperties::AutoRenderingSurface d_autoRenderingSurfaceProperty; 04156 static WindowProperties::Rotation d_rotationProperty; 04157 static WindowProperties::XRotation d_xRotationProperty; 04158 static WindowProperties::YRotation d_yRotationProperty; 04159 static WindowProperties::ZRotation d_zRotationProperty; 04160 static WindowProperties::NonClient d_nonClientProperty; 04161 static WindowProperties::TextParsingEnabled d_textParsingEnabledProperty; 04162 static WindowProperties::Margin d_marginProperty; 04163 static WindowProperties::UpdateMode d_updateModeProperty; 04164 static WindowProperties::MouseInputPropagationEnabled d_mouseInputPropagationProperty; 04165 04166 /************************************************************************* 04167 Implementation Data 04168 *************************************************************************/ 04170 typedef std::vector<Window*> ChildList; 04172 typedef std::map<String, String, String::FastLessCompare> UserStringMap; 04174 typedef std::set<String, String::FastLessCompare> BannedXMLPropertySet; 04175 04177 const String d_type; 04179 String d_name; 04181 String d_falagardType; 04183 bool d_autoWindow; 04184 04186 bool d_initialising; 04188 bool d_destructionStarted; 04190 bool d_enabled; 04192 bool d_visible; 04194 bool d_active; 04195 04197 ChildList d_children; 04199 ChildList d_drawList; 04201 Window* d_parent; 04203 bool d_destroyedByParent; 04204 04206 bool d_clippedByParent; 04208 bool d_nonClientContent; 04209 04211 String d_lookName; 04213 WindowRenderer* d_windowRenderer; 04215 GeometryBuffer* d_geometry; 04217 RenderingSurface* d_surface; 04219 mutable bool d_needsRedraw; 04221 bool d_autoRenderingWindow; 04222 04224 const Image* d_mouseCursor; 04225 04227 float d_alpha; 04229 bool d_inheritsAlpha; 04230 04232 static Window* d_captureWindow; 04234 Window* d_oldCapture; 04236 bool d_restoreOldCapture; 04238 bool d_distCapturedInputs; 04239 04241 Font* d_font; 04243 String d_textLogical; 04245 BiDiVisualMapping* d_bidiVisualMapping; 04247 mutable bool d_bidiDataValid; 04249 mutable RenderedString d_renderedString; 04251 mutable bool d_renderedStringValid; 04253 static BasicRenderedStringParser d_basicStringParser; 04255 static DefaultRenderedStringParser d_defaultStringParser; 04257 RenderedStringParser* d_customStringParser; 04259 bool d_textParsingEnabled; 04260 04262 UBox d_margin; 04263 04265 uint d_ID; 04267 void* d_userData; 04269 UserStringMap d_userStrings; 04270 04272 bool d_alwaysOnTop; 04274 bool d_riseOnClick; 04276 bool d_zOrderingEnabled; 04277 04279 bool d_wantsMultiClicks; 04281 bool d_mousePassThroughEnabled; 04283 bool d_autoRepeat; 04285 float d_repeatDelay; 04287 float d_repeatRate; 04289 MouseButton d_repeatButton; 04291 bool d_repeating; 04293 float d_repeatElapsed; 04294 04296 bool d_dragDropTarget; 04297 04299 String d_tooltipText; 04301 Tooltip* d_customTip; 04303 bool d_weOwnTip; 04305 bool d_inheritsTipText; 04306 04308 bool d_allowWriteXML; 04310 BannedXMLPropertySet d_bannedXMLProperties; 04311 04313 URect d_area; 04315 Size d_pixelSize; 04317 UVector2 d_minSize; 04319 UVector2 d_maxSize; 04321 HorizontalAlignment d_horzAlign; 04323 VerticalAlignment d_vertAlign; 04325 Vector3 d_rotation; 04326 04328 mutable Rect d_outerUnclippedRect; 04330 mutable Rect d_innerUnclippedRect; 04332 mutable Rect d_outerRectClipper; 04334 mutable Rect d_innerRectClipper; 04336 mutable Rect d_hitTestRect; 04337 04338 mutable bool d_outerUnclippedRectValid; 04339 mutable bool d_innerUnclippedRectValid; 04340 mutable bool d_outerRectClipperValid; 04341 mutable bool d_innerRectClipperValid; 04342 mutable bool d_hitTestRectValid; 04343 04345 WindowUpdateMode d_updateMode; 04347 bool d_propagateMouseInputs; 04348 04349 04350 private: 04351 /************************************************************************* 04352 May not copy or assign Window objects 04353 *************************************************************************/ 04354 Window(const Window&) : PropertySet(), EventSet() {} 04355 Window& operator=(const Window&) {return *this;} 04356 }; 04357 04358 } // End of CEGUI namespace section 04359 04360 04361 #if defined(_MSC_VER) 04362 # pragma warning(pop) 04363 #endif 04364 04365 #endif // end of guard _CEGUIWindow_h_ 04366