Fix mugshot camera
This commit is contained in:
parent
e728762d9f
commit
88cd84e855
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!-- Generated with glade 3.18.3 -->
|
<!-- Generated with glade 3.20.0 -->
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="3.0"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<requires lib="camera_mugshot_dialog" version="1.0"/>
|
<requires lib="camera_mugshot_dialog" version="1.0"/>
|
||||||
|
|
|
@ -53,25 +53,10 @@ class CameraBox(GtkClutter.Embed):
|
||||||
self.state = Gst.State.NULL
|
self.state = Gst.State.NULL
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
|
|
||||||
self.stage = self.get_stage()
|
video_texture = self.setup_ui()
|
||||||
self.layout_manager = Clutter.BoxLayout()
|
|
||||||
|
|
||||||
self.scroll = Clutter.ScrollActor.new()
|
self.camera = Cheese.Camera.new(video_texture,
|
||||||
self.scroll.set_scroll_mode(Clutter.ScrollMode.HORIZONTALLY)
|
"Mugshot", 1280, 720)
|
||||||
|
|
||||||
self.textures_box = Clutter.Actor(layout_manager=self.layout_manager)
|
|
||||||
self.textures_box.set_x_align(Clutter.ActorAlign.CENTER)
|
|
||||||
|
|
||||||
self.scroll.add_actor(self.textures_box)
|
|
||||||
self.stage.add_actor(self.scroll)
|
|
||||||
|
|
||||||
self.video_texture = Clutter.Texture.new()
|
|
||||||
|
|
||||||
self.layout_manager.pack(
|
|
||||||
self.video_texture, expand=True, x_fill=False, y_fill=False,
|
|
||||||
x_align=Clutter.BoxAlignment.CENTER, y_align=Clutter.BoxAlignment.CENTER)
|
|
||||||
|
|
||||||
self.camera = Cheese.Camera.new(self.video_texture, "Mugshot", 100, 100)
|
|
||||||
Cheese.Camera.setup(self.camera, None)
|
Cheese.Camera.setup(self.camera, None)
|
||||||
Cheese.Camera.play(self.camera)
|
Cheese.Camera.play(self.camera)
|
||||||
self.state = Gst.State.PLAYING
|
self.state = Gst.State.PLAYING
|
||||||
|
@ -88,12 +73,70 @@ class CameraBox(GtkClutter.Embed):
|
||||||
device_monitor.connect("added", added)
|
device_monitor.connect("added", added)
|
||||||
device_monitor.coldplug()
|
device_monitor.coldplug()
|
||||||
|
|
||||||
self.connect("size-allocate", self.on_size_allocate)
|
|
||||||
self.camera.connect("photo-taken", self.on_photo_taken)
|
self.camera.connect("photo-taken", self.on_photo_taken)
|
||||||
self.camera.connect("state-flags-changed", self.on_state_flags_changed)
|
self.camera.connect("state-flags-changed", self.on_state_flags_changed)
|
||||||
|
|
||||||
self._save_filename = ""
|
self._save_filename = ""
|
||||||
|
|
||||||
|
def setup_ui(self):
|
||||||
|
viewport = self.get_stage()
|
||||||
|
|
||||||
|
video_preview = Clutter.Actor.new()
|
||||||
|
video_preview.set_content_gravity(Clutter.ContentGravity.RESIZE_ASPECT)
|
||||||
|
video_preview.set_x_expand(True)
|
||||||
|
video_preview.set_y_expand(True)
|
||||||
|
video_preview.props.min_height = 100.0
|
||||||
|
video_preview.props.min_width = 100.0
|
||||||
|
video_texture = video_preview
|
||||||
|
|
||||||
|
viewport_layout = Clutter.Actor.new()
|
||||||
|
viewport_layout.add_child(video_preview)
|
||||||
|
|
||||||
|
viewport_layout_manager = Clutter.BinLayout()
|
||||||
|
|
||||||
|
background_layer = Clutter.Actor.new()
|
||||||
|
status, background_layer.props.background_color = Clutter.Color.from_string("Black")
|
||||||
|
background_layer.props.x = 0
|
||||||
|
background_layer.props.y = 0
|
||||||
|
background_layer.props.width = 100
|
||||||
|
background_layer.props.height = 100
|
||||||
|
|
||||||
|
video_preview.props.request_mode = Clutter.RequestMode.HEIGHT_FOR_WIDTH
|
||||||
|
|
||||||
|
viewport.add_child(background_layer)
|
||||||
|
|
||||||
|
viewport_layout.set_layout_manager(viewport_layout_manager)
|
||||||
|
|
||||||
|
viewport.add_child(viewport_layout)
|
||||||
|
|
||||||
|
viewport.connect("allocation_changed", self.on_stage_resize, viewport_layout, background_layer)
|
||||||
|
|
||||||
|
return video_texture
|
||||||
|
|
||||||
|
def on_stage_resize(self, actor, box, flags, layout, background):
|
||||||
|
s_width, s_height = self.get_stage().get_size()
|
||||||
|
|
||||||
|
v_width = self.camera.props.format.width
|
||||||
|
v_height = self.camera.props.format.height
|
||||||
|
|
||||||
|
square = min(s_width, s_height)
|
||||||
|
if v_width > v_height:
|
||||||
|
scale = square / v_height
|
||||||
|
v_height = square
|
||||||
|
v_width = v_width * scale
|
||||||
|
else:
|
||||||
|
scale = square / v_width
|
||||||
|
v_height = v_height * scale
|
||||||
|
v_width = square
|
||||||
|
|
||||||
|
x_adj, y_adj = (s_width - v_width) / 2.0, (s_height - v_height) / 2.0
|
||||||
|
|
||||||
|
layout.set_size(v_width, v_height)
|
||||||
|
layout.set_x(x_adj)
|
||||||
|
layout.set_y(y_adj)
|
||||||
|
|
||||||
|
background.set_size(s_width, s_height)
|
||||||
|
|
||||||
def on_state_flags_changed(self, camera, state):
|
def on_state_flags_changed(self, camera, state):
|
||||||
self.state = state
|
self.state = state
|
||||||
self.emit("gst-state-changed", self.state)
|
self.emit("gst-state-changed", self.state)
|
||||||
|
@ -109,27 +152,6 @@ class CameraBox(GtkClutter.Embed):
|
||||||
def stop(self):
|
def stop(self):
|
||||||
Cheese.Camera.stop(self.camera)
|
Cheese.Camera.stop(self.camera)
|
||||||
|
|
||||||
def on_size_allocate(self, widget, allocation):
|
|
||||||
vheight = self.video_texture.get_height()
|
|
||||||
vwidth = self.video_texture.get_width()
|
|
||||||
if vheight == 0 or vwidth == 0:
|
|
||||||
vformat = self.camera.get_current_video_format()
|
|
||||||
vheight = vformat.height
|
|
||||||
vwidth = vformat.width
|
|
||||||
|
|
||||||
height = allocation.height
|
|
||||||
mult = vheight / height
|
|
||||||
width = round(vwidth / mult, 1)
|
|
||||||
|
|
||||||
self.video_texture.set_height(height)
|
|
||||||
self.video_texture.set_width(width)
|
|
||||||
|
|
||||||
point = Clutter.Point()
|
|
||||||
point.x = (self.video_texture.get_width() - allocation.width) / 2
|
|
||||||
point.y = 0
|
|
||||||
|
|
||||||
self.scroll.scroll_to_point(point)
|
|
||||||
|
|
||||||
def take_photo(self, target_filename):
|
def take_photo(self, target_filename):
|
||||||
self._save_filename = target_filename
|
self._save_filename = target_filename
|
||||||
return self.camera.take_photo_pixbuf()
|
return self.camera.take_photo_pixbuf()
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-03-31 20:17-0400\n"
|
"POT-Creation-Date: 2016-10-18 00:02-0400\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -103,7 +103,7 @@ msgstr ""
|
||||||
|
|
||||||
#. Set the record button to retry, and disable it until the capture
|
#. Set the record button to retry, and disable it until the capture
|
||||||
#. finishes.
|
#. finishes.
|
||||||
#: ../mugshot/CameraMugshotDialog.py:244
|
#: ../mugshot/CameraMugshotDialog.py:266
|
||||||
msgid "Retry"
|
msgid "Retry"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue