Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
H
hci-doubleclick
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
희원 전
hci-doubleclick
Commits
3d25a1d7
Commit
3d25a1d7
authored
4 months ago
by
희원 전
Browse files
Options
Downloads
Patches
Plain Diff
Upload New File
parents
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
doubleclick.c
+156
-0
156 additions, 0 deletions
doubleclick.c
with
156 additions
and
0 deletions
doubleclick.c
0 → 100644
+
156
−
0
View file @
3d25a1d7
#include
<stdio.h>
typedef
struct
{
int
buttonID
;
// 버튼 ID
long
timestamp
;
// 타임스탬프 (msec)
int
eventType
;
// 0: Up-Down, 1: Down-Up
}
ButtonEvent
;
void
processClickEvents
(
ButtonEvent
*
events
,
int
size
,
int
doubleClickLimit
)
{
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
// 유효한 버튼인지 확인
if
(
events
[
i
].
buttonID
!=
1
&&
events
[
i
].
buttonID
!=
2
&&
events
[
i
].
buttonID
!=
3
&&
events
[
i
].
buttonID
!=
4
)
continue
;
// Up-Down 이벤트
// Single Click 또는 Double Click 검사
if
(
events
[
i
].
eventType
==
0
)
{
// 같은 버튼의 Down-Up 이벤트가 500ms 이내에 발생
if
(
events
[
i
+
1
].
eventType
==
1
&&
events
[
i
].
buttonID
==
events
[
i
+
1
].
buttonID
&&
events
[
i
+
1
].
timestamp
-
events
[
i
].
timestamp
<=
doubleClickLimit
)
{
// 해당 Down-Up 이벤트가 마지막
if
(
i
+
1
==
size
-
1
)
{
printf
(
"(A) Button ID: %d, ClickType: Single, Timestamp: %ld
\n
"
,
events
[
i
].
buttonID
,
events
[
i
].
timestamp
);
// 같은 버튼의 Up-Down 이벤트가 500ms 이내에 발생
}
else
if
(
events
[
i
+
2
].
eventType
==
0
&&
events
[
i
+
1
].
buttonID
==
events
[
i
+
2
].
buttonID
&&
events
[
i
+
2
].
timestamp
-
events
[
i
+
1
].
timestamp
<=
doubleClickLimit
)
{
printf
(
"(B) Button ID: %d, ClickType: Double, Timestamp: %ld
\n
"
,
events
[
i
].
buttonID
,
events
[
i
+
2
].
timestamp
);
// 다음 이벤트로 넘어감
i
=
i
+
3
;
// 다른 버튼의 이벤트 발생: Single Click
}
else
{
printf
(
"(C) Button ID: %d, ClickType: Single, Timestamp: %ld
\n
"
,
events
[
i
].
buttonID
,
events
[
i
].
timestamp
);
i
++
;
}
// 같은 버튼의 Down-Up 이벤트가 늦게 발생
}
else
if
(
events
[
i
+
1
].
eventType
==
1
&&
events
[
i
].
buttonID
==
events
[
i
+
1
].
buttonID
)
{
printf
(
"(D) Button ID: %d, ClickType: Single, Timestamp: %ld
\n
"
,
events
[
i
].
buttonID
,
events
[
i
].
timestamp
);
i
++
;
// 다른 버튼의 이벤트 발생
}
else
if
(
events
[
i
].
buttonID
!=
events
[
i
+
1
].
buttonID
)
{
printf
(
"(E) Button ID: %d, ClickType: Single, Timestamp: %ld
\n
"
,
events
[
i
].
buttonID
,
events
[
i
].
timestamp
);
}
else
{
printf
(
"(F) Button ID: %d, ClickType: Single, Timestamp: %ld
\n
"
,
events
[
i
].
buttonID
,
events
[
i
].
timestamp
);
}
}
}
}
int
main
()
{
// 더블 클릭 제한 시간
int
doubleClickLimit
=
500
;
// 예제 이벤트 큐
// Double Click 정상 예제 1
ButtonEvent
queue1
[]
=
{
{
1
,
1000
,
0
},
{
1
,
1050
,
1
},
{
1
,
1100
,
0
},
{
1
,
1150
,
1
},
{
4
,
1200
,
0
},
{
4
,
1250
,
1
},
{
4
,
1200
,
0
},
{
4
,
1250
,
1
},
};
// Double Click 정상 예제 2 (연속 더블 클릭)
ButtonEvent
queue2
[]
=
{
{
2
,
2000
,
0
},
{
2
,
2020
,
1
},
{
2
,
2050
,
0
},
{
2
,
2070
,
1
},
// 더블클릭 1회
{
2
,
2100
,
0
},
{
2
,
2120
,
1
},
{
2
,
2150
,
0
},
{
2
,
2170
,
1
},
// 더블클릭 2회
};
// Single Click 정상 예제 1
ButtonEvent
queue3
[]
=
{
{
3
,
3000
,
0
},
{
3
,
3050
,
1
},
{
2
,
3100
,
0
},
{
4
,
3150
,
0
},
// 한 버튼에서 손을 떼기 전에 다른 버튼 이벤트 발생
{
2
,
3200
,
1
},
{
4
,
3250
,
1
},
// 둘 다 싱글 클릭으로 판정
};
// Single Click 정상 예제 2 (더블클릭 후 싱글클릭)
ButtonEvent
queue4
[]
=
{
{
4
,
4000
,
0
},
{
4
,
4100
,
1
},
{
4
,
4200
,
0
},
{
4
,
4300
,
1
},
{
4
,
4400
,
0
},
{
4
,
4500
,
1
},
};
// 비정상 예제 - Double Click Timeout
ButtonEvent
queue5
[]
=
{
{
1
,
5000
,
0
},
{
1
,
6000
,
1
},
// 너무 늦은 Down-Up 이벤트
{
1
,
6100
,
0
},
{
1
,
6200
,
1
},
};
// 비정상 예제 - Double Click Timeout
ButtonEvent
queue6
[]
=
{
{
1
,
5000
,
0
},
{
1
,
5050
,
1
},
{
1
,
6000
,
0
},
// 너무 늦은 두 번째 클릭
{
1
,
6050
,
1
},
};
// 비정상 예제 - 더블 클릭 사이에 다른 버튼을 눌렀을 때
ButtonEvent
queue7
[]
=
{
{
2
,
7000
,
0
},
{
2
,
7010
,
1
},
{
4
,
7020
,
0
},
{
4
,
7030
,
1
},
// 사이에 다른 버튼이 눌리면서
{
2
,
7040
,
0
},
{
2
,
7050
,
1
},
// 3개의 싱글 클릭 처리
};
// 비정상 예제 - 잘못된 순서
ButtonEvent
queue8
[]
=
{
{
3
,
8000
,
1
},
// 잘못된 시작 (Up-Down)
{
3
,
8050
,
0
},
};
// 비정상 예제 - 혼합된 버튼
ButtonEvent
queue9
[]
=
{
{
4
,
9000
,
0
},
{
3
,
9050
,
1
},
// 다른 버튼
{
4
,
9100
,
0
},
{
4
,
9150
,
1
},
};
// 비정상 예제 - 버튼 ID 없음
ButtonEvent
queue10
[]
=
{
{
-
1
,
11000
,
0
},
// 유효하지 않은 버튼 ID
{
-
1
,
11050
,
1
},
};
// 모든 큐를 배열에 저장
ButtonEvent
*
queues
[]
=
{
queue1
,
queue2
,
queue3
,
queue4
,
queue5
,
queue6
,
queue7
,
queue8
,
queue9
,
queue10
};
int
queueSizes
[]
=
{
8
,
8
,
6
,
6
,
4
,
4
,
6
,
2
,
4
,
2
};
// 각 큐의 크기
// 큐 처리 반복문
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
printf
(
"Processing Queue %d:
\n
"
,
i
+
1
);
processClickEvents
(
queues
[
i
],
queueSizes
[
i
],
doubleClickLimit
);
printf
(
"
\n
"
);
}
return
0
;
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment