image component stretch/scale/x/y options
This commit is contained in:
parent
807e37bddd
commit
8846af57ba
|
@ -20,12 +20,20 @@ class Component(__base__.Component):
|
|||
|
||||
page.lineEdit_image.textChanged.connect(self.update)
|
||||
page.pushButton_image.clicked.connect(self.pickImage)
|
||||
page.spinBox_scale.valueChanged.connect(self.update)
|
||||
page.checkBox_stretch.stateChanged.connect(self.update)
|
||||
page.spinBox_x.valueChanged.connect(self.update)
|
||||
page.spinBox_y.valueChanged.connect(self.update)
|
||||
|
||||
self.page = page
|
||||
return page
|
||||
|
||||
def update(self):
|
||||
self.imagePath = self.page.lineEdit_image.text()
|
||||
self.scale = self.page.spinBox_scale.value()
|
||||
self.xPosition = self.page.spinBox_x.value()
|
||||
self.yPosition = self.page.spinBox_y.value()
|
||||
self.stretched = self.page.checkBox_stretch.isChecked()
|
||||
self.parent.drawPreview()
|
||||
super().update()
|
||||
|
||||
|
@ -47,19 +55,31 @@ class Component(__base__.Component):
|
|||
frame = Image.new("RGBA", (width, height), (0, 0, 0, 0))
|
||||
if self.imagePath and os.path.exists(self.imagePath):
|
||||
image = Image.open(self.imagePath)
|
||||
if image.size != (width, height):
|
||||
if self.stretched and image.size != (width, height):
|
||||
image = image.resize((width, height), Image.ANTIALIAS)
|
||||
frame.paste(image)
|
||||
if self.scale != 100:
|
||||
newHeight = int((image.height / 100) * self.scale)
|
||||
newWidth = int((image.width / 100) * self.scale)
|
||||
image = image.resize((newWidth, newHeight), Image.ANTIALIAS)
|
||||
frame.paste(image, box=(self.xPosition, self.yPosition))
|
||||
return frame
|
||||
|
||||
def loadPreset(self, pr, presetName=None):
|
||||
super().loadPreset(pr, presetName)
|
||||
self.page.lineEdit_image.setText(pr['image'])
|
||||
self.page.spinBox_scale.setValue(pr['scale'])
|
||||
self.page.spinBox_x.setValue(pr['x'])
|
||||
self.page.spinBox_y.setValue(pr['y'])
|
||||
self.page.checkBox_stretch.setChecked(pr['stretched'])
|
||||
|
||||
def savePreset(self):
|
||||
return {
|
||||
'preset': self.currentPreset,
|
||||
'image': self.imagePath,
|
||||
'scale': self.scale,
|
||||
'stretched': self.stretched,
|
||||
'x': self.xPosition,
|
||||
'y': self.yPosition,
|
||||
}
|
||||
|
||||
def pickImage(self):
|
||||
|
|
|
@ -124,8 +124,11 @@
|
|||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>-10000</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>999999999</number>
|
||||
<number>10000</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -163,10 +166,10 @@
|
|||
</size>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
<number>-1000</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>999999999</number>
|
||||
<number>1000</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
|
@ -177,6 +180,65 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBox_stretch">
|
||||
<property name="text">
|
||||
<string>Stretch</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_10">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>5</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Scale</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="spinBox_scale">
|
||||
<property name="buttonSymbols">
|
||||
<enum>QAbstractSpinBox::UpDownArrows</enum>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string>%</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>200</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>100</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="spinBox_x_2">
|
||||
<widget class="QSpinBox" name="spinBox_x">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
|
@ -124,8 +124,11 @@
|
|||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>-10000</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>999999999</number>
|
||||
<number>10000</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -163,10 +166,10 @@
|
|||
</size>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
<number>-10000</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>999999999</number>
|
||||
<number>10000</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
|
@ -202,6 +205,35 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Scale</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="spinBox_scale">
|
||||
<property name="buttonSymbols">
|
||||
<enum>QAbstractSpinBox::UpDownArrows</enum>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string>%</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>200</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>100</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -217,6 +249,9 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
|
23
core.py
23
core.py
|
@ -124,16 +124,19 @@ class Core():
|
|||
# insert component into the loader
|
||||
loader.insertComponent(
|
||||
self.moduleIndexFor(name), -1)
|
||||
|
||||
if 'preset' in preset and preset['preset'] != None:
|
||||
self.selectedComponents[-1].loadPreset(
|
||||
preset
|
||||
)
|
||||
else:
|
||||
self.selectedComponents[-1].loadPreset(
|
||||
preset,
|
||||
preset['preset']
|
||||
)
|
||||
try:
|
||||
if 'preset' in preset and preset['preset'] != None:
|
||||
self.selectedComponents[-1].loadPreset(
|
||||
preset
|
||||
)
|
||||
else:
|
||||
self.selectedComponents[-1].loadPreset(
|
||||
preset,
|
||||
preset['preset']
|
||||
)
|
||||
except KeyError as e:
|
||||
print('%s missing value %s' %
|
||||
(self.selectedComponents[-1], e))
|
||||
|
||||
elif errcode == 1:
|
||||
typ, value, _ = data
|
||||
|
|
Reference in New Issue