Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
c7ef063
Update mutations.jsx
hiroshisuga Mar 27, 2026
c3e13c0
Update component.jsx
hiroshisuga Mar 27, 2026
842c2fb
Update container.jsx
hiroshisuga Mar 27, 2026
a7346b3
Update hooks.js
hiroshisuga Mar 27, 2026
d920770
Update hooks.ts
hiroshisuga Mar 27, 2026
836a0e1
Update queries.ts
hiroshisuga Mar 27, 2026
453e2e2
Update SendCursorPositionPubMsgHdlr.scala
hiroshisuga Mar 27, 2026
2ee2427
Update WhiteboardCursorMoveRecordEvent.scala
hiroshisuga Mar 27, 2026
594519c
Update RedisRecorderActor.scala
hiroshisuga Mar 27, 2026
8447617
Update bbb_schema.sql
hiroshisuga Mar 27, 2026
6d0df13
Update actions.graphql
hiroshisuga Mar 27, 2026
ccbd4b6
Update public_v_pres_page_cursor.yaml
hiroshisuga Mar 27, 2026
f7b4d46
Update presPageCursorStream.go
hiroshisuga Mar 27, 2026
ef6b17f
Update presentationPublishCursor.ts
hiroshisuga Mar 27, 2026
027660c
Update PresPageCursorDAO.scala
hiroshisuga Mar 27, 2026
83e85a8
Remove popupWindow!
hiroshisuga Mar 27, 2026
a7de71a
Remove unnecessary mutation observer
hiroshisuga Mar 27, 2026
3e0ec1e
fix missing argv
hiroshisuga Mar 27, 2026
c8bd843
Update component.jsx
hiroshisuga Mar 27, 2026
04ff5ee
comment
hiroshisuga Mar 27, 2026
248663f
add missing parameter
hiroshisuga Mar 27, 2026
4dcefae
Update WhiteboardMsgs.scala
hiroshisuga Mar 27, 2026
073cb28
<Custom Laser Size> Update settings.yml
hiroshisuga Mar 28, 2026
1f6bed5
<Custom Laser Size> Update meetingClientSettings.ts
hiroshisuga Mar 28, 2026
e4d347f
<Custom Laser Size> Update meetingClientSettings.ts
hiroshisuga Mar 28, 2026
900a3ed
<Custom Laser Size> Update component.jsx
hiroshisuga Mar 28, 2026
feb343f
<Custom Laser Size> Update container.jsx
hiroshisuga Mar 28, 2026
f4cb38e
Use getCamera to get the zoom value
hiroshisuga Mar 29, 2026
962039a
Use xPercent and yPercent for viewer's cursor position
hiroshisuga Mar 29, 2026
ba09950
update comment
hiroshisuga Mar 29, 2026
875f6df
adjust laser color
hiroshisuga Mar 31, 2026
3026fcb
opacity adjustment
hiroshisuga Mar 31, 2026
f85db08
Pseudo-non-linear gradient
hiroshisuga Apr 1, 2026
0fa212b
Fix: add useState for laserMode
hiroshisuga Apr 4, 2026
7777337
Show viewer's laser also when multiuser mode is active
hiroshisuga Apr 4, 2026
ba543eb
Fix: don't refresh laser when its position is (-1, -1)
hiroshisuga Apr 4, 2026
c25b27f
chore: == -> ===
hiroshisuga Apr 4, 2026
5a156ba
Remove viewer's laser at page change & cursor placed outside
hiroshisuga Apr 4, 2026
33ed024
add touchstart for mobile devices
hiroshisuga Apr 5, 2026
25bf5b7
For Android
hiroshisuga Apr 5, 2026
3306f6d
Merge branch 'v3.0.x-release' into dev3_laser_keepupd
hiroshisuga Apr 17, 2026
22cb3a1
Update comment
hiroshisuga Apr 26, 2026
5ee36eb
update comment
hiroshisuga Apr 26, 2026
7f05454
Refactor menu - 1
hiroshisuga Apr 26, 2026
59a588c
Refactor menu - 2
hiroshisuga Apr 26, 2026
741d0b7
remove RF
hiroshisuga Apr 26, 2026
eb7eba0
Remove unnecessary cursorEl
hiroshisuga Apr 30, 2026
5dd34e6
Remove unnecessary attribute in hooks.ts
hiroshisuga May 2, 2026
585d6b2
swap args (chore)
hiroshisuga May 2, 2026
69911c7
Fallback undefined laserType to ''
hiroshisuga May 4, 2026
7638f63
Revert the fallback in the previous change
hiroshisuga May 4, 2026
4667787
Fix: show laser on mobile devices and show menu by long tap
hiroshisuga May 4, 2026
244b59e
[option] hide laser when non-hand tool is used by a presenter on mobile
hiroshisuga May 4, 2026
6c84deb
Add isMobile at container
hiroshisuga May 4, 2026
9a22b4b
[fix] Show laser also on tablets
hiroshisuga May 4, 2026
10c5d1e
[fix] remove viewer's laser when become the presenter
hiroshisuga May 4, 2026
f7bb818
[fix] viewer's cursor on popup window
hiroshisuga May 4, 2026
f402f54
isPhone -> isMobile (commented out anyway)
hiroshisuga May 4, 2026
373084e
[fix] targetDoc for removeViewersLaser
hiroshisuga May 4, 2026
3a27698
[refactor] remove an unnecessary arg
hiroshisuga May 4, 2026
2dc7358
[Fix] Better Laser for mobile presenter
hiroshisuga May 6, 2026
e264175
[fix] remove popups which were accidentally contaminated
hiroshisuga May 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ trait SendCursorPositionPubMsgHdlr extends RightsManagementTrait {
val envelope = BbbCoreEnvelope(SendCursorPositionEvtMsg.NAME, routing)
val header = BbbClientMsgHeader(SendCursorPositionEvtMsg.NAME, liveMeeting.props.meetingProp.intId, msg.header.userId)

val body = SendCursorPositionEvtMsgBody(msg.body.whiteboardId, userIsViewer, msg.body.xPercent, msg.body.yPercent)
val body = SendCursorPositionEvtMsgBody(msg.body.whiteboardId, userIsViewer, msg.body.xPercent, msg.body.yPercent, msg.body.laserType)
val event = SendCursorPositionEvtMsg(header, body)
val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
bus.outGW.send(msgEvent)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,26 @@ case class PresPageCursorDbModel(
userId: String,
xPercent: Double,
yPercent: Double,
laserType: String,
lastUpdatedAt: java.sql.Timestamp = new java.sql.Timestamp(System.currentTimeMillis())
)

class PresPageCursorDbTableDef(tag: Tag) extends Table[PresPageCursorDbModel](tag, None, "pres_page_cursor") {
override def * = (
pageId, meetingId, userId, xPercent, yPercent, lastUpdatedAt
pageId, meetingId, userId, xPercent, yPercent, laserType, lastUpdatedAt
) <> (PresPageCursorDbModel.tupled, PresPageCursorDbModel.unapply)
val pageId = column[String]("pageId", O.PrimaryKey)
val meetingId = column[String]("meetingId", O.PrimaryKey)
val userId = column[String]("userId", O.PrimaryKey)
val xPercent = column[Double]("xPercent")
val yPercent = column[Double]("yPercent")
val laserType = column[String]("laserType")
val lastUpdatedAt = column[java.sql.Timestamp]("lastUpdatedAt")
}

object PresPageCursorDAO {

def insertOrUpdate(pageId: String, meetingId: String, userId: String, xPercent: Double, yPercent: Double) = {
def insertOrUpdate(pageId: String, meetingId: String, userId: String, xPercent: Double, yPercent: Double, laserType: String) = {
DatabaseConnection.enqueue(
TableQuery[PresPageCursorDbTableDef].insertOrUpdate(
PresPageCursorDbModel(
Expand All @@ -34,6 +36,7 @@ object PresPageCursorDAO {
userId = userId,
xPercent = xPercent,
yPercent = yPercent,
laserType = laserType,
lastUpdatedAt = new java.sql.Timestamp(System.currentTimeMillis()),
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,15 @@ class WhiteboardCursorMoveRecordEvent extends AbstractWhiteboardRecordEvent {
def setYPercent(percent: Double) {
eventMap.put(Y_OFFSET, percent.toString)
}

def setLaserType(laserType: String) {
eventMap.put(LASER_TYPE, laserType)
}
}

object WhiteboardCursorMoveRecordEvent {
protected final val USER_ID = "userId"
protected final val X_OFFSET = "xOffset"
protected final val Y_OFFSET = "yOffset"
}
protected final val LASER_TYPE = "laserType"
}
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,7 @@ class RedisRecorderActor(
ev.setUserId(msg.header.userId)
ev.setXPercent(msg.body.xPercent)
ev.setYPercent(msg.body.yPercent)
ev.setLaserType(msg.body.laserType)

record(msg.header.meetingId, ev.toMap.asJava)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ case class GetWhiteboardAnnotationsReqMsgBody(whiteboardId: String)

object SendCursorPositionPubMsg { val NAME = "SendCursorPositionPubMsg" }
case class SendCursorPositionPubMsg(header: BbbClientMsgHeader, body: SendCursorPositionPubMsgBody) extends StandardMsg
case class SendCursorPositionPubMsgBody(whiteboardId: String, xPercent: Double, yPercent: Double)
case class SendCursorPositionPubMsgBody(whiteboardId: String, xPercent: Double, yPercent: Double, laserType: String)

object SendWhiteboardAnnotationsPubMsg { val NAME = "SendWhiteboardAnnotationsPubMsg" }
case class SendWhiteboardAnnotationsPubMsg(header: BbbClientMsgHeader, body: SendWhiteboardAnnotationsPubMsgBody) extends StandardMsg
Expand Down Expand Up @@ -70,7 +70,7 @@ case class GetWhiteboardAnnotationsRespMsgBody(whiteboardId: String, annotations

object SendCursorPositionEvtMsg { val NAME = "SendCursorPositionEvtMsg" }
case class SendCursorPositionEvtMsg(header: BbbClientMsgHeader, body: SendCursorPositionEvtMsgBody) extends BbbCoreMsg
case class SendCursorPositionEvtMsgBody(whiteboardId: String, userIsViewer: Boolean, xPercent: Double, yPercent: Double)
case class SendCursorPositionEvtMsgBody(whiteboardId: String, userIsViewer: Boolean, xPercent: Double, yPercent: Double, laserType: String)

object SendWhiteboardAnnotationsEvtMsg { val NAME = "SendWhiteboardAnnotationsEvtMsg" }
case class SendWhiteboardAnnotationsEvtMsg(header: BbbClientMsgHeader, body: SendWhiteboardAnnotationsEvtMsgBody) extends BbbCoreMsg
Expand Down
2 changes: 2 additions & 0 deletions bbb-graphql-actions/src/actions/presentationPublishCursor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export default function buildRedisMessage(sessionVariables: Record<string, unkno
{name: 'whiteboardId', type: 'string', required: true},
{name: 'xPercent', type: 'number', required: true},
{name: 'yPercent', type: 'number', required: true},
{name: 'laserType', type: 'string', required: true},
]
)

Expand All @@ -27,6 +28,7 @@ export default function buildRedisMessage(sessionVariables: Record<string, unkno
whiteboardId: input.whiteboardId,
xPercent: input.xPercent,
yPercent: input.yPercent,
laserType: input.laserType,
};

return { eventName, routing, header, body };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@ func HandleSendCursorPositionEvtMsg(receivedMessage common.RedisMessage, browser
receivedCursorIsFromViewer := receivedMessage.Core.Body["userIsViewer"].(bool)
xPercent := receivedMessage.Core.Body["xPercent"].(float64)
yPercent := receivedMessage.Core.Body["yPercent"].(float64)
laserType := receivedMessage.Core.Body["laserType"].(string)

item := map[string]any{
"xPercent": xPercent,
"yPercent": yPercent,
"laserType": laserType,
"userId": receivedMessage.Core.Header.UserId,
"__typename": "pres_page_cursor",
}
Expand Down
1 change: 1 addition & 0 deletions bbb-graphql-server/bbb_schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -1674,6 +1674,7 @@ CREATE UNLOGGED TABLE "pres_page_cursor" (
"userId" varchar(50),
"xPercent" numeric,
"yPercent" numeric,
"laserType" varchar(50),
"lastUpdatedAt" timestamp with time zone DEFAULT now(),
CONSTRAINT "pres_page_cursor_pkey" PRIMARY KEY ("pageId","meetingId","userId"),
FOREIGN KEY ("meetingId", "userId") REFERENCES "user"("meetingId","userId") ON DELETE CASCADE
Expand Down
1 change: 1 addition & 0 deletions bbb-graphql-server/metadata/actions.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,7 @@ type Mutation {
whiteboardId: String!
xPercent: Float!
yPercent: Float!
laserType: String!
): Boolean
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ select_permissions:
- userId
- xPercent
- yPercent
- laserType
filter:
_and:
- meetingId:
Expand Down
2 changes: 2 additions & 0 deletions bigbluebutton-html5/imports/ui/Types/meetingClientSettings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -745,6 +745,8 @@ export interface Whiteboard {
annotationsQueueProcessInterval: number
cursorInterval: number
pointerDiameter: number
laserRadiusSmall: number
laserRadiusLarge: number
maxStickyNoteLength: number
maxNumberOfAnnotations: number
maxNumberOfActiveUsers: number
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,12 @@ export const PRES_ANNOTATION_SUBMIT = gql`
`;

export const PRESENTATION_PUBLISH_CURSOR = gql`
mutation PresentationPublishCursor($whiteboardId: String!, $xPercent: Float!, $yPercent: Float!) {
mutation PresentationPublishCursor($whiteboardId: String!, $xPercent: Float!, $yPercent: Float!, $laserType: String!) {
presentationPublishCursor(
whiteboardId: $whiteboardId,
xPercent: $xPercent,
yPercent: $yPercent,
laserType: $laserType,
)
}
`;
Expand Down
Loading
Loading