diff --git a/libkms++/crtc.cpp b/libkms++/crtc.cpp
index 321670c96e77556fe09fbb7149f9491db576c2d6..436cdeeba584fdc512c39ea43f7f266946d02f47 100644 (file)
--- a/libkms++/crtc.cpp
+++ b/libkms++/crtc.cpp
};
Crtc::Crtc(Card &card, uint32_t id, uint32_t idx)
- :DrmObject(card, id, DRM_MODE_OBJECT_CRTC, idx)
+ :DrmPropObject(card, id, DRM_MODE_OBJECT_CRTC, idx)
{
m_priv = new CrtcPriv();
m_priv->drm_crtc = drmModeGetCrtc(this->card().fd(), this->id());
conns, 1, &c->mode);
}
-void Crtc::print_short() const
-{
- auto c = m_priv->drm_crtc;
-
- printf("Crtc %d, %d,%d %dx%d\n", id(),
- c->x, c->y, c->width, c->height);
-}
-
int Crtc::set_mode(Connector* conn, Framebuffer& fb, const Videomode& mode)
{
uint32_t conns[] = { conn->id() };
conv(src_x), conv(src_y), conv(src_w), conv(src_h));
}
+int Crtc::disable_plane(Plane* plane)
+{
+ return drmModeSetPlane(card().fd(), plane->id(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+}
+
+Plane* Crtc::get_primary_plane()
+{
+ for (Plane* p : get_possible_planes()) {
+ if (p->plane_type() != PlaneType::Primary)
+ continue;
+
+ if (p->crtc_id() != id())
+ continue;
+
+ return p;
+ }
+
+ throw invalid_argument(string("No primary plane for crtc ") + to_string(id()));
+}
+
int Crtc::page_flip(Framebuffer& fb, void *data)
{
return drmModePageFlip(card().fd(), id(), fb.id(), DRM_MODE_PAGE_FLIP_EVENT, data);