Mercurial > hg > orthanc-stone
annotate Applications/Sdl/SdlCairoSurface.cpp @ 1221:e2435a524029
merge
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Sat, 07 Dec 2019 17:47:35 +0100 |
parents | 4f2416d519b4 |
children | 2d8ab34c8c91 |
rev | line source |
---|---|
74 | 1 /** |
2 * Stone of Orthanc | |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
4 * Department, University Hospital of Liege, Belgium | |
439 | 5 * Copyright (C) 2017-2019 Osimis S.A., Belgium |
74 | 6 * |
7 * This program is free software: you can redistribute it and/or | |
8 * modify it under the terms of the GNU Affero General Public License | |
9 * as published by the Free Software Foundation, either version 3 of | |
10 * the License, or (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, but | |
13 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Affero General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Affero General Public License | |
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 **/ | |
20 | |
21 | |
213
f753a7e15a73
rename SdlSurface as SdlCairoSurface
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
212
diff
changeset
|
22 #include "SdlCairoSurface.h" |
74 | 23 |
24 #if ORTHANC_ENABLE_SDL == 1 | |
25 | |
212
5412adf19980
resort to OrthancFramework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
26 #include <Core/Logging.h> |
5412adf19980
resort to OrthancFramework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
27 #include <Core/OrthancException.h> |
74 | 28 |
29 namespace OrthancStone | |
30 { | |
213
f753a7e15a73
rename SdlSurface as SdlCairoSurface
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
212
diff
changeset
|
31 SdlCairoSurface::SdlCairoSurface(SdlWindow& window) : |
74 | 32 window_(window), |
33 sdlSurface_(NULL) | |
34 { | |
35 } | |
36 | |
37 | |
213
f753a7e15a73
rename SdlSurface as SdlCairoSurface
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
212
diff
changeset
|
38 SdlCairoSurface::~SdlCairoSurface() |
74 | 39 { |
40 if (sdlSurface_) | |
41 { | |
42 SDL_FreeSurface(sdlSurface_); | |
43 } | |
44 } | |
45 | |
46 | |
213
f753a7e15a73
rename SdlSurface as SdlCairoSurface
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
212
diff
changeset
|
47 void SdlCairoSurface::SetSize(unsigned int width, |
f753a7e15a73
rename SdlSurface as SdlCairoSurface
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
212
diff
changeset
|
48 unsigned int height) |
74 | 49 { |
50 if (cairoSurface_.get() == NULL || | |
51 cairoSurface_->GetWidth() != width || | |
52 cairoSurface_->GetHeight() != height) | |
53 { | |
560
aaeec7be8fb7
add support for alpha channel in CairoSurface
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
439
diff
changeset
|
54 cairoSurface_.reset(new CairoSurface(width, height, false /* no alpha */)); |
74 | 55 |
56 // TODO Big endian? | |
57 static const uint32_t rmask = 0x00ff0000; | |
58 static const uint32_t gmask = 0x0000ff00; | |
59 static const uint32_t bmask = 0x000000ff; | |
60 | |
61 if (sdlSurface_) | |
62 { | |
63 SDL_FreeSurface(sdlSurface_); | |
64 } | |
65 | |
66 sdlSurface_ = SDL_CreateRGBSurfaceFrom(cairoSurface_->GetBuffer(), width, height, 32, | |
67 cairoSurface_->GetPitch(), rmask, gmask, bmask, 0); | |
68 if (!sdlSurface_) | |
69 { | |
70 LOG(ERROR) << "Cannot create a SDL surface from a Cairo surface"; | |
71 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | |
72 } | |
73 } | |
74 } | |
75 | |
76 | |
726
4f2416d519b4
moving layers, widgets and loaders to Deprecated namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
560
diff
changeset
|
77 void SdlCairoSurface::Render(Deprecated::IViewport& viewport) |
74 | 78 { |
79 if (cairoSurface_.get() == NULL) | |
80 { | |
81 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
82 } | |
83 | |
316
ce48c3b3b0e9
fix for new ImageAccessor API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
213
diff
changeset
|
84 Orthanc::ImageAccessor target; |
ce48c3b3b0e9
fix for new ImageAccessor API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
213
diff
changeset
|
85 cairoSurface_->GetWriteableAccessor(target); |
74 | 86 |
87 if (viewport.Render(target)) | |
88 { | |
89 window_.Render(sdlSurface_); | |
90 } | |
91 } | |
92 } | |
93 | |
94 #endif |