Changeset View
Changeset View
Standalone View
Standalone View
src/kded/xinputadaptor.cpp
Show First 20 Lines • Show All 182 Lines • ▼ Show 20 Line(s) | 181 | { | |||
---|---|---|---|---|---|
183 | 183 | | |||
184 | // what we need is the Coordinate Transformation Matrix | 184 | // what we need is the Coordinate Transformation Matrix | ||
185 | // in the normal case where the whole screen is used we end up with a 3x3 identity matrix | 185 | // in the normal case where the whole screen is used we end up with a 3x3 identity matrix | ||
186 | //in our case we want to change that | 186 | //in our case we want to change that | ||
187 | // | w 0 offsetX | | 187 | // | w 0 offsetX | | ||
188 | // | 0 h offsetY | | 188 | // | 0 h offsetY | | ||
189 | // | 0 0 1 | | 189 | // | 0 0 1 | | ||
190 | 190 | | |||
191 | dbgWacom << "Mapping to area: " << screenArea; | ||||
192 | | ||||
191 | if (screenArea.isEmpty()) { | 193 | if (screenArea.isEmpty()) { | ||
192 | return false; // nothing to do | 194 | return false; // nothing to do | ||
193 | } | 195 | } | ||
194 | 196 | | |||
195 | // get the space the user wants to use to map the tablet | 197 | // get the space the user wants to use to map the tablet | ||
196 | QRect screenAreaGeometry; | 198 | QRect screenAreaGeometry; | ||
197 | QRect fullScreenGeometry = X11Info::getDisplayGeometry(); | 199 | QRect fullScreenGeometry = X11Info::getDisplayGeometry(); | ||
198 | ScreenSpace screenSpace(screenArea); | 200 | ScreenSpace screenSpace(screenArea); | ||
199 | 201 | | |||
200 | if (screenSpace.isDesktop()) { | 202 | if (screenSpace.isDesktop()) { | ||
201 | // full screen area selected | 203 | // full screen area selected | ||
204 | dbgWacom << "Full screen area selected: " << fullScreenGeometry; | ||||
202 | screenAreaGeometry = fullScreenGeometry; | 205 | screenAreaGeometry = fullScreenGeometry; | ||
203 | 206 | | |||
204 | } else if (screenSpace.isMonitor()) { | 207 | } else if (screenSpace.isMonitor()) { | ||
205 | // monitor selected | 208 | // monitor selected | ||
206 | int screenNum = screenSpace.getScreenNumber(); | 209 | int screenNum = screenSpace.getScreenNumber(); | ||
207 | QList< QRect > screenList = X11Info::getScreenGeometries(); | 210 | QList< QRect > screenList = X11Info::getScreenGeometries(); | ||
208 | 211 | | |||
209 | if (screenNum >= screenList.count()) { | 212 | if (screenNum >= screenList.count()) { | ||
210 | // the selected monitor is no longer connected - use full screen | 213 | // the selected monitor is no longer connected - use full screen | ||
214 | dbgWacom << "Selected monitor no longer connected - using full screen: " << fullScreenGeometry; | ||||
211 | screenAreaGeometry = fullScreenGeometry; | 215 | screenAreaGeometry = fullScreenGeometry; | ||
212 | 216 | | |||
213 | } else { | 217 | } else { | ||
214 | // use the given monitor geometry | 218 | // use the given monitor geometry | ||
219 | dbgWacom << "Use monitor geometry for screen " << screenNum << ": " << screenList.at(screenNum); | ||||
215 | screenAreaGeometry = screenList.at(screenNum); | 220 | screenAreaGeometry = screenList.at(screenNum); | ||
216 | } | 221 | } | ||
217 | 222 | | |||
218 | } else { | 223 | } else { | ||
219 | // geometry selected | 224 | // geometry selected | ||
225 | dbgWacom << "Geometry selected: " << StringUtils::toQRect(screenArea, true); | ||||
220 | screenAreaGeometry = StringUtils::toQRect(screenArea, true); | 226 | screenAreaGeometry = StringUtils::toQRect(screenArea, true); | ||
221 | 227 | | |||
222 | if (screenAreaGeometry.isEmpty()) { | 228 | if (screenAreaGeometry.isEmpty()) { | ||
223 | // the input is invalid - use full screen | 229 | // the input is invalid - use full screen | ||
224 | errWacom << "mapTabletToScreen :: can't parse ScreenSpace entry '" << screenArea << "' => device:" << d->deviceName; | 230 | errWacom << "mapTabletToScreen :: can't parse ScreenSpace entry '" << screenArea << "' => device:" << d->deviceName; | ||
225 | screenAreaGeometry = fullScreenGeometry; | 231 | screenAreaGeometry = fullScreenGeometry; | ||
226 | } | 232 | } | ||
227 | } | 233 | } | ||
228 | 234 | | |||
229 | // calculate the new transformation matrix | 235 | // calculate the new transformation matrix | ||
230 | int screenX = screenAreaGeometry.x(); | 236 | int screenX = screenAreaGeometry.x(); | ||
231 | int screenY = screenAreaGeometry.y(); | 237 | int screenY = screenAreaGeometry.y(); | ||
232 | int screenW = screenAreaGeometry.width(); | 238 | int screenW = screenAreaGeometry.width(); | ||
233 | int screenH = screenAreaGeometry.height(); | 239 | int screenH = screenAreaGeometry.height(); | ||
234 | 240 | | |||
235 | qreal w = ( qreal )screenW / ( qreal )fullScreenGeometry.width(); | 241 | qreal w = static_cast<qreal>(screenW) / fullScreenGeometry.width(); | ||
236 | qreal h = ( qreal )screenH / ( qreal )fullScreenGeometry.height(); | 242 | qreal h = static_cast<qreal>(screenH) / fullScreenGeometry.height(); | ||
237 | 243 | | |||
238 | qreal offsetX = ( qreal )screenX / ( qreal )fullScreenGeometry.width(); | 244 | qreal offsetX = static_cast<qreal>(screenX) / fullScreenGeometry.width(); | ||
239 | qreal offsetY = ( qreal )screenY / ( qreal )fullScreenGeometry.height(); | 245 | qreal offsetY = static_cast<qreal>(screenY) / fullScreenGeometry.height(); | ||
240 | 246 | | |||
241 | dbgWacom << "Apply Coordinate Transformation Matrix"; | 247 | dbgWacom << "Apply Coordinate Transformation Matrix"; | ||
242 | dbgWacom << w << "0" << offsetX; | 248 | dbgWacom << w << "0" << offsetX; | ||
243 | dbgWacom << "0" << h << offsetY; | 249 | dbgWacom << "0" << h << offsetY; | ||
244 | dbgWacom << "0" << "0" << "1"; | 250 | dbgWacom << "0" << "0" << "1"; | ||
245 | 251 | | |||
246 | return X11Wacom::setCoordinateTransformationMatrix(d->deviceName, offsetX, offsetY, w, h); | 252 | return X11Wacom::setCoordinateTransformationMatrix(d->deviceName, offsetX, offsetY, w, h); | ||
247 | } | 253 | } | ||
▲ Show 20 Lines • Show All 50 Lines • Show Last 20 Lines |