Changeset 4028


Ignore:
Timestamp:
08/03/12 15:02:45 (21 months ago)
Author:
vdaras
Message:

Fixed rendering clipping issues. [t:732]

Location:
branches/active/gui_enhancements
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/active/gui_enhancements/demos/rocket_demo/gui/RML/base_window.rml

    r4026 r4028  
    8888</head> 
    8989<body class="window" onload="onLoadWindow()"> 
     90                <handle move_target="#document"> 
    9091        <div id="title_bar"> 
    91                 <handle move_target="#document"> 
    9292                        <span id="title"></span> 
    93                 </handle> 
    9493        </div> 
     94        </handle> 
    9595        <div id="empty_area"/> 
    9696        <div id="window"> 
  • branches/active/gui_enhancements/demos/rocket_demo/gui/RML/base_window_style.rcss

    r4027 r4028  
    5959        width: 100%; 
    6060        height: 90%; 
     61         
     62        overflow: hidden; 
    6163} 
    6264 
  • branches/active/gui_enhancements/demos/rocket_demo/gui/RML/slider.rml

    r4027 r4028  
    6464                        top: -2px; 
    6565                 
    66                         width: 20px; 
    67                         height: 20px; 
     66                        width: 15px; 
     67                        height: 17px; 
    6868                 
    6969                        background-decorator: image; 
     
    8686                </script> 
    8787</head> 
    88 <body id="slider_demo" template="window" onload="onLoadWindow(); setNextPrev(self, prev='form.rml')"> 
     88<body id="slider_demo" template="window" onload="onLoadWindow(); setNextPrev(self, prev='form.rml', next='textblock.rml')"> 
    8989        <span id="value1" class="slider_value">Value: 0%</span> 
    9090        <input id="slider1" type="range" min="0" max="100" step="5" ondrag="sliderDragged(self)" /> 
    9191        <span id="value2" class="slider_value">Value: 0%</span> 
    92         <input id="slider2" type="range" min="0" max="100" step="5" ondrag="sliderDragged(self)" /> 
     92        <input id="slider2" type="range" min="0" max="100" step="1" ondrag="sliderDragged(self)" /> 
    9393</body> 
    9494</rml> 
  • branches/active/gui_enhancements/engine/core/gui/librocket/base/librocketinputprocessor.cpp

    r4016 r4028  
    178178        bool LibRocketInputProcessor::processKeyInput(SDL_Event& event) { 
    179179                 
    180                 uint16_t key = event.key.keysym.unicode; 
     180                uint16_t unicode = event.key.keysym.unicode; 
     181                 
     182                Rocket::Core::Input::KeyIdentifier key = m_keyMap[event.key.keysym.sym]; 
    181183                 
    182184                if(event.type == SDL_KEYDOWN) { 
    183                         if(isCharacter(key) || key > 255) { 
    184                                 m_context->ProcessTextInput(key); 
    185                         } else { 
    186                                 m_context->ProcessKeyDown(m_keyMap[event.key.keysym.sym], m_keyModState); 
     185                         
     186                        m_context->ProcessKeyDown(key, m_keyModState); 
     187                         
     188                        if(unicode >= 32) { 
     189                                m_context->ProcessTextInput(unicode); 
     190                        }  
     191                         
     192                        if(key == Rocket::Core::Input::KI_RETURN) { 
     193                                m_context->ProcessTextInput((Rocket::Core::word) '\n'); 
    187194                        } 
    188195                } else { 
  • branches/active/gui_enhancements/engine/core/gui/librocket/base/librocketrenderinterface.cpp

    r4010 r4028  
    3838        : 
    3939        m_renderBackend(RenderBackend::instance()), 
    40         m_imageManager(ImageManager::instance()) { 
     40        m_imageManager(ImageManager::instance()), 
     41        m_pushedClipArea(false) { 
    4142        } 
    4243         
     
    4647         
    4748        void LibRocketRenderInterface::RenderGeometry(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, Rocket::Core::TextureHandle texture, const Rocket::Core::Vector2f& translation) { 
    48                 GeometryCallData geometryCallData; 
    4949                 
    50                 geometryCallData.vertices.reserve(num_vertices); 
     50                std::vector<GuiVertex> vecVertices; 
    5151                for(int i = 0; i < num_vertices; i++) { 
    5252                        GuiVertex vertex; 
     
    5656                        vertex.texCoords.set(vertices[i].tex_coord.x, vertices[i].tex_coord.y); 
    5757                         
    58                         geometryCallData.vertices.push_back(vertex); 
     58                        vecVertices.push_back(vertex); 
    5959                } 
    6060                 
    61                 geometryCallData.indices.reserve(num_indices); 
     61                std::vector<int> vecIndices; 
    6262                for(int i = 0; i < num_indices; i++) { 
    63                         geometryCallData.indices.push_back(indices[i]); 
     63                        vecIndices.push_back(indices[i]); 
    6464                } 
    6565                 
    66                 geometryCallData.textureHandle = texture; 
    67                 geometryCallData.translation.set(translation.x, translation.y); 
     66                DoublePoint translationPoint(translation.x, translation.y); 
    6867                 
    69                 if(m_geometryCalls.empty()) { 
    70                         GeometryCall geometryCall; 
    71                          
    72                         geometryCall.callChain.push(geometryCallData); 
    73                         m_geometryCalls.push(geometryCall); 
    74                 } else { 
    75                         GeometryCall& geometryCall = m_geometryCalls.front(); 
    76                          
    77                         geometryCall.callChain.push(geometryCallData); 
    78                 } 
     68                ImagePtr img = m_imageManager->get(texture); 
     69                 
     70                m_renderBackend->renderGuiGeometry(vecVertices, vecIndices, translationPoint, img); 
    7971        } 
    8072         
     
    9789         
    9890        void LibRocketRenderInterface::SetScissorRegion(int x, int y, int width, int height) { 
    99                 GeometryCall gc; 
     91                if(m_pushedClipArea) 
     92                        m_renderBackend->popClipArea(); 
    10093                 
    101                 gc.hasScissorArea = true; 
    102                 gc.scissorArea = Rect(x, y, width, height); 
    103                 m_geometryCalls.push(gc); 
     94                m_renderBackend->pushClipArea(Rect(x, y, width, height), false); 
     95                 
     96                m_pushedClipArea = true; 
    10497        } 
    10598         
     
    136129                m_freedTextures.push_back(rh); 
    137130        } 
    138          
    139         void LibRocketRenderInterface::render() { 
    140                 while(!m_geometryCalls.empty()) { 
    141                         GeometryCall& geometryCall = m_geometryCalls.front(); 
    142                          
    143                         if(geometryCall.hasScissorArea) 
    144                                 m_renderBackend->pushClipArea(geometryCall.scissorArea, false); 
    145                          
    146                         while(!geometryCall.callChain.empty()) { 
    147                                 GeometryCallData& geometryCallData = geometryCall.callChain.front(); 
    148                                  
    149                                 ImagePtr img = m_imageManager->get(geometryCallData.textureHandle); 
    150                                  
    151                                 m_renderBackend->renderGuiGeometry(geometryCallData.vertices, geometryCallData.indices, geometryCallData.translation, img); 
    152                                  
    153                                 geometryCall.callChain.pop(); 
    154                         } 
    155                          
    156                         if(geometryCall.hasScissorArea) 
    157                                 m_renderBackend->popClipArea(); 
    158                          
    159                         m_geometryCalls.pop(); 
    160                 } 
    161         } 
    162          
     131 
    163132        void LibRocketRenderInterface::freeTextures() { 
    164133                std::list<ResourceHandle>::iterator it(m_freedTextures.begin()); 
     
    174143                m_freedTextures.swap(temp); 
    175144        } 
     145         
     146        void LibRocketRenderInterface::reset() { 
     147                m_pushedClipArea = false; 
     148        } 
    176149}; 
  • branches/active/gui_enhancements/engine/core/gui/librocket/base/librocketrenderinterface.h

    r4010 r4028  
    9494                virtual void ReleaseTexture(Rocket::Core::TextureHandle texture_handle); 
    9595                 
    96                 /** 
    97                  * Renders librocket gui. 
    98                  */ 
    99                 void render(); 
    100                  
    101                 /** 
    102                  * Frees all textures that are no longer needed by librocket. 
     96                /** Frees all textures that are no longer needed by librocket. 
    10397                 */ 
    10498                void freeTextures(); 
     99                 
     100                /** Resets the render interface. 
     101                 */ 
     102                void reset(); 
    105103                 
    106104        private: 
     
    110108                ImageManager* m_imageManager; 
    111109                 
    112                 class GeometryCallData { 
    113                 public: 
    114                         std::vector<GuiVertex> vertices; 
    115                         std::vector<int> indices; 
    116                         ResourceHandle textureHandle; 
    117                         DoublePoint translation; 
    118                 }; 
    119                  
    120                 typedef std::queue<GeometryCallData> GeometryCallDataChain; 
    121                  
    122                 class GeometryCall { 
    123                 public: 
    124                          
    125                         GeometryCall() : hasScissorArea(false) { } 
    126                          
    127                         GeometryCallDataChain callChain; 
    128                         Rect scissorArea; 
    129                         bool hasScissorArea; 
    130                 }; 
    131                  
    132                 std::queue<GeometryCall> m_geometryCalls; 
     110                bool m_pushedClipArea; 
    133111                 
    134112                std::list<ResourceHandle> m_freedTextures; 
  • branches/active/gui_enhancements/engine/core/gui/librocket/librocketmanager.cpp

    r4021 r4028  
    8383                m_context->Render(); 
    8484                 
    85                 m_renderInterface->render(); 
    8685                m_renderInterface->freeTextures(); 
     86                m_renderInterface->reset(); 
    8787        } 
    8888         
Note: See TracChangeset for help on using the changeset viewer.