Changeset View
Changeset View
Standalone View
Standalone View
plugins/scenes/xrender/scene_xrender.cpp
Show First 20 Lines • Show All 74 Lines • ▼ Show 20 Line(s) | |||||
75 | { | 75 | { | ||
76 | if (m_buffer) { | 76 | if (m_buffer) { | ||
77 | xcb_render_free_picture(connection(), m_buffer); | 77 | xcb_render_free_picture(connection(), m_buffer); | ||
78 | } | 78 | } | ||
79 | } | 79 | } | ||
80 | 80 | | |||
81 | OverlayWindow* XRenderBackend::overlayWindow() | 81 | OverlayWindow* XRenderBackend::overlayWindow() | ||
82 | { | 82 | { | ||
83 | return NULL; | 83 | return nullptr; | ||
84 | } | 84 | } | ||
85 | 85 | | |||
86 | void XRenderBackend::showOverlay() | 86 | void XRenderBackend::showOverlay() | ||
87 | { | 87 | { | ||
88 | } | 88 | } | ||
89 | 89 | | |||
90 | void XRenderBackend::setBuffer(xcb_render_picture_t buffer) | 90 | void XRenderBackend::setBuffer(xcb_render_picture_t buffer) | ||
91 | { | 91 | { | ||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Line(s) | |||||
141 | void X11XRenderBackend::init(bool createOverlay) | 141 | void X11XRenderBackend::init(bool createOverlay) | ||
142 | { | 142 | { | ||
143 | if (m_front != XCB_RENDER_PICTURE_NONE) | 143 | if (m_front != XCB_RENDER_PICTURE_NONE) | ||
144 | xcb_render_free_picture(connection(), m_front); | 144 | xcb_render_free_picture(connection(), m_front); | ||
145 | bool haveOverlay = createOverlay ? m_overlayWindow->create() : (m_overlayWindow->window() != XCB_WINDOW_NONE); | 145 | bool haveOverlay = createOverlay ? m_overlayWindow->create() : (m_overlayWindow->window() != XCB_WINDOW_NONE); | ||
146 | if (haveOverlay) { | 146 | if (haveOverlay) { | ||
147 | m_overlayWindow->setup(XCB_WINDOW_NONE); | 147 | m_overlayWindow->setup(XCB_WINDOW_NONE); | ||
148 | ScopedCPointer<xcb_get_window_attributes_reply_t> attribs(xcb_get_window_attributes_reply(connection(), | 148 | ScopedCPointer<xcb_get_window_attributes_reply_t> attribs(xcb_get_window_attributes_reply(connection(), | ||
149 | xcb_get_window_attributes_unchecked(connection(), m_overlayWindow->window()), NULL)); | 149 | xcb_get_window_attributes_unchecked(connection(), m_overlayWindow->window()), nullptr)); | ||
150 | if (!attribs) { | 150 | if (!attribs) { | ||
151 | setFailed("Failed getting window attributes for overlay window"); | 151 | setFailed("Failed getting window attributes for overlay window"); | ||
152 | return; | 152 | return; | ||
153 | } | 153 | } | ||
154 | m_format = XRenderUtils::findPictFormat(attribs->visual); | 154 | m_format = XRenderUtils::findPictFormat(attribs->visual); | ||
155 | if (m_format == 0) { | 155 | if (m_format == 0) { | ||
156 | setFailed("Failed to find XRender format for overlay window"); | 156 | setFailed("Failed to find XRender format for overlay window"); | ||
157 | return; | 157 | return; | ||
158 | } | 158 | } | ||
159 | m_front = xcb_generate_id(connection()); | 159 | m_front = xcb_generate_id(connection()); | ||
160 | xcb_render_create_picture(connection(), m_front, m_overlayWindow->window(), m_format, 0, NULL); | 160 | xcb_render_create_picture(connection(), m_front, m_overlayWindow->window(), m_format, 0, nullptr); | ||
161 | } else { | 161 | } else { | ||
162 | // create XRender picture for the root window | 162 | // create XRender picture for the root window | ||
163 | m_format = XRenderUtils::findPictFormat(defaultScreen()->root_visual); | 163 | m_format = XRenderUtils::findPictFormat(defaultScreen()->root_visual); | ||
164 | if (m_format == 0) { | 164 | if (m_format == 0) { | ||
165 | setFailed("Failed to find XRender format for root window"); | 165 | setFailed("Failed to find XRender format for root window"); | ||
166 | return; // error | 166 | return; // error | ||
167 | } | 167 | } | ||
168 | m_front = xcb_generate_id(connection()); | 168 | m_front = xcb_generate_id(connection()); | ||
169 | const uint32_t values[] = {XCB_SUBWINDOW_MODE_INCLUDE_INFERIORS}; | 169 | const uint32_t values[] = {XCB_SUBWINDOW_MODE_INCLUDE_INFERIORS}; | ||
170 | xcb_render_create_picture(connection(), m_front, rootWindow(), m_format, XCB_RENDER_CP_SUBWINDOW_MODE, values); | 170 | xcb_render_create_picture(connection(), m_front, rootWindow(), m_format, XCB_RENDER_CP_SUBWINDOW_MODE, values); | ||
171 | } | 171 | } | ||
172 | createBuffer(); | 172 | createBuffer(); | ||
173 | } | 173 | } | ||
174 | 174 | | |||
175 | void X11XRenderBackend::createBuffer() | 175 | void X11XRenderBackend::createBuffer() | ||
176 | { | 176 | { | ||
177 | xcb_pixmap_t pixmap = xcb_generate_id(connection()); | 177 | xcb_pixmap_t pixmap = xcb_generate_id(connection()); | ||
178 | const auto displaySize = screens()->displaySize(); | 178 | const auto displaySize = screens()->displaySize(); | ||
179 | xcb_create_pixmap(connection(), Xcb::defaultDepth(), pixmap, rootWindow(), displaySize.width(), displaySize.height()); | 179 | xcb_create_pixmap(connection(), Xcb::defaultDepth(), pixmap, rootWindow(), displaySize.width(), displaySize.height()); | ||
180 | xcb_render_picture_t b = xcb_generate_id(connection()); | 180 | xcb_render_picture_t b = xcb_generate_id(connection()); | ||
181 | xcb_render_create_picture(connection(), b, pixmap, m_format, 0, NULL); | 181 | xcb_render_create_picture(connection(), b, pixmap, m_format, 0, nullptr); | ||
182 | xcb_free_pixmap(connection(), pixmap); // The picture owns the pixmap now | 182 | xcb_free_pixmap(connection(), pixmap); // The picture owns the pixmap now | ||
183 | setBuffer(b); | 183 | setBuffer(b); | ||
184 | } | 184 | } | ||
185 | 185 | | |||
186 | void X11XRenderBackend::present(int mask, const QRegion &damage) | 186 | void X11XRenderBackend::present(int mask, const QRegion &damage) | ||
187 | { | 187 | { | ||
188 | const auto displaySize = screens()->displaySize(); | 188 | const auto displaySize = screens()->displaySize(); | ||
189 | if (mask & Scene::PAINT_SCREEN_REGION) { | 189 | if (mask & Scene::PAINT_SCREEN_REGION) { | ||
Show All 29 Lines | |||||
219 | // SceneXrender | 219 | // SceneXrender | ||
220 | //**************************************** | 220 | //**************************************** | ||
221 | 221 | | |||
222 | SceneXrender* SceneXrender::createScene(QObject *parent) | 222 | SceneXrender* SceneXrender::createScene(QObject *parent) | ||
223 | { | 223 | { | ||
224 | QScopedPointer<XRenderBackend> backend; | 224 | QScopedPointer<XRenderBackend> backend; | ||
225 | backend.reset(new X11XRenderBackend); | 225 | backend.reset(new X11XRenderBackend); | ||
226 | if (backend->isFailed()) { | 226 | if (backend->isFailed()) { | ||
227 | return NULL; | 227 | return nullptr; | ||
228 | } | 228 | } | ||
229 | return new SceneXrender(backend.take(), parent); | 229 | return new SceneXrender(backend.take(), parent); | ||
230 | } | 230 | } | ||
231 | 231 | | |||
232 | SceneXrender::SceneXrender(XRenderBackend *backend, QObject *parent) | 232 | SceneXrender::SceneXrender(XRenderBackend *backend, QObject *parent) | ||
233 | : Scene(parent) | 233 | : Scene(parent) | ||
234 | , m_backend(backend) | 234 | , m_backend(backend) | ||
235 | { | 235 | { | ||
▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Line(s) | |||||
307 | { | 307 | { | ||
308 | return new SceneXRenderDecorationRenderer(client); | 308 | return new SceneXRenderDecorationRenderer(client); | ||
309 | } | 309 | } | ||
310 | 310 | | |||
311 | //**************************************** | 311 | //**************************************** | ||
312 | // SceneXrender::Window | 312 | // SceneXrender::Window | ||
313 | //**************************************** | 313 | //**************************************** | ||
314 | 314 | | |||
315 | XRenderPicture *SceneXrender::Window::s_tempPicture = 0; | 315 | XRenderPicture *SceneXrender::Window::s_tempPicture = nullptr; | ||
316 | QRect SceneXrender::Window::temp_visibleRect; | 316 | QRect SceneXrender::Window::temp_visibleRect; | ||
317 | XRenderPicture *SceneXrender::Window::s_fadeAlphaPicture = nullptr; | 317 | XRenderPicture *SceneXrender::Window::s_fadeAlphaPicture = nullptr; | ||
318 | 318 | | |||
319 | SceneXrender::Window::Window(Toplevel* c, SceneXrender *scene) | 319 | SceneXrender::Window::Window(Toplevel* c, SceneXrender *scene) | ||
320 | : Scene::Window(c) | 320 | : Scene::Window(c) | ||
321 | , m_scene(scene) | 321 | , m_scene(scene) | ||
322 | , format(XRenderUtils::findPictFormat(c->visual())) | 322 | , format(XRenderUtils::findPictFormat(c->visual())) | ||
323 | { | 323 | { | ||
324 | } | 324 | } | ||
325 | 325 | | |||
326 | SceneXrender::Window::~Window() | 326 | SceneXrender::Window::~Window() | ||
327 | { | 327 | { | ||
328 | discardShape(); | 328 | discardShape(); | ||
329 | } | 329 | } | ||
330 | 330 | | |||
331 | void SceneXrender::Window::cleanup() | 331 | void SceneXrender::Window::cleanup() | ||
332 | { | 332 | { | ||
333 | delete s_tempPicture; | 333 | delete s_tempPicture; | ||
334 | s_tempPicture = NULL; | 334 | s_tempPicture = nullptr; | ||
335 | delete s_fadeAlphaPicture; | 335 | delete s_fadeAlphaPicture; | ||
336 | s_fadeAlphaPicture = nullptr; | 336 | s_fadeAlphaPicture = nullptr; | ||
337 | } | 337 | } | ||
338 | 338 | | |||
339 | // Maps window coordinates to screen coordinates | 339 | // Maps window coordinates to screen coordinates | ||
340 | QRect SceneXrender::Window::mapToScreen(int mask, const WindowPaintData &data, const QRect &rect) const | 340 | QRect SceneXrender::Window::mapToScreen(int mask, const WindowPaintData &data, const QRect &rect) const | ||
341 | { | 341 | { | ||
342 | QRect r = rect; | 342 | QRect r = rect; | ||
▲ Show 20 Lines • Show All 44 Lines • ▼ Show 20 Line(s) | |||||
387 | } | 387 | } | ||
388 | 388 | | |||
389 | void SceneXrender::Window::prepareTempPixmap() | 389 | void SceneXrender::Window::prepareTempPixmap() | ||
390 | { | 390 | { | ||
391 | const QSize oldSize = temp_visibleRect.size(); | 391 | const QSize oldSize = temp_visibleRect.size(); | ||
392 | temp_visibleRect = toplevel->visibleRect().translated(-toplevel->pos()); | 392 | temp_visibleRect = toplevel->visibleRect().translated(-toplevel->pos()); | ||
393 | if (s_tempPicture && (oldSize.width() < temp_visibleRect.width() || oldSize.height() < temp_visibleRect.height())) { | 393 | if (s_tempPicture && (oldSize.width() < temp_visibleRect.width() || oldSize.height() < temp_visibleRect.height())) { | ||
394 | delete s_tempPicture; | 394 | delete s_tempPicture; | ||
395 | s_tempPicture = NULL; | 395 | s_tempPicture = nullptr; | ||
396 | scene_setXRenderOffscreenTarget(0); // invalidate, better crash than cause weird results for developers | 396 | scene_setXRenderOffscreenTarget(0); // invalidate, better crash than cause weird results for developers | ||
397 | } | 397 | } | ||
398 | if (!s_tempPicture) { | 398 | if (!s_tempPicture) { | ||
399 | xcb_pixmap_t pix = xcb_generate_id(connection()); | 399 | xcb_pixmap_t pix = xcb_generate_id(connection()); | ||
400 | xcb_create_pixmap(connection(), 32, pix, rootWindow(), temp_visibleRect.width(), temp_visibleRect.height()); | 400 | xcb_create_pixmap(connection(), 32, pix, rootWindow(), temp_visibleRect.width(), temp_visibleRect.height()); | ||
401 | s_tempPicture = new XRenderPicture(pix, 32); | 401 | s_tempPicture = new XRenderPicture(pix, 32); | ||
402 | xcb_free_pixmap(connection(), pix); | 402 | xcb_free_pixmap(connection(), pix); | ||
403 | } | 403 | } | ||
▲ Show 20 Lines • Show All 359 Lines • ▼ Show 20 Line(s) | 761 | { | |||
763 | switch (filter) { | 763 | switch (filter) { | ||
764 | case KWin::Scene::ImageFilterFast: | 764 | case KWin::Scene::ImageFilterFast: | ||
765 | filterName = QByteArray("fast"); | 765 | filterName = QByteArray("fast"); | ||
766 | break; | 766 | break; | ||
767 | case KWin::Scene::ImageFilterGood: | 767 | case KWin::Scene::ImageFilterGood: | ||
768 | filterName = QByteArray("good"); | 768 | filterName = QByteArray("good"); | ||
769 | break; | 769 | break; | ||
770 | } | 770 | } | ||
771 | xcb_render_set_picture_filter(connection(), pic, filterName.length(), filterName.constData(), 0, NULL); | 771 | xcb_render_set_picture_filter(connection(), pic, filterName.length(), filterName.constData(), 0, nullptr); | ||
772 | } | 772 | } | ||
773 | 773 | | |||
774 | WindowPixmap* SceneXrender::Window::createWindowPixmap() | 774 | WindowPixmap* SceneXrender::Window::createWindowPixmap() | ||
775 | { | 775 | { | ||
776 | return new XRenderWindowPixmap(this, format); | 776 | return new XRenderWindowPixmap(this, format); | ||
777 | } | 777 | } | ||
778 | 778 | | |||
779 | void SceneXrender::screenGeometryChanged(const QSize &size) | 779 | void SceneXrender::screenGeometryChanged(const QSize &size) | ||
Show All 25 Lines | 804 | { | |||
805 | if (isValid()) { | 805 | if (isValid()) { | ||
806 | return; | 806 | return; | ||
807 | } | 807 | } | ||
808 | KWin::WindowPixmap::create(); | 808 | KWin::WindowPixmap::create(); | ||
809 | if (!isValid()) { | 809 | if (!isValid()) { | ||
810 | return; | 810 | return; | ||
811 | } | 811 | } | ||
812 | m_picture = xcb_generate_id(connection()); | 812 | m_picture = xcb_generate_id(connection()); | ||
813 | xcb_render_create_picture(connection(), m_picture, pixmap(), m_format, 0, NULL); | 813 | xcb_render_create_picture(connection(), m_picture, pixmap(), m_format, 0, nullptr); | ||
814 | } | 814 | } | ||
815 | 815 | | |||
816 | //**************************************** | 816 | //**************************************** | ||
817 | // SceneXrender::EffectFrame | 817 | // SceneXrender::EffectFrame | ||
818 | //**************************************** | 818 | //**************************************** | ||
819 | 819 | | |||
820 | XRenderPicture *SceneXrender::EffectFrame::s_effectFrameCircle = NULL; | 820 | XRenderPicture *SceneXrender::EffectFrame::s_effectFrameCircle = nullptr; | ||
821 | 821 | | |||
822 | SceneXrender::EffectFrame::EffectFrame(EffectFrameImpl* frame) | 822 | SceneXrender::EffectFrame::EffectFrame(EffectFrameImpl* frame) | ||
823 | : Scene::EffectFrame(frame) | 823 | : Scene::EffectFrame(frame) | ||
824 | { | 824 | { | ||
825 | m_picture = NULL; | 825 | m_picture = nullptr; | ||
826 | m_textPicture = NULL; | 826 | m_textPicture = nullptr; | ||
827 | m_iconPicture = NULL; | 827 | m_iconPicture = nullptr; | ||
828 | m_selectionPicture = NULL; | 828 | m_selectionPicture = nullptr; | ||
829 | } | 829 | } | ||
830 | 830 | | |||
831 | SceneXrender::EffectFrame::~EffectFrame() | 831 | SceneXrender::EffectFrame::~EffectFrame() | ||
832 | { | 832 | { | ||
833 | delete m_picture; | 833 | delete m_picture; | ||
834 | delete m_textPicture; | 834 | delete m_textPicture; | ||
835 | delete m_iconPicture; | 835 | delete m_iconPicture; | ||
836 | delete m_selectionPicture; | 836 | delete m_selectionPicture; | ||
837 | } | 837 | } | ||
838 | 838 | | |||
839 | void SceneXrender::EffectFrame::cleanup() | 839 | void SceneXrender::EffectFrame::cleanup() | ||
840 | { | 840 | { | ||
841 | delete s_effectFrameCircle; | 841 | delete s_effectFrameCircle; | ||
842 | s_effectFrameCircle = NULL; | 842 | s_effectFrameCircle = nullptr; | ||
843 | } | 843 | } | ||
844 | 844 | | |||
845 | void SceneXrender::EffectFrame::free() | 845 | void SceneXrender::EffectFrame::free() | ||
846 | { | 846 | { | ||
847 | delete m_picture; | 847 | delete m_picture; | ||
848 | m_picture = NULL; | 848 | m_picture = nullptr; | ||
849 | delete m_textPicture; | 849 | delete m_textPicture; | ||
850 | m_textPicture = NULL; | 850 | m_textPicture = nullptr; | ||
851 | delete m_iconPicture; | 851 | delete m_iconPicture; | ||
852 | m_iconPicture = NULL; | 852 | m_iconPicture = nullptr; | ||
853 | delete m_selectionPicture; | 853 | delete m_selectionPicture; | ||
854 | m_selectionPicture = NULL; | 854 | m_selectionPicture = nullptr; | ||
855 | } | 855 | } | ||
856 | 856 | | |||
857 | void SceneXrender::EffectFrame::freeIconFrame() | 857 | void SceneXrender::EffectFrame::freeIconFrame() | ||
858 | { | 858 | { | ||
859 | delete m_iconPicture; | 859 | delete m_iconPicture; | ||
860 | m_iconPicture = NULL; | 860 | m_iconPicture = nullptr; | ||
861 | } | 861 | } | ||
862 | 862 | | |||
863 | void SceneXrender::EffectFrame::freeTextFrame() | 863 | void SceneXrender::EffectFrame::freeTextFrame() | ||
864 | { | 864 | { | ||
865 | delete m_textPicture; | 865 | delete m_textPicture; | ||
866 | m_textPicture = NULL; | 866 | m_textPicture = nullptr; | ||
867 | } | 867 | } | ||
868 | 868 | | |||
869 | void SceneXrender::EffectFrame::freeSelection() | 869 | void SceneXrender::EffectFrame::freeSelection() | ||
870 | { | 870 | { | ||
871 | delete m_selectionPicture; | 871 | delete m_selectionPicture; | ||
872 | m_selectionPicture = NULL; | 872 | m_selectionPicture = nullptr; | ||
873 | } | 873 | } | ||
874 | 874 | | |||
875 | void SceneXrender::EffectFrame::crossFadeIcon() | 875 | void SceneXrender::EffectFrame::crossFadeIcon() | ||
876 | { | 876 | { | ||
877 | // TODO: implement me | 877 | // TODO: implement me | ||
878 | } | 878 | } | ||
879 | 879 | | |||
880 | void SceneXrender::EffectFrame::crossFadeText() | 880 | void SceneXrender::EffectFrame::crossFadeText() | ||
▲ Show 20 Lines • Show All 152 Lines • ▼ Show 20 Line(s) | 1027 | xcb_render_composite(connection(), XCB_RENDER_PICT_OP_OVER, *s_effectFrameCircle, alphaMask, \ | |||
1033 | RENDER_CIRCLE(roundness, roundness, | 1033 | RENDER_CIRCLE(roundness, roundness, | ||
1034 | area.left() + area.width() - roundness, area.top() + area.height() - roundness); | 1034 | area.left() + area.width() - roundness, area.top() + area.height() - roundness); | ||
1035 | #undef RENDER_CIRCLE | 1035 | #undef RENDER_CIRCLE | ||
1036 | } | 1036 | } | ||
1037 | 1037 | | |||
1038 | void SceneXrender::EffectFrame::updatePicture() | 1038 | void SceneXrender::EffectFrame::updatePicture() | ||
1039 | { | 1039 | { | ||
1040 | delete m_picture; | 1040 | delete m_picture; | ||
1041 | m_picture = 0L; | 1041 | m_picture = nullptr; | ||
1042 | if (m_effectFrame->style() == EffectFrameStyled) { | 1042 | if (m_effectFrame->style() == EffectFrameStyled) { | ||
1043 | const QPixmap pix = m_effectFrame->frame().framePixmap(); | 1043 | const QPixmap pix = m_effectFrame->frame().framePixmap(); | ||
1044 | if (!pix.isNull()) | 1044 | if (!pix.isNull()) | ||
1045 | m_picture = new XRenderPicture(pix.toImage()); | 1045 | m_picture = new XRenderPicture(pix.toImage()); | ||
1046 | } | 1046 | } | ||
1047 | } | 1047 | } | ||
1048 | 1048 | | |||
1049 | void SceneXrender::EffectFrame::updateTextPicture() | 1049 | void SceneXrender::EffectFrame::updateTextPicture() | ||
1050 | { | 1050 | { | ||
1051 | // Mostly copied from SceneOpenGL::EffectFrame::updateTextTexture() above | 1051 | // Mostly copied from SceneOpenGL::EffectFrame::updateTextTexture() above | ||
1052 | delete m_textPicture; | 1052 | delete m_textPicture; | ||
1053 | m_textPicture = 0L; | 1053 | m_textPicture = nullptr; | ||
1054 | 1054 | | |||
1055 | if (m_effectFrame->text().isEmpty()) { | 1055 | if (m_effectFrame->text().isEmpty()) { | ||
1056 | return; | 1056 | return; | ||
1057 | } | 1057 | } | ||
1058 | 1058 | | |||
1059 | // Determine position on texture to paint text | 1059 | // Determine position on texture to paint text | ||
1060 | QRect rect(QPoint(0, 0), m_effectFrame->geometry().size()); | 1060 | QRect rect(QPoint(0, 0), m_effectFrame->geometry().size()); | ||
1061 | if (!m_effectFrame->icon().isNull() && !m_effectFrame->iconSize().isEmpty()) { | 1061 | if (!m_effectFrame->icon().isNull() && !m_effectFrame->iconSize().isEmpty()) { | ||
Show All 21 Lines | |||||
1083 | p.end(); | 1083 | p.end(); | ||
1084 | m_textPicture = new XRenderPicture(pixmap.toImage()); | 1084 | m_textPicture = new XRenderPicture(pixmap.toImage()); | ||
1085 | } | 1085 | } | ||
1086 | 1086 | | |||
1087 | SceneXRenderShadow::SceneXRenderShadow(Toplevel *toplevel) | 1087 | SceneXRenderShadow::SceneXRenderShadow(Toplevel *toplevel) | ||
1088 | :Shadow(toplevel) | 1088 | :Shadow(toplevel) | ||
1089 | { | 1089 | { | ||
1090 | for (int i=0; i<ShadowElementsCount; ++i) { | 1090 | for (int i=0; i<ShadowElementsCount; ++i) { | ||
1091 | m_pictures[i] = NULL; | 1091 | m_pictures[i] = nullptr; | ||
1092 | } | 1092 | } | ||
1093 | } | 1093 | } | ||
1094 | 1094 | | |||
1095 | SceneXRenderShadow::~SceneXRenderShadow() | 1095 | SceneXRenderShadow::~SceneXRenderShadow() | ||
1096 | { | 1096 | { | ||
1097 | for (int i=0; i<ShadowElementsCount; ++i) { | 1097 | for (int i=0; i<ShadowElementsCount; ++i) { | ||
1098 | delete m_pictures[i]; | 1098 | delete m_pictures[i]; | ||
1099 | } | 1099 | } | ||
▲ Show 20 Lines • Show All 232 Lines • Show Last 20 Lines |