Browse Source

Added screenshot output resolution support

The user can now select whether to scale the current viewport or to get
a fixed resolution screenshot of the viewport. The lock aspect ratio
button, when selected, makes sure the screenshot image has the same
aspect ratio as the viewport.

ENH: Added method to enforce resolution for output screenshot
Sankhesh Jhaveri 13 years ago
parent
commit
8ae09ca686

BIN
Libs/Widgets/Resources/Icons/lock.png


BIN
Libs/Widgets/Resources/Icons/unlock.png


+ 126 - 76
Libs/Widgets/Resources/UI/ctkScreenshotDialog.ui

@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>704</width>
-    <height>235</height>
+    <width>579</width>
+    <height>309</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -19,8 +19,72 @@
   <property name="windowTitle">
    <string>Screen Capture Options</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="2" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="CountDownLabel">
+       <property name="text">
+        <string>0 s</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QLabel" name="ImageFullNameLabel">
+       <property name="text">
+        <string>Untitled_0.png</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QDialogButtonBox" name="ButtonBox">
+       <property name="standardButtons">
+        <set>QDialogButtonBox::Close|QDialogButtonBox::Ok</set>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>0</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="0" column="0">
     <widget class="QGroupBox" name="OptionGroupBox">
      <property name="enabled">
       <bool>false</bool>
@@ -34,7 +98,7 @@
      <property name="title">
       <string>Options</string>
      </property>
-     <layout class="QFormLayout" name="formLayout">
+     <layout class="QGridLayout" name="gridLayout_2">
       <item row="0" column="0">
        <widget class="QLabel" name="DirectoryLabel">
         <property name="text">
@@ -43,7 +107,7 @@
        </widget>
       </item>
       <item row="0" column="1">
-       <widget class="ctkDirectoryButton" name="DirectoryButton">
+       <widget class="ctkDirectoryButton" name="DirectoryButton" native="true">
         <property name="toolTip">
          <string>Select a directory in which screen captures will be saved.</string>
         </property>
@@ -77,10 +141,13 @@
        <widget class="QSpinBox" name="ImageVersionNumberSpinBox"/>
       </item>
       <item row="3" column="0">
-       <widget class="QLabel" name="ScaleFactorLabel">
+       <widget class="QRadioButton" name="ScaleFactorRadioButton">
         <property name="text">
          <string>Scale factor:</string>
         </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
        </widget>
       </item>
       <item row="3" column="1">
@@ -105,28 +172,73 @@
         </property>
        </widget>
       </item>
-      <item row="4" column="0">
+      <item row="4" column="0" colspan="2">
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
+        <item>
+         <widget class="QRadioButton" name="OutputResolutionRadioButton">
+          <property name="text">
+           <string>Output resolution:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="WidthLineEdit"/>
+        </item>
+        <item>
+         <widget class="QLabel" name="xLabel">
+          <property name="text">
+           <string>x</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="HeightLineEdit"/>
+        </item>
+        <item>
+         <widget class="QToolButton" name="LockAspectToolButton">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="text">
+           <string>...</string>
+          </property>
+          <property name="icon">
+           <iconset resource="../ctkWidgets.qrc">
+            <normaloff>:/Icons/unlock.png</normaloff>
+            <normalon>:/Icons/lock.png</normalon>:/Icons/unlock.png</iconset>
+          </property>
+          <property name="checkable">
+           <bool>true</bool>
+          </property>
+          <property name="checked">
+           <bool>false</bool>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item row="5" column="0">
        <widget class="QLabel" name="OverwriteLabel">
         <property name="text">
          <string>Overwrite:</string>
         </property>
        </widget>
       </item>
-      <item row="4" column="1">
+      <item row="5" column="1">
        <widget class="QCheckBox" name="OverwriteCheckBox">
         <property name="text">
          <string/>
         </property>
        </widget>
       </item>
-      <item row="5" column="0">
+      <item row="6" column="0">
        <widget class="QLabel" name="DelayLabel">
         <property name="text">
          <string>Screenshot delay:</string>
         </property>
        </widget>
       </item>
-      <item row="5" column="1">
+      <item row="6" column="1">
        <widget class="QSpinBox" name="DelaySpinBox">
         <property name="suffix">
          <string> s</string>
@@ -139,70 +251,6 @@
      </layout>
     </widget>
    </item>
-   <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>0</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <item>
-      <widget class="QLabel" name="CountDownLabel">
-       <property name="text">
-        <string>0 s</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="horizontalSpacer">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
-      <widget class="QLabel" name="ImageFullNameLabel">
-       <property name="text">
-        <string>Untitled_0.png</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="horizontalSpacer_2">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
-      <widget class="QDialogButtonBox" name="ButtonBox">
-       <property name="standardButtons">
-        <set>QDialogButtonBox::Close|QDialogButtonBox::Ok</set>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
   </layout>
  </widget>
  <customwidgets>
@@ -212,7 +260,9 @@
    <header>ctkDirectoryButton.h</header>
   </customwidget>
  </customwidgets>
- <resources/>
+ <resources>
+  <include location="../ctkWidgets.qrc"/>
+ </resources>
  <connections>
   <connection>
    <sender>ButtonBox</sender>

+ 256 - 255
Libs/Widgets/Resources/ctkWidgets.qrc

@@ -1,257 +1,258 @@
 <RCC>
-    <qresource prefix="/">
-        <file>Icons/edit.png</file>
-        <file>Icons/minus.png</file>
-        <file>Icons/plus.png</file>
-        <file>Icons/expand-down.png</file>
-        <file>Icons/expand-up.png</file>
-        <file>Icons/search.svg</file>
-        <file>Icons/clear.svg</file>
-        <file>Icons/Languages/ad.png</file>
-        <file>Icons/Languages/ae.png</file>
-        <file>Icons/Languages/af.png</file>
-        <file>Icons/Languages/ag.png</file>
-        <file>Icons/Languages/ai.png</file>
-        <file>Icons/Languages/al.png</file>
-        <file>Icons/Languages/am.png</file>
-        <file>Icons/Languages/an.png</file>
-        <file>Icons/Languages/ao.png</file>
-        <file>Icons/Languages/ar.png</file>
-        <file>Icons/Languages/as.png</file>
-        <file>Icons/Languages/at.png</file>
-        <file>Icons/Languages/au.png</file>
-        <file>Icons/Languages/aw.png</file>
-        <file>Icons/Languages/ax.png</file>
-        <file>Icons/Languages/az.png</file>
-        <file>Icons/Languages/ba.png</file>
-        <file>Icons/Languages/bb.png</file>
-        <file>Icons/Languages/bd.png</file>
-        <file>Icons/Languages/be.png</file>
-        <file>Icons/Languages/bf.png</file>
-        <file>Icons/Languages/bg.png</file>
-        <file>Icons/Languages/bh.png</file>
-        <file>Icons/Languages/bi.png</file>
-        <file>Icons/Languages/bj.png</file>
-        <file>Icons/Languages/bm.png</file>
-        <file>Icons/Languages/bn.png</file>
-        <file>Icons/Languages/bo.png</file>
-        <file>Icons/Languages/br.png</file>
-        <file>Icons/Languages/bs.png</file>
-        <file>Icons/Languages/bt.png</file>
-        <file>Icons/Languages/bv.png</file>
-        <file>Icons/Languages/bw.png</file>
-        <file>Icons/Languages/by.png</file>
-        <file>Icons/Languages/bz.png</file>
-        <file>Icons/Languages/ca.png</file>
-        <file>Icons/Languages/cc.png</file>
-        <file>Icons/Languages/cd.png</file>
-        <file>Icons/Languages/cf.png</file>
-        <file>Icons/Languages/cg.png</file>
-        <file>Icons/Languages/ch.png</file>
-        <file>Icons/Languages/ci.png</file>
-        <file>Icons/Languages/ck.png</file>
-        <file>Icons/Languages/cl.png</file>
-        <file>Icons/Languages/cm.png</file>
-        <file>Icons/Languages/cn.png</file>
-        <file>Icons/Languages/co.png</file>
-        <file>Icons/Languages/cr.png</file>
-        <file>Icons/Languages/cs.png</file>
-        <file>Icons/Languages/cu.png</file>
-        <file>Icons/Languages/cv.png</file>
-        <file>Icons/Languages/cx.png</file>
-        <file>Icons/Languages/cy.png</file>
-        <file>Icons/Languages/cz.png</file>
-        <file>Icons/Languages/de.png</file>
-        <file>Icons/Languages/dj.png</file>
-        <file>Icons/Languages/dk.png</file>
-        <file>Icons/Languages/dm.png</file>
-        <file>Icons/Languages/do.png</file>
-        <file>Icons/Languages/dz.png</file>
-        <file>Icons/Languages/ec.png</file>
-        <file>Icons/Languages/ee.png</file>
-        <file>Icons/Languages/eg.png</file>
-        <file>Icons/Languages/eh.png</file>
-        <file>Icons/Languages/england.png</file>
-        <file>Icons/Languages/er.png</file>
-        <file>Icons/Languages/es.png</file>
-        <file>Icons/Languages/et.png</file>
-        <file>Icons/Languages/fam.png</file>
-        <file>Icons/Languages/fi.png</file>
-        <file>Icons/Languages/fj.png</file>
-        <file>Icons/Languages/fk.png</file>
-        <file>Icons/Languages/fm.png</file>
-        <file>Icons/Languages/fo.png</file>
-        <file>Icons/Languages/fr.png</file>
-        <file>Icons/Languages/ga.png</file>
-        <file>Icons/Languages/gb.png</file>
-        <file>Icons/Languages/gd.png</file>
-        <file>Icons/Languages/ge.png</file>
-        <file>Icons/Languages/gf.png</file>
-        <file>Icons/Languages/gh.png</file>
-        <file>Icons/Languages/gi.png</file>
-        <file>Icons/Languages/gl.png</file>
-        <file>Icons/Languages/gm.png</file>
-        <file>Icons/Languages/gn.png</file>
-        <file>Icons/Languages/gp.png</file>
-        <file>Icons/Languages/gq.png</file>
-        <file>Icons/Languages/gr.png</file>
-        <file>Icons/Languages/gs.png</file>
-        <file>Icons/Languages/gt.png</file>
-        <file>Icons/Languages/gu.png</file>
-        <file>Icons/Languages/gw.png</file>
-        <file>Icons/Languages/gy.png</file>
-        <file>Icons/Languages/hk.png</file>
-        <file>Icons/Languages/hm.png</file>
-        <file>Icons/Languages/hn.png</file>
-        <file>Icons/Languages/hr.png</file>
-        <file>Icons/Languages/ht.png</file>
-        <file>Icons/Languages/hu.png</file>
-        <file>Icons/Languages/id.png</file>
-        <file>Icons/Languages/ie.png</file>
-        <file>Icons/Languages/il.png</file>
-        <file>Icons/Languages/in.png</file>
-        <file>Icons/Languages/io.png</file>
-        <file>Icons/Languages/iq.png</file>
-        <file>Icons/Languages/ir.png</file>
-        <file>Icons/Languages/is.png</file>
-        <file>Icons/Languages/it.png</file>
-        <file>Icons/Languages/jm.png</file>
-        <file>Icons/Languages/jo.png</file>
-        <file>Icons/Languages/jp.png</file>
-        <file>Icons/Languages/ke.png</file>
-        <file>Icons/Languages/kg.png</file>
-        <file>Icons/Languages/kh.png</file>
-        <file>Icons/Languages/ki.png</file>
-        <file>Icons/Languages/km.png</file>
-        <file>Icons/Languages/kn.png</file>
-        <file>Icons/Languages/kp.png</file>
-        <file>Icons/Languages/kr.png</file>
-        <file>Icons/Languages/kw.png</file>
-        <file>Icons/Languages/ky.png</file>
-        <file>Icons/Languages/kz.png</file>
-        <file>Icons/Languages/la.png</file>
-        <file>Icons/Languages/lb.png</file>
-        <file>Icons/Languages/lc.png</file>
-        <file>Icons/Languages/li.png</file>
-        <file>Icons/Languages/lk.png</file>
-        <file>Icons/Languages/lr.png</file>
-        <file>Icons/Languages/ls.png</file>
-        <file>Icons/Languages/lt.png</file>
-        <file>Icons/Languages/lu.png</file>
-        <file>Icons/Languages/lv.png</file>
-        <file>Icons/Languages/ly.png</file>
-        <file>Icons/Languages/ma.png</file>
-        <file>Icons/Languages/mc.png</file>
-        <file>Icons/Languages/md.png</file>
-        <file>Icons/Languages/me.png</file>
-        <file>Icons/Languages/mg.png</file>
-        <file>Icons/Languages/mh.png</file>
-        <file>Icons/Languages/mk.png</file>
-        <file>Icons/Languages/ml.png</file>
-        <file>Icons/Languages/mm.png</file>
-        <file>Icons/Languages/mn.png</file>
-        <file>Icons/Languages/mo.png</file>
-        <file>Icons/Languages/mp.png</file>
-        <file>Icons/Languages/mq.png</file>
-        <file>Icons/Languages/mr.png</file>
-        <file>Icons/Languages/ms.png</file>
-        <file>Icons/Languages/mt.png</file>
-        <file>Icons/Languages/mu.png</file>
-        <file>Icons/Languages/mv.png</file>
-        <file>Icons/Languages/mw.png</file>
-        <file>Icons/Languages/mx.png</file>
-        <file>Icons/Languages/my.png</file>
-        <file>Icons/Languages/mz.png</file>
-        <file>Icons/Languages/na.png</file>
-        <file>Icons/Languages/nc.png</file>
-        <file>Icons/Languages/ne.png</file>
-        <file>Icons/Languages/nf.png</file>
-        <file>Icons/Languages/ng.png</file>
-        <file>Icons/Languages/ni.png</file>
-        <file>Icons/Languages/nl.png</file>
-        <file>Icons/Languages/no.png</file>
-        <file>Icons/Languages/np.png</file>
-        <file>Icons/Languages/nr.png</file>
-        <file>Icons/Languages/nu.png</file>
-        <file>Icons/Languages/nz.png</file>
-        <file>Icons/Languages/om.png</file>
-        <file>Icons/Languages/pa.png</file>
-        <file>Icons/Languages/pe.png</file>
-        <file>Icons/Languages/pf.png</file>
-        <file>Icons/Languages/pg.png</file>
-        <file>Icons/Languages/ph.png</file>
-        <file>Icons/Languages/pk.png</file>
-        <file>Icons/Languages/pl.png</file>
-        <file>Icons/Languages/pm.png</file>
-        <file>Icons/Languages/pn.png</file>
-        <file>Icons/Languages/pr.png</file>
-        <file>Icons/Languages/ps.png</file>
-        <file>Icons/Languages/pt.png</file>
-        <file>Icons/Languages/pw.png</file>
-        <file>Icons/Languages/py.png</file>
-        <file>Icons/Languages/qa.png</file>
-        <file>Icons/Languages/re.png</file>
-        <file>Icons/Languages/ro.png</file>
-        <file>Icons/Languages/rs.png</file>
-        <file>Icons/Languages/ru.png</file>
-        <file>Icons/Languages/rw.png</file>
-        <file>Icons/Languages/sa.png</file>
-        <file>Icons/Languages/sb.png</file>
-        <file>Icons/Languages/sc.png</file>
-        <file>Icons/Languages/scotland.png</file>
-        <file>Icons/Languages/sd.png</file>
-        <file>Icons/Languages/se.png</file>
-        <file>Icons/Languages/sg.png</file>
-        <file>Icons/Languages/sh.png</file>
-        <file>Icons/Languages/si.png</file>
-        <file>Icons/Languages/sj.png</file>
-        <file>Icons/Languages/sk.png</file>
-        <file>Icons/Languages/sl.png</file>
-        <file>Icons/Languages/sm.png</file>
-        <file>Icons/Languages/sn.png</file>
-        <file>Icons/Languages/so.png</file>
-        <file>Icons/Languages/sr.png</file>
-        <file>Icons/Languages/st.png</file>
-        <file>Icons/Languages/sv.png</file>
-        <file>Icons/Languages/sy.png</file>
-        <file>Icons/Languages/sz.png</file>
-        <file>Icons/Languages/tc.png</file>
-        <file>Icons/Languages/td.png</file>
-        <file>Icons/Languages/tf.png</file>
-        <file>Icons/Languages/tg.png</file>
-        <file>Icons/Languages/th.png</file>
-        <file>Icons/Languages/tj.png</file>
-        <file>Icons/Languages/tk.png</file>
-        <file>Icons/Languages/tl.png</file>
-        <file>Icons/Languages/tm.png</file>
-        <file>Icons/Languages/tn.png</file>
-        <file>Icons/Languages/to.png</file>
-        <file>Icons/Languages/tr.png</file>
-        <file>Icons/Languages/tt.png</file>
-        <file>Icons/Languages/tv.png</file>
-        <file>Icons/Languages/tw.png</file>
-        <file>Icons/Languages/tz.png</file>
-        <file>Icons/Languages/ua.png</file>
-        <file>Icons/Languages/ug.png</file>
-        <file>Icons/Languages/um.png</file>
-        <file>Icons/Languages/us.png</file>
-        <file>Icons/Languages/uy.png</file>
-        <file>Icons/Languages/uz.png</file>
-        <file>Icons/Languages/va.png</file>
-        <file>Icons/Languages/vc.png</file>
-        <file>Icons/Languages/ve.png</file>
-        <file>Icons/Languages/vg.png</file>
-        <file>Icons/Languages/vi.png</file>
-        <file>Icons/Languages/vn.png</file>
-        <file>Icons/Languages/vu.png</file>
-        <file>Icons/Languages/wales.png</file>
-        <file>Icons/Languages/wf.png</file>
-        <file>Icons/Languages/ws.png</file>
-        <file>Icons/Languages/ye.png</file>
-        <file>Icons/Languages/yt.png</file>
-        <file>Icons/Languages/za.png</file>
-        <file>Icons/Languages/zm.png</file>
-        <file>Icons/Languages/zw.png</file>
-        <file>Icons/Languages/en.png</file>
-    </qresource>
+  <qresource prefix="/">
+    <file>Icons/edit.png</file>
+    <file>Icons/lock.png</file>
+    <file>Icons/unlock.png</file>
+    <file>Icons/minus.png</file>
+    <file>Icons/plus.png</file>
+    <file>Icons/expand-down.png</file>
+    <file>Icons/expand-up.png</file>
+    <file>Icons/search.svg</file>
+    <file>Icons/clear.svg</file>
+    <file>Icons/Languages/ad.png</file>
+    <file>Icons/Languages/ae.png</file>
+    <file>Icons/Languages/af.png</file>
+    <file>Icons/Languages/ag.png</file>
+    <file>Icons/Languages/ai.png</file>
+    <file>Icons/Languages/al.png</file>
+    <file>Icons/Languages/am.png</file>
+    <file>Icons/Languages/an.png</file>
+    <file>Icons/Languages/ao.png</file>
+    <file>Icons/Languages/ar.png</file>
+    <file>Icons/Languages/as.png</file>
+    <file>Icons/Languages/at.png</file>
+    <file>Icons/Languages/au.png</file>
+    <file>Icons/Languages/aw.png</file>
+    <file>Icons/Languages/ax.png</file>
+    <file>Icons/Languages/az.png</file>
+    <file>Icons/Languages/ba.png</file>
+    <file>Icons/Languages/bb.png</file>
+    <file>Icons/Languages/bd.png</file>
+    <file>Icons/Languages/be.png</file>
+    <file>Icons/Languages/bf.png</file>
+    <file>Icons/Languages/bg.png</file>
+    <file>Icons/Languages/bh.png</file>
+    <file>Icons/Languages/bi.png</file>
+    <file>Icons/Languages/bj.png</file>
+    <file>Icons/Languages/bm.png</file>
+    <file>Icons/Languages/bn.png</file>
+    <file>Icons/Languages/bo.png</file>
+    <file>Icons/Languages/br.png</file>
+    <file>Icons/Languages/bs.png</file>
+    <file>Icons/Languages/bt.png</file>
+    <file>Icons/Languages/bv.png</file>
+    <file>Icons/Languages/bw.png</file>
+    <file>Icons/Languages/by.png</file>
+    <file>Icons/Languages/bz.png</file>
+    <file>Icons/Languages/ca.png</file>
+    <file>Icons/Languages/cc.png</file>
+    <file>Icons/Languages/cd.png</file>
+    <file>Icons/Languages/cf.png</file>
+    <file>Icons/Languages/cg.png</file>
+    <file>Icons/Languages/ch.png</file>
+    <file>Icons/Languages/ci.png</file>
+    <file>Icons/Languages/ck.png</file>
+    <file>Icons/Languages/cl.png</file>
+    <file>Icons/Languages/cm.png</file>
+    <file>Icons/Languages/cn.png</file>
+    <file>Icons/Languages/co.png</file>
+    <file>Icons/Languages/cr.png</file>
+    <file>Icons/Languages/cs.png</file>
+    <file>Icons/Languages/cu.png</file>
+    <file>Icons/Languages/cv.png</file>
+    <file>Icons/Languages/cx.png</file>
+    <file>Icons/Languages/cy.png</file>
+    <file>Icons/Languages/cz.png</file>
+    <file>Icons/Languages/de.png</file>
+    <file>Icons/Languages/dj.png</file>
+    <file>Icons/Languages/dk.png</file>
+    <file>Icons/Languages/dm.png</file>
+    <file>Icons/Languages/do.png</file>
+    <file>Icons/Languages/dz.png</file>
+    <file>Icons/Languages/ec.png</file>
+    <file>Icons/Languages/ee.png</file>
+    <file>Icons/Languages/eg.png</file>
+    <file>Icons/Languages/eh.png</file>
+    <file>Icons/Languages/england.png</file>
+    <file>Icons/Languages/er.png</file>
+    <file>Icons/Languages/es.png</file>
+    <file>Icons/Languages/et.png</file>
+    <file>Icons/Languages/fam.png</file>
+    <file>Icons/Languages/fi.png</file>
+    <file>Icons/Languages/fj.png</file>
+    <file>Icons/Languages/fk.png</file>
+    <file>Icons/Languages/fm.png</file>
+    <file>Icons/Languages/fo.png</file>
+    <file>Icons/Languages/fr.png</file>
+    <file>Icons/Languages/ga.png</file>
+    <file>Icons/Languages/gb.png</file>
+    <file>Icons/Languages/gd.png</file>
+    <file>Icons/Languages/ge.png</file>
+    <file>Icons/Languages/gf.png</file>
+    <file>Icons/Languages/gh.png</file>
+    <file>Icons/Languages/gi.png</file>
+    <file>Icons/Languages/gl.png</file>
+    <file>Icons/Languages/gm.png</file>
+    <file>Icons/Languages/gn.png</file>
+    <file>Icons/Languages/gp.png</file>
+    <file>Icons/Languages/gq.png</file>
+    <file>Icons/Languages/gr.png</file>
+    <file>Icons/Languages/gs.png</file>
+    <file>Icons/Languages/gt.png</file>
+    <file>Icons/Languages/gu.png</file>
+    <file>Icons/Languages/gw.png</file>
+    <file>Icons/Languages/gy.png</file>
+    <file>Icons/Languages/hk.png</file>
+    <file>Icons/Languages/hm.png</file>
+    <file>Icons/Languages/hn.png</file>
+    <file>Icons/Languages/hr.png</file>
+    <file>Icons/Languages/ht.png</file>
+    <file>Icons/Languages/hu.png</file>
+    <file>Icons/Languages/id.png</file>
+    <file>Icons/Languages/ie.png</file>
+    <file>Icons/Languages/il.png</file>
+    <file>Icons/Languages/in.png</file>
+    <file>Icons/Languages/io.png</file>
+    <file>Icons/Languages/iq.png</file>
+    <file>Icons/Languages/ir.png</file>
+    <file>Icons/Languages/is.png</file>
+    <file>Icons/Languages/it.png</file>
+    <file>Icons/Languages/jm.png</file>
+    <file>Icons/Languages/jo.png</file>
+    <file>Icons/Languages/jp.png</file>
+    <file>Icons/Languages/ke.png</file>
+    <file>Icons/Languages/kg.png</file>
+    <file>Icons/Languages/kh.png</file>
+    <file>Icons/Languages/ki.png</file>
+    <file>Icons/Languages/km.png</file>
+    <file>Icons/Languages/kn.png</file>
+    <file>Icons/Languages/kp.png</file>
+    <file>Icons/Languages/kr.png</file>
+    <file>Icons/Languages/kw.png</file>
+    <file>Icons/Languages/ky.png</file>
+    <file>Icons/Languages/kz.png</file>
+    <file>Icons/Languages/la.png</file>
+    <file>Icons/Languages/lb.png</file>
+    <file>Icons/Languages/lc.png</file>
+    <file>Icons/Languages/li.png</file>
+    <file>Icons/Languages/lk.png</file>
+    <file>Icons/Languages/lr.png</file>
+    <file>Icons/Languages/ls.png</file>
+    <file>Icons/Languages/lt.png</file>
+    <file>Icons/Languages/lu.png</file>
+    <file>Icons/Languages/lv.png</file>
+    <file>Icons/Languages/ly.png</file>
+    <file>Icons/Languages/ma.png</file>
+    <file>Icons/Languages/mc.png</file>
+    <file>Icons/Languages/md.png</file>
+    <file>Icons/Languages/me.png</file>
+    <file>Icons/Languages/mg.png</file>
+    <file>Icons/Languages/mh.png</file>
+    <file>Icons/Languages/mk.png</file>
+    <file>Icons/Languages/ml.png</file>
+    <file>Icons/Languages/mm.png</file>
+    <file>Icons/Languages/mn.png</file>
+    <file>Icons/Languages/mo.png</file>
+    <file>Icons/Languages/mp.png</file>
+    <file>Icons/Languages/mq.png</file>
+    <file>Icons/Languages/mr.png</file>
+    <file>Icons/Languages/ms.png</file>
+    <file>Icons/Languages/mt.png</file>
+    <file>Icons/Languages/mu.png</file>
+    <file>Icons/Languages/mv.png</file>
+    <file>Icons/Languages/mw.png</file>
+    <file>Icons/Languages/mx.png</file>
+    <file>Icons/Languages/my.png</file>
+    <file>Icons/Languages/mz.png</file>
+    <file>Icons/Languages/na.png</file>
+    <file>Icons/Languages/nc.png</file>
+    <file>Icons/Languages/ne.png</file>
+    <file>Icons/Languages/nf.png</file>
+    <file>Icons/Languages/ng.png</file>
+    <file>Icons/Languages/ni.png</file>
+    <file>Icons/Languages/nl.png</file>
+    <file>Icons/Languages/no.png</file>
+    <file>Icons/Languages/np.png</file>
+    <file>Icons/Languages/nr.png</file>
+    <file>Icons/Languages/nu.png</file>
+    <file>Icons/Languages/nz.png</file>
+    <file>Icons/Languages/om.png</file>
+    <file>Icons/Languages/pa.png</file>
+    <file>Icons/Languages/pe.png</file>
+    <file>Icons/Languages/pf.png</file>
+    <file>Icons/Languages/pg.png</file>
+    <file>Icons/Languages/ph.png</file>
+    <file>Icons/Languages/pk.png</file>
+    <file>Icons/Languages/pl.png</file>
+    <file>Icons/Languages/pm.png</file>
+    <file>Icons/Languages/pn.png</file>
+    <file>Icons/Languages/pr.png</file>
+    <file>Icons/Languages/ps.png</file>
+    <file>Icons/Languages/pt.png</file>
+    <file>Icons/Languages/pw.png</file>
+    <file>Icons/Languages/py.png</file>
+    <file>Icons/Languages/qa.png</file>
+    <file>Icons/Languages/re.png</file>
+    <file>Icons/Languages/ro.png</file>
+    <file>Icons/Languages/rs.png</file>
+    <file>Icons/Languages/ru.png</file>
+    <file>Icons/Languages/rw.png</file>
+    <file>Icons/Languages/sa.png</file>
+    <file>Icons/Languages/sb.png</file>
+    <file>Icons/Languages/sc.png</file>
+    <file>Icons/Languages/scotland.png</file>
+    <file>Icons/Languages/sd.png</file>
+    <file>Icons/Languages/se.png</file>
+    <file>Icons/Languages/sg.png</file>
+    <file>Icons/Languages/sh.png</file>
+    <file>Icons/Languages/si.png</file>
+    <file>Icons/Languages/sj.png</file>
+    <file>Icons/Languages/sk.png</file>
+    <file>Icons/Languages/sl.png</file>
+    <file>Icons/Languages/sm.png</file>
+    <file>Icons/Languages/sn.png</file>
+    <file>Icons/Languages/so.png</file>
+    <file>Icons/Languages/sr.png</file>
+    <file>Icons/Languages/st.png</file>
+    <file>Icons/Languages/sv.png</file>
+    <file>Icons/Languages/sy.png</file>
+    <file>Icons/Languages/sz.png</file>
+    <file>Icons/Languages/tc.png</file>
+    <file>Icons/Languages/td.png</file>
+    <file>Icons/Languages/tf.png</file>
+    <file>Icons/Languages/tg.png</file>
+    <file>Icons/Languages/th.png</file>
+    <file>Icons/Languages/tj.png</file>
+    <file>Icons/Languages/tk.png</file>
+    <file>Icons/Languages/tl.png</file>
+    <file>Icons/Languages/tm.png</file>
+    <file>Icons/Languages/tn.png</file>
+    <file>Icons/Languages/to.png</file>
+    <file>Icons/Languages/tr.png</file>
+    <file>Icons/Languages/tt.png</file>
+    <file>Icons/Languages/tv.png</file>
+    <file>Icons/Languages/tw.png</file>
+    <file>Icons/Languages/tz.png</file>
+    <file>Icons/Languages/ua.png</file>
+    <file>Icons/Languages/ug.png</file>
+    <file>Icons/Languages/um.png</file>
+    <file>Icons/Languages/uy.png</file>
+    <file>Icons/Languages/uz.png</file>
+    <file>Icons/Languages/va.png</file>
+    <file>Icons/Languages/vc.png</file>
+    <file>Icons/Languages/ve.png</file>
+    <file>Icons/Languages/vg.png</file>
+    <file>Icons/Languages/vi.png</file>
+    <file>Icons/Languages/vn.png</file>
+    <file>Icons/Languages/vu.png</file>
+    <file>Icons/Languages/wales.png</file>
+    <file>Icons/Languages/wf.png</file>
+    <file>Icons/Languages/ws.png</file>
+    <file>Icons/Languages/ye.png</file>
+    <file>Icons/Languages/yt.png</file>
+    <file>Icons/Languages/za.png</file>
+    <file>Icons/Languages/zm.png</file>
+    <file>Icons/Languages/zw.png</file>
+    <file>Icons/Languages/en.png</file>
+  </qresource>
 </RCC>

+ 81 - 2
Libs/Widgets/ctkScreenshotDialog.cpp

@@ -36,6 +36,7 @@ ctkScreenshotDialogPrivate::ctkScreenshotDialogPrivate(ctkScreenshotDialog& obje
 {
   this->CaptureButton = 0;
   this->CountDownValue = 0;
+  this->AspectRatio = 1.0;
 }
 
 //-----------------------------------------------------------------------------
@@ -68,6 +69,11 @@ void ctkScreenshotDialogPrivate::setupUi(QDialog * widget)
   connect(this->ImageVersionNumberSpinBox, SIGNAL(valueChanged(int)), SLOT(updateFullNameLabel()));
   connect(this->DelaySpinBox, SIGNAL(valueChanged(int)), SLOT(resetCountDownValue()));
   connect(&this->CountDownTimer, SIGNAL(timeout()), SLOT(updateCountDown()));
+  connect(this->ScaleFactorRadioButton, SIGNAL(toggled(bool)), SLOT(selectScaleFactor(bool)));
+  connect(this->OutputResolutionRadioButton, SIGNAL(toggled(bool)), SLOT(selectOutputResolution(bool)));
+  connect(this->LockAspectToolButton, SIGNAL(toggled(bool)), SLOT(lockAspectRatio(bool)));
+  connect(this->WidthLineEdit, SIGNAL(editingFinished()), SLOT(onWidthEdited()));
+  connect(this->HeightLineEdit, SIGNAL(editingFinished()), SLOT(onHeightEdited()));
 
   this->CaptureButton = okButton;
 
@@ -123,6 +129,69 @@ void ctkScreenshotDialogPrivate::updateCountDown()
 }
 
 //-----------------------------------------------------------------------------
+void ctkScreenshotDialogPrivate::useScalarFactor(bool scale)
+{
+  this->ScaleFactorSpinBox->setEnabled(scale);
+  this->WidthLineEdit->setEnabled(!scale);
+  this->HeightLineEdit->setEnabled(!scale);
+  this->xLabel->setEnabled(!scale);
+  this->LockAspectToolButton->setEnabled(!scale);
+}
+
+//-----------------------------------------------------------------------------
+void ctkScreenshotDialogPrivate::selectScaleFactor(bool scale)
+{
+  this->useScalarFactor(scale);
+}
+
+//-----------------------------------------------------------------------------
+void ctkScreenshotDialogPrivate::selectOutputResolution(bool scale)
+{
+  this->useScalarFactor(!scale);
+}
+
+//-----------------------------------------------------------------------------
+void ctkScreenshotDialogPrivate::lockAspectRatio(bool lock)
+{
+  if(lock)
+    {
+    QPixmap viewportPixmap = QPixmap::grabWidget(this->WidgetToGrab.data());
+    QSize curSize = viewportPixmap.size();
+    this->AspectRatio = curSize.width()/static_cast<double>(curSize.height());
+    }
+}
+
+//-----------------------------------------------------------------------------
+void ctkScreenshotDialogPrivate::onWidthEdited()
+{
+  if(this->LockAspectToolButton->isChecked())
+    {
+    this->HeightLineEdit->setText(QString::number(static_cast<int>(this->WidthLineEdit->text().toInt()/this->AspectRatio)));
+    }
+}
+
+//-----------------------------------------------------------------------------
+void ctkScreenshotDialogPrivate::onHeightEdited()
+{
+  if(this->LockAspectToolButton->isChecked())
+    {
+    this->WidthLineEdit->setText(QString::number(static_cast<int>(this->HeightLineEdit->text().toInt()*this->AspectRatio)));
+    }
+}
+
+//-----------------------------------------------------------------------------
+void ctkScreenshotDialog::enforceResolution(int width, int height)
+{
+  Q_D(ctkScreenshotDialog);
+  d->OutputResolutionRadioButton->setChecked(true);
+  d->useScalarFactor(true);
+  d->ScaleFactorRadioButton->setEnabled(false);
+  d->OutputResolutionRadioButton->setEnabled(false);
+  d->ScaleFactorSpinBox->setEnabled(false);
+  d->WidthLineEdit->setText(QString::number(width));
+  d->HeightLineEdit->setText(QString::number(height));
+}
+//-----------------------------------------------------------------------------
 void ctkScreenshotDialogPrivate::saveScreenshot(int delayInSeconds)
 {
   Q_Q(ctkScreenshotDialog);
@@ -247,10 +316,20 @@ void ctkScreenshotDialog::instantScreenshot()
   d->setWaitingForScreenshot(false);
   d->resetCountDownValue();
 
-  // Rescale
-  QPixmap rescaledViewportPixmap = viewportPixmap.scaled(
+  // Rescale based on scale factor or output resolution specified
+  QPixmap rescaledViewportPixmap = viewportPixmap;
+  if(d->ScaleFactorRadioButton->isChecked())
+    {
+    rescaledViewportPixmap = viewportPixmap.scaled(
       viewportPixmap.size().width() * d->ScaleFactorSpinBox->value(),
       viewportPixmap.size().height() * d->ScaleFactorSpinBox->value());
+    }
+  else if(d->OutputResolutionRadioButton->isChecked())
+    {
+    rescaledViewportPixmap = viewportPixmap.scaled(
+      d->WidthLineEdit->text().toInt(),
+      d->HeightLineEdit->text().toInt());
+    }
 
   QString filename = QString("%1/%2_%3.png").arg(d->DirectoryButton->directory())
                      .arg(d->ImageNameLineEdit->text())

+ 4 - 0
Libs/Widgets/ctkScreenshotDialog.h

@@ -80,6 +80,10 @@ public:
   void setDelay(int seconds);
   int delay()const;
 
+  /// Disable scaling or output resolution control and take a fixed 
+  /// resolution screenshot. Default output resolution is (300,300)
+  void enforceResolution(int width = 300, int height = 300); 
+
 public Q_SLOTS:
   /// Instantanely grabs the content of \a widgetToGrag. Generates a
   /// png file into \a directory. It automatically increments the image name

+ 13 - 0
Libs/Widgets/ctkScreenshotDialog_p.h

@@ -47,6 +47,8 @@ public:
   void setWaitingForScreenshot(bool waiting);
   bool isWaitingForScreenshot()const;
 
+  void useScalarFactor(bool use = true);
+
 public Q_SLOTS:
 
   void saveScreenshot(int delayInSeconds);
@@ -59,11 +61,22 @@ public Q_SLOTS:
 
   void updateCountDown();
 
+  void selectScaleFactor(bool scale);
+
+  void selectOutputResolution(bool scale);
+
+  void lockAspectRatio(bool lock);
+
+  void onWidthEdited();
+
+  void onHeightEdited();
+
 public:
   QWeakPointer<QWidget> WidgetToGrab;
   QPushButton*          CaptureButton;
   int                   CountDownValue;
   QTimer                CountDownTimer;
+  double                AspectRatio;
 };
 
 #endif